{
  "contractName": "Controller",
  "abi": [
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "name": "globalConstraintsRegisterPre",
      "outputs": [
        {
          "name": "isRegistered",
          "type": "bool"
        },
        {
          "name": "index",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "newController",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "globalConstraintsPre",
      "outputs": [
        {
          "name": "gcAddress",
          "type": "address"
        },
        {
          "name": "params",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "avatar",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "name": "globalConstraintsRegisterPost",
      "outputs": [
        {
          "name": "isRegistered",
          "type": "bool"
        },
        {
          "name": "index",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "nativeReputation",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "name": "schemes",
      "outputs": [
        {
          "name": "paramsHash",
          "type": "bytes32"
        },
        {
          "name": "permissions",
          "type": "bytes4"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "nativeToken",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "globalConstraintsPost",
      "outputs": [
        {
          "name": "gcAddress",
          "type": "address"
        },
        {
          "name": "params",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "name": "_avatar",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "fallback"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_sender",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "_to",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "MintReputation",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_sender",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "_from",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "BurnReputation",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_sender",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "_beneficiary",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "MintTokens",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_sender",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "_scheme",
          "type": "address"
        }
      ],
      "name": "RegisterScheme",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_sender",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "_scheme",
          "type": "address"
        }
      ],
      "name": "UnregisterScheme",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_oldController",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_newController",
          "type": "address"
        }
      ],
      "name": "UpgradeController",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_globalConstraint",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_params",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "name": "_when",
          "type": "uint8"
        }
      ],
      "name": "AddGlobalConstraint",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_globalConstraint",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_index",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_isPre",
          "type": "bool"
        }
      ],
      "name": "RemoveGlobalConstraint",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_amount",
          "type": "uint256"
        },
        {
          "name": "_to",
          "type": "address"
        },
        {
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "mintReputation",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_amount",
          "type": "uint256"
        },
        {
          "name": "_from",
          "type": "address"
        },
        {
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "burnReputation",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_amount",
          "type": "uint256"
        },
        {
          "name": "_beneficiary",
          "type": "address"
        },
        {
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "mintTokens",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_scheme",
          "type": "address"
        },
        {
          "name": "_paramsHash",
          "type": "bytes32"
        },
        {
          "name": "_permissions",
          "type": "bytes4"
        },
        {
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "registerScheme",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_scheme",
          "type": "address"
        },
        {
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "unregisterScheme",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "unregisterSelf",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_globalConstraint",
          "type": "address"
        },
        {
          "name": "_params",
          "type": "bytes32"
        },
        {
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "addGlobalConstraint",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_globalConstraint",
          "type": "address"
        },
        {
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "removeGlobalConstraint",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_newController",
          "type": "address"
        },
        {
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "upgradeController",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_contract",
          "type": "address"
        },
        {
          "name": "_data",
          "type": "bytes"
        },
        {
          "name": "_avatar",
          "type": "address"
        },
        {
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "genericCall",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        },
        {
          "name": "",
          "type": "bytes"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_amountInWei",
          "type": "uint256"
        },
        {
          "name": "_to",
          "type": "address"
        },
        {
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "sendEther",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_externalToken",
          "type": "address"
        },
        {
          "name": "_to",
          "type": "address"
        },
        {
          "name": "_value",
          "type": "uint256"
        },
        {
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "externalTokenTransfer",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_externalToken",
          "type": "address"
        },
        {
          "name": "_from",
          "type": "address"
        },
        {
          "name": "_to",
          "type": "address"
        },
        {
          "name": "_value",
          "type": "uint256"
        },
        {
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "externalTokenTransferFrom",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_externalToken",
          "type": "address"
        },
        {
          "name": "_spender",
          "type": "address"
        },
        {
          "name": "_value",
          "type": "uint256"
        },
        {
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "externalTokenApproval",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_metaData",
          "type": "string"
        },
        {
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "metaData",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "getNativeReputation",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_scheme",
          "type": "address"
        },
        {
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "isSchemeRegistered",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_scheme",
          "type": "address"
        },
        {
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "getSchemeParameters",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_scheme",
          "type": "address"
        },
        {
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "getSchemePermissions",
      "outputs": [
        {
          "name": "",
          "type": "bytes4"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_globalConstraint",
          "type": "address"
        },
        {
          "name": "",
          "type": "address"
        }
      ],
      "name": "getGlobalConstraintParameters",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "globalConstraintsCount",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        },
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_globalConstraint",
          "type": "address"
        },
        {
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "isGlobalConstraintRegistered",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.4+commit.9549d8ff\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[{\"name\":\"_scheme\",\"type\":\"address\"},{\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"unregisterScheme\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"globalConstraintsRegisterPre\",\"outputs\":[{\"name\":\"isRegistered\",\"type\":\"bool\"},{\"name\":\"index\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_scheme\",\"type\":\"address\"},{\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"getSchemeParameters\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"newController\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_newController\",\"type\":\"address\"},{\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"upgradeController\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"globalConstraintsPre\",\"outputs\":[{\"name\":\"gcAddress\",\"type\":\"address\"},{\"name\":\"params\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_globalConstraint\",\"type\":\"address\"},{\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"removeGlobalConstraint\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_externalToken\",\"type\":\"address\"},{\"name\":\"_spender\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"},{\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"externalTokenApproval\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"avatar\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_amountInWei\",\"type\":\"uint256\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"sendEther\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_amount\",\"type\":\"uint256\"},{\"name\":\"_beneficiary\",\"type\":\"address\"},{\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"mintTokens\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"unregisterSelf\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_amount\",\"type\":\"uint256\"},{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"burnReputation\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"globalConstraintsRegisterPost\",\"outputs\":[{\"name\":\"isRegistered\",\"type\":\"bool\"},{\"name\":\"index\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"globalConstraintsCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"nativeReputation\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"getNativeReputation\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_scheme\",\"type\":\"address\"},{\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"getSchemePermissions\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes4\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_scheme\",\"type\":\"address\"},{\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"isSchemeRegistered\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_externalToken\",\"type\":\"address\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"},{\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"externalTokenTransfer\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_metaData\",\"type\":\"string\"},{\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"metaData\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_contract\",\"type\":\"address\"},{\"name\":\"_data\",\"type\":\"bytes\"},{\"name\":\"_avatar\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"genericCall\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"},{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"schemes\",\"outputs\":[{\"name\":\"paramsHash\",\"type\":\"bytes32\"},{\"name\":\"permissions\",\"type\":\"bytes4\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_globalConstraint\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"address\"}],\"name\":\"getGlobalConstraintParameters\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"nativeToken\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_globalConstraint\",\"type\":\"address\"},{\"name\":\"_params\",\"type\":\"bytes32\"},{\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"addGlobalConstraint\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_scheme\",\"type\":\"address\"},{\"name\":\"_paramsHash\",\"type\":\"bytes32\"},{\"name\":\"_permissions\",\"type\":\"bytes4\"},{\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"registerScheme\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"globalConstraintsPost\",\"outputs\":[{\"name\":\"gcAddress\",\"type\":\"address\"},{\"name\":\"params\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_amount\",\"type\":\"uint256\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"mintReputation\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_globalConstraint\",\"type\":\"address\"},{\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"isGlobalConstraintRegistered\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_externalToken\",\"type\":\"address\"},{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"},{\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"externalTokenTransferFrom\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_avatar\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"fallback\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_sender\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"MintReputation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_sender\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"BurnReputation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_sender\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_beneficiary\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"MintTokens\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_sender\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_scheme\",\"type\":\"address\"}],\"name\":\"RegisterScheme\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_sender\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_scheme\",\"type\":\"address\"}],\"name\":\"UnregisterScheme\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_oldController\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_newController\",\"type\":\"address\"}],\"name\":\"UpgradeController\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_globalConstraint\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_params\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"_when\",\"type\":\"uint8\"}],\"name\":\"AddGlobalConstraint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_globalConstraint\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_index\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"_isPre\",\"type\":\"bool\"}],\"name\":\"RemoveGlobalConstraint\",\"type\":\"event\"}],\"devdoc\":{\"details\":\"A controller controls the organizations tokens, reputation and avatar. It is subject to a set of schemes and constraints that determine its behavior. Each scheme has it own parameters and operation permissions.\",\"methods\":{\"addGlobalConstraint(address,bytes32,address)\":{\"details\":\"add or update Global Constraint\",\"params\":{\"_globalConstraint\":\"the address of the global constraint to be added.\",\"_params\":\"the constraint parameters hash.\"},\"return\":\"bool which represents a success\"},\"burnReputation(uint256,address,address)\":{\"details\":\"Burns `_amount` of reputation from `_from`\",\"params\":{\"_amount\":\"amount of reputation to burn\",\"_from\":\"The address that will lose the reputation\"},\"return\":\"bool which represents a success\"},\"externalTokenApproval(address,address,uint256,address)\":{\"details\":\"externalTokenApproval approve the spender address to spend a specified amount of tokens     on behalf of msg.sender.\",\"params\":{\"_externalToken\":\"the address of the Token Contract\",\"_spender\":\"address\",\"_value\":\"the amount of ether (in Wei) which the approval is referring to.\"},\"return\":\"bool which represents a success\"},\"externalTokenTransfer(address,address,uint256,address)\":{\"details\":\"send some amount of arbitrary ERC20 Tokens\",\"params\":{\"_externalToken\":\"the address of the Token Contract\",\"_to\":\"address of the beneficiary\",\"_value\":\"the amount of ether (in Wei) to send\"},\"return\":\"bool which represents a success\"},\"externalTokenTransferFrom(address,address,address,uint256,address)\":{\"details\":\"transfer token \\\"from\\\" address \\\"to\\\" address     One must to approve the amount of tokens which can be spend from the     \\\"from\\\" account.This can be done using externalTokenApprove.\",\"params\":{\"_externalToken\":\"the address of the Token Contract\",\"_from\":\"address of the account to send from\",\"_to\":\"address of the beneficiary\",\"_value\":\"the amount of ether (in Wei) to send\"},\"return\":\"bool which represents a success\"},\"genericCall(address,bytes,address,uint256)\":{\"details\":\"perform a generic call to an arbitrary contract\",\"params\":{\"_avatar\":\"the controller's avatar address\",\"_contract\":\"the contract's address to call\",\"_data\":\"ABI-encoded contract call to call `_contract` address.\",\"_value\":\"value (ETH) to transfer with the transaction\"},\"return\":\"bool -success        bytes  - the return value of the called _contract's function.\"},\"getNativeReputation(address)\":{\"details\":\"getNativeReputation\",\"params\":{\"_avatar\":\"the organization avatar.\"},\"return\":\"organization native reputation\"},\"globalConstraintsCount(address)\":{\"details\":\"globalConstraintsCount return the global constraint pre and post count\",\"return\":\"uint256 globalConstraintsPre count.uint256 globalConstraintsPost count.\"},\"metaData(string,address)\":{\"details\":\"metaData emits an event with a string, should contain the hash of some meta data.\",\"params\":{\"_avatar\":\"Avatar\",\"_metaData\":\"a string representing a hash of the meta data\"},\"return\":\"bool which represents a success\"},\"mintReputation(uint256,address,address)\":{\"details\":\"Mint `_amount` of reputation that are assigned to `_to` .\",\"params\":{\"_amount\":\"amount of reputation to mint\",\"_to\":\"beneficiary address\"},\"return\":\"bool which represents a success\"},\"mintTokens(uint256,address,address)\":{\"details\":\"mint tokens .\",\"params\":{\"_amount\":\"amount of token to mint\",\"_beneficiary\":\"beneficiary address\"},\"return\":\"bool which represents a success\"},\"registerScheme(address,bytes32,bytes4,address)\":{\"details\":\"register a scheme\",\"params\":{\"_paramsHash\":\"a hashed configuration of the usage of the scheme\",\"_permissions\":\"the permissions the new scheme will have\",\"_scheme\":\"the address of the scheme\"},\"return\":\"bool which represents a success\"},\"removeGlobalConstraint(address,address)\":{\"details\":\"remove Global Constraint\",\"params\":{\"_globalConstraint\":\"the address of the global constraint to be remove.\"},\"return\":\"bool which represents a success\"},\"sendEther(uint256,address,address)\":{\"details\":\"send some ether\",\"params\":{\"_amountInWei\":\"the amount of ether (in Wei) to send\",\"_to\":\"address of the beneficiary\"},\"return\":\"bool which represents a success\"},\"unregisterScheme(address,address)\":{\"details\":\"unregister a scheme\",\"params\":{\"_scheme\":\"the address of the scheme\"},\"return\":\"bool which represents a success\"},\"unregisterSelf(address)\":{\"details\":\"unregister the caller's scheme\",\"return\":\"bool which represents a success\"},\"upgradeController(address,address)\":{\"details\":\"upgrade the Controller     The function will trigger an event 'UpgradeController'.\",\"params\":{\"_newController\":\"the address of the new controller.\"},\"return\":\"bool which represents a success\"}},\"title\":\"Controller contract\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"@daostack/arc/contracts/controller/Controller.sol\":\"Controller\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@daostack/arc/contracts/controller/Avatar.sol\":{\"keccak256\":\"0x4e4fb9d3bc21f42fbfc6a01e9f8aa483a59e9f447b0d604f55b587a81ec09ef4\",\"urls\":[\"bzzr://b0af60e651a75274a028dc4b53d06091a46ca0efa3bfb4153879e76cf86a49dc\"]},\"@daostack/arc/contracts/controller/Controller.sol\":{\"keccak256\":\"0xb46102ed94ae64c1c4cdb758e0f35b652f3bea6f7a32fa1fe988cbbeb489872a\",\"urls\":[\"bzzr://9467146ce6219d7bef810e57371991ed2fac2d8bdf3aae036c226b1b8ecb162b\"]},\"@daostack/arc/contracts/controller/ControllerInterface.sol\":{\"keccak256\":\"0x933e92612c90f292c7b59908958b003f1a13d90b97bed0572b566353c20974dc\",\"urls\":[\"bzzr://e8050774c20b9b22636b47cdd353eaf5df72e0bca8f2b8569365be30f4eaef0c\"]},\"@daostack/arc/contracts/controller/DAOToken.sol\":{\"keccak256\":\"0x9b213e4e3ceeffcfc1c962a43b70b8d763d8091a2dd713fc1989b97bb68786e6\",\"urls\":[\"bzzr://7ba306fdbad344e01474e3ae9c37b27b64efdc1cb17ffc0f3ec1c4427fde359d\"]},\"@daostack/arc/contracts/globalConstraints/GlobalConstraintInterface.sol\":{\"keccak256\":\"0xc006c4591ec10b845a56e13f6791db2c428610953034686d52b2a934b6c8f36f\",\"urls\":[\"bzzr://d1f293a0bbaa292296a83977cb36a14048db404a32e3f6aa9bd79ea61ac3c4c3\"]},\"@daostack/arc/contracts/libs/SafeERC20.sol\":{\"keccak256\":\"0xf6727d432f67046145b078f40c1cc4f6be7b0d12a6678ecaf457edf7550d244c\",\"urls\":[\"bzzr://cd706a2dc7540d093b591a280b464256c596ddad598b68886e6db2e7958f9916\"]},\"@daostack/infra/contracts/Reputation.sol\":{\"keccak256\":\"0x3d226dac0fe7d758f0287fb28bc25fcec1f69d19888ae3a550fa49856d61c482\",\"urls\":[\"bzzr://7f219e1874d4f1aea860cc665b75015797f55f149e9bf490abab5d7ad2adfeb9\"]},\"openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x965012d27b4262d7a41f5028cbb30c51ebd9ecd4be8fb30380aaa7a3c64fbc8b\",\"urls\":[\"bzzr://41ca38f6b0fa4b77b0feec43e422cfbec48b7eb38a41edf0b85c77e8d9a296b1\"]},\"openzeppelin-solidity/contracts/ownership/Ownable.sol\":{\"keccak256\":\"0x980de387a1a020a498f53d00f89fecebb12c949a17e8f160093c0303ede2b786\",\"urls\":[\"bzzr://08894efa2a557982070beda6a81a032407e70532d24bdafe80d39660c74904d9\"]},\"openzeppelin-solidity/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xba431353cb4fe70777ac026231eb5468e41aa1e81240a2b8136917acc5fff4dc\",\"urls\":[\"bzzr://80cd02a56e6e33504318124d0d645c82e615cc8a4b5829cc9d82d17635c644c8\"]},\"openzeppelin-solidity/contracts/token/ERC20/ERC20Burnable.sol\":{\"keccak256\":\"0xa3e68fd7f987c8fbdaf4867d428a69a15f3cf2f69709a5b0a0fbef750b0e6fbc\",\"urls\":[\"bzzr://f4ebb7c5b9e429b98b07e2caca6156c13c3724e9b1191cca8423ab8427bc6265\"]},\"openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x079c4e23ee448f529e43bfa3c4e8fb4be52cd0318ee923a276835bedf45b93d8\",\"urls\":[\"bzzr://48248e86f64407a95f241d6c5c8cfea6b4d4ebf4ebb467e5c98c8af3868fafe4\"]},\"openzeppelin-solidity/contracts/utils/Address.sol\":{\"keccak256\":\"0x5c731061b804fa256fc8c05150eafe5d20b6bb94541a8f187912bf84f7033f34\",\"urls\":[\"bzzr://63fc4af0d7a99a770925b96a6cf48f25fc00d30274266f82db05f30baa238267\"]}},\"version\":1}",
  "bytecode": "0x60806040523480156200001157600080fd5b5060405160208062003f0b833981018060405260208110156200003357600080fd5b505160018054600160a060020a031916600160a060020a038084169190911791829055604080517fe1758bd80000000000000000000000000000000000000000000000000000000081529051929091169163e1758bd891600480820192602092909190829003018186803b158015620000ab57600080fd5b505afa158015620000c0573d6000803e3d6000fd5b505050506040513d6020811015620000d757600080fd5b505160028054600160a060020a031916600160a060020a03928316179055600154604080517f89ae1c90000000000000000000000000000000000000000000000000000000008152905191909216916389ae1c90916004808301926020929190829003018186803b1580156200014c57600080fd5b505afa15801562000161573d6000803e3d6000fd5b505050506040513d60208110156200017857600080fd5b505160038054600160a060020a031916600160a060020a039092169190911790555060408051808201825260008082527c1f000000000000000000000000000000000000000000000000000000006020808401918252338352829052928120915182559151600191909101805463ffffffff19167c0100000000000000000000000000000000000000000000000000000000909204919091179055613ce79081906200022490396000f3fe608060405234801561001057600080fd5b50600436106101e95760003560e060020a9004806389ae1c9011610113578063e08738da116100a6578063e8c98b2211610075578063e8c98b2214610842578063eaf994b21461085f578063f76488be14610893578063fb4856a2146108c1576101e9565b8063e08738da14610792578063e1758bd8146107c0578063e4537a74146107c8578063e869d45f146107fe576101e9565b8063b9a04cdd116100e2578063b9a04cdd14610583578063c9b62eb1146105bf578063d1b7089a14610638578063db6149ce1461074a576101e9565b806389ae1c90146104dc5780638da03997146104e45780639b51e35a1461050a5780639be2faed14610555576101e9565b806351803cd81161018b5780636c525b131161015a5780636c525b131461041d5780636e94d27814610443578063814784f614610477578063824f2f1f1461049d576101e9565b806351803cd8146103715780635aef7de6146103ad578063634965da146103b55780636407e432146103e9576101e9565b80633a02263c116101c75780633a02263c146102b157806342427bf8146102d55780634422d372146103035780634f52b5be14610343576101e9565b8063039de01d146101ee578063177eebb0146102305780631c4d560814610271575b600080fd5b61021c6004803603604081101561020457600080fd5b50600160a060020a0381358116916020013516610907565b604080519115158252519081900360200190f35b6102566004803603602081101561024657600080fd5b5035600160a060020a0316610c60565b60408051921515835260208301919091528051918290030190f35b61029f6004803603604081101561028757600080fd5b50600160a060020a0381358116916020013516610c7f565b60408051918252519081900360200190f35b6102b9610cc1565b60408051600160a060020a039092168252519081900360200190f35b61021c600480360360408110156102eb57600080fd5b50600160a060020a0381358116916020013516610cd0565b6103206004803603602081101561031957600080fd5b5035611243565b60408051600160a060020a03909316835260208301919091528051918290030190f35b61021c6004803603604081101561035957600080fd5b50600160a060020a0381358116916020013516611279565b61021c6004803603608081101561038757600080fd5b50600160a060020a038135811691602081013582169160408201359160600135166116ad565b6102b96119b5565b61021c600480360360608110156103cb57600080fd5b50803590600160a060020a03602082013581169160400135166119c4565b61021c600480360360608110156103ff57600080fd5b50803590600160a060020a0360208201358116916040013516611cc3565b61021c6004803603602081101561043357600080fd5b5035600160a060020a0316611ff9565b61021c6004803603606081101561045957600080fd5b50803590600160a060020a0360208201358116916040013516612082565b6102566004803603602081101561048d57600080fd5b5035600160a060020a03166123b8565b6104c3600480360360208110156104b357600080fd5b5035600160a060020a03166123d7565b6040805192835260208301919091528051918290030190f35b6102b9612409565b6102b9600480360360208110156104fa57600080fd5b5035600160a060020a0316612418565b6105386004803603604081101561052057600080fd5b50600160a060020a038135811691602001351661244a565b60408051600160e060020a03199092168252519081900360200190f35b61021c6004803603604081101561056b57600080fd5b50600160a060020a0381358116916020013516612490565b61021c6004803603608081101561059957600080fd5b50600160a060020a038135811691602081013582169160408201359160600135166124c0565b61021c600480360360408110156105d557600080fd5b8101906020810181356401000000008111156105f057600080fd5b82018360208201111561060257600080fd5b8035906020019184600183028401116401000000008311171561062457600080fd5b919350915035600160a060020a03166127be565b6106c76004803603608081101561064e57600080fd5b600160a060020a03823516919081019060408101602082013564010000000081111561067957600080fd5b82018360208201111561068b57600080fd5b803590602001918460018302840111640100000000831117156106ad57600080fd5b9193509150600160a060020a0381351690602001356128e3565b604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561070e5781810151838201526020016106f6565b50505050905090810190601f16801561073b5780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b6107706004803603602081101561076057600080fd5b5035600160a060020a0316612ca4565b60408051928352600160e060020a031990911660208301528051918290030190f35b61029f600480360360408110156107a857600080fd5b50600160a060020a0381358116916020013516612cc3565b6102b9612d93565b61021c600480360360608110156107de57600080fd5b50600160a060020a03813581169160208101359160409091013516612da2565b61021c6004803603608081101561081457600080fd5b50600160a060020a038135811691602081013591600160e060020a03196040830135169160600135166131ab565b6103206004803603602081101561085857600080fd5b5035613554565b61021c6004803603606081101561087557600080fd5b50803590600160a060020a0360208201358116916040013516613562565b61021c600480360360408110156108a957600080fd5b50600160a060020a0381358116916020013516613898565b61021c600480360360a08110156108d757600080fd5b50600160a060020a03813581169160208101358216916040820135811691606081013591608090910135166138fa565b3360009081526020819052604081206001015460e060020a027c02000000000000000000000000000000000000000000000000000000009081161461094b57600080fd5b7f756e7265676973746572536368656d650000000000000000000000000000000060005b600554811015610a6557600580548290811061098757fe5b600091825260209091206002909102015460058054600160a060020a039092169163c1786ab2913391859081106109ba57fe5b906000526020600020906002020160010154856040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018381526020018281526020019350505050602060405180830381600087803b158015610a2657600080fd5b505af1158015610a3a573d6000803e3d6000fd5b505050506040513d6020811015610a5057600080fd5b50511515610a5d57600080fd5b60010161096f565b6001548490600160a060020a03808316911614610a8157600080fd5b610a8a86613c0b565b1515610a995760009350610b5c565b33600090815260208190526040808220600190810154600160a060020a038a168452919092209091015460e060020a918202199102167c1f000000000000000000000000000000000000000000000000000000001615610af857600080fd5b604051600160a060020a0387169033907f10bb2cf04cb8b902a8e736d494f1a51003be6d4b16ef6fb95ce62c38445023bf90600090a3600160a060020a03861660009081526020819052604081209081556001908101805463ffffffff1916905593505b50600090505b600654811015610c58576006805482908110610b7a57fe5b600091825260209091206002909102015460068054600160a060020a0390921691638043154d91339185908110610bad57fe5b906000526020600020906002020160010154856040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018381526020018281526020019350505050602060405180830381600087803b158015610c1957600080fd5b505af1158015610c2d573d6000803e3d6000fd5b505050506040513d6020811015610c4357600080fd5b50511515610c5057600080fd5b600101610b62565b505092915050565b6007602052600090815260409020805460019091015460ff9091169082565b6001546000908290600160a060020a03808316911614610c9e57600080fd5b600160a060020a03841660009081526020819052604090205491505b5092915050565b600454600160a060020a031681565b3360009081526020819052604081206001015460e060020a027c080000000000000000000000000000000000000000000000000000000090811614610d1457600080fd5b6001548290600160a060020a03808316911614610d3057600080fd5b600454600160a060020a031615610d4657600080fd5b600160a060020a0384161515610d5b57600080fd5b6004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038681169182178355600154604080517ff2fde38b00000000000000000000000000000000000000000000000000000000815294850193909352915191169163f2fde38b91602480830192600092919082900301818387803b158015610de257600080fd5b505af1158015610df6573d6000803e3d6000fd5b5050505083600160a060020a0316600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a02815260040160206040518083038186803b158015610e5557600080fd5b505afa158015610e69573d6000803e3d6000fd5b505050506040513d6020811015610e7f57600080fd5b5051600160a060020a031614610e9457600080fd5b600254604080517f8da5cb5b00000000000000000000000000000000000000000000000000000000815290513092600160a060020a031691638da5cb5b916004808301926020929190829003018186803b158015610ef157600080fd5b505afa158015610f05573d6000803e3d6000fd5b505050506040513d6020811015610f1b57600080fd5b5051600160a060020a0316141561104557600254604080517ff2fde38b000000000000000000000000000000000000000000000000000000008152600160a060020a0387811660048301529151919092169163f2fde38b91602480830192600092919082900301818387803b158015610f9357600080fd5b505af1158015610fa7573d6000803e3d6000fd5b5050505083600160a060020a0316600260009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a02815260040160206040518083038186803b15801561100657600080fd5b505afa15801561101a573d6000803e3d6000fd5b505050506040513d602081101561103057600080fd5b5051600160a060020a03161461104557600080fd5b600354604080517f8da5cb5b00000000000000000000000000000000000000000000000000000000815290513092600160a060020a031691638da5cb5b916004808301926020929190829003018186803b1580156110a257600080fd5b505afa1580156110b6573d6000803e3d6000fd5b505050506040513d60208110156110cc57600080fd5b5051600160a060020a031614156111f657600354604080517ff2fde38b000000000000000000000000000000000000000000000000000000008152600160a060020a0387811660048301529151919092169163f2fde38b91602480830192600092919082900301818387803b15801561114457600080fd5b505af1158015611158573d6000803e3d6000fd5b5050505083600160a060020a0316600360009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a02815260040160206040518083038186803b1580156111b757600080fd5b505afa1580156111cb573d6000803e3d6000fd5b505050506040513d60208110156111e157600080fd5b5051600160a060020a0316146111f657600080fd5b60045460408051600160a060020a039290921682525130917fdb7cbacf8df312d794506c0cc9af07f64d29ca075796ea2e950a3832cc9a63dd919081900360200190a25060019392505050565b600580548290811061125157fe5b600091825260209091206002909102018054600190910154600160a060020a03909116915082565b3360009081526020819052604081206001015460e060020a027c0400000000000000000000000000000000000000000000000000000000908116146112bd57600080fd5b6001548290600160a060020a038083169116146112d957600080fd5b6112e1613c34565b6112e9613c34565b600086600160a060020a031663e2b0caef6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561132957600080fd5b505af115801561133d573d6000803e3d6000fd5b505050506040513d602081101561135357600080fd5b5051905060008082600281111561136657fe5b148061137d5750600282600281111561137b57fe5b145b156114ce57600160a060020a0388166000908152600760209081526040918290208251808401909352805460ff161580158452600190910154918301919091529094506114ce576001600580549050038460200151101561148f576005805460001981019081106113ea57fe5b6000918252602091829020604080518082019091526002909202018054600160a060020a03168252600101548183015290850151600580549295508592909190811061143257fe5b60009182526020808320845160029390930201805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03938416178155938101516001948501558781015187519092168352600790526040909120909101555b60058054906114a2906000198301613c4b565b5050600160a060020a0387166000908152600760205260408120805460ff191681556001908101919091555b60018260028111156114dc57fe5b14806114f3575060028260028111156114f157fe5b145b1561164457600160a060020a0388166000908152600860209081526040918290208251808401909352805460ff1615801584526001909101549183019190915290945061164457600160068054905003846020015110156116055760068054600019810190811061156057fe5b6000918252602091829020604080518082019091526002909202018054600160a060020a0316825260010154818301529085015160068054929550859290919081106115a857fe5b60009182526020808320845160029390930201805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03938416178155938101516001948501558781015187519092168352600890526040909120909101555b6006805490611618906000198301613c4b565b5050600160a060020a0387166000908152600860205260408120805460ff191681556001908101919091555b80156116a2576020840151600160a060020a038916907fcdf1a50ea6b7de555bd409f8a4a53ea43c6dc6b4caa961889da9e005f21bbaa990600085600281111561168a57fe5b60408051938452911460208301528051918290030190a25b979650505050505050565b3360009081526020819052604081206001015460e060020a9081028116146116d457600080fd5b7f65787465726e616c546f6b656e496e637265617365417070726f76616c00000060005b6005548110156117ee57600580548290811061171057fe5b600091825260209091206002909102015460058054600160a060020a039092169163c1786ab29133918590811061174357fe5b906000526020600020906002020160010154856040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018381526020018281526020019350505050602060405180830381600087803b1580156117af57600080fd5b505af11580156117c3573d6000803e3d6000fd5b505050506040513d60208110156117d957600080fd5b505115156117e657600080fd5b6001016116f8565b6001548490600160a060020a0380831691161461180a57600080fd5b600154604080517fab751f71000000000000000000000000000000000000000000000000000000008152600160a060020a038b811660048301528a81166024830152604482018a90529151919092169163ab751f719160648083019260209291908290030181600087803b15801561188157600080fd5b505af1158015611895573d6000803e3d6000fd5b505050506040513d60208110156118ab57600080fd5b5051935050600090505b6006548110156119ab5760068054829081106118cd57fe5b600091825260209091206002909102015460068054600160a060020a0390921691638043154d9133918590811061190057fe5b906000526020600020906002020160010154856040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018381526020018281526020019350505050602060405180830381600087803b15801561196c57600080fd5b505af1158015611980573d6000803e3d6000fd5b505050506040513d602081101561199657600080fd5b505115156119a357600080fd5b6001016118b5565b5050949350505050565b600154600160a060020a031681565b3360009081526020819052604081206001015460e060020a9081028116146119eb57600080fd5b7f73656e644574686572000000000000000000000000000000000000000000000060005b600554811015611b05576005805482908110611a2757fe5b600091825260209091206002909102015460058054600160a060020a039092169163c1786ab291339185908110611a5a57fe5b906000526020600020906002020160010154856040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018381526020018281526020019350505050602060405180830381600087803b158015611ac657600080fd5b505af1158015611ada573d6000803e3d6000fd5b505050506040513d6020811015611af057600080fd5b50511515611afd57600080fd5b600101611a0f565b6001548490600160a060020a03808316911614611b2157600080fd5b600154604080517fcb16d4a2000000000000000000000000000000000000000000000000000000008152600481018a9052600160a060020a0389811660248301529151919092169163cb16d4a29160448083019260209291908290030181600087803b158015611b9057600080fd5b505af1158015611ba4573d6000803e3d6000fd5b505050506040513d6020811015611bba57600080fd5b5051935050600090505b600654811015611cba576006805482908110611bdc57fe5b600091825260209091206002909102015460068054600160a060020a0390921691638043154d91339185908110611c0f57fe5b906000526020600020906002020160010154856040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018381526020018281526020019350505050602060405180830381600087803b158015611c7b57600080fd5b505af1158015611c8f573d6000803e3d6000fd5b505050506040513d6020811015611ca557600080fd5b50511515611cb257600080fd5b600101611bc4565b50509392505050565b3360009081526020819052604081206001015460e060020a908102811614611cea57600080fd5b7f6d696e74546f6b656e730000000000000000000000000000000000000000000060005b600554811015611e04576005805482908110611d2657fe5b600091825260209091206002909102015460058054600160a060020a039092169163c1786ab291339185908110611d5957fe5b906000526020600020906002020160010154856040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018381526020018281526020019350505050602060405180830381600087803b158015611dc557600080fd5b505af1158015611dd9573d6000803e3d6000fd5b505050506040513d6020811015611def57600080fd5b50511515611dfc57600080fd5b600101611d0e565b6001548490600160a060020a03808316911614611e2057600080fd5b604080518881529051600160a060020a0388169133917f21f9c9a1a1f9a311a50f15fec5c1faa9e21fc9edf964f0fdecba5bd490484c5e9181900360200190a3600254604080517f40c10f19000000000000000000000000000000000000000000000000000000008152600160a060020a038981166004830152602482018b9052915191909216916340c10f199160448083019260209291908290030181600087803b158015611ecf57600080fd5b505af1158015611ee3573d6000803e3d6000fd5b505050506040513d6020811015611ef957600080fd5b5051935050600090505b600654811015611cba576006805482908110611f1b57fe5b600091825260209091206002909102015460068054600160a060020a0390921691638043154d91339185908110611f4e57fe5b906000526020600020906002020160010154856040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018381526020018281526020019350505050602060405180830381600087803b158015611fba57600080fd5b505af1158015611fce573d6000803e3d6000fd5b505050506040513d6020811015611fe457600080fd5b50511515611ff157600080fd5b600101611f03565b6001546000908290600160a060020a0380831691161461201857600080fd5b61202133613c0b565b1515612030576000915061207c565b33600081815260208190526040808220828155600101805463ffffffff191690555182917f10bb2cf04cb8b902a8e736d494f1a51003be6d4b16ef6fb95ce62c38445023bf91a3600191505b50919050565b3360009081526020819052604081206001015460e060020a9081028116146120a957600080fd5b7f6275726e52657075746174696f6e00000000000000000000000000000000000060005b6005548110156121c35760058054829081106120e557fe5b600091825260209091206002909102015460058054600160a060020a039092169163c1786ab29133918590811061211857fe5b906000526020600020906002020160010154856040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018381526020018281526020019350505050602060405180830381600087803b15801561218457600080fd5b505af1158015612198573d6000803e3d6000fd5b505050506040513d60208110156121ae57600080fd5b505115156121bb57600080fd5b6001016120cd565b6001548490600160a060020a038083169116146121df57600080fd5b604080518881529051600160a060020a0388169133917f186d8887e1b22f9d9b16849c36baa748950d09d9c9b67a4a6ea140eaad00c21c9181900360200190a3600354604080517f9dc29fac000000000000000000000000000000000000000000000000000000008152600160a060020a038981166004830152602482018b905291519190921691639dc29fac9160448083019260209291908290030181600087803b15801561228e57600080fd5b505af11580156122a2573d6000803e3d6000fd5b505050506040513d60208110156122b857600080fd5b5051935050600090505b600654811015611cba5760068054829081106122da57fe5b600091825260209091206002909102015460068054600160a060020a0390921691638043154d9133918590811061230d57fe5b906000526020600020906002020160010154856040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018381526020018281526020019350505050602060405180830381600087803b15801561237957600080fd5b505af115801561238d573d6000803e3d6000fd5b505050506040513d60208110156123a357600080fd5b505115156123b057600080fd5b6001016122c2565b6008602052600090815260409020805460019091015460ff9091169082565b60015460009081908390600160a060020a038083169116146123f857600080fd5b600554600654909350915050915091565b600354600160a060020a031681565b6001546000908290600160a060020a0380831691161461243757600080fd5b5050600354600160a060020a0316919050565b6001546000908290600160a060020a0380831691161461246957600080fd5b505050600160a060020a031660009081526020819052604090206001015460e060020a0290565b6001546000908290600160a060020a038083169116146124af57600080fd5b6124b884613c0b565b949350505050565b3360009081526020819052604081206001015460e060020a9081028116146124e757600080fd5b7f65787465726e616c546f6b656e5472616e73666572000000000000000000000060005b60055481101561260157600580548290811061252357fe5b600091825260209091206002909102015460058054600160a060020a039092169163c1786ab29133918590811061255657fe5b906000526020600020906002020160010154856040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018381526020018281526020019350505050602060405180830381600087803b1580156125c257600080fd5b505af11580156125d6573d6000803e3d6000fd5b505050506040513d60208110156125ec57600080fd5b505115156125f957600080fd5b60010161250b565b6001548490600160a060020a0380831691161461261d57600080fd5b600154604080517fdab0efff000000000000000000000000000000000000000000000000000000008152600160a060020a038b811660048301528a81166024830152604482018a90529151919092169163dab0efff9160648083019260209291908290030181600087803b15801561269457600080fd5b505af11580156126a8573d6000803e3d6000fd5b505050506040513d60208110156126be57600080fd5b5051935050600090505b6006548110156119ab5760068054829081106126e057fe5b600091825260209091206002909102015460068054600160a060020a0390921691638043154d9133918590811061271357fe5b906000526020600020906002020160010154856040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018381526020018281526020019350505050602060405180830381600087803b15801561277f57600080fd5b505af1158015612793573d6000803e3d6000fd5b505050506040513d60208110156127a957600080fd5b505115156127b657600080fd5b6001016126c8565b3360009081526020819052604081206001015460e060020a027c10000000000000000000000000000000000000000000000000000000009081161461280257600080fd5b6001548290600160a060020a0380831691161461281e57600080fd5b6001546040517f890ac46c00000000000000000000000000000000000000000000000000000000815260206004820190815260248201879052600160a060020a039092169163890ac46c91889188918190604401848480828437600081840152601f19601f8201169050808301925050509350505050602060405180830381600087803b1580156128ae57600080fd5b505af11580156128c2573d6000803e3d6000fd5b505050506040513d60208110156128d857600080fd5b505195945050505050565b3360009081526020819052604081206001015460609060e060020a027c10000000000000000000000000000000000000000000000000000000009081161461292a57600080fd5b7f67656e6572696343616c6c00000000000000000000000000000000000000000060005b600554811015612a4457600580548290811061296657fe5b600091825260209091206002909102015460058054600160a060020a039092169163c1786ab29133918590811061299957fe5b906000526020600020906002020160010154856040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018381526020018281526020019350505050602060405180830381600087803b158015612a0557600080fd5b505af1158015612a19573d6000803e3d6000fd5b505050506040513d6020811015612a2f57600080fd5b50511515612a3c57600080fd5b60010161294e565b6001548690600160a060020a03808316911614612a6057600080fd5b6001546040517f2bf16458000000000000000000000000000000000000000000000000000000008152600160a060020a038c811660048301908152604483018a9052606060248401908152606484018d90529190931692632bf16458928e928e928e928d9290608401858580828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b158015612b0757600080fd5b505af1158015612b1b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040908152811015612b4457600080fd5b815160208301805191939283019291640100000000811115612b6557600080fd5b82016020810184811115612b7857600080fd5b8151640100000000811182820187101715612b9257600080fd5b5094995097505050505050600090505b600654811015612c98576006805482908110612bba57fe5b600091825260209091206002909102015460068054600160a060020a0390921691638043154d91339185908110612bed57fe5b906000526020600020906002020160010154856040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018381526020018281526020019350505050602060405180830381600087803b158015612c5957600080fd5b505af1158015612c6d573d6000803e3d6000fd5b505050506040513d6020811015612c8357600080fd5b50511515612c9057600080fd5b600101612ba2565b50509550959350505050565b6000602081905290815260409020805460019091015460e060020a0282565b6000612ccd613c34565b50600160a060020a0383166000908152600760209081526040918290208251808401909352805460ff16158015845260019091015491830191909152612d3a5760058160200151815481101515612d2057fe5b906000526020600020906002020160010154915050612d8d565b50600160a060020a0383166000908152600860209081526040918290208251808401909352805460ff16158015845260019091015491830191909152610cba5760068160200151815481101515612d2057fe5b92915050565b600254600160a060020a031681565b3360009081526020819052604081206001015460e060020a027c040000000000000000000000000000000000000000000000000000000090811614612de657600080fd5b6001548290600160a060020a03808316911614612e0257600080fd5b600085600160a060020a031663e2b0caef6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015612e4257600080fd5b505af1158015612e56573d6000803e3d6000fd5b505050506040513d6020811015612e6c57600080fd5b505190506000816002811115612e7e57fe5b1480612e9557506002816002811115612e9357fe5b145b15612fdc57600160a060020a03861660009081526007602052604090205460ff161515612f9b57604080518082018252600160a060020a0388811680835260208084018a81526005805460018082018355600083815297517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db06002909302928301805473ffffffffffffffffffffffffffffffffffffffff1916919098161790965591517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db190920191909155855180870187528481529054600019018183019081529285526007909152939092209251835460ff19169015151783559051910155612fdc565b600160a060020a038616600090815260076020526040902060010154600580548792908110612fc657fe5b9060005260206000209060020201600101819055505b6001816002811115612fea57fe5b148061300157506002816002811115612fff57fe5b145b1561314857600160a060020a03861660009081526008602052604090205460ff16151561310757604080518082018252600160a060020a0388811680835260208084018a81526006805460018082018355600083815297517ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f6002909302928301805473ffffffffffffffffffffffffffffffffffffffff1916919098161790965591517ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d4090920191909155855180870187528481529054600019018183019081529285526008909152939092209251835460ff19169015151783559051910155613148565b600160a060020a03861660009081526008602052604090206001015460068054879290811061313257fe5b9060005260206000209060020201600101819055505b85600160a060020a03167f78800d7333b8d0174a0845569e3913b7ce4a3c03ca444dd9904172fc14f2fdad86836040518083815260200182600281111561318b57fe5b60ff1681526020019250505060405180910390a250600195945050505050565b3360009081526020819052604081206001015460e060020a027c0200000000000000000000000000000000000000000000000000000000908116146131ef57600080fd5b7f7265676973746572536368656d6500000000000000000000000000000000000060005b60055481101561330957600580548290811061322b57fe5b600091825260209091206002909102015460058054600160a060020a039092169163c1786ab29133918590811061325e57fe5b906000526020600020906002020160010154856040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018381526020018281526020019350505050602060405180830381600087803b1580156132ca57600080fd5b505af11580156132de573d6000803e3d6000fd5b505050506040513d60208110156132f457600080fd5b5051151561330157600080fd5b600101613213565b6001548490600160a060020a0380831691161461332557600080fd5b61332d613c34565b50600160a060020a0388166000908152602081815260408083208151808301835281548152600191820154600160e060020a031960e060020a918202168286019081523387529486905292909420015491518918910219167c1f0000000000000000000000000000000000000000000000000000000016156133ae57600080fd5b33600090815260208181526040909120600101549082015160e060020a90910219167c1f0000000000000000000000000000000000000000000000000000000016156133f957600080fd5b600160a060020a0389166000818152602081905260408082208b8155600101805463ffffffff191660e060020a8c8117041790555133917f546816e99403df442acb68ef69562682a50762c20a3fb6b472f7af9923736cfc91a3600194505050600090505b6006548110156119ab57600680548290811061347657fe5b600091825260209091206002909102015460068054600160a060020a0390921691638043154d913391859081106134a957fe5b906000526020600020906002020160010154856040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018381526020018281526020019350505050602060405180830381600087803b15801561351557600080fd5b505af1158015613529573d6000803e3d6000fd5b505050506040513d602081101561353f57600080fd5b5051151561354c57600080fd5b60010161345e565b600680548290811061125157fe5b3360009081526020819052604081206001015460e060020a90810281161461358957600080fd5b7f6d696e7452657075746174696f6e00000000000000000000000000000000000060005b6005548110156136a35760058054829081106135c557fe5b600091825260209091206002909102015460058054600160a060020a039092169163c1786ab2913391859081106135f857fe5b906000526020600020906002020160010154856040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018381526020018281526020019350505050602060405180830381600087803b15801561366457600080fd5b505af1158015613678573d6000803e3d6000fd5b505050506040513d602081101561368e57600080fd5b5051151561369b57600080fd5b6001016135ad565b6001548490600160a060020a038083169116146136bf57600080fd5b604080518881529051600160a060020a0388169133917f837f2931e3df0592458212be4e470025f197feb7a8e39deb5b7f1f1d42e6f2629181900360200190a3600354604080517f40c10f19000000000000000000000000000000000000000000000000000000008152600160a060020a038981166004830152602482018b9052915191909216916340c10f199160448083019260209291908290030181600087803b15801561376e57600080fd5b505af1158015613782573d6000803e3d6000fd5b505050506040513d602081101561379857600080fd5b5051935050600090505b600654811015611cba5760068054829081106137ba57fe5b600091825260209091206002909102015460068054600160a060020a0390921691638043154d913391859081106137ed57fe5b906000526020600020906002020160010154856040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018381526020018281526020019350505050602060405180830381600087803b15801561385957600080fd5b505af115801561386d573d6000803e3d6000fd5b505050506040513d602081101561388357600080fd5b5051151561389057600080fd5b6001016137a2565b6001546000908290600160a060020a038083169116146138b757600080fd5b600160a060020a03841660009081526007602052604090205460ff16806124b85750505050600160a060020a031660009081526008602052604090205460ff1690565b3360009081526020819052604081206001015460e060020a90810281161461392157600080fd5b7f65787465726e616c546f6b656e5472616e7366657246726f6d0000000000000060005b600554811015613a3b57600580548290811061395d57fe5b600091825260209091206002909102015460058054600160a060020a039092169163c1786ab29133918590811061399057fe5b906000526020600020906002020160010154856040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018381526020018281526020019350505050602060405180830381600087803b1580156139fc57600080fd5b505af1158015613a10573d6000803e3d6000fd5b505050506040513d6020811015613a2657600080fd5b50511515613a3357600080fd5b600101613945565b6001548490600160a060020a03808316911614613a5757600080fd5b600154604080517fb756d5a2000000000000000000000000000000000000000000000000000000008152600160a060020a038c811660048301528b811660248301528a81166044830152606482018a90529151919092169163b756d5a29160848083019260209291908290030181600087803b158015613ad657600080fd5b505af1158015613aea573d6000803e3d6000fd5b505050506040513d6020811015613b0057600080fd5b5051935050600090505b600654811015613c00576006805482908110613b2257fe5b600091825260209091206002909102015460068054600160a060020a0390921691638043154d91339185908110613b5557fe5b906000526020600020906002020160010154856040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018381526020018281526020019350505050602060405180830381600087803b158015613bc157600080fd5b505af1158015613bd5573d6000803e3d6000fd5b505050506040513d6020811015613beb57600080fd5b50511515613bf857600080fd5b600101613b0a565b505095945050505050565b600160a060020a031660009081526020819052604090206001015460e060020a90810216151590565b604080518082019091526000808252602082015290565b815481835581811115613c7757600202816002028360005260206000209182019101613c779190613c7c565b505050565b613cb891905b80821115613cb457805473ffffffffffffffffffffffffffffffffffffffff1916815560006001820155600201613c82565b5090565b9056fea165627a7a7230582065609c24b6d8d712077fb073f8adcd9fc687f8841814613e8cf2f4c07ba056070029",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101e95760003560e060020a9004806389ae1c9011610113578063e08738da116100a6578063e8c98b2211610075578063e8c98b2214610842578063eaf994b21461085f578063f76488be14610893578063fb4856a2146108c1576101e9565b8063e08738da14610792578063e1758bd8146107c0578063e4537a74146107c8578063e869d45f146107fe576101e9565b8063b9a04cdd116100e2578063b9a04cdd14610583578063c9b62eb1146105bf578063d1b7089a14610638578063db6149ce1461074a576101e9565b806389ae1c90146104dc5780638da03997146104e45780639b51e35a1461050a5780639be2faed14610555576101e9565b806351803cd81161018b5780636c525b131161015a5780636c525b131461041d5780636e94d27814610443578063814784f614610477578063824f2f1f1461049d576101e9565b806351803cd8146103715780635aef7de6146103ad578063634965da146103b55780636407e432146103e9576101e9565b80633a02263c116101c75780633a02263c146102b157806342427bf8146102d55780634422d372146103035780634f52b5be14610343576101e9565b8063039de01d146101ee578063177eebb0146102305780631c4d560814610271575b600080fd5b61021c6004803603604081101561020457600080fd5b50600160a060020a0381358116916020013516610907565b604080519115158252519081900360200190f35b6102566004803603602081101561024657600080fd5b5035600160a060020a0316610c60565b60408051921515835260208301919091528051918290030190f35b61029f6004803603604081101561028757600080fd5b50600160a060020a0381358116916020013516610c7f565b60408051918252519081900360200190f35b6102b9610cc1565b60408051600160a060020a039092168252519081900360200190f35b61021c600480360360408110156102eb57600080fd5b50600160a060020a0381358116916020013516610cd0565b6103206004803603602081101561031957600080fd5b5035611243565b60408051600160a060020a03909316835260208301919091528051918290030190f35b61021c6004803603604081101561035957600080fd5b50600160a060020a0381358116916020013516611279565b61021c6004803603608081101561038757600080fd5b50600160a060020a038135811691602081013582169160408201359160600135166116ad565b6102b96119b5565b61021c600480360360608110156103cb57600080fd5b50803590600160a060020a03602082013581169160400135166119c4565b61021c600480360360608110156103ff57600080fd5b50803590600160a060020a0360208201358116916040013516611cc3565b61021c6004803603602081101561043357600080fd5b5035600160a060020a0316611ff9565b61021c6004803603606081101561045957600080fd5b50803590600160a060020a0360208201358116916040013516612082565b6102566004803603602081101561048d57600080fd5b5035600160a060020a03166123b8565b6104c3600480360360208110156104b357600080fd5b5035600160a060020a03166123d7565b6040805192835260208301919091528051918290030190f35b6102b9612409565b6102b9600480360360208110156104fa57600080fd5b5035600160a060020a0316612418565b6105386004803603604081101561052057600080fd5b50600160a060020a038135811691602001351661244a565b60408051600160e060020a03199092168252519081900360200190f35b61021c6004803603604081101561056b57600080fd5b50600160a060020a0381358116916020013516612490565b61021c6004803603608081101561059957600080fd5b50600160a060020a038135811691602081013582169160408201359160600135166124c0565b61021c600480360360408110156105d557600080fd5b8101906020810181356401000000008111156105f057600080fd5b82018360208201111561060257600080fd5b8035906020019184600183028401116401000000008311171561062457600080fd5b919350915035600160a060020a03166127be565b6106c76004803603608081101561064e57600080fd5b600160a060020a03823516919081019060408101602082013564010000000081111561067957600080fd5b82018360208201111561068b57600080fd5b803590602001918460018302840111640100000000831117156106ad57600080fd5b9193509150600160a060020a0381351690602001356128e3565b604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561070e5781810151838201526020016106f6565b50505050905090810190601f16801561073b5780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b6107706004803603602081101561076057600080fd5b5035600160a060020a0316612ca4565b60408051928352600160e060020a031990911660208301528051918290030190f35b61029f600480360360408110156107a857600080fd5b50600160a060020a0381358116916020013516612cc3565b6102b9612d93565b61021c600480360360608110156107de57600080fd5b50600160a060020a03813581169160208101359160409091013516612da2565b61021c6004803603608081101561081457600080fd5b50600160a060020a038135811691602081013591600160e060020a03196040830135169160600135166131ab565b6103206004803603602081101561085857600080fd5b5035613554565b61021c6004803603606081101561087557600080fd5b50803590600160a060020a0360208201358116916040013516613562565b61021c600480360360408110156108a957600080fd5b50600160a060020a0381358116916020013516613898565b61021c600480360360a08110156108d757600080fd5b50600160a060020a03813581169160208101358216916040820135811691606081013591608090910135166138fa565b3360009081526020819052604081206001015460e060020a027c02000000000000000000000000000000000000000000000000000000009081161461094b57600080fd5b7f756e7265676973746572536368656d650000000000000000000000000000000060005b600554811015610a6557600580548290811061098757fe5b600091825260209091206002909102015460058054600160a060020a039092169163c1786ab2913391859081106109ba57fe5b906000526020600020906002020160010154856040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018381526020018281526020019350505050602060405180830381600087803b158015610a2657600080fd5b505af1158015610a3a573d6000803e3d6000fd5b505050506040513d6020811015610a5057600080fd5b50511515610a5d57600080fd5b60010161096f565b6001548490600160a060020a03808316911614610a8157600080fd5b610a8a86613c0b565b1515610a995760009350610b5c565b33600090815260208190526040808220600190810154600160a060020a038a168452919092209091015460e060020a918202199102167c1f000000000000000000000000000000000000000000000000000000001615610af857600080fd5b604051600160a060020a0387169033907f10bb2cf04cb8b902a8e736d494f1a51003be6d4b16ef6fb95ce62c38445023bf90600090a3600160a060020a03861660009081526020819052604081209081556001908101805463ffffffff1916905593505b50600090505b600654811015610c58576006805482908110610b7a57fe5b600091825260209091206002909102015460068054600160a060020a0390921691638043154d91339185908110610bad57fe5b906000526020600020906002020160010154856040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018381526020018281526020019350505050602060405180830381600087803b158015610c1957600080fd5b505af1158015610c2d573d6000803e3d6000fd5b505050506040513d6020811015610c4357600080fd5b50511515610c5057600080fd5b600101610b62565b505092915050565b6007602052600090815260409020805460019091015460ff9091169082565b6001546000908290600160a060020a03808316911614610c9e57600080fd5b600160a060020a03841660009081526020819052604090205491505b5092915050565b600454600160a060020a031681565b3360009081526020819052604081206001015460e060020a027c080000000000000000000000000000000000000000000000000000000090811614610d1457600080fd5b6001548290600160a060020a03808316911614610d3057600080fd5b600454600160a060020a031615610d4657600080fd5b600160a060020a0384161515610d5b57600080fd5b6004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038681169182178355600154604080517ff2fde38b00000000000000000000000000000000000000000000000000000000815294850193909352915191169163f2fde38b91602480830192600092919082900301818387803b158015610de257600080fd5b505af1158015610df6573d6000803e3d6000fd5b5050505083600160a060020a0316600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a02815260040160206040518083038186803b158015610e5557600080fd5b505afa158015610e69573d6000803e3d6000fd5b505050506040513d6020811015610e7f57600080fd5b5051600160a060020a031614610e9457600080fd5b600254604080517f8da5cb5b00000000000000000000000000000000000000000000000000000000815290513092600160a060020a031691638da5cb5b916004808301926020929190829003018186803b158015610ef157600080fd5b505afa158015610f05573d6000803e3d6000fd5b505050506040513d6020811015610f1b57600080fd5b5051600160a060020a0316141561104557600254604080517ff2fde38b000000000000000000000000000000000000000000000000000000008152600160a060020a0387811660048301529151919092169163f2fde38b91602480830192600092919082900301818387803b158015610f9357600080fd5b505af1158015610fa7573d6000803e3d6000fd5b5050505083600160a060020a0316600260009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a02815260040160206040518083038186803b15801561100657600080fd5b505afa15801561101a573d6000803e3d6000fd5b505050506040513d602081101561103057600080fd5b5051600160a060020a03161461104557600080fd5b600354604080517f8da5cb5b00000000000000000000000000000000000000000000000000000000815290513092600160a060020a031691638da5cb5b916004808301926020929190829003018186803b1580156110a257600080fd5b505afa1580156110b6573d6000803e3d6000fd5b505050506040513d60208110156110cc57600080fd5b5051600160a060020a031614156111f657600354604080517ff2fde38b000000000000000000000000000000000000000000000000000000008152600160a060020a0387811660048301529151919092169163f2fde38b91602480830192600092919082900301818387803b15801561114457600080fd5b505af1158015611158573d6000803e3d6000fd5b5050505083600160a060020a0316600360009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a02815260040160206040518083038186803b1580156111b757600080fd5b505afa1580156111cb573d6000803e3d6000fd5b505050506040513d60208110156111e157600080fd5b5051600160a060020a0316146111f657600080fd5b60045460408051600160a060020a039290921682525130917fdb7cbacf8df312d794506c0cc9af07f64d29ca075796ea2e950a3832cc9a63dd919081900360200190a25060019392505050565b600580548290811061125157fe5b600091825260209091206002909102018054600190910154600160a060020a03909116915082565b3360009081526020819052604081206001015460e060020a027c0400000000000000000000000000000000000000000000000000000000908116146112bd57600080fd5b6001548290600160a060020a038083169116146112d957600080fd5b6112e1613c34565b6112e9613c34565b600086600160a060020a031663e2b0caef6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561132957600080fd5b505af115801561133d573d6000803e3d6000fd5b505050506040513d602081101561135357600080fd5b5051905060008082600281111561136657fe5b148061137d5750600282600281111561137b57fe5b145b156114ce57600160a060020a0388166000908152600760209081526040918290208251808401909352805460ff161580158452600190910154918301919091529094506114ce576001600580549050038460200151101561148f576005805460001981019081106113ea57fe5b6000918252602091829020604080518082019091526002909202018054600160a060020a03168252600101548183015290850151600580549295508592909190811061143257fe5b60009182526020808320845160029390930201805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03938416178155938101516001948501558781015187519092168352600790526040909120909101555b60058054906114a2906000198301613c4b565b5050600160a060020a0387166000908152600760205260408120805460ff191681556001908101919091555b60018260028111156114dc57fe5b14806114f3575060028260028111156114f157fe5b145b1561164457600160a060020a0388166000908152600860209081526040918290208251808401909352805460ff1615801584526001909101549183019190915290945061164457600160068054905003846020015110156116055760068054600019810190811061156057fe5b6000918252602091829020604080518082019091526002909202018054600160a060020a0316825260010154818301529085015160068054929550859290919081106115a857fe5b60009182526020808320845160029390930201805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03938416178155938101516001948501558781015187519092168352600890526040909120909101555b6006805490611618906000198301613c4b565b5050600160a060020a0387166000908152600860205260408120805460ff191681556001908101919091555b80156116a2576020840151600160a060020a038916907fcdf1a50ea6b7de555bd409f8a4a53ea43c6dc6b4caa961889da9e005f21bbaa990600085600281111561168a57fe5b60408051938452911460208301528051918290030190a25b979650505050505050565b3360009081526020819052604081206001015460e060020a9081028116146116d457600080fd5b7f65787465726e616c546f6b656e496e637265617365417070726f76616c00000060005b6005548110156117ee57600580548290811061171057fe5b600091825260209091206002909102015460058054600160a060020a039092169163c1786ab29133918590811061174357fe5b906000526020600020906002020160010154856040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018381526020018281526020019350505050602060405180830381600087803b1580156117af57600080fd5b505af11580156117c3573d6000803e3d6000fd5b505050506040513d60208110156117d957600080fd5b505115156117e657600080fd5b6001016116f8565b6001548490600160a060020a0380831691161461180a57600080fd5b600154604080517fab751f71000000000000000000000000000000000000000000000000000000008152600160a060020a038b811660048301528a81166024830152604482018a90529151919092169163ab751f719160648083019260209291908290030181600087803b15801561188157600080fd5b505af1158015611895573d6000803e3d6000fd5b505050506040513d60208110156118ab57600080fd5b5051935050600090505b6006548110156119ab5760068054829081106118cd57fe5b600091825260209091206002909102015460068054600160a060020a0390921691638043154d9133918590811061190057fe5b906000526020600020906002020160010154856040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018381526020018281526020019350505050602060405180830381600087803b15801561196c57600080fd5b505af1158015611980573d6000803e3d6000fd5b505050506040513d602081101561199657600080fd5b505115156119a357600080fd5b6001016118b5565b5050949350505050565b600154600160a060020a031681565b3360009081526020819052604081206001015460e060020a9081028116146119eb57600080fd5b7f73656e644574686572000000000000000000000000000000000000000000000060005b600554811015611b05576005805482908110611a2757fe5b600091825260209091206002909102015460058054600160a060020a039092169163c1786ab291339185908110611a5a57fe5b906000526020600020906002020160010154856040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018381526020018281526020019350505050602060405180830381600087803b158015611ac657600080fd5b505af1158015611ada573d6000803e3d6000fd5b505050506040513d6020811015611af057600080fd5b50511515611afd57600080fd5b600101611a0f565b6001548490600160a060020a03808316911614611b2157600080fd5b600154604080517fcb16d4a2000000000000000000000000000000000000000000000000000000008152600481018a9052600160a060020a0389811660248301529151919092169163cb16d4a29160448083019260209291908290030181600087803b158015611b9057600080fd5b505af1158015611ba4573d6000803e3d6000fd5b505050506040513d6020811015611bba57600080fd5b5051935050600090505b600654811015611cba576006805482908110611bdc57fe5b600091825260209091206002909102015460068054600160a060020a0390921691638043154d91339185908110611c0f57fe5b906000526020600020906002020160010154856040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018381526020018281526020019350505050602060405180830381600087803b158015611c7b57600080fd5b505af1158015611c8f573d6000803e3d6000fd5b505050506040513d6020811015611ca557600080fd5b50511515611cb257600080fd5b600101611bc4565b50509392505050565b3360009081526020819052604081206001015460e060020a908102811614611cea57600080fd5b7f6d696e74546f6b656e730000000000000000000000000000000000000000000060005b600554811015611e04576005805482908110611d2657fe5b600091825260209091206002909102015460058054600160a060020a039092169163c1786ab291339185908110611d5957fe5b906000526020600020906002020160010154856040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018381526020018281526020019350505050602060405180830381600087803b158015611dc557600080fd5b505af1158015611dd9573d6000803e3d6000fd5b505050506040513d6020811015611def57600080fd5b50511515611dfc57600080fd5b600101611d0e565b6001548490600160a060020a03808316911614611e2057600080fd5b604080518881529051600160a060020a0388169133917f21f9c9a1a1f9a311a50f15fec5c1faa9e21fc9edf964f0fdecba5bd490484c5e9181900360200190a3600254604080517f40c10f19000000000000000000000000000000000000000000000000000000008152600160a060020a038981166004830152602482018b9052915191909216916340c10f199160448083019260209291908290030181600087803b158015611ecf57600080fd5b505af1158015611ee3573d6000803e3d6000fd5b505050506040513d6020811015611ef957600080fd5b5051935050600090505b600654811015611cba576006805482908110611f1b57fe5b600091825260209091206002909102015460068054600160a060020a0390921691638043154d91339185908110611f4e57fe5b906000526020600020906002020160010154856040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018381526020018281526020019350505050602060405180830381600087803b158015611fba57600080fd5b505af1158015611fce573d6000803e3d6000fd5b505050506040513d6020811015611fe457600080fd5b50511515611ff157600080fd5b600101611f03565b6001546000908290600160a060020a0380831691161461201857600080fd5b61202133613c0b565b1515612030576000915061207c565b33600081815260208190526040808220828155600101805463ffffffff191690555182917f10bb2cf04cb8b902a8e736d494f1a51003be6d4b16ef6fb95ce62c38445023bf91a3600191505b50919050565b3360009081526020819052604081206001015460e060020a9081028116146120a957600080fd5b7f6275726e52657075746174696f6e00000000000000000000000000000000000060005b6005548110156121c35760058054829081106120e557fe5b600091825260209091206002909102015460058054600160a060020a039092169163c1786ab29133918590811061211857fe5b906000526020600020906002020160010154856040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018381526020018281526020019350505050602060405180830381600087803b15801561218457600080fd5b505af1158015612198573d6000803e3d6000fd5b505050506040513d60208110156121ae57600080fd5b505115156121bb57600080fd5b6001016120cd565b6001548490600160a060020a038083169116146121df57600080fd5b604080518881529051600160a060020a0388169133917f186d8887e1b22f9d9b16849c36baa748950d09d9c9b67a4a6ea140eaad00c21c9181900360200190a3600354604080517f9dc29fac000000000000000000000000000000000000000000000000000000008152600160a060020a038981166004830152602482018b905291519190921691639dc29fac9160448083019260209291908290030181600087803b15801561228e57600080fd5b505af11580156122a2573d6000803e3d6000fd5b505050506040513d60208110156122b857600080fd5b5051935050600090505b600654811015611cba5760068054829081106122da57fe5b600091825260209091206002909102015460068054600160a060020a0390921691638043154d9133918590811061230d57fe5b906000526020600020906002020160010154856040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018381526020018281526020019350505050602060405180830381600087803b15801561237957600080fd5b505af115801561238d573d6000803e3d6000fd5b505050506040513d60208110156123a357600080fd5b505115156123b057600080fd5b6001016122c2565b6008602052600090815260409020805460019091015460ff9091169082565b60015460009081908390600160a060020a038083169116146123f857600080fd5b600554600654909350915050915091565b600354600160a060020a031681565b6001546000908290600160a060020a0380831691161461243757600080fd5b5050600354600160a060020a0316919050565b6001546000908290600160a060020a0380831691161461246957600080fd5b505050600160a060020a031660009081526020819052604090206001015460e060020a0290565b6001546000908290600160a060020a038083169116146124af57600080fd5b6124b884613c0b565b949350505050565b3360009081526020819052604081206001015460e060020a9081028116146124e757600080fd5b7f65787465726e616c546f6b656e5472616e73666572000000000000000000000060005b60055481101561260157600580548290811061252357fe5b600091825260209091206002909102015460058054600160a060020a039092169163c1786ab29133918590811061255657fe5b906000526020600020906002020160010154856040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018381526020018281526020019350505050602060405180830381600087803b1580156125c257600080fd5b505af11580156125d6573d6000803e3d6000fd5b505050506040513d60208110156125ec57600080fd5b505115156125f957600080fd5b60010161250b565b6001548490600160a060020a0380831691161461261d57600080fd5b600154604080517fdab0efff000000000000000000000000000000000000000000000000000000008152600160a060020a038b811660048301528a81166024830152604482018a90529151919092169163dab0efff9160648083019260209291908290030181600087803b15801561269457600080fd5b505af11580156126a8573d6000803e3d6000fd5b505050506040513d60208110156126be57600080fd5b5051935050600090505b6006548110156119ab5760068054829081106126e057fe5b600091825260209091206002909102015460068054600160a060020a0390921691638043154d9133918590811061271357fe5b906000526020600020906002020160010154856040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018381526020018281526020019350505050602060405180830381600087803b15801561277f57600080fd5b505af1158015612793573d6000803e3d6000fd5b505050506040513d60208110156127a957600080fd5b505115156127b657600080fd5b6001016126c8565b3360009081526020819052604081206001015460e060020a027c10000000000000000000000000000000000000000000000000000000009081161461280257600080fd5b6001548290600160a060020a0380831691161461281e57600080fd5b6001546040517f890ac46c00000000000000000000000000000000000000000000000000000000815260206004820190815260248201879052600160a060020a039092169163890ac46c91889188918190604401848480828437600081840152601f19601f8201169050808301925050509350505050602060405180830381600087803b1580156128ae57600080fd5b505af11580156128c2573d6000803e3d6000fd5b505050506040513d60208110156128d857600080fd5b505195945050505050565b3360009081526020819052604081206001015460609060e060020a027c10000000000000000000000000000000000000000000000000000000009081161461292a57600080fd5b7f67656e6572696343616c6c00000000000000000000000000000000000000000060005b600554811015612a4457600580548290811061296657fe5b600091825260209091206002909102015460058054600160a060020a039092169163c1786ab29133918590811061299957fe5b906000526020600020906002020160010154856040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018381526020018281526020019350505050602060405180830381600087803b158015612a0557600080fd5b505af1158015612a19573d6000803e3d6000fd5b505050506040513d6020811015612a2f57600080fd5b50511515612a3c57600080fd5b60010161294e565b6001548690600160a060020a03808316911614612a6057600080fd5b6001546040517f2bf16458000000000000000000000000000000000000000000000000000000008152600160a060020a038c811660048301908152604483018a9052606060248401908152606484018d90529190931692632bf16458928e928e928e928d9290608401858580828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b158015612b0757600080fd5b505af1158015612b1b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040908152811015612b4457600080fd5b815160208301805191939283019291640100000000811115612b6557600080fd5b82016020810184811115612b7857600080fd5b8151640100000000811182820187101715612b9257600080fd5b5094995097505050505050600090505b600654811015612c98576006805482908110612bba57fe5b600091825260209091206002909102015460068054600160a060020a0390921691638043154d91339185908110612bed57fe5b906000526020600020906002020160010154856040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018381526020018281526020019350505050602060405180830381600087803b158015612c5957600080fd5b505af1158015612c6d573d6000803e3d6000fd5b505050506040513d6020811015612c8357600080fd5b50511515612c9057600080fd5b600101612ba2565b50509550959350505050565b6000602081905290815260409020805460019091015460e060020a0282565b6000612ccd613c34565b50600160a060020a0383166000908152600760209081526040918290208251808401909352805460ff16158015845260019091015491830191909152612d3a5760058160200151815481101515612d2057fe5b906000526020600020906002020160010154915050612d8d565b50600160a060020a0383166000908152600860209081526040918290208251808401909352805460ff16158015845260019091015491830191909152610cba5760068160200151815481101515612d2057fe5b92915050565b600254600160a060020a031681565b3360009081526020819052604081206001015460e060020a027c040000000000000000000000000000000000000000000000000000000090811614612de657600080fd5b6001548290600160a060020a03808316911614612e0257600080fd5b600085600160a060020a031663e2b0caef6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015612e4257600080fd5b505af1158015612e56573d6000803e3d6000fd5b505050506040513d6020811015612e6c57600080fd5b505190506000816002811115612e7e57fe5b1480612e9557506002816002811115612e9357fe5b145b15612fdc57600160a060020a03861660009081526007602052604090205460ff161515612f9b57604080518082018252600160a060020a0388811680835260208084018a81526005805460018082018355600083815297517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db06002909302928301805473ffffffffffffffffffffffffffffffffffffffff1916919098161790965591517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db190920191909155855180870187528481529054600019018183019081529285526007909152939092209251835460ff19169015151783559051910155612fdc565b600160a060020a038616600090815260076020526040902060010154600580548792908110612fc657fe5b9060005260206000209060020201600101819055505b6001816002811115612fea57fe5b148061300157506002816002811115612fff57fe5b145b1561314857600160a060020a03861660009081526008602052604090205460ff16151561310757604080518082018252600160a060020a0388811680835260208084018a81526006805460018082018355600083815297517ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f6002909302928301805473ffffffffffffffffffffffffffffffffffffffff1916919098161790965591517ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d4090920191909155855180870187528481529054600019018183019081529285526008909152939092209251835460ff19169015151783559051910155613148565b600160a060020a03861660009081526008602052604090206001015460068054879290811061313257fe5b9060005260206000209060020201600101819055505b85600160a060020a03167f78800d7333b8d0174a0845569e3913b7ce4a3c03ca444dd9904172fc14f2fdad86836040518083815260200182600281111561318b57fe5b60ff1681526020019250505060405180910390a250600195945050505050565b3360009081526020819052604081206001015460e060020a027c0200000000000000000000000000000000000000000000000000000000908116146131ef57600080fd5b7f7265676973746572536368656d6500000000000000000000000000000000000060005b60055481101561330957600580548290811061322b57fe5b600091825260209091206002909102015460058054600160a060020a039092169163c1786ab29133918590811061325e57fe5b906000526020600020906002020160010154856040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018381526020018281526020019350505050602060405180830381600087803b1580156132ca57600080fd5b505af11580156132de573d6000803e3d6000fd5b505050506040513d60208110156132f457600080fd5b5051151561330157600080fd5b600101613213565b6001548490600160a060020a0380831691161461332557600080fd5b61332d613c34565b50600160a060020a0388166000908152602081815260408083208151808301835281548152600191820154600160e060020a031960e060020a918202168286019081523387529486905292909420015491518918910219167c1f0000000000000000000000000000000000000000000000000000000016156133ae57600080fd5b33600090815260208181526040909120600101549082015160e060020a90910219167c1f0000000000000000000000000000000000000000000000000000000016156133f957600080fd5b600160a060020a0389166000818152602081905260408082208b8155600101805463ffffffff191660e060020a8c8117041790555133917f546816e99403df442acb68ef69562682a50762c20a3fb6b472f7af9923736cfc91a3600194505050600090505b6006548110156119ab57600680548290811061347657fe5b600091825260209091206002909102015460068054600160a060020a0390921691638043154d913391859081106134a957fe5b906000526020600020906002020160010154856040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018381526020018281526020019350505050602060405180830381600087803b15801561351557600080fd5b505af1158015613529573d6000803e3d6000fd5b505050506040513d602081101561353f57600080fd5b5051151561354c57600080fd5b60010161345e565b600680548290811061125157fe5b3360009081526020819052604081206001015460e060020a90810281161461358957600080fd5b7f6d696e7452657075746174696f6e00000000000000000000000000000000000060005b6005548110156136a35760058054829081106135c557fe5b600091825260209091206002909102015460058054600160a060020a039092169163c1786ab2913391859081106135f857fe5b906000526020600020906002020160010154856040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018381526020018281526020019350505050602060405180830381600087803b15801561366457600080fd5b505af1158015613678573d6000803e3d6000fd5b505050506040513d602081101561368e57600080fd5b5051151561369b57600080fd5b6001016135ad565b6001548490600160a060020a038083169116146136bf57600080fd5b604080518881529051600160a060020a0388169133917f837f2931e3df0592458212be4e470025f197feb7a8e39deb5b7f1f1d42e6f2629181900360200190a3600354604080517f40c10f19000000000000000000000000000000000000000000000000000000008152600160a060020a038981166004830152602482018b9052915191909216916340c10f199160448083019260209291908290030181600087803b15801561376e57600080fd5b505af1158015613782573d6000803e3d6000fd5b505050506040513d602081101561379857600080fd5b5051935050600090505b600654811015611cba5760068054829081106137ba57fe5b600091825260209091206002909102015460068054600160a060020a0390921691638043154d913391859081106137ed57fe5b906000526020600020906002020160010154856040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018381526020018281526020019350505050602060405180830381600087803b15801561385957600080fd5b505af115801561386d573d6000803e3d6000fd5b505050506040513d602081101561388357600080fd5b5051151561389057600080fd5b6001016137a2565b6001546000908290600160a060020a038083169116146138b757600080fd5b600160a060020a03841660009081526007602052604090205460ff16806124b85750505050600160a060020a031660009081526008602052604090205460ff1690565b3360009081526020819052604081206001015460e060020a90810281161461392157600080fd5b7f65787465726e616c546f6b656e5472616e7366657246726f6d0000000000000060005b600554811015613a3b57600580548290811061395d57fe5b600091825260209091206002909102015460058054600160a060020a039092169163c1786ab29133918590811061399057fe5b906000526020600020906002020160010154856040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018381526020018281526020019350505050602060405180830381600087803b1580156139fc57600080fd5b505af1158015613a10573d6000803e3d6000fd5b505050506040513d6020811015613a2657600080fd5b50511515613a3357600080fd5b600101613945565b6001548490600160a060020a03808316911614613a5757600080fd5b600154604080517fb756d5a2000000000000000000000000000000000000000000000000000000008152600160a060020a038c811660048301528b811660248301528a81166044830152606482018a90529151919092169163b756d5a29160848083019260209291908290030181600087803b158015613ad657600080fd5b505af1158015613aea573d6000803e3d6000fd5b505050506040513d6020811015613b0057600080fd5b5051935050600090505b600654811015613c00576006805482908110613b2257fe5b600091825260209091206002909102015460068054600160a060020a0390921691638043154d91339185908110613b5557fe5b906000526020600020906002020160010154856040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018381526020018281526020019350505050602060405180830381600087803b158015613bc157600080fd5b505af1158015613bd5573d6000803e3d6000fd5b505050506040513d6020811015613beb57600080fd5b50511515613bf857600080fd5b600101613b0a565b505095945050505050565b600160a060020a031660009081526020819052604090206001015460e060020a90810216151590565b604080518082019091526000808252602082015290565b815481835581811115613c7757600202816002028360005260206000209182019101613c779190613c7c565b505050565b613cb891905b80821115613cb457805473ffffffffffffffffffffffffffffffffffffffff1916815560006001820155600201613c82565b5090565b9056fea165627a7a7230582065609c24b6d8d712077fb073f8adcd9fc687f8841814613e8cf2f4c07ba056070029",
  "sourceMap": "410:20743:43:-;;;3076:264;8:9:-1;5:2;;;30:1;27;20:12;5:2;3076:264:43;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3076:264:43;3122:6;:16;;-1:-1:-1;;3122:16:43;-1:-1:-1;3122:16:43;;;;;;;;;;;3162:20;;;;;;;;:6;;;;;:18;;:20;;;;;3076:264;;3162:20;;;;;;;;:6;:20;;;5:2:-1;;;;30:1;27;20:12;5:2;3162:20:43;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3162:20:43;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3162:20:43;3148:11;:34;;-1:-1:-1;;3148:34:43;-1:-1:-1;3148:34:43;;;;;;-1:-1:-1;3211:6:43;:25;;;;;;;;:6;;;;;:23;;:25;;;;;3162:20;;3211:25;;;;;;;:6;:25;;;5:2:-1;;;;30:1;27;20:12;5:2;3211:25:43;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3211:25:43;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3211:25:43;3192:16;:44;;-1:-1:-1;;3192:44:43;-1:-1:-1;3192:44:43;;;;;;;;;-1:-1:-1;3268:65:43;;;;;;;;-1:-1:-1;3268:65:43;;;3313:18;3211:25;3268:65;;;;;;3254:10;3246:19;;;;;;;;:87;;;;;;-1:-1:-1;3246:87:43;;;;;;-1:-1:-1;;3246:87:43;3313:18;3246:87;;;;;;;;;-1:-1:-1;;;;410:20743:43;;;;",
  "deployedSourceMap": "410:20743:43:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;410:20743:43;;;;;;-1:-1:-1;;;410:20743:43;;;;;-1:-1:-1;410:20743:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3459:8;;;8236:638;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;8236:638:43;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;2027:78;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2027:78:43;-1:-1:-1;;;;;2027:78:43;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;19310:188;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;19310:188:43;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1598:28;;;:::i;:::-;;;;-1:-1:-1;;;;;1598:28:43;;;;;;;;;;;;;;14008:918;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;14008:918:43;;;;;;;;;;:::i;1723:46::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1723:46:43;;:::i;:::-;;;;-1:-1:-1;;;;;1723:46:43;;;;;;;;;;;;;;;;;;;;;;11373:2405;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;11373:2405:43;;;;;;;;;;:::i;18008:347::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;18008:347:43;;;;;;;;;;;;;;;;;;;;;;:::i;1406:20::-;;;:::i;15868:274::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15868:274:43;;;-1:-1:-1;;;;;15868:274:43;;;;;;;;;;;;:::i;6371:328::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6371:328:43;;;-1:-1:-1;;;;;6371:328:43;;;;;;;;;;;;:::i;8986:298::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8986:298:43;-1:-1:-1;;;;;8986:298:43;;:::i;5858:324::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5858:324:43;;;-1:-1:-1;;;;;5858:324:43;;;;;;;;;;;;:::i;2220:79::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2220:79:43;-1:-1:-1;;;;;2220:79:43;;:::i;20411:229::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20411:229:43;-1:-1:-1;;;;;20411:229:43;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1465:34;;;:::i;18984:149::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18984:149:43;-1:-1:-1;;;;;18984:149:43;;:::i;19504:189::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;19504:189:43;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;19504:189:43;;;;;;;;;;;;;;;19139:165;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;19139:165:43;;;;;;;;;;:::i;16426:329::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;16426:329:43;;;;;;;;;;;;;;;;;;;;;;:::i;18612:225::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18612:225:43;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;18612:225:43;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;18612:225:43;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;18612:225:43;;-1:-1:-1;18612:225:43;-1:-1:-1;18612:225:43;-1:-1:-1;;;;;18612:225:43;;:::i;15357:317::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;15357:317:43;;-1:-1:-1;;;;;15357:317:43;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;15357:317:43;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;15357:317:43;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;15357:317:43;;-1:-1:-1;15357:317:43;-1:-1:-1;15357:317:43;;-1:-1:-1;;;;;15357:317:43;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;15357:317:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1360:39;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1360:39:43;-1:-1:-1;;;;;1360:39:43;;:::i;:::-;;;;;;;-1:-1:-1;;;;;;1360:39:43;;;;;;;;;;;;;;;;;19699:509;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;19699:509:43;;;;;;;;;;:::i;1432:27::-;;;:::i;9533:1601::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;9533:1601:43;;;;;;;;;;;;;;;;;:::i;6976:1111::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;6976:1111:43;;;;;;;;;;-1:-1:-1;;;;;;6976:1111:43;;;;;;;;;;;:::i;1867:47::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1867:47:43;;:::i;5303:318::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5303:318:43;;;-1:-1:-1;;;;;5303:318:43;;;;;;;;;;;;:::i;20646:340::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;20646:340:43;;;;;;;;;;:::i;17245:384::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;17245:384:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;8236:638::-;3703:10;8424:4;3695:19;;;;;;;;;;:31;;;-1:-1:-1;;;3695:31:43;3749:18;3695:50;;;:72;3687:81;;;;;;4385:580;4442:11;4463:236;4483:20;:27;4477:33;;4463:236;;;4581:20;:25;;4602:3;;4581:25;;;;;;;;;;;;;;;;;;;:35;4648:20;:25;;-1:-1:-1;;;;;4581:35:43;;;;4554:81;;4636:10;;4669:3;;4648:25;;;;;;;;;;;;;;:32;:25;;;;;:32;;;;;4554:133;;;-1:-1:-1;;;4554:133:43;;;;;;-1:-1:-1;;;;;4554:133:43;;;;;;;;;;;;;;;;;;;;;;;;;;4648:25;;4554:133;;;;;;;;;;;;;5:2:-1;;;;30:1;27;20:12;5:2;4554:133:43;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4554:133:43;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4554:133:43;4533:155;;;;;;;;4512:5;;4463:236;;;5048:6;;8403:7;;-1:-1:-1;;;;;5029:26:43;;;5048:6;;5029:26;5021:35;;;;;;8488:28;8508:7;8488:19;:28::i;:::-;:37;;8484:80;;8548:5;8541:12;;;;8484:80;8702:10;8738:1;8694:19;;;;;;;;;;;:31;;;;;-1:-1:-1;;;;;8663:16:43;;;;;;;;:28;;;;-1:-1:-1;;;8694:31:43;;;8693:32;8663:28;;:63;8643:18;:84;:97;8635:106;;;;;;8776:37;;-1:-1:-1;;;;;8776:37:43;;;8793:10;;8776:37;;;;;-1:-1:-1;;;;;8830:16:43;;:7;:16;;;;;;;;;;8823:23;;;-1:-1:-1;8823:23:43;;;;;-1:-1:-1;;8823:23:43;;;-1:-1:-1;;5066:1:43;4708;4730;4724:7;;4719:240;4739:21;:28;4733:34;;4719:240;;;4838:21;:26;;4860:3;;4838:26;;;;;;;;;;;;;;;;;;;:36;4907:21;:26;;-1:-1:-1;;;;;4838:36:43;;;;4811:83;;4895:10;;4929:3;;4907:26;;;;;;;;;;;;;;:33;:26;;;;;:33;;;;;4811:136;;;-1:-1:-1;;;4811:136:43;;;;;;-1:-1:-1;;;;;4811:136:43;;;;;;;;;;;;;;;;;;;;;;;;;;4907:26;;4811:136;;;;;;;;;;;;;5:2:-1;;;;30:1;27;20:12;5:2;4811:136:43;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4811:136:43;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4811:136:43;4790:158;;;;;;;;4769:5;;4719:240;;;3778:1;;8236:638;;;;:::o;2027:78::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;19310:188::-;5048:6;;19434:7;;19404;;-1:-1:-1;;;;;5029:26:43;;;5048:6;;5029:26;5021:35;;;;;;-1:-1:-1;;;;;19464:16:43;;:7;:16;;;;;;;;;;:27;;-1:-1:-1;5066:1:43;19310:188;;;;;:::o;1598:28::-;;;-1:-1:-1;;;;;1598:28:43;;:::o;14008:918::-;4003:10;14160:4;3995:19;;;;;;;;;;:31;;;-1:-1:-1;;;3995:31:43;4049:18;3995:50;;;:72;3987:81;;;;;;5048:6;;14138:7;;-1:-1:-1;;;;;5029:26:43;;;5048:6;;5029:26;5021:35;;;;;;14188:13;;-1:-1:-1;;;;;14188:13:43;:27;14180:36;;;;;;-1:-1:-1;;;;;14289:28:43;;;;14281:37;;;;;;14328:13;:30;;-1:-1:-1;;14328:30:43;-1:-1:-1;;;;;14328:30:43;;;;;;;;-1:-1:-1;14368:6:43;:40;;;;;;;;;;;;;;;:6;;;:24;;:40;;;;;-1:-1:-1;;14368:40:43;;;;;;;-1:-1:-1;14368:6:43;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;14368:40:43;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;;14426:6:43;:14;;;-1:-1:-1;;;;;14426:14:43;;;;-1:-1:-1;;;;;14426:32:43;;;;-1:-1:-1;14426:6:43;;;;-1:-1:-1;14426:12:43;;:14;;;;;;;;;;;;;;:6;:14;;;5:2:-1;;;;30:1;27;20:12;5:2;14426:14:43;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14426:14:43;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14426:14:43;-1:-1:-1;;;;;14426:32:43;;14418:41;;;;;;14473:11;;:19;;;-1:-1:-1;;;;;14473:19:43;;;;14504:4;;-1:-1:-1;;;;;14473:11:43;;:17;;:19;;;;;;;;;;;;;;:11;:19;;;5:2:-1;;;;30:1;27;20:12;5:2;14473:19:43;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14473:19:43;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14473:19:43;-1:-1:-1;;;;;14473:36:43;;14469:172;;;14525:11;;:45;;;;;;-1:-1:-1;;;;;14525:45:43;;;;;;;;;:11;;;;;:29;;:45;;;;;-1:-1:-1;;14525:45:43;;;;;;;-1:-1:-1;14525:11:43;:45;;;5:2:-1;;;;30:1;27;20:12;5:2;14525:45:43;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;;14592:11:43;:19;;;-1:-1:-1;;;;;14592:19:43;;;;-1:-1:-1;;;;;14592:37:43;;;;-1:-1:-1;14592:11:43;;;;-1:-1:-1;14592:17:43;;:19;;;;;;;;;;;;;;:11;:19;;;5:2:-1;;;;30:1;27;20:12;5:2;14592:19:43;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14592:19:43;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14592:19:43;-1:-1:-1;;;;;14592:37:43;;14584:46;;;;;;14654:16;;:24;;;-1:-1:-1;;;;;14654:24:43;;;;14690:4;;-1:-1:-1;;;;;14654:16:43;;:22;;:24;;;;;;;;;;;;;;:16;:24;;;5:2:-1;;;;30:1;27;20:12;5:2;14654:24:43;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14654:24:43;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14654:24:43;-1:-1:-1;;;;;14654:41:43;;14650:187;;;14711:16;;:50;;;;;;-1:-1:-1;;;;;14711:50:43;;;;;;;;;:16;;;;;:34;;:50;;;;;-1:-1:-1;;14711:50:43;;;;;;;-1:-1:-1;14711:16:43;:50;;;5:2:-1;;;;30:1;27;20:12;5:2;14711:50:43;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;14783:16:43;;:24;;;-1:-1:-1;;;;;14783:24:43;;;;-1:-1:-1;;;;;14783:42:43;;;;-1:-1:-1;14783:16:43;;;;-1:-1:-1;14783:22:43;;:24;;;;;;;;;;;;;;:16;:24;;;5:2:-1;;;;30:1;27;20:12;5:2;14783:24:43;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14783:24:43;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14783:24:43;-1:-1:-1;;;;;14783:42:43;;14775:51;;;;;;14884:13;;14851:47;;;-1:-1:-1;;;;;14884:13:43;;;14851:47;;;14877:4;;14851:47;;;;;;;;;;-1:-1:-1;14915:4:43;;14008:918;-1:-1:-1;;;14008:918:43:o;1723:46::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1723:46:43;;;;-1:-1:-1;1723:46:43;:::o;11373:2405::-;3857:10;11534:4;3849:19;;;;;;;;;;:31;;;-1:-1:-1;;;3849:31:43;3903:18;3849:50;;;:72;3841:81;;;;;;5048:6;;11513:7;;-1:-1:-1;;;;;5029:26:43;;;5048:6;;5029:26;5021:35;;;;;;11554:56;;:::i;:::-;11620:40;;:::i;:::-;11670;11739:17;-1:-1:-1;;;;;11713:49:43;;:51;;;;;-1:-1:-1;;;11713:51:43;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11713:51:43;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11713:51:43;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11713:51:43;;-1:-1:-1;11774:11:43;;11809:4;:47;;;;;;;;;11808:120;;;-1:-1:-1;11881:46:43;11873:4;:54;;;;;;;;;11808:120;11804:852;;;-1:-1:-1;;;;;11971:47:43;;;;;;:28;:47;;;;;;;;;11944:74;;;;;;;;;;;;;;;;;-1:-1:-1;11944:74:43;;;;;;;;;;;;;-1:-1:-1;12032:614:43;;12158:1;12130:20;:27;;;;:29;12097:24;:30;;;:62;12093:389;;;12202:20;12223:27;;-1:-1:-1;;12223:29:43;;;12202:51;;;;;;;;;;;;;;;12183:70;;;;;;;;;12202:51;;;;;;12183:70;;-1:-1:-1;;;;;12183:70:43;;;-1:-1:-1;12183:70:43;;;;;;12296:30;;;;12275:20;:52;;12183:70;;-1:-1:-1;12183:70:43;;12275:20;;12296:30;12275:52;;;;;;;;;;;;;;:71;;:52;;;;;;:71;;-1:-1:-1;;12275:71:43;-1:-1:-1;;;;;12275:71:43;;;;;;;;;;-1:-1:-1;12275:71:43;;;;12433:30;;;;12397:26;;12368:56;;;;;:28;:56;;;;;;:62;;;:95;12093:389;12499:20;:29;;;;;-1:-1:-1;;12499:29:43;;;:::i;:::-;-1:-1:-1;;;;;;;12553:47:43;;;;;;:28;:47;;;;;12546:54;;-1:-1:-1;;12546:54:43;;;-1:-1:-1;12546:54:43;;;;;;;12032:614;12678:40;12670:4;:48;;;;;;;;;12669:121;;;-1:-1:-1;12743:46:43;12735:4;:54;;;;;;;;;12669:121;12665:861;;;-1:-1:-1;;;;;12833:48:43;;;;;;:29;:48;;;;;;;;;12806:75;;;;;;;;;;;;;;;;;-1:-1:-1;12806:75:43;;;;;;;;;;;;;-1:-1:-1;12895:621:43;;13022:1;12993:21;:28;;;;:30;12960:24;:30;;;:63;12956:394;;;13066:21;13088:28;;-1:-1:-1;;13088:30:43;;;13066:53;;;;;;;;;;;;;;;13047:72;;;;;;;;;13066:53;;;;;;13047:72;;-1:-1:-1;;;;;13047:72:43;;;-1:-1:-1;13047:72:43;;;;;;13163:30;;;;13141:21;:53;;13047:72;;-1:-1:-1;13047:72:43;;13141:21;;13163:30;13141:53;;;;;;;;;;;;;;:72;;:53;;;;;;:72;;-1:-1:-1;;13141:72:43;-1:-1:-1;;;;;13141:72:43;;;;;;;;;;-1:-1:-1;13141:72:43;;;;13301:30;;;;13265:26;;13235:57;;;;;:29;:57;;;;;;:63;;;:96;12956:394;13367:21;:30;;;;;-1:-1:-1;;13367:30:43;;;:::i;:::-;-1:-1:-1;;;;;;;13422:48:43;;;;;;:29;:48;;;;;13415:55;;-1:-1:-1;;13415:55:43;;;-1:-1:-1;13415:55:43;;;;;;;12895:621;13539:6;13535:214;;;13633:30;;;;-1:-1:-1;;;;;13566:172:43;;;;;13685:39;13677:4;-1:-1:-1;13677:47:43;;;;;;;13566:172;;;;;;13677:47;;13566:172;;;;;;;;;;;;;13535:214;13765:6;11373:2405;-1:-1:-1;;;;;;;11373:2405:43:o;18008:347::-;3554:10;18259:4;3546:19;;;;;;;;;;3607:10;3546:31;;-1:-1:-1;;;3546:31:43;;;:50;;:72;3538:81;;;;;;4385:580;4442:11;4463:236;4483:20;:27;4477:33;;4463:236;;;4581:20;:25;;4602:3;;4581:25;;;;;;;;;;;;;;;;;;;:35;4648:20;:25;;-1:-1:-1;;;;;4581:35:43;;;;4554:81;;4636:10;;4669:3;;4648:25;;;;;;;;;;;;;;:32;:25;;;;;:32;;;;;4554:133;;;-1:-1:-1;;;4554:133:43;;;;;;-1:-1:-1;;;;;4554:133:43;;;;;;;;;;;;;;;;;;;;;;;;;;4648:25;;4554:133;;;;;;;;;;;;;5:2:-1;;;;30:1;27;20:12;5:2;4554:133:43;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4554:133:43;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4554:133:43;4533:155;;;;;;;;4512:5;;4463:236;;;5048:6;;18237:7;;-1:-1:-1;;;;;5029:26:43;;;5048:6;;5029:26;5021:35;;;;;;18286:6;;:62;;;;;;-1:-1:-1;;;;;18286:62:43;;;;;;;;;;;;;;;;;;;;;;:6;;;;;:28;;:62;;;;;;;;;;;;;;-1:-1:-1;18286:6:43;:62;;;5:2:-1;;;;30:1;27;20:12;5:2;18286:62:43;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18286:62:43;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18286:62:43;;-1:-1:-1;4708:1:43;4730;4724:7;;4719:240;4739:21;:28;4733:34;;4719:240;;;4838:21;:26;;4860:3;;4838:26;;;;;;;;;;;;;;;;;;;:36;4907:21;:26;;-1:-1:-1;;;;;4838:36:43;;;;4811:83;;4895:10;;4929:3;;4907:26;;;;;;;;;;;;;;:33;:26;;;;;:33;;;;;4811:136;;;-1:-1:-1;;;4811:136:43;;;;;;-1:-1:-1;;;;;4811:136:43;;;;;;;;;;;;;;;;;;;;;;;;;;4907:26;;4811:136;;;;;;;;;;;;;5:2:-1;;;;30:1;27;20:12;5:2;4811:136:43;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4811:136:43;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4811:136:43;4790:158;;;;;;;;4769:5;;4719:240;;;3629:1;;18008:347;;;;;;:::o;1406:20::-;;;-1:-1:-1;;;;;1406:20:43;;:::o;15868:274::-;3554:10;16073:4;3546:19;;;;;;;;;;3607:10;3546:31;;-1:-1:-1;;;3546:31:43;;;:50;;:72;3538:81;;;;;;4385:580;4442:11;4463:236;4483:20;:27;4477:33;;4463:236;;;4581:20;:25;;4602:3;;4581:25;;;;;;;;;;;;;;;;;;;:35;4648:20;:25;;-1:-1:-1;;;;;4581:35:43;;;;4554:81;;4636:10;;4669:3;;4648:25;;;;;;;;;;;;;;:32;:25;;;;;:32;;;;;4554:133;;;-1:-1:-1;;;4554:133:43;;;;;;-1:-1:-1;;;;;4554:133:43;;;;;;;;;;;;;;;;;;;;;;;;;;4648:25;;4554:133;;;;;;;;;;;;;5:2:-1;;;;30:1;27;20:12;5:2;4554:133:43;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4554:133:43;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4554:133:43;4533:155;;;;;;;;4512:5;;4463:236;;;5048:6;;16051:7;;-1:-1:-1;;;;;5029:26:43;;;5048:6;;5029:26;5021:35;;;;;;16100:6;;:35;;;;;;;;;;;;-1:-1:-1;;;;;16100:35:43;;;;;;;;;:6;;;;;:16;;:35;;;;;;;;;;;;;;-1:-1:-1;16100:6:43;:35;;;5:2:-1;;;;30:1;27;20:12;5:2;16100:35:43;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16100:35:43;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16100:35:43;;-1:-1:-1;4708:1:43;4730;4724:7;;4719:240;4739:21;:28;4733:34;;4719:240;;;4838:21;:26;;4860:3;;4838:26;;;;;;;;;;;;;;;;;;;:36;4907:21;:26;;-1:-1:-1;;;;;4838:36:43;;;;4811:83;;4895:10;;4929:3;;4907:26;;;;;;;;;;;;;;:33;:26;;;;;:33;;;;;4811:136;;;-1:-1:-1;;;4811:136:43;;;;;;-1:-1:-1;;;;;4811:136:43;;;;;;;;;;;;;;;;;;;;;;;;;;4907:26;;4811:136;;;;;;;;;;;;;5:2:-1;;;;30:1;27;20:12;5:2;4811:136:43;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4811:136:43;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4811:136:43;4790:158;;;;;;;;4769:5;;4719:240;;;3629:1;;15868:274;;;;;:::o;6371:328::-;3554:10;6566:4;3546:19;;;;;;;;;;3607:10;3546:31;;-1:-1:-1;;;3546:31:43;;;:50;;:72;3538:81;;;;;;4385:580;4442:11;4463:236;4483:20;:27;4477:33;;4463:236;;;4581:20;:25;;4602:3;;4581:25;;;;;;;;;;;;;;;;;;;:35;4648:20;:25;;-1:-1:-1;;;;;4581:35:43;;;;4554:81;;4636:10;;4669:3;;4648:25;;;;;;;;;;;;;;:32;:25;;;;;:32;;;;;4554:133;;;-1:-1:-1;;;4554:133:43;;;;;;-1:-1:-1;;;;;4554:133:43;;;;;;;;;;;;;;;;;;;;;;;;;;4648:25;;4554:133;;;;;;;;;;;;;5:2:-1;;;;30:1;27;20:12;5:2;4554:133:43;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4554:133:43;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4554:133:43;4533:155;;;;;;;;4512:5;;4463:236;;;5048:6;;6545:7;;-1:-1:-1;;;;;5029:26:43;;;5048:6;;5029:26;5021:35;;;;;;6591:45;;;;;;;;-1:-1:-1;;;;;6591:45:43;;;6602:10;;6591:45;;;;;;;;;6653:11;;:39;;;;;;-1:-1:-1;;;;;6653:39:43;;;;;;;;;;;;;;;:11;;;;;:16;;:39;;;;;;;;;;;;;;-1:-1:-1;6653:11:43;:39;;;5:2:-1;;;;30:1;27;20:12;5:2;6653:39:43;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6653:39:43;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6653:39:43;;-1:-1:-1;4708:1:43;4730;4724:7;;4719:240;4739:21;:28;4733:34;;4719:240;;;4838:21;:26;;4860:3;;4838:26;;;;;;;;;;;;;;;;;;;:36;4907:21;:26;;-1:-1:-1;;;;;4838:36:43;;;;4811:83;;4895:10;;4929:3;;4907:26;;;;;;;;;;;;;;:33;:26;;;;;:33;;;;;4811:136;;;-1:-1:-1;;;4811:136:43;;;;;;-1:-1:-1;;;;;4811:136:43;;;;;;;;;;;;;;;;;;;;;;;;;;4907:26;;4811:136;;;;;;;;;;;;;5:2:-1;;;;30:1;27;20:12;5:2;4811:136:43;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4811:136:43;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4811:136:43;4790:158;;;;;;;;4769:5;;4719:240;;8986:298;5048:6;;9067:4;;9050:7;;-1:-1:-1;;;;;5029:26:43;;;5048:6;;5029:26;5021:35;;;;;;9087:31;9107:10;9087:19;:31::i;:::-;:40;;9083:83;;9150:5;9143:12;;;;9083:83;9190:10;9182:7;:19;;;;;;;;;;;9175:26;;;;;;;-1:-1:-1;;9175:26:43;;;9216:40;9190:10;;9216:40;;;9273:4;9266:11;;5066:1;8986:298;;;;:::o;5858:324::-;3554:10;6054:4;3546:19;;;;;;;;;;3607:10;3546:31;;-1:-1:-1;;;3546:31:43;;;:50;;:72;3538:81;;;;;;4385:580;4442:11;4463:236;4483:20;:27;4477:33;;4463:236;;;4581:20;:25;;4602:3;;4581:25;;;;;;;;;;;;;;;;;;;:35;4648:20;:25;;-1:-1:-1;;;;;4581:35:43;;;;4554:81;;4636:10;;4669:3;;4648:25;;;;;;;;;;;;;;:32;:25;;;;;:32;;;;;4554:133;;;-1:-1:-1;;;4554:133:43;;;;;;-1:-1:-1;;;;;4554:133:43;;;;;;;;;;;;;;;;;;;;;;;;;;4648:25;;4554:133;;;;;;;;;;;;;5:2:-1;;;;30:1;27;20:12;5:2;4554:133:43;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4554:133:43;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4554:133:43;4533:155;;;;;;;;4512:5;;4463:236;;;5048:6;;6033:7;;-1:-1:-1;;;;;5029:26:43;;;5048:6;;5029:26;5021:35;;;;;;6079:42;;;;;;;;-1:-1:-1;;;;;6079:42:43;;;6094:10;;6079:42;;;;;;;;;6138:16;;:37;;;;;;-1:-1:-1;;;;;6138:37:43;;;;;;;;;;;;;;;:16;;;;;:21;;:37;;;;;;;;;;;;;;-1:-1:-1;6138:16:43;:37;;;5:2:-1;;;;30:1;27;20:12;5:2;6138:37:43;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6138:37:43;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6138:37:43;;-1:-1:-1;4708:1:43;4730;4724:7;;4719:240;4739:21;:28;4733:34;;4719:240;;;4838:21;:26;;4860:3;;4838:26;;;;;;;;;;;;;;;;;;;:36;4907:21;:26;;-1:-1:-1;;;;;4838:36:43;;;;4811:83;;4895:10;;4929:3;;4907:26;;;;;;;;;;;;;;:33;:26;;;;;:33;;;;;4811:136;;;-1:-1:-1;;;4811:136:43;;;;;;-1:-1:-1;;;;;4811:136:43;;;;;;;;;;;;;;;;;;;;;;;;;;4907:26;;4811:136;;;;;;;;;;;;;5:2:-1;;;;30:1;27;20:12;5:2;4811:136:43;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4811:136:43;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4811:136:43;4790:158;;;;;;;;4769:5;;4719:240;;2220:79;;;;;;;;;;;;;;;;;;;;;;;;:::o;20411:229::-;5048:6;;20537:4;;;;20499:7;;-1:-1:-1;;;;;5029:26:43;;;5048:6;;5029:26;5021:35;;;;;;20575:20;:27;20604:21;:28;20575:27;;-1:-1:-1;20604:28:43;-1:-1:-1;20411:229:43;;;;:::o;1465:34::-;;;-1:-1:-1;;;;;1465:34:43;;:::o;18984:149::-;5048:6;;19075:7;;19053;;-1:-1:-1;;;;;5029:26:43;;;5048:6;;5029:26;5021:35;;;;;;-1:-1:-1;;19109:16:43;;-1:-1:-1;;;;;19109:16:43;;;-1:-1:-1;18984:149:43:o;19504:189::-;5048:6;;19629;;19599:7;;-1:-1:-1;;;;;5029:26:43;;;5048:6;;5029:26;5021:35;;;;;;-1:-1:-1;;;;;;;;19658:16:43;:7;:16;;;;;;;;;;-1:-1:-1;19658:28:43;;-1:-1:-1;;;19658:28:43;;19504:189::o;19139:165::-;5048:6;;19246:4;;19224:7;;-1:-1:-1;;;;;5029:26:43;;;5048:6;;5029:26;5021:35;;;;;;19269:28;19289:7;19269:19;:28::i;:::-;19262:35;19139:165;-1:-1:-1;;;;19139:165:43:o;16426:329::-;3554:10;16664:4;3546:19;;;;;;;;;;3607:10;3546:31;;-1:-1:-1;;;3546:31:43;;;:50;;:72;3538:81;;;;;;4385:580;4442:11;4463:236;4483:20;:27;4477:33;;4463:236;;;4581:20;:25;;4602:3;;4581:25;;;;;;;;;;;;;;;;;;;:35;4648:20;:25;;-1:-1:-1;;;;;4581:35:43;;;;4554:81;;4636:10;;4669:3;;4648:25;;;;;;;;;;;;;;:32;:25;;;;;:32;;;;;4554:133;;;-1:-1:-1;;;4554:133:43;;;;;;-1:-1:-1;;;;;4554:133:43;;;;;;;;;;;;;;;;;;;;;;;;;;4648:25;;4554:133;;;;;;;;;;;;;5:2:-1;;;;30:1;27;20:12;5:2;4554:133:43;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4554:133:43;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4554:133:43;4533:155;;;;;;;;4512:5;;4463:236;;;5048:6;;16642:7;;-1:-1:-1;;;;;5029:26:43;;;5048:6;;5029:26;5021:35;;;;;;16691:6;;:57;;;;;;-1:-1:-1;;;;;16691:57:43;;;;;;;;;;;;;;;;;;;;;;:6;;;;;:28;;:57;;;;;;;;;;;;;;-1:-1:-1;16691:6:43;:57;;;5:2:-1;;;;30:1;27;20:12;5:2;16691:57:43;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16691:57:43;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16691:57:43;;-1:-1:-1;4708:1:43;4730;4724:7;;4719:240;4739:21;:28;4733:34;;4719:240;;;4838:21;:26;;4860:3;;4838:26;;;;;;;;;;;;;;;;;;;:36;4907:21;:26;;-1:-1:-1;;;;;4838:36:43;;;;4811:83;;4895:10;;4929:3;;4907:26;;;;;;;;;;;;;;:33;:26;;;;;:33;;;;;4811:136;;;-1:-1:-1;;;4811:136:43;;;;;;-1:-1:-1;;;;;4811:136:43;;;;;;;;;;;;;;;;;;;;;;;;;;4907:26;;4811:136;;;;;;;;;;;;;5:2:-1;;;;30:1;27;20:12;5:2;4811:136:43;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4811:136:43;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4811:136:43;4790:158;;;;;;;;4769:5;;4719:240;;18612:225;4296:10;18773:4;4288:19;;;;;;;;;;:31;;;-1:-1:-1;;;4288:31:43;4342:18;4288:50;;;:72;4280:81;;;;;;5048:6;;18747:7;;-1:-1:-1;;;;;5029:26:43;;;5048:6;;5029:26;5021:35;;;;;;18804:6;;:26;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18804:6:43;;;;:15;;18820:9;;18804:26;;;;;;18820:9;18804:26;;18820:9;18804:26;1:33:-1;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;18804::43;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18804:26:43;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18804:26:43;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18804:26:43;;18612:225;-1:-1:-1;;;;;18612:225:43:o;15357:317::-;4151:10;15582:4;4143:19;;;;;;;;;;:31;;;15588:12;;-1:-1:-1;;;4143:31:43;4197:18;4143:50;;;:72;4135:81;;;;;;4385:580;4442:11;4463:236;4483:20;:27;4477:33;;4463:236;;;4581:20;:25;;4602:3;;4581:25;;;;;;;;;;;;;;;;;;;:35;4648:20;:25;;-1:-1:-1;;;;;4581:35:43;;;;4554:81;;4636:10;;4669:3;;4648:25;;;;;;;;;;;;;;:32;:25;;;;;:32;;;;;4554:133;;;-1:-1:-1;;;4554:133:43;;;;;;-1:-1:-1;;;;;4554:133:43;;;;;;;;;;;;;;;;;;;;;;;;;;4648:25;;4554:133;;;;;;;;;;;;;5:2:-1;;;;30:1;27;20:12;5:2;4554:133:43;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4554:133:43;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4554:133:43;4533:155;;;;;;;;4512:5;;4463:236;;;5048:6;;15559:7;;-1:-1:-1;;;;;5029:26:43;;;5048:6;;5029:26;5021:35;;;;;;15623:6;;:44;;;;;-1:-1:-1;;;;;15623:44:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;:6;;;;;:18;;:44;;15653:5;;15623:44;;;;;;;15653:5;15623:44;;15653:5;15623:44;1:33:-1;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;15623:44:43;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15623:44:43;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15623:44:43;;;;;;39:16:-1;36:1;17:17;2:54;101:4;15623:44:43;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;;;5:11;;2:2;;;29:1;26;19:12;2:2;15623:44:43;;;;;;;;;;;;;;19:11:-1;11:20;;8:2;;;44:1;41;34:12;8:2;62:21;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;213:10;;261:11;244:29;;285:43;;;282:58;-1:-1;233:115;230:2;;;361:1;358;351:12;230:2;-1:-1;15616:51:43;;-1:-1:-1;15623:44:43;-1:-1:-1;;;;;4708:1:43;4730;4724:7;;4719:240;4739:21;:28;4733:34;;4719:240;;;4838:21;:26;;4860:3;;4838:26;;;;;;;;;;;;;;;;;;;:36;4907:21;:26;;-1:-1:-1;;;;;4838:36:43;;;;4811:83;;4895:10;;4929:3;;4907:26;;;;;;;;;;;;;;:33;:26;;;;;:33;;;;;4811:136;;;-1:-1:-1;;;4811:136:43;;;;;;-1:-1:-1;;;;;4811:136:43;;;;;;;;;;;;;;;;;;;;;;;;;;4907:26;;4811:136;;;;;;;;;;;;;5:2:-1;;;;30:1;27;20:12;5:2;4811:136:43;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4811:136:43;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4811:136:43;4790:158;;;;;;;;4769:5;;4719:240;;;4226:1;;15357:317;;;;;;;;:::o;1360:39::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1360:39:43;;:::o;19699:509::-;19796:7;19816:40;;:::i;:::-;-1:-1:-1;;;;;;19859:47:43;;;;;;:28;:47;;;;;;;;;19816:90;;;;;;;;;;;;;;;;;-1:-1:-1;19816:90:43;;;;;;;;;;;19917:102;;19965:20;19986:8;:14;;;19965:36;;;;;;;;;;;;;;;;;;;;:43;;;19958:50;;;;;19917:102;-1:-1:-1;;;;;;20040:48:43;;;;;;:29;:48;;;;;;;;;20029:59;;;;;;;;;;;;;;;;;-1:-1:-1;20029:59:43;;;;;;;;;;;20099:103;;20147:21;20169:8;:14;;;20147:37;;;;;;;;;19699:509;;;;;:::o;1432:27::-;;;-1:-1:-1;;;;;1432:27:43;;:::o;9533:1601::-;3857:10;9707:4;3849:19;;;;;;;;;;:31;;;-1:-1:-1;;;3849:31:43;3903:18;3849:50;;;:72;3841:81;;;;;;5048:6;;9686:7;;-1:-1:-1;;;;;5029:26:43;;;5048:6;;5029:26;5021:35;;;;;;9727:40;9796:17;-1:-1:-1;;;;;9770:49:43;;:51;;;;;-1:-1:-1;;;9770:51:43;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9770:51:43;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9770:51:43;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9770:51:43;;-1:-1:-1;9844:39:43;9836:4;:47;;;;;;;;;9835:120;;;-1:-1:-1;9908:46:43;9900:4;:54;;;;;;;;;9835:120;9831:596;;;-1:-1:-1;;;;;9976:47:43;;;;;;:28;:47;;;;;:60;;;9975:61;9971:446;;;10082:44;;;;;;;;-1:-1:-1;;;;;10082:44:43;;;;;;;;;;;;;10056:20;27:10:-1;;39:1;23:18;;;45:23;;-1:-1;10056:71:43;;;;;;;;;;;;;;;-1:-1:-1;;;;;;10056:71:43;;;;;;;;;;;;;;;;;;;10211:61;;;;;;;;;;10242:27;;-1:-1:-1;;10242:29:43;10211:61;;;;;;10145:47;;;:28;:47;;;;;;;:127;;;;-1:-1:-1;;10145:127:43;;;;;;;;;;;;9971:446;;;-1:-1:-1;;;;;10331:47:43;;;;;;:28;:47;;;;;-1:-1:-1;10331:53:43;;10310:20;:75;;10395:7;;10331:53;10310:75;;;;;;;;;;;;;;;;:82;;:92;;;;9971:446;10449:40;10441:4;:48;;;;;;;;;10440:121;;;-1:-1:-1;10514:46:43;10506:4;:54;;;;;;;;;10440:121;10436:603;;;-1:-1:-1;;;;;10582:48:43;;;;;;:29;:48;;;;;:61;;;10581:62;10577:452;;;10690:44;;;;;;;;-1:-1:-1;;;;;10690:44:43;;;;;;;;;;;;;10663:21;27:10:-1;;39:1;23:18;;;45:23;;-1:-1;10663:72:43;;;;;;;;;;;;;;;-1:-1:-1;;;;;;10663:72:43;;;;;;;;;;;;;;;;;;;10820:62;;;;;;;;;;10851:28;;-1:-1:-1;;10851:30:43;10820:62;;;;;;10753:48;;;:29;:48;;;;;;;:129;;;;-1:-1:-1;;10753:129:43;;;;;;;;;;;;10577:452;;;-1:-1:-1;;;;;10942:48:43;;;;;;:29;:48;;;;;-1:-1:-1;10942:54:43;;10920:21;:77;;11007:7;;10942:54;10920:77;;;;;;;;;;;;;;;;:84;;:94;;;;10577:452;11073:17;-1:-1:-1;;;;;11053:53:43;;11092:7;11101:4;11053:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11123:4:43;;9533:1601;-1:-1:-1;;;;;9533:1601:43:o;6976:1111::-;3703:10;7201:4;3695:19;;;;;;;;;;:31;;;-1:-1:-1;;;3695:31:43;3749:18;3695:50;;;:72;3687:81;;;;;;4385:580;4442:11;4463:236;4483:20;:27;4477:33;;4463:236;;;4581:20;:25;;4602:3;;4581:25;;;;;;;;;;;;;;;;;;;:35;4648:20;:25;;-1:-1:-1;;;;;4581:35:43;;;;4554:81;;4636:10;;4669:3;;4648:25;;;;;;;;;;;;;;:32;:25;;;;;:32;;;;;4554:133;;;-1:-1:-1;;;4554:133:43;;;;;;-1:-1:-1;;;;;4554:133:43;;;;;;;;;;;;;;;;;;;;;;;;;;4648:25;;4554:133;;;;;;;;;;;;;5:2:-1;;;;30:1;27;20:12;5:2;4554:133:43;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4554:133:43;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4554:133:43;4533:155;;;;;;;;4512:5;;4463:236;;;5048:6;;7180:7;;-1:-1:-1;;;;;5029:26:43;;;5048:6;;5029:26;5021:35;;;;;;7222:20;;:::i;:::-;-1:-1:-1;;;;;;7245:16:43;;:7;:16;;;;;;;;;;;7222:39;;;;;;;;;;;-1:-1:-1;7222:39:43;;;;-1:-1:-1;;;;;;;;;7222:39:43;;;;;;;;;;7623:10;7615:19;;;;;;;;;;:31;;7593:18;;7580:31;;7615;;7614:32;7560:87;:18;:87;:100;7552:109;;;;;;7813:10;7849:1;7805:19;;;;;;;;;;;:31;;;7784:18;;;;7764;-1:-1:-1;;;7805:31:43;;;7804:32;7784:53;7764:74;:87;7756:96;;;;;;-1:-1:-1;;;;;7896:16:43;;:7;:16;;;;;;;;;;;:41;;;-1:-1:-1;7947:28:43;:62;;-1:-1:-1;;7947:62:43;-1:-1:-1;;;7978:31:43;;;7947:62;;;;8024:35;8039:10;;8024:35;;;8076:4;8069:11;;;4708:1;4730;4724:7;;4719:240;4739:21;:28;4733:34;;4719:240;;;4838:21;:26;;4860:3;;4838:26;;;;;;;;;;;;;;;;;;;:36;4907:21;:26;;-1:-1:-1;;;;;4838:36:43;;;;4811:83;;4895:10;;4929:3;;4907:26;;;;;;;;;;;;;;:33;:26;;;;;:33;;;;;4811:136;;;-1:-1:-1;;;4811:136:43;;;;;;-1:-1:-1;;;;;4811:136:43;;;;;;;;;;;;;;;;;;;;;;;;;;4907:26;;4811:136;;;;;;;;;;;;;5:2:-1;;;;30:1;27;20:12;5:2;4811:136:43;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4811:136:43;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4811:136:43;4790:158;;;;;;;;4769:5;;4719:240;;1867:47;;;;;;;;;;;5303:318;3554:10;5497:4;3546:19;;;;;;;;;;3607:10;3546:31;;-1:-1:-1;;;3546:31:43;;;:50;;:72;3538:81;;;;;;4385:580;4442:11;4463:236;4483:20;:27;4477:33;;4463:236;;;4581:20;:25;;4602:3;;4581:25;;;;;;;;;;;;;;;;;;;:35;4648:20;:25;;-1:-1:-1;;;;;4581:35:43;;;;4554:81;;4636:10;;4669:3;;4648:25;;;;;;;;;;;;;;:32;:25;;;;;:32;;;;;4554:133;;;-1:-1:-1;;;4554:133:43;;;;;;-1:-1:-1;;;;;4554:133:43;;;;;;;;;;;;;;;;;;;;;;;;;;4648:25;;4554:133;;;;;;;;;;;;;5:2:-1;;;;30:1;27;20:12;5:2;4554:133:43;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4554:133:43;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4554:133:43;4533:155;;;;;;;;4512:5;;4463:236;;;5048:6;;5476:7;;-1:-1:-1;;;;;5029:26:43;;;5048:6;;5029:26;5021:35;;;;;;5522:40;;;;;;;;-1:-1:-1;;;;;5522:40:43;;;5537:10;;5522:40;;;;;;;;;5579:16;;:35;;;;;;-1:-1:-1;;;;;5579:35:43;;;;;;;;;;;;;;;:16;;;;;:21;;:35;;;;;;;;;;;;;;-1:-1:-1;5579:16:43;:35;;;5:2:-1;;;;30:1;27;20:12;5:2;5579:35:43;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5579:35:43;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5579:35:43;;-1:-1:-1;4708:1:43;4730;4724:7;;4719:240;4739:21;:28;4733:34;;4719:240;;;4838:21;:26;;4860:3;;4838:26;;;;;;;;;;;;;;;;;;;:36;4907:21;:26;;-1:-1:-1;;;;;4838:36:43;;;;4811:83;;4895:10;;4929:3;;4907:26;;;;;;;;;;;;;;:33;:26;;;;;:33;;;;;4811:136;;;-1:-1:-1;;;4811:136:43;;;;;;-1:-1:-1;;;;;4811:136:43;;;;;;;;;;;;;;;;;;;;;;;;;;4907:26;;4811:136;;;;;;;;;;;;;5:2:-1;;;;30:1;27;20:12;5:2;4811:136:43;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4811:136:43;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4811:136:43;4790:158;;;;;;;;4769:5;;4719:240;;20646:340;5048:6;;20805:4;;20767:7;;-1:-1:-1;;;;;5029:26:43;;;5048:6;;5029:26;5021:35;;;;;;-1:-1:-1;;;;;20837:47:43;;;;;;:28;:47;;;;;:60;;;;:141;;-1:-1:-1;;;;;;;;;20917:48:43;;;;;:29;:48;;;;;:61;;;;20646:340::o;17245:384::-;3554:10;17527:4;3546:19;;;;;;;;;;3607:10;3546:31;;-1:-1:-1;;;3546:31:43;;;:50;;:72;3538:81;;;;;;4385:580;4442:11;4463:236;4483:20;:27;4477:33;;4463:236;;;4581:20;:25;;4602:3;;4581:25;;;;;;;;;;;;;;;;;;;:35;4648:20;:25;;-1:-1:-1;;;;;4581:35:43;;;;4554:81;;4636:10;;4669:3;;4648:25;;;;;;;;;;;;;;:32;:25;;;;;:32;;;;;4554:133;;;-1:-1:-1;;;4554:133:43;;;;;;-1:-1:-1;;;;;4554:133:43;;;;;;;;;;;;;;;;;;;;;;;;;;4648:25;;4554:133;;;;;;;;;;;;;5:2:-1;;;;30:1;27;20:12;5:2;4554:133:43;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4554:133:43;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4554:133:43;4533:155;;;;;;;;4512:5;;4463:236;;;5048:6;;17505:7;;-1:-1:-1;;;;;5029:26:43;;;5048:6;;5029:26;5021:35;;;;;;17554:6;;:68;;;;;;-1:-1:-1;;;;;17554:68:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:6;;;;;:32;;:68;;;;;;;;;;;;;;-1:-1:-1;17554:6:43;:68;;;5:2:-1;;;;30:1;27;20:12;5:2;17554:68:43;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17554:68:43;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17554:68:43;;-1:-1:-1;4708:1:43;4730;4724:7;;4719:240;4739:21;:28;4733:34;;4719:240;;;4838:21;:26;;4860:3;;4838:26;;;;;;;;;;;;;;;;;;;:36;4907:21;:26;;-1:-1:-1;;;;;4838:36:43;;;;4811:83;;4895:10;;4929:3;;4907:26;;;;;;;;;;;;;;:33;:26;;;;;:33;;;;;4811:136;;;-1:-1:-1;;;4811:136:43;;;;;;-1:-1:-1;;;;;4811:136:43;;;;;;;;;;;;;;;;;;;;;;;;;;4907:26;;4811:136;;;;;;;;;;;;;5:2:-1;;;;30:1;27;20:12;5:2;4811:136:43;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4811:136:43;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4811:136:43;4790:158;;;;;;;;4769:5;;4719:240;;;3629:1;;17245:384;;;;;;;:::o;20992:159::-;-1:-1:-1;;;;;21083:16:43;21059:4;21083:16;;;;;;;;;;-1:-1:-1;21083:28:43;;-1:-1:-1;;;21083:28:43;;;:47;:60;;;20992:159::o;410:20743::-;;;;;;;;;;-1:-1:-1;410:20743:43;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;410:20743:43;;;-1:-1:-1;;410:20743:43;;;;;;;;;;;;;:::o",
  "source": "pragma solidity ^0.5.4;\n\nimport \"./Avatar.sol\";\nimport \"../globalConstraints/GlobalConstraintInterface.sol\";\nimport \"./ControllerInterface.sol\";\n\n\n/**\n * @title Controller contract\n * @dev A controller controls the organizations tokens, reputation and avatar.\n * It is subject to a set of schemes and constraints that determine its behavior.\n * Each scheme has it own parameters and operation permissions.\n */\ncontract Controller is ControllerInterface {\n\n    struct Scheme {\n        bytes32 paramsHash;  // a hash \"configuration\" of the scheme\n        bytes4  permissions; // A bitwise flags of permissions,\n                             // All 0: Not registered,\n                             // 1st bit: Flag if the scheme is registered,\n                             // 2nd bit: Scheme can register other schemes\n                             // 3rd bit: Scheme can add/remove global constraints\n                             // 4th bit: Scheme can upgrade the controller\n                             // 5th bit: Scheme can call genericCall on behalf of\n                             //          the organization avatar\n    }\n\n    struct GlobalConstraint {\n        address gcAddress;\n        bytes32 params;\n    }\n\n    struct GlobalConstraintRegister {\n        bool isRegistered; //is registered\n        uint256 index;    //index at globalConstraints\n    }\n\n    mapping(address=>Scheme) public schemes;\n\n    Avatar public avatar;\n    DAOToken public nativeToken;\n    Reputation public nativeReputation;\n  // newController will point to the new controller after the present controller is upgraded\n    address public newController;\n  // globalConstraintsPre that determine pre conditions for all actions on the controller\n\n    GlobalConstraint[] public globalConstraintsPre;\n  // globalConstraintsPost that determine post conditions for all actions on the controller\n    GlobalConstraint[] public globalConstraintsPost;\n  // globalConstraintsRegisterPre indicate if a globalConstraints is registered as a pre global constraint\n    mapping(address=>GlobalConstraintRegister) public globalConstraintsRegisterPre;\n  // globalConstraintsRegisterPost indicate if a globalConstraints is registered as a post global constraint\n    mapping(address=>GlobalConstraintRegister) public globalConstraintsRegisterPost;\n\n    event MintReputation (address indexed _sender, address indexed _to, uint256 _amount);\n    event BurnReputation (address indexed _sender, address indexed _from, uint256 _amount);\n    event MintTokens (address indexed _sender, address indexed _beneficiary, uint256 _amount);\n    event RegisterScheme (address indexed _sender, address indexed _scheme);\n    event UnregisterScheme (address indexed _sender, address indexed _scheme);\n    event UpgradeController(address indexed _oldController, address _newController);\n\n    event AddGlobalConstraint(\n        address indexed _globalConstraint,\n        bytes32 _params,\n        GlobalConstraintInterface.CallPhase _when);\n\n    event RemoveGlobalConstraint(address indexed _globalConstraint, uint256 _index, bool _isPre);\n\n    constructor( Avatar _avatar) public {\n        avatar = _avatar;\n        nativeToken = avatar.nativeToken();\n        nativeReputation = avatar.nativeReputation();\n        schemes[msg.sender] = Scheme({paramsHash: bytes32(0), permissions: bytes4(0x0000001F)});\n    }\n\n  // Do not allow mistaken calls:\n   // solhint-disable-next-line payable-fallback\n    function() external {\n        revert();\n    }\n\n  // Modifiers:\n    modifier onlyRegisteredScheme() {\n        require(schemes[msg.sender].permissions&bytes4(0x00000001) == bytes4(0x00000001));\n        _;\n    }\n\n    modifier onlyRegisteringSchemes() {\n        require(schemes[msg.sender].permissions&bytes4(0x00000002) == bytes4(0x00000002));\n        _;\n    }\n\n    modifier onlyGlobalConstraintsScheme() {\n        require(schemes[msg.sender].permissions&bytes4(0x00000004) == bytes4(0x00000004));\n        _;\n    }\n\n    modifier onlyUpgradingScheme() {\n        require(schemes[msg.sender].permissions&bytes4(0x00000008) == bytes4(0x00000008));\n        _;\n    }\n\n    modifier onlyGenericCallScheme() {\n        require(schemes[msg.sender].permissions&bytes4(0x00000010) == bytes4(0x00000010));\n        _;\n    }\n\n    modifier onlyMetaDataScheme() {\n        require(schemes[msg.sender].permissions&bytes4(0x00000010) == bytes4(0x00000010));\n        _;\n    }\n\n    modifier onlySubjectToConstraint(bytes32 func) {\n        uint256 idx;\n        for (idx = 0; idx < globalConstraintsPre.length; idx++) {\n            require(\n            (GlobalConstraintInterface(globalConstraintsPre[idx].gcAddress))\n            .pre(msg.sender, globalConstraintsPre[idx].params, func));\n        }\n        _;\n        for (idx = 0; idx < globalConstraintsPost.length; idx++) {\n            require(\n            (GlobalConstraintInterface(globalConstraintsPost[idx].gcAddress))\n            .post(msg.sender, globalConstraintsPost[idx].params, func));\n        }\n    }\n\n    modifier isAvatarValid(address _avatar) {\n        require(_avatar == address(avatar));\n        _;\n    }\n\n    /**\n     * @dev Mint `_amount` of reputation that are assigned to `_to` .\n     * @param  _amount amount of reputation to mint\n     * @param _to beneficiary address\n     * @return bool which represents a success\n     */\n    function mintReputation(uint256 _amount, address _to, address _avatar)\n    external\n    onlyRegisteredScheme\n    onlySubjectToConstraint(\"mintReputation\")\n    isAvatarValid(_avatar)\n    returns(bool)\n    {\n        emit MintReputation(msg.sender, _to, _amount);\n        return nativeReputation.mint(_to, _amount);\n    }\n\n    /**\n     * @dev Burns `_amount` of reputation from `_from`\n     * @param _amount amount of reputation to burn\n     * @param _from The address that will lose the reputation\n     * @return bool which represents a success\n     */\n    function burnReputation(uint256 _amount, address _from, address _avatar)\n    external\n    onlyRegisteredScheme\n    onlySubjectToConstraint(\"burnReputation\")\n    isAvatarValid(_avatar)\n    returns(bool)\n    {\n        emit BurnReputation(msg.sender, _from, _amount);\n        return nativeReputation.burn(_from, _amount);\n    }\n\n    /**\n     * @dev mint tokens .\n     * @param  _amount amount of token to mint\n     * @param _beneficiary beneficiary address\n     * @return bool which represents a success\n     */\n    function mintTokens(uint256 _amount, address _beneficiary, address _avatar)\n    external\n    onlyRegisteredScheme\n    onlySubjectToConstraint(\"mintTokens\")\n    isAvatarValid(_avatar)\n    returns(bool)\n    {\n        emit MintTokens(msg.sender, _beneficiary, _amount);\n        return nativeToken.mint(_beneficiary, _amount);\n    }\n\n  /**\n   * @dev register a scheme\n   * @param _scheme the address of the scheme\n   * @param _paramsHash a hashed configuration of the usage of the scheme\n   * @param _permissions the permissions the new scheme will have\n   * @return bool which represents a success\n   */\n    function registerScheme(address _scheme, bytes32 _paramsHash, bytes4 _permissions, address _avatar)\n    external\n    onlyRegisteringSchemes\n    onlySubjectToConstraint(\"registerScheme\")\n    isAvatarValid(_avatar)\n    returns(bool)\n    {\n\n        Scheme memory scheme = schemes[_scheme];\n\n    // Check scheme has at least the permissions it is changing, and at least the current permissions:\n    // Implementation is a bit messy. One must recall logic-circuits ^^\n\n    // produces non-zero if sender does not have all of the perms that are changing between old and new\n        require(bytes4(0x0000001f)&(_permissions^scheme.permissions)&(~schemes[msg.sender].permissions) == bytes4(0));\n\n    // produces non-zero if sender does not have all of the perms in the old scheme\n        require(bytes4(0x0000001f)&(scheme.permissions&(~schemes[msg.sender].permissions)) == bytes4(0));\n\n    // Add or change the scheme:\n        schemes[_scheme].paramsHash = _paramsHash;\n        schemes[_scheme].permissions = _permissions|bytes4(0x00000001);\n        emit RegisterScheme(msg.sender, _scheme);\n        return true;\n    }\n\n    /**\n     * @dev unregister a scheme\n     * @param _scheme the address of the scheme\n     * @return bool which represents a success\n     */\n    function unregisterScheme( address _scheme, address _avatar)\n    external\n    onlyRegisteringSchemes\n    onlySubjectToConstraint(\"unregisterScheme\")\n    isAvatarValid(_avatar)\n    returns(bool)\n    {\n    //check if the scheme is registered\n        if (_isSchemeRegistered(_scheme) == false) {\n            return false;\n        }\n    // Check the unregistering scheme has enough permissions:\n        require(bytes4(0x0000001f)&(schemes[_scheme].permissions&(~schemes[msg.sender].permissions)) == bytes4(0));\n\n    // Unregister:\n        emit UnregisterScheme(msg.sender, _scheme);\n        delete schemes[_scheme];\n        return true;\n    }\n\n    /**\n     * @dev unregister the caller's scheme\n     * @return bool which represents a success\n     */\n    function unregisterSelf(address _avatar) external isAvatarValid(_avatar) returns(bool) {\n        if (_isSchemeRegistered(msg.sender) == false) {\n            return false;\n        }\n        delete schemes[msg.sender];\n        emit UnregisterScheme(msg.sender, msg.sender);\n        return true;\n    }\n\n    /**\n     * @dev add or update Global Constraint\n     * @param _globalConstraint the address of the global constraint to be added.\n     * @param _params the constraint parameters hash.\n     * @return bool which represents a success\n     */\n    function addGlobalConstraint(address _globalConstraint, bytes32 _params, address _avatar)\n    external\n    onlyGlobalConstraintsScheme\n    isAvatarValid(_avatar)\n    returns(bool)\n    {\n        GlobalConstraintInterface.CallPhase when = GlobalConstraintInterface(_globalConstraint).when();\n        if ((when == GlobalConstraintInterface.CallPhase.Pre)||\n            (when == GlobalConstraintInterface.CallPhase.PreAndPost)) {\n            if (!globalConstraintsRegisterPre[_globalConstraint].isRegistered) {\n                globalConstraintsPre.push(GlobalConstraint(_globalConstraint, _params));\n                globalConstraintsRegisterPre[_globalConstraint] =\n                GlobalConstraintRegister(true, globalConstraintsPre.length-1);\n            }else {\n                globalConstraintsPre[globalConstraintsRegisterPre[_globalConstraint].index].params = _params;\n            }\n        }\n        if ((when == GlobalConstraintInterface.CallPhase.Post)||\n            (when == GlobalConstraintInterface.CallPhase.PreAndPost)) {\n            if (!globalConstraintsRegisterPost[_globalConstraint].isRegistered) {\n                globalConstraintsPost.push(GlobalConstraint(_globalConstraint, _params));\n                globalConstraintsRegisterPost[_globalConstraint] =\n                GlobalConstraintRegister(true, globalConstraintsPost.length-1);\n            }else {\n                globalConstraintsPost[globalConstraintsRegisterPost[_globalConstraint].index].params = _params;\n            }\n        }\n        emit AddGlobalConstraint(_globalConstraint, _params, when);\n        return true;\n    }\n\n    /**\n     * @dev remove Global Constraint\n     * @param _globalConstraint the address of the global constraint to be remove.\n     * @return bool which represents a success\n     */\n     // solhint-disable-next-line code-complexity\n    function removeGlobalConstraint (address _globalConstraint, address _avatar)\n    external\n    onlyGlobalConstraintsScheme\n    isAvatarValid(_avatar)\n    returns(bool)\n    {\n        GlobalConstraintRegister memory globalConstraintRegister;\n        GlobalConstraint memory globalConstraint;\n        GlobalConstraintInterface.CallPhase when = GlobalConstraintInterface(_globalConstraint).when();\n        bool retVal = false;\n\n        if ((when == GlobalConstraintInterface.CallPhase.Pre)||\n            (when == GlobalConstraintInterface.CallPhase.PreAndPost)) {\n            globalConstraintRegister = globalConstraintsRegisterPre[_globalConstraint];\n            if (globalConstraintRegister.isRegistered) {\n                if (globalConstraintRegister.index < globalConstraintsPre.length-1) {\n                    globalConstraint = globalConstraintsPre[globalConstraintsPre.length-1];\n                    globalConstraintsPre[globalConstraintRegister.index] = globalConstraint;\n                    globalConstraintsRegisterPre[globalConstraint.gcAddress].index = globalConstraintRegister.index;\n                }\n                globalConstraintsPre.length--;\n                delete globalConstraintsRegisterPre[_globalConstraint];\n                retVal = true;\n            }\n        }\n        if ((when == GlobalConstraintInterface.CallPhase.Post)||\n            (when == GlobalConstraintInterface.CallPhase.PreAndPost)) {\n            globalConstraintRegister = globalConstraintsRegisterPost[_globalConstraint];\n            if (globalConstraintRegister.isRegistered) {\n                if (globalConstraintRegister.index < globalConstraintsPost.length-1) {\n                    globalConstraint = globalConstraintsPost[globalConstraintsPost.length-1];\n                    globalConstraintsPost[globalConstraintRegister.index] = globalConstraint;\n                    globalConstraintsRegisterPost[globalConstraint.gcAddress].index = globalConstraintRegister.index;\n                }\n                globalConstraintsPost.length--;\n                delete globalConstraintsRegisterPost[_globalConstraint];\n                retVal = true;\n            }\n        }\n        if (retVal) {\n            emit RemoveGlobalConstraint(\n            _globalConstraint,\n            globalConstraintRegister.index,\n            when == GlobalConstraintInterface.CallPhase.Pre\n            );\n        }\n        return retVal;\n    }\n\n  /**\n    * @dev upgrade the Controller\n    *      The function will trigger an event 'UpgradeController'.\n    * @param  _newController the address of the new controller.\n    * @return bool which represents a success\n    */\n    function upgradeController(address _newController, Avatar _avatar)\n    external\n    onlyUpgradingScheme\n    isAvatarValid(address(_avatar))\n    returns(bool)\n    {\n        require(newController == address(0));   // so the upgrade could be done once for a contract.\n        require(_newController != address(0));\n        newController = _newController;\n        avatar.transferOwnership(_newController);\n        require(avatar.owner() == _newController);\n        if (nativeToken.owner() == address(this)) {\n            nativeToken.transferOwnership(_newController);\n            require(nativeToken.owner() == _newController);\n        }\n        if (nativeReputation.owner() == address(this)) {\n            nativeReputation.transferOwnership(_newController);\n            require(nativeReputation.owner() == _newController);\n        }\n        emit UpgradeController(address(this), newController);\n        return true;\n    }\n\n    /**\n    * @dev perform a generic call to an arbitrary contract\n    * @param _contract  the contract's address to call\n    * @param _data ABI-encoded contract call to call `_contract` address.\n    * @param _avatar the controller's avatar address\n    * @param _value value (ETH) to transfer with the transaction\n    * @return bool -success\n    *         bytes  - the return value of the called _contract's function.\n    */\n    function genericCall(address _contract, bytes calldata _data, Avatar _avatar, uint256 _value)\n    external\n    onlyGenericCallScheme\n    onlySubjectToConstraint(\"genericCall\")\n    isAvatarValid(address(_avatar))\n    returns (bool, bytes memory)\n    {\n        return avatar.genericCall(_contract, _data, _value);\n    }\n\n  /**\n   * @dev send some ether\n   * @param _amountInWei the amount of ether (in Wei) to send\n   * @param _to address of the beneficiary\n   * @return bool which represents a success\n   */\n    function sendEther(uint256 _amountInWei, address payable _to, Avatar _avatar)\n    external\n    onlyRegisteredScheme\n    onlySubjectToConstraint(\"sendEther\")\n    isAvatarValid(address(_avatar))\n    returns(bool)\n    {\n        return avatar.sendEther(_amountInWei, _to);\n    }\n\n    /**\n    * @dev send some amount of arbitrary ERC20 Tokens\n    * @param _externalToken the address of the Token Contract\n    * @param _to address of the beneficiary\n    * @param _value the amount of ether (in Wei) to send\n    * @return bool which represents a success\n    */\n    function externalTokenTransfer(IERC20 _externalToken, address _to, uint256 _value, Avatar _avatar)\n    external\n    onlyRegisteredScheme\n    onlySubjectToConstraint(\"externalTokenTransfer\")\n    isAvatarValid(address(_avatar))\n    returns(bool)\n    {\n        return avatar.externalTokenTransfer(_externalToken, _to, _value);\n    }\n\n    /**\n    * @dev transfer token \"from\" address \"to\" address\n    *      One must to approve the amount of tokens which can be spend from the\n    *      \"from\" account.This can be done using externalTokenApprove.\n    * @param _externalToken the address of the Token Contract\n    * @param _from address of the account to send from\n    * @param _to address of the beneficiary\n    * @param _value the amount of ether (in Wei) to send\n    * @return bool which represents a success\n    */\n    function externalTokenTransferFrom(\n    IERC20 _externalToken,\n    address _from,\n    address _to,\n    uint256 _value,\n    Avatar _avatar)\n    external\n    onlyRegisteredScheme\n    onlySubjectToConstraint(\"externalTokenTransferFrom\")\n    isAvatarValid(address(_avatar))\n    returns(bool)\n    {\n        return avatar.externalTokenTransferFrom(_externalToken, _from, _to, _value);\n    }\n\n    /**\n    * @dev externalTokenApproval approve the spender address to spend a specified amount of tokens\n    *      on behalf of msg.sender.\n    * @param _externalToken the address of the Token Contract\n    * @param _spender address\n    * @param _value the amount of ether (in Wei) which the approval is referring to.\n    * @return bool which represents a success\n    */\n    function externalTokenApproval(IERC20 _externalToken, address _spender, uint256 _value, Avatar _avatar)\n    external\n    onlyRegisteredScheme\n    onlySubjectToConstraint(\"externalTokenIncreaseApproval\")\n    isAvatarValid(address(_avatar))\n    returns(bool)\n    {\n        return avatar.externalTokenApproval(_externalToken, _spender, _value);\n    }\n\n    /**\n    * @dev metaData emits an event with a string, should contain the hash of some meta data.\n    * @param _metaData a string representing a hash of the meta data\n    * @param _avatar Avatar\n    * @return bool which represents a success\n    */\n    function metaData(string calldata _metaData, Avatar _avatar)\n        external\n        onlyMetaDataScheme\n        isAvatarValid(address(_avatar))\n        returns(bool)\n        {\n        return avatar.metaData(_metaData);\n    }\n\n    /**\n     * @dev getNativeReputation\n     * @param _avatar the organization avatar.\n     * @return organization native reputation\n     */\n    function getNativeReputation(address _avatar) external isAvatarValid(_avatar) view returns(address) {\n        return address(nativeReputation);\n    }\n\n    function isSchemeRegistered(address _scheme, address _avatar) external isAvatarValid(_avatar) view returns(bool) {\n        return _isSchemeRegistered(_scheme);\n    }\n\n    function getSchemeParameters(address _scheme, address _avatar)\n    external\n    isAvatarValid(_avatar)\n    view\n    returns(bytes32)\n    {\n        return schemes[_scheme].paramsHash;\n    }\n\n    function getSchemePermissions(address _scheme, address _avatar)\n    external\n    isAvatarValid(_avatar)\n    view\n    returns(bytes4)\n    {\n        return schemes[_scheme].permissions;\n    }\n\n    function getGlobalConstraintParameters(address _globalConstraint, address) external view returns(bytes32) {\n\n        GlobalConstraintRegister memory register = globalConstraintsRegisterPre[_globalConstraint];\n\n        if (register.isRegistered) {\n            return globalConstraintsPre[register.index].params;\n        }\n\n        register = globalConstraintsRegisterPost[_globalConstraint];\n\n        if (register.isRegistered) {\n            return globalConstraintsPost[register.index].params;\n        }\n    }\n\n   /**\n    * @dev globalConstraintsCount return the global constraint pre and post count\n    * @return uint256 globalConstraintsPre count.\n    * @return uint256 globalConstraintsPost count.\n    */\n    function globalConstraintsCount(address _avatar)\n        external\n        isAvatarValid(_avatar)\n        view\n        returns(uint, uint)\n        {\n        return (globalConstraintsPre.length, globalConstraintsPost.length);\n    }\n\n    function isGlobalConstraintRegistered(address _globalConstraint, address _avatar)\n        external\n        isAvatarValid(_avatar)\n        view\n        returns(bool)\n        {\n        return (globalConstraintsRegisterPre[_globalConstraint].isRegistered ||\n                globalConstraintsRegisterPost[_globalConstraint].isRegistered);\n    }\n\n    function _isSchemeRegistered(address _scheme) private view returns(bool) {\n        return (schemes[_scheme].permissions&bytes4(0x00000001) != bytes4(0));\n    }\n}\n",
  "sourcePath": "@daostack/arc/contracts/controller/Controller.sol",
  "ast": {
    "absolutePath": "@daostack/arc/contracts/controller/Controller.sol",
    "exportedSymbols": {
      "Controller": [
        8772
      ]
    },
    "id": 8773,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 7318,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".4"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:43"
      },
      {
        "absolutePath": "@daostack/arc/contracts/controller/Avatar.sol",
        "file": "./Avatar.sol",
        "id": 7319,
        "nodeType": "ImportDirective",
        "scope": 8773,
        "sourceUnit": 7317,
        "src": "25:22:43",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@daostack/arc/contracts/globalConstraints/GlobalConstraintInterface.sol",
        "file": "../globalConstraints/GlobalConstraintInterface.sol",
        "id": 7320,
        "nodeType": "ImportDirective",
        "scope": 8773,
        "sourceUnit": 9116,
        "src": "48:60:43",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@daostack/arc/contracts/controller/ControllerInterface.sol",
        "file": "./ControllerInterface.sol",
        "id": 7321,
        "nodeType": "ImportDirective",
        "scope": 8773,
        "sourceUnit": 9006,
        "src": "109:35:43",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 7322,
              "name": "ControllerInterface",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9005,
              "src": "433:19:43",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ControllerInterface_$9005",
                "typeString": "contract ControllerInterface"
              }
            },
            "id": 7323,
            "nodeType": "InheritanceSpecifier",
            "src": "433:19:43"
          }
        ],
        "contractDependencies": [
          9005
        ],
        "contractKind": "contract",
        "documentation": "@title Controller contract\n@dev A controller controls the organizations tokens, reputation and avatar.\nIt is subject to a set of schemes and constraints that determine its behavior.\nEach scheme has it own parameters and operation permissions.",
        "fullyImplemented": true,
        "id": 8772,
        "linearizedBaseContracts": [
          8772,
          9005
        ],
        "name": "Controller",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "canonicalName": "Controller.Scheme",
            "id": 7328,
            "members": [
              {
                "constant": false,
                "id": 7325,
                "name": "paramsHash",
                "nodeType": "VariableDeclaration",
                "scope": 7328,
                "src": "484:18:43",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 7324,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "484:7:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 7327,
                "name": "permissions",
                "nodeType": "VariableDeclaration",
                "scope": 7328,
                "src": "553:19:43",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes4",
                  "typeString": "bytes4"
                },
                "typeName": {
                  "id": 7326,
                  "name": "bytes4",
                  "nodeType": "ElementaryTypeName",
                  "src": "553:6:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Scheme",
            "nodeType": "StructDefinition",
            "scope": 8772,
            "src": "460:663:43",
            "visibility": "public"
          },
          {
            "canonicalName": "Controller.GlobalConstraint",
            "id": 7333,
            "members": [
              {
                "constant": false,
                "id": 7330,
                "name": "gcAddress",
                "nodeType": "VariableDeclaration",
                "scope": 7333,
                "src": "1163:17:43",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 7329,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "1163:7:43",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 7332,
                "name": "params",
                "nodeType": "VariableDeclaration",
                "scope": 7333,
                "src": "1190:14:43",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 7331,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "1190:7:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "GlobalConstraint",
            "nodeType": "StructDefinition",
            "scope": 8772,
            "src": "1129:82:43",
            "visibility": "public"
          },
          {
            "canonicalName": "Controller.GlobalConstraintRegister",
            "id": 7338,
            "members": [
              {
                "constant": false,
                "id": 7335,
                "name": "isRegistered",
                "nodeType": "VariableDeclaration",
                "scope": 7338,
                "src": "1259:17:43",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 7334,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "1259:4:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 7337,
                "name": "index",
                "nodeType": "VariableDeclaration",
                "scope": 7338,
                "src": "1302:13:43",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 7336,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1302:7:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "GlobalConstraintRegister",
            "nodeType": "StructDefinition",
            "scope": 8772,
            "src": "1217:137:43",
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 7342,
            "name": "schemes",
            "nodeType": "VariableDeclaration",
            "scope": 8772,
            "src": "1360:39:43",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$7328_storage_$",
              "typeString": "mapping(address => struct Controller.Scheme)"
            },
            "typeName": {
              "id": 7341,
              "keyType": {
                "id": 7339,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1368:7:43",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1360:24:43",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$7328_storage_$",
                "typeString": "mapping(address => struct Controller.Scheme)"
              },
              "valueType": {
                "contractScope": null,
                "id": 7340,
                "name": "Scheme",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 7328,
                "src": "1377:6:43",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Scheme_$7328_storage_ptr",
                  "typeString": "struct Controller.Scheme"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 7344,
            "name": "avatar",
            "nodeType": "VariableDeclaration",
            "scope": 8772,
            "src": "1406:20:43",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_Avatar_$7316",
              "typeString": "contract Avatar"
            },
            "typeName": {
              "contractScope": null,
              "id": 7343,
              "name": "Avatar",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 7316,
              "src": "1406:6:43",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Avatar_$7316",
                "typeString": "contract Avatar"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 7346,
            "name": "nativeToken",
            "nodeType": "VariableDeclaration",
            "scope": 8772,
            "src": "1432:27:43",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_DAOToken_$9081",
              "typeString": "contract DAOToken"
            },
            "typeName": {
              "contractScope": null,
              "id": 7345,
              "name": "DAOToken",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9081,
              "src": "1432:8:43",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_DAOToken_$9081",
                "typeString": "contract DAOToken"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 7348,
            "name": "nativeReputation",
            "nodeType": "VariableDeclaration",
            "scope": 8772,
            "src": "1465:34:43",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_Reputation_$11034",
              "typeString": "contract Reputation"
            },
            "typeName": {
              "contractScope": null,
              "id": 7347,
              "name": "Reputation",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 11034,
              "src": "1465:10:43",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Reputation_$11034",
                "typeString": "contract Reputation"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 7350,
            "name": "newController",
            "nodeType": "VariableDeclaration",
            "scope": 8772,
            "src": "1598:28:43",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 7349,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1598:7:43",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 7353,
            "name": "globalConstraintsPre",
            "nodeType": "VariableDeclaration",
            "scope": 8772,
            "src": "1723:46:43",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
              "typeString": "struct Controller.GlobalConstraint[]"
            },
            "typeName": {
              "baseType": {
                "contractScope": null,
                "id": 7351,
                "name": "GlobalConstraint",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 7333,
                "src": "1723:16:43",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_GlobalConstraint_$7333_storage_ptr",
                  "typeString": "struct Controller.GlobalConstraint"
                }
              },
              "id": 7352,
              "length": null,
              "nodeType": "ArrayTypeName",
              "src": "1723:18:43",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage_ptr",
                "typeString": "struct Controller.GlobalConstraint[]"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 7356,
            "name": "globalConstraintsPost",
            "nodeType": "VariableDeclaration",
            "scope": 8772,
            "src": "1867:47:43",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
              "typeString": "struct Controller.GlobalConstraint[]"
            },
            "typeName": {
              "baseType": {
                "contractScope": null,
                "id": 7354,
                "name": "GlobalConstraint",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 7333,
                "src": "1867:16:43",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_GlobalConstraint_$7333_storage_ptr",
                  "typeString": "struct Controller.GlobalConstraint"
                }
              },
              "id": 7355,
              "length": null,
              "nodeType": "ArrayTypeName",
              "src": "1867:18:43",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage_ptr",
                "typeString": "struct Controller.GlobalConstraint[]"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 7360,
            "name": "globalConstraintsRegisterPre",
            "nodeType": "VariableDeclaration",
            "scope": 8772,
            "src": "2027:78:43",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$7338_storage_$",
              "typeString": "mapping(address => struct Controller.GlobalConstraintRegister)"
            },
            "typeName": {
              "id": 7359,
              "keyType": {
                "id": 7357,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "2035:7:43",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "2027:42:43",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$7338_storage_$",
                "typeString": "mapping(address => struct Controller.GlobalConstraintRegister)"
              },
              "valueType": {
                "contractScope": null,
                "id": 7358,
                "name": "GlobalConstraintRegister",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 7338,
                "src": "2044:24:43",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_storage_ptr",
                  "typeString": "struct Controller.GlobalConstraintRegister"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 7364,
            "name": "globalConstraintsRegisterPost",
            "nodeType": "VariableDeclaration",
            "scope": 8772,
            "src": "2220:79:43",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$7338_storage_$",
              "typeString": "mapping(address => struct Controller.GlobalConstraintRegister)"
            },
            "typeName": {
              "id": 7363,
              "keyType": {
                "id": 7361,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "2228:7:43",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "2220:42:43",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$7338_storage_$",
                "typeString": "mapping(address => struct Controller.GlobalConstraintRegister)"
              },
              "valueType": {
                "contractScope": null,
                "id": 7362,
                "name": "GlobalConstraintRegister",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 7338,
                "src": "2237:24:43",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_storage_ptr",
                  "typeString": "struct Controller.GlobalConstraintRegister"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 7372,
            "name": "MintReputation",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7371,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7366,
                  "indexed": true,
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 7372,
                  "src": "2328:23:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7365,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2328:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7368,
                  "indexed": true,
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 7372,
                  "src": "2353:19:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7367,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2353:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7370,
                  "indexed": false,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 7372,
                  "src": "2374:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7369,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2374:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2327:63:43"
            },
            "src": "2306:85:43"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 7380,
            "name": "BurnReputation",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7379,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7374,
                  "indexed": true,
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 7380,
                  "src": "2418:23:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7373,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2418:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7376,
                  "indexed": true,
                  "name": "_from",
                  "nodeType": "VariableDeclaration",
                  "scope": 7380,
                  "src": "2443:21:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7375,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2443:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7378,
                  "indexed": false,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 7380,
                  "src": "2466:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7377,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2466:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2417:65:43"
            },
            "src": "2396:87:43"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 7388,
            "name": "MintTokens",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7387,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7382,
                  "indexed": true,
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 7388,
                  "src": "2506:23:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7381,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2506:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7384,
                  "indexed": true,
                  "name": "_beneficiary",
                  "nodeType": "VariableDeclaration",
                  "scope": 7388,
                  "src": "2531:28:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7383,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2531:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7386,
                  "indexed": false,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 7388,
                  "src": "2561:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7385,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2561:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2505:72:43"
            },
            "src": "2488:90:43"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 7394,
            "name": "RegisterScheme",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7393,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7390,
                  "indexed": true,
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 7394,
                  "src": "2605:23:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7389,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2605:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7392,
                  "indexed": true,
                  "name": "_scheme",
                  "nodeType": "VariableDeclaration",
                  "scope": 7394,
                  "src": "2630:23:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7391,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2630:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2604:50:43"
            },
            "src": "2583:72:43"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 7400,
            "name": "UnregisterScheme",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7399,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7396,
                  "indexed": true,
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 7400,
                  "src": "2684:23:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7395,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2684:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7398,
                  "indexed": true,
                  "name": "_scheme",
                  "nodeType": "VariableDeclaration",
                  "scope": 7400,
                  "src": "2709:23:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7397,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2709:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2683:50:43"
            },
            "src": "2660:74:43"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 7406,
            "name": "UpgradeController",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7405,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7402,
                  "indexed": true,
                  "name": "_oldController",
                  "nodeType": "VariableDeclaration",
                  "scope": 7406,
                  "src": "2763:30:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7401,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2763:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7404,
                  "indexed": false,
                  "name": "_newController",
                  "nodeType": "VariableDeclaration",
                  "scope": 7406,
                  "src": "2795:22:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7403,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2795:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2762:56:43"
            },
            "src": "2739:80:43"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 7414,
            "name": "AddGlobalConstraint",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7413,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7408,
                  "indexed": true,
                  "name": "_globalConstraint",
                  "nodeType": "VariableDeclaration",
                  "scope": 7414,
                  "src": "2860:33:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7407,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2860:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7410,
                  "indexed": false,
                  "name": "_params",
                  "nodeType": "VariableDeclaration",
                  "scope": 7414,
                  "src": "2903:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 7409,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2903:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7412,
                  "indexed": false,
                  "name": "_when",
                  "nodeType": "VariableDeclaration",
                  "scope": 7414,
                  "src": "2928:41:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_CallPhase_$9087",
                    "typeString": "enum GlobalConstraintInterface.CallPhase"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7411,
                    "name": "GlobalConstraintInterface.CallPhase",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 9087,
                    "src": "2928:35:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_CallPhase_$9087",
                      "typeString": "enum GlobalConstraintInterface.CallPhase"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2850:120:43"
            },
            "src": "2825:146:43"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 7422,
            "name": "RemoveGlobalConstraint",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7421,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7416,
                  "indexed": true,
                  "name": "_globalConstraint",
                  "nodeType": "VariableDeclaration",
                  "scope": 7422,
                  "src": "3006:33:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7415,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3006:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7418,
                  "indexed": false,
                  "name": "_index",
                  "nodeType": "VariableDeclaration",
                  "scope": 7422,
                  "src": "3041:14:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7417,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3041:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7420,
                  "indexed": false,
                  "name": "_isPre",
                  "nodeType": "VariableDeclaration",
                  "scope": 7422,
                  "src": "3057:11:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7419,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3057:4:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3005:64:43"
            },
            "src": "2977:93:43"
          },
          {
            "body": {
              "id": 7457,
              "nodeType": "Block",
              "src": "3112:228:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7429,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7427,
                      "name": "avatar",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7344,
                      "src": "3122:6:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Avatar_$7316",
                        "typeString": "contract Avatar"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 7428,
                      "name": "_avatar",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7424,
                      "src": "3131:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Avatar_$7316",
                        "typeString": "contract Avatar"
                      }
                    },
                    "src": "3122:16:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$7316",
                      "typeString": "contract Avatar"
                    }
                  },
                  "id": 7430,
                  "nodeType": "ExpressionStatement",
                  "src": "3122:16:43"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7435,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7431,
                      "name": "nativeToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7346,
                      "src": "3148:11:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_DAOToken_$9081",
                        "typeString": "contract DAOToken"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 7432,
                          "name": "avatar",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7344,
                          "src": "3162:6:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Avatar_$7316",
                            "typeString": "contract Avatar"
                          }
                        },
                        "id": 7433,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "nativeToken",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7052,
                        "src": "3162:18:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_DAOToken_$9081_$",
                          "typeString": "function () view external returns (contract DAOToken)"
                        }
                      },
                      "id": 7434,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3162:20:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_DAOToken_$9081",
                        "typeString": "contract DAOToken"
                      }
                    },
                    "src": "3148:34:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_DAOToken_$9081",
                      "typeString": "contract DAOToken"
                    }
                  },
                  "id": 7436,
                  "nodeType": "ExpressionStatement",
                  "src": "3148:34:43"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7441,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7437,
                      "name": "nativeReputation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7348,
                      "src": "3192:16:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Reputation_$11034",
                        "typeString": "contract Reputation"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 7438,
                          "name": "avatar",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7344,
                          "src": "3211:6:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Avatar_$7316",
                            "typeString": "contract Avatar"
                          }
                        },
                        "id": 7439,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "nativeReputation",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7054,
                        "src": "3211:23:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_Reputation_$11034_$",
                          "typeString": "function () view external returns (contract Reputation)"
                        }
                      },
                      "id": 7440,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3211:25:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Reputation_$11034",
                        "typeString": "contract Reputation"
                      }
                    },
                    "src": "3192:44:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Reputation_$11034",
                      "typeString": "contract Reputation"
                    }
                  },
                  "id": 7442,
                  "nodeType": "ExpressionStatement",
                  "src": "3192:44:43"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7455,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 7443,
                        "name": "schemes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7342,
                        "src": "3246:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$7328_storage_$",
                          "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                        }
                      },
                      "id": 7446,
                      "indexExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7444,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16782,
                          "src": "3254:3:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 7445,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "3254:10:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3246:19:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Scheme_$7328_storage",
                        "typeString": "struct Controller.Scheme storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 7449,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3296:1:43",
                              "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": 7448,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3288:7:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes32_$",
                              "typeString": "type(bytes32)"
                            },
                            "typeName": "bytes32"
                          },
                          "id": 7450,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3288:10:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30783030303030303146",
                              "id": 7452,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3320:10:43",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_31_by_1",
                                "typeString": "int_const 31"
                              },
                              "value": "0x0000001F"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_31_by_1",
                                "typeString": "int_const 31"
                              }
                            ],
                            "id": 7451,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3313:6:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes4_$",
                              "typeString": "type(bytes4)"
                            },
                            "typeName": "bytes4"
                          },
                          "id": 7453,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3313:18:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7447,
                        "name": "Scheme",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7328,
                        "src": "3268:6:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_struct$_Scheme_$7328_storage_ptr_$",
                          "typeString": "type(struct Controller.Scheme storage pointer)"
                        }
                      },
                      "id": 7454,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "structConstructorCall",
                      "lValueRequested": false,
                      "names": [
                        "paramsHash",
                        "permissions"
                      ],
                      "nodeType": "FunctionCall",
                      "src": "3268:65:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Scheme_$7328_memory",
                        "typeString": "struct Controller.Scheme memory"
                      }
                    },
                    "src": "3246:87:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Scheme_$7328_storage",
                      "typeString": "struct Controller.Scheme storage ref"
                    }
                  },
                  "id": 7456,
                  "nodeType": "ExpressionStatement",
                  "src": "3246:87:43"
                }
              ]
            },
            "documentation": null,
            "id": 7458,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7425,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7424,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 7458,
                  "src": "3089:14:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Avatar_$7316",
                    "typeString": "contract Avatar"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7423,
                    "name": "Avatar",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7316,
                    "src": "3089:6:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$7316",
                      "typeString": "contract Avatar"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3087:17:43"
            },
            "returnParameters": {
              "id": 7426,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3112:0:43"
            },
            "scope": 8772,
            "src": "3076:264:43",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7464,
              "nodeType": "Block",
              "src": "3449:25:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 7461,
                      "name": "revert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        16787,
                        16788
                      ],
                      "referencedDeclaration": 16787,
                      "src": "3459:6:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_revert_pure$__$returns$__$",
                        "typeString": "function () pure"
                      }
                    },
                    "id": 7462,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3459:8:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7463,
                  "nodeType": "ExpressionStatement",
                  "src": "3459:8:43"
                }
              ]
            },
            "documentation": null,
            "id": 7465,
            "implemented": true,
            "kind": "fallback",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7459,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3437:2:43"
            },
            "returnParameters": {
              "id": 7460,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3449:0:43"
            },
            "scope": 8772,
            "src": "3429:45:43",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7484,
              "nodeType": "Block",
              "src": "3528:109:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 7480,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "id": 7476,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 7468,
                                "name": "schemes",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7342,
                                "src": "3546:7:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$7328_storage_$",
                                  "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                                }
                              },
                              "id": 7471,
                              "indexExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 7469,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 16782,
                                  "src": "3554:3:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 7470,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "3554:10:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3546:19:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Scheme_$7328_storage",
                                "typeString": "struct Controller.Scheme storage ref"
                              }
                            },
                            "id": 7472,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "permissions",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7327,
                            "src": "3546:31:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30783030303030303031",
                                "id": 7474,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3585:10:43",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "0x00000001"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                }
                              ],
                              "id": 7473,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3578:6:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes4_$",
                                "typeString": "type(bytes4)"
                              },
                              "typeName": "bytes4"
                            },
                            "id": 7475,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3578:18:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "3546:50:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30783030303030303031",
                              "id": 7478,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3607:10:43",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "0x00000001"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              }
                            ],
                            "id": 7477,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3600:6:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes4_$",
                              "typeString": "type(bytes4)"
                            },
                            "typeName": "bytes4"
                          },
                          "id": 7479,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3600:18:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "3546:72:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 7467,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        16785,
                        16786
                      ],
                      "referencedDeclaration": 16785,
                      "src": "3538:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 7481,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3538:81:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7482,
                  "nodeType": "ExpressionStatement",
                  "src": "3538:81:43"
                },
                {
                  "id": 7483,
                  "nodeType": "PlaceholderStatement",
                  "src": "3629:1:43"
                }
              ]
            },
            "documentation": null,
            "id": 7485,
            "name": "onlyRegisteredScheme",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 7466,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3525:2:43"
            },
            "src": "3496:141:43",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7504,
              "nodeType": "Block",
              "src": "3677:109:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 7500,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "id": 7496,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 7488,
                                "name": "schemes",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7342,
                                "src": "3695:7:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$7328_storage_$",
                                  "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                                }
                              },
                              "id": 7491,
                              "indexExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 7489,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 16782,
                                  "src": "3703:3:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 7490,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "3703:10:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3695:19:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Scheme_$7328_storage",
                                "typeString": "struct Controller.Scheme storage ref"
                              }
                            },
                            "id": 7492,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "permissions",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7327,
                            "src": "3695:31:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30783030303030303032",
                                "id": 7494,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3734:10:43",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_2_by_1",
                                  "typeString": "int_const 2"
                                },
                                "value": "0x00000002"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_2_by_1",
                                  "typeString": "int_const 2"
                                }
                              ],
                              "id": 7493,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3727:6:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes4_$",
                                "typeString": "type(bytes4)"
                              },
                              "typeName": "bytes4"
                            },
                            "id": 7495,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3727:18:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "3695:50:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30783030303030303032",
                              "id": 7498,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3756:10:43",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "0x00000002"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              }
                            ],
                            "id": 7497,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3749:6:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes4_$",
                              "typeString": "type(bytes4)"
                            },
                            "typeName": "bytes4"
                          },
                          "id": 7499,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3749:18:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "3695:72:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 7487,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        16785,
                        16786
                      ],
                      "referencedDeclaration": 16785,
                      "src": "3687:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 7501,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3687:81:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7502,
                  "nodeType": "ExpressionStatement",
                  "src": "3687:81:43"
                },
                {
                  "id": 7503,
                  "nodeType": "PlaceholderStatement",
                  "src": "3778:1:43"
                }
              ]
            },
            "documentation": null,
            "id": 7505,
            "name": "onlyRegisteringSchemes",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 7486,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3674:2:43"
            },
            "src": "3643:143:43",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7524,
              "nodeType": "Block",
              "src": "3831:109:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 7520,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "id": 7516,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 7508,
                                "name": "schemes",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7342,
                                "src": "3849:7:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$7328_storage_$",
                                  "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                                }
                              },
                              "id": 7511,
                              "indexExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 7509,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 16782,
                                  "src": "3857:3:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 7510,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "3857:10:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3849:19:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Scheme_$7328_storage",
                                "typeString": "struct Controller.Scheme storage ref"
                              }
                            },
                            "id": 7512,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "permissions",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7327,
                            "src": "3849:31:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30783030303030303034",
                                "id": 7514,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3888:10:43",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_4_by_1",
                                  "typeString": "int_const 4"
                                },
                                "value": "0x00000004"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_4_by_1",
                                  "typeString": "int_const 4"
                                }
                              ],
                              "id": 7513,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3881:6:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes4_$",
                                "typeString": "type(bytes4)"
                              },
                              "typeName": "bytes4"
                            },
                            "id": 7515,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3881:18:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "3849:50:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30783030303030303034",
                              "id": 7518,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3910:10:43",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_4_by_1",
                                "typeString": "int_const 4"
                              },
                              "value": "0x00000004"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_4_by_1",
                                "typeString": "int_const 4"
                              }
                            ],
                            "id": 7517,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3903:6:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes4_$",
                              "typeString": "type(bytes4)"
                            },
                            "typeName": "bytes4"
                          },
                          "id": 7519,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3903:18:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "3849:72:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 7507,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        16785,
                        16786
                      ],
                      "referencedDeclaration": 16785,
                      "src": "3841:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 7521,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3841:81:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7522,
                  "nodeType": "ExpressionStatement",
                  "src": "3841:81:43"
                },
                {
                  "id": 7523,
                  "nodeType": "PlaceholderStatement",
                  "src": "3932:1:43"
                }
              ]
            },
            "documentation": null,
            "id": 7525,
            "name": "onlyGlobalConstraintsScheme",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 7506,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3828:2:43"
            },
            "src": "3792:148:43",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7544,
              "nodeType": "Block",
              "src": "3977:109:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 7540,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "id": 7536,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 7528,
                                "name": "schemes",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7342,
                                "src": "3995:7:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$7328_storage_$",
                                  "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                                }
                              },
                              "id": 7531,
                              "indexExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 7529,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 16782,
                                  "src": "4003:3:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 7530,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "4003:10:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3995:19:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Scheme_$7328_storage",
                                "typeString": "struct Controller.Scheme storage ref"
                              }
                            },
                            "id": 7532,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "permissions",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7327,
                            "src": "3995:31:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30783030303030303038",
                                "id": 7534,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4034:10:43",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_8_by_1",
                                  "typeString": "int_const 8"
                                },
                                "value": "0x00000008"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_8_by_1",
                                  "typeString": "int_const 8"
                                }
                              ],
                              "id": 7533,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "4027:6:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes4_$",
                                "typeString": "type(bytes4)"
                              },
                              "typeName": "bytes4"
                            },
                            "id": 7535,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4027:18:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "3995:50:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30783030303030303038",
                              "id": 7538,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4056:10:43",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_8_by_1",
                                "typeString": "int_const 8"
                              },
                              "value": "0x00000008"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_8_by_1",
                                "typeString": "int_const 8"
                              }
                            ],
                            "id": 7537,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "4049:6:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes4_$",
                              "typeString": "type(bytes4)"
                            },
                            "typeName": "bytes4"
                          },
                          "id": 7539,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4049:18:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "3995:72:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 7527,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        16785,
                        16786
                      ],
                      "referencedDeclaration": 16785,
                      "src": "3987:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 7541,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3987:81:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7542,
                  "nodeType": "ExpressionStatement",
                  "src": "3987:81:43"
                },
                {
                  "id": 7543,
                  "nodeType": "PlaceholderStatement",
                  "src": "4078:1:43"
                }
              ]
            },
            "documentation": null,
            "id": 7545,
            "name": "onlyUpgradingScheme",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 7526,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3974:2:43"
            },
            "src": "3946:140:43",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7564,
              "nodeType": "Block",
              "src": "4125:109:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 7560,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "id": 7556,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 7548,
                                "name": "schemes",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7342,
                                "src": "4143:7:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$7328_storage_$",
                                  "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                                }
                              },
                              "id": 7551,
                              "indexExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 7549,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 16782,
                                  "src": "4151:3:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 7550,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "4151:10:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "4143:19:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Scheme_$7328_storage",
                                "typeString": "struct Controller.Scheme storage ref"
                              }
                            },
                            "id": 7552,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "permissions",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7327,
                            "src": "4143:31:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30783030303030303130",
                                "id": 7554,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4182:10:43",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_16_by_1",
                                  "typeString": "int_const 16"
                                },
                                "value": "0x00000010"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_16_by_1",
                                  "typeString": "int_const 16"
                                }
                              ],
                              "id": 7553,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "4175:6:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes4_$",
                                "typeString": "type(bytes4)"
                              },
                              "typeName": "bytes4"
                            },
                            "id": 7555,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4175:18:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "4143:50:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30783030303030303130",
                              "id": 7558,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4204:10:43",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_16_by_1",
                                "typeString": "int_const 16"
                              },
                              "value": "0x00000010"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_16_by_1",
                                "typeString": "int_const 16"
                              }
                            ],
                            "id": 7557,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "4197:6:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes4_$",
                              "typeString": "type(bytes4)"
                            },
                            "typeName": "bytes4"
                          },
                          "id": 7559,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4197:18:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "4143:72:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 7547,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        16785,
                        16786
                      ],
                      "referencedDeclaration": 16785,
                      "src": "4135:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 7561,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4135:81:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7562,
                  "nodeType": "ExpressionStatement",
                  "src": "4135:81:43"
                },
                {
                  "id": 7563,
                  "nodeType": "PlaceholderStatement",
                  "src": "4226:1:43"
                }
              ]
            },
            "documentation": null,
            "id": 7565,
            "name": "onlyGenericCallScheme",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 7546,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4122:2:43"
            },
            "src": "4092:142:43",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7584,
              "nodeType": "Block",
              "src": "4270:109:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 7580,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "id": 7576,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 7568,
                                "name": "schemes",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7342,
                                "src": "4288:7:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$7328_storage_$",
                                  "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                                }
                              },
                              "id": 7571,
                              "indexExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 7569,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 16782,
                                  "src": "4296:3:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 7570,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "4296:10:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "4288:19:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Scheme_$7328_storage",
                                "typeString": "struct Controller.Scheme storage ref"
                              }
                            },
                            "id": 7572,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "permissions",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7327,
                            "src": "4288:31:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30783030303030303130",
                                "id": 7574,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4327:10:43",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_16_by_1",
                                  "typeString": "int_const 16"
                                },
                                "value": "0x00000010"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_16_by_1",
                                  "typeString": "int_const 16"
                                }
                              ],
                              "id": 7573,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "4320:6:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes4_$",
                                "typeString": "type(bytes4)"
                              },
                              "typeName": "bytes4"
                            },
                            "id": 7575,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4320:18:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "4288:50:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30783030303030303130",
                              "id": 7578,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4349:10:43",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_16_by_1",
                                "typeString": "int_const 16"
                              },
                              "value": "0x00000010"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_16_by_1",
                                "typeString": "int_const 16"
                              }
                            ],
                            "id": 7577,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "4342:6:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes4_$",
                              "typeString": "type(bytes4)"
                            },
                            "typeName": "bytes4"
                          },
                          "id": 7579,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4342:18:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "4288:72:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 7567,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        16785,
                        16786
                      ],
                      "referencedDeclaration": 16785,
                      "src": "4280:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 7581,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4280:81:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7582,
                  "nodeType": "ExpressionStatement",
                  "src": "4280:81:43"
                },
                {
                  "id": 7583,
                  "nodeType": "PlaceholderStatement",
                  "src": "4371:1:43"
                }
              ]
            },
            "documentation": null,
            "id": 7585,
            "name": "onlyMetaDataScheme",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 7566,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4267:2:43"
            },
            "src": "4240:139:43",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7657,
              "nodeType": "Block",
              "src": "4432:533:43",
              "statements": [
                {
                  "assignments": [
                    7590
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7590,
                      "name": "idx",
                      "nodeType": "VariableDeclaration",
                      "scope": 7657,
                      "src": "4442:11:43",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7589,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4442:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7591,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4442:11:43"
                },
                {
                  "body": {
                    "id": 7622,
                    "nodeType": "Block",
                    "src": "4519:180:43",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 7612,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 16782,
                                    "src": "4636:3:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 7613,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "4636:10:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 7614,
                                      "name": "globalConstraintsPre",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7353,
                                      "src": "4648:20:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
                                        "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                      }
                                    },
                                    "id": 7616,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 7615,
                                      "name": "idx",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7590,
                                      "src": "4669:3:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "4648:25:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_GlobalConstraint_$7333_storage",
                                      "typeString": "struct Controller.GlobalConstraint storage ref"
                                    }
                                  },
                                  "id": 7617,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "params",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 7332,
                                  "src": "4648:32:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 7618,
                                  "name": "func",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7587,
                                  "src": "4682:4:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "expression": {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                              "argumentTypes": null,
                                              "id": 7605,
                                              "name": "globalConstraintsPre",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 7353,
                                              "src": "4581:20:43",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
                                                "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                              }
                                            },
                                            "id": 7607,
                                            "indexExpression": {
                                              "argumentTypes": null,
                                              "id": 7606,
                                              "name": "idx",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 7590,
                                              "src": "4602:3:43",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "4581:25:43",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_GlobalConstraint_$7333_storage",
                                              "typeString": "struct Controller.GlobalConstraint storage ref"
                                            }
                                          },
                                          "id": 7608,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "gcAddress",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 7330,
                                          "src": "4581:35:43",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        ],
                                        "id": 7604,
                                        "name": "GlobalConstraintInterface",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 9115,
                                        "src": "4555:25:43",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_contract$_GlobalConstraintInterface_$9115_$",
                                          "typeString": "type(contract GlobalConstraintInterface)"
                                        }
                                      },
                                      "id": 7609,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "4555:62:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_GlobalConstraintInterface_$9115",
                                        "typeString": "contract GlobalConstraintInterface"
                                      }
                                    }
                                  ],
                                  "id": 7610,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "4554:64:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_GlobalConstraintInterface_$9115",
                                    "typeString": "contract GlobalConstraintInterface"
                                  }
                                },
                                "id": 7611,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "pre",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 9098,
                                "src": "4554:81:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_bytes32_$_t_bytes32_$returns$_t_bool_$",
                                  "typeString": "function (address,bytes32,bytes32) external returns (bool)"
                                }
                              },
                              "id": 7619,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4554:133:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 7603,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              16785,
                              16786
                            ],
                            "referencedDeclaration": 16785,
                            "src": "4533:7:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 7620,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4533:155:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7621,
                        "nodeType": "ExpressionStatement",
                        "src": "4533:155:43"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7599,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7596,
                      "name": "idx",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7590,
                      "src": "4477:3:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7597,
                        "name": "globalConstraintsPre",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7353,
                        "src": "4483:20:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
                          "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                        }
                      },
                      "id": 7598,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "4483:27:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4477:33:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 7623,
                  "initializationExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 7594,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 7592,
                        "name": "idx",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7590,
                        "src": "4468:3:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 7593,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4474:1:43",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "4468:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 7595,
                    "nodeType": "ExpressionStatement",
                    "src": "4468:7:43"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 7601,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "4512:5:43",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 7600,
                        "name": "idx",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7590,
                        "src": "4512:3:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 7602,
                    "nodeType": "ExpressionStatement",
                    "src": "4512:5:43"
                  },
                  "nodeType": "ForStatement",
                  "src": "4463:236:43"
                },
                {
                  "id": 7624,
                  "nodeType": "PlaceholderStatement",
                  "src": "4708:1:43"
                },
                {
                  "body": {
                    "id": 7655,
                    "nodeType": "Block",
                    "src": "4776:183:43",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 7645,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 16782,
                                    "src": "4895:3:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 7646,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "4895:10:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 7647,
                                      "name": "globalConstraintsPost",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7356,
                                      "src": "4907:21:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
                                        "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                      }
                                    },
                                    "id": 7649,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 7648,
                                      "name": "idx",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7590,
                                      "src": "4929:3:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "4907:26:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_GlobalConstraint_$7333_storage",
                                      "typeString": "struct Controller.GlobalConstraint storage ref"
                                    }
                                  },
                                  "id": 7650,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "params",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 7332,
                                  "src": "4907:33:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 7651,
                                  "name": "func",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7587,
                                  "src": "4942:4:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "expression": {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                              "argumentTypes": null,
                                              "id": 7638,
                                              "name": "globalConstraintsPost",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 7356,
                                              "src": "4838:21:43",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
                                                "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                              }
                                            },
                                            "id": 7640,
                                            "indexExpression": {
                                              "argumentTypes": null,
                                              "id": 7639,
                                              "name": "idx",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 7590,
                                              "src": "4860:3:43",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "4838:26:43",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_GlobalConstraint_$7333_storage",
                                              "typeString": "struct Controller.GlobalConstraint storage ref"
                                            }
                                          },
                                          "id": 7641,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "gcAddress",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 7330,
                                          "src": "4838:36:43",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        ],
                                        "id": 7637,
                                        "name": "GlobalConstraintInterface",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 9115,
                                        "src": "4812:25:43",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_contract$_GlobalConstraintInterface_$9115_$",
                                          "typeString": "type(contract GlobalConstraintInterface)"
                                        }
                                      },
                                      "id": 7642,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "4812:63:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_GlobalConstraintInterface_$9115",
                                        "typeString": "contract GlobalConstraintInterface"
                                      }
                                    }
                                  ],
                                  "id": 7643,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "4811:65:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_GlobalConstraintInterface_$9115",
                                    "typeString": "contract GlobalConstraintInterface"
                                  }
                                },
                                "id": 7644,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "post",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 9109,
                                "src": "4811:83:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_bytes32_$_t_bytes32_$returns$_t_bool_$",
                                  "typeString": "function (address,bytes32,bytes32) external returns (bool)"
                                }
                              },
                              "id": 7652,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4811:136:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 7636,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              16785,
                              16786
                            ],
                            "referencedDeclaration": 16785,
                            "src": "4790:7:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 7653,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4790:158:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7654,
                        "nodeType": "ExpressionStatement",
                        "src": "4790:158:43"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7632,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7629,
                      "name": "idx",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7590,
                      "src": "4733:3:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7630,
                        "name": "globalConstraintsPost",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7356,
                        "src": "4739:21:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
                          "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                        }
                      },
                      "id": 7631,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "4739:28:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4733:34:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 7656,
                  "initializationExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 7627,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 7625,
                        "name": "idx",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7590,
                        "src": "4724:3:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 7626,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4730:1:43",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "4724:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 7628,
                    "nodeType": "ExpressionStatement",
                    "src": "4724:7:43"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 7634,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "4769:5:43",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 7633,
                        "name": "idx",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7590,
                        "src": "4769:3:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 7635,
                    "nodeType": "ExpressionStatement",
                    "src": "4769:5:43"
                  },
                  "nodeType": "ForStatement",
                  "src": "4719:240:43"
                }
              ]
            },
            "documentation": null,
            "id": 7658,
            "name": "onlySubjectToConstraint",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 7588,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7587,
                  "name": "func",
                  "nodeType": "VariableDeclaration",
                  "scope": 7658,
                  "src": "4418:12:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 7586,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4418:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4417:14:43"
            },
            "src": "4385:580:43",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7671,
              "nodeType": "Block",
              "src": "5011:63:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 7667,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 7663,
                          "name": "_avatar",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7660,
                          "src": "5029:7:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 7665,
                              "name": "avatar",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7344,
                              "src": "5048:6:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Avatar_$7316",
                                "typeString": "contract Avatar"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_Avatar_$7316",
                                "typeString": "contract Avatar"
                              }
                            ],
                            "id": 7664,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "5040:7:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 7666,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5040:15:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "5029:26:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 7662,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        16785,
                        16786
                      ],
                      "referencedDeclaration": 16785,
                      "src": "5021:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 7668,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5021:35:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7669,
                  "nodeType": "ExpressionStatement",
                  "src": "5021:35:43"
                },
                {
                  "id": 7670,
                  "nodeType": "PlaceholderStatement",
                  "src": "5066:1:43"
                }
              ]
            },
            "documentation": null,
            "id": 7672,
            "name": "isAvatarValid",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 7661,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7660,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 7672,
                  "src": "4994:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7659,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4994:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4993:17:43"
            },
            "src": "4971:103:43",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7704,
              "nodeType": "Block",
              "src": "5507:114:43",
              "statements": [
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7692,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16782,
                          "src": "5537:3:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 7693,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "5537:10:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7694,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7676,
                        "src": "5549:3:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7695,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7674,
                        "src": "5554:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7691,
                      "name": "MintReputation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7372,
                      "src": "5522:14:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 7696,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5522:40:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7697,
                  "nodeType": "EmitStatement",
                  "src": "5517:45:43"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7700,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7676,
                        "src": "5601:3:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7701,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7674,
                        "src": "5606:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7698,
                        "name": "nativeReputation",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7348,
                        "src": "5579:16:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Reputation_$11034",
                          "typeString": "contract Reputation"
                        }
                      },
                      "id": 7699,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10796,
                      "src": "5579:21:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 7702,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5579:35:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 7690,
                  "id": 7703,
                  "nodeType": "Return",
                  "src": "5572:42:43"
                }
              ]
            },
            "documentation": "@dev Mint `_amount` of reputation that are assigned to `_to` .\n@param  _amount amount of reputation to mint\n@param _to beneficiary address\n@return bool which represents a success",
            "id": 7705,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7681,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7680,
                  "name": "onlyRegisteredScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7485,
                  "src": "5391:20:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5391:20:43"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "hexValue": "6d696e7452657075746174696f6e",
                    "id": 7683,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "5440:16:43",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_1a219662897983599a6b9002ff87ae94af2205e820352b0884d9af0be457f05d",
                      "typeString": "literal_string \"mintReputation\""
                    },
                    "value": "mintReputation"
                  }
                ],
                "id": 7684,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7682,
                  "name": "onlySubjectToConstraint",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7658,
                  "src": "5416:23:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5416:41:43"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 7686,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7678,
                    "src": "5476:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 7687,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7685,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7672,
                  "src": "5462:13:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5462:22:43"
              }
            ],
            "name": "mintReputation",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7679,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7674,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 7705,
                  "src": "5327:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7673,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5327:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7676,
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 7705,
                  "src": "5344:11:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7675,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5344:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7678,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 7705,
                  "src": "5357:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7677,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5357:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5326:47:43"
            },
            "returnParameters": {
              "id": 7690,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7689,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7705,
                  "src": "5497:4:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7688,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5497:4:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5496:6:43"
            },
            "scope": 8772,
            "src": "5303:318:43",
            "stateMutability": "nonpayable",
            "superFunction": 8787,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7737,
              "nodeType": "Block",
              "src": "6064:118:43",
              "statements": [
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7725,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16782,
                          "src": "6094:3:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 7726,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "6094:10:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7727,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7709,
                        "src": "6106:5:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7728,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7707,
                        "src": "6113:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7724,
                      "name": "BurnReputation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7380,
                      "src": "6079:14:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 7729,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6079:42:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7730,
                  "nodeType": "EmitStatement",
                  "src": "6074:47:43"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7733,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7709,
                        "src": "6160:5:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7734,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7707,
                        "src": "6167:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7731,
                        "name": "nativeReputation",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7348,
                        "src": "6138:16:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Reputation_$11034",
                          "typeString": "contract Reputation"
                        }
                      },
                      "id": 7732,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "burn",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10855,
                      "src": "6138:21:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 7735,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6138:37:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 7723,
                  "id": 7736,
                  "nodeType": "Return",
                  "src": "6131:44:43"
                }
              ]
            },
            "documentation": "@dev Burns `_amount` of reputation from `_from`\n@param _amount amount of reputation to burn\n@param _from The address that will lose the reputation\n@return bool which represents a success",
            "id": 7738,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7714,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7713,
                  "name": "onlyRegisteredScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7485,
                  "src": "5948:20:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5948:20:43"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "hexValue": "6275726e52657075746174696f6e",
                    "id": 7716,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "5997:16:43",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_701c6a9b3c30976c567c709256889545b87c2151a8fd377ac6f0366a5ce4dd74",
                      "typeString": "literal_string \"burnReputation\""
                    },
                    "value": "burnReputation"
                  }
                ],
                "id": 7717,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7715,
                  "name": "onlySubjectToConstraint",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7658,
                  "src": "5973:23:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5973:41:43"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 7719,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7711,
                    "src": "6033:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 7720,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7718,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7672,
                  "src": "6019:13:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6019:22:43"
              }
            ],
            "name": "burnReputation",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7712,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7707,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 7738,
                  "src": "5882:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7706,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5882:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7709,
                  "name": "_from",
                  "nodeType": "VariableDeclaration",
                  "scope": 7738,
                  "src": "5899:13:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7708,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5899:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7711,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 7738,
                  "src": "5914:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7710,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5914:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5881:49:43"
            },
            "returnParameters": {
              "id": 7723,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7722,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7738,
                  "src": "6054:4:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7721,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6054:4:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6053:6:43"
            },
            "scope": 8772,
            "src": "5858:324:43",
            "stateMutability": "nonpayable",
            "superFunction": 8798,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7770,
              "nodeType": "Block",
              "src": "6576:123:43",
              "statements": [
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7758,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16782,
                          "src": "6602:3:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 7759,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "6602:10:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7760,
                        "name": "_beneficiary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7742,
                        "src": "6614:12:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7761,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7740,
                        "src": "6628:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7757,
                      "name": "MintTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7388,
                      "src": "6591:10:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 7762,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6591:45:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7763,
                  "nodeType": "EmitStatement",
                  "src": "6586:50:43"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7766,
                        "name": "_beneficiary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7742,
                        "src": "6670:12:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7767,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7740,
                        "src": "6684:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7764,
                        "name": "nativeToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7346,
                        "src": "6653:11:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_DAOToken_$9081",
                          "typeString": "contract DAOToken"
                        }
                      },
                      "id": 7765,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9080,
                      "src": "6653:16:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 7768,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6653:39:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 7756,
                  "id": 7769,
                  "nodeType": "Return",
                  "src": "6646:46:43"
                }
              ]
            },
            "documentation": "@dev mint tokens .\n@param  _amount amount of token to mint\n@param _beneficiary beneficiary address\n@return bool which represents a success",
            "id": 7771,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7747,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7746,
                  "name": "onlyRegisteredScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7485,
                  "src": "6464:20:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6464:20:43"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "hexValue": "6d696e74546f6b656e73",
                    "id": 7749,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "6513:12:43",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_21b23862db72e99373f312e35ae4594cf48c0e3462d6964e450d863eb9283120",
                      "typeString": "literal_string \"mintTokens\""
                    },
                    "value": "mintTokens"
                  }
                ],
                "id": 7750,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7748,
                  "name": "onlySubjectToConstraint",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7658,
                  "src": "6489:23:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6489:37:43"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 7752,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7744,
                    "src": "6545:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 7753,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7751,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7672,
                  "src": "6531:13:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6531:22:43"
              }
            ],
            "name": "mintTokens",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7745,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7740,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 7771,
                  "src": "6391:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7739,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6391:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7742,
                  "name": "_beneficiary",
                  "nodeType": "VariableDeclaration",
                  "scope": 7771,
                  "src": "6408:20:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7741,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6408:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7744,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 7771,
                  "src": "6430:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7743,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6430:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6390:56:43"
            },
            "returnParameters": {
              "id": 7756,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7755,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7771,
                  "src": "6566:4:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7754,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6566:4:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6565:6:43"
            },
            "scope": 8772,
            "src": "6371:328:43",
            "stateMutability": "nonpayable",
            "superFunction": 8809,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7870,
              "nodeType": "Block",
              "src": "7211:876:43",
              "statements": [
                {
                  "assignments": [
                    7793
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7793,
                      "name": "scheme",
                      "nodeType": "VariableDeclaration",
                      "scope": 7870,
                      "src": "7222:20:43",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Scheme_$7328_memory_ptr",
                        "typeString": "struct Controller.Scheme"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7792,
                        "name": "Scheme",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 7328,
                        "src": "7222:6:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Scheme_$7328_storage_ptr",
                          "typeString": "struct Controller.Scheme"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7797,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 7794,
                      "name": "schemes",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7342,
                      "src": "7245:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$7328_storage_$",
                        "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                      }
                    },
                    "id": 7796,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 7795,
                      "name": "_scheme",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7773,
                      "src": "7253:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "7245:16:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Scheme_$7328_storage",
                      "typeString": "struct Controller.Scheme storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7222:39:43"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 7819,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "id": 7815,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            },
                            "id": 7807,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30783030303030303166",
                                  "id": 7800,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "7567:10:43",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_31_by_1",
                                    "typeString": "int_const 31"
                                  },
                                  "value": "0x0000001f"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_31_by_1",
                                    "typeString": "int_const 31"
                                  }
                                ],
                                "id": 7799,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "7560:6:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes4_$",
                                  "typeString": "type(bytes4)"
                                },
                                "typeName": "bytes4"
                              },
                              "id": 7801,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7560:18:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "argumentTypes": null,
                              "components": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  },
                                  "id": 7805,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 7802,
                                    "name": "_permissions",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7777,
                                    "src": "7580:12:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes4",
                                      "typeString": "bytes4"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "^",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 7803,
                                      "name": "scheme",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7793,
                                      "src": "7593:6:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Scheme_$7328_memory_ptr",
                                        "typeString": "struct Controller.Scheme memory"
                                      }
                                    },
                                    "id": 7804,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "permissions",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 7327,
                                    "src": "7593:18:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes4",
                                      "typeString": "bytes4"
                                    }
                                  },
                                  "src": "7580:31:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                }
                              ],
                              "id": 7806,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "7579:33:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              }
                            },
                            "src": "7560:52:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "id": 7813,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "~",
                                "prefix": true,
                                "src": "7614:32:43",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 7808,
                                      "name": "schemes",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7342,
                                      "src": "7615:7:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$7328_storage_$",
                                        "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                                      }
                                    },
                                    "id": 7811,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 7809,
                                        "name": "msg",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 16782,
                                        "src": "7623:3:43",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_message",
                                          "typeString": "msg"
                                        }
                                      },
                                      "id": 7810,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "sender",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": null,
                                      "src": "7623:10:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "7615:19:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Scheme_$7328_storage",
                                      "typeString": "struct Controller.Scheme storage ref"
                                    }
                                  },
                                  "id": 7812,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "permissions",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 7327,
                                  "src": "7615:31:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              }
                            ],
                            "id": 7814,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "7613:34:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "7560:87:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 7817,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7658:1:43",
                              "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": 7816,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "7651:6:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes4_$",
                              "typeString": "type(bytes4)"
                            },
                            "typeName": "bytes4"
                          },
                          "id": 7818,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7651:9:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "7560:100:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 7798,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        16785,
                        16786
                      ],
                      "referencedDeclaration": 16785,
                      "src": "7552:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 7820,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7552:109:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7821,
                  "nodeType": "ExpressionStatement",
                  "src": "7552:109:43"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 7841,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "id": 7837,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30783030303030303166",
                                "id": 7824,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "7771:10:43",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_31_by_1",
                                  "typeString": "int_const 31"
                                },
                                "value": "0x0000001f"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_31_by_1",
                                  "typeString": "int_const 31"
                                }
                              ],
                              "id": 7823,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "7764:6:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes4_$",
                                "typeString": "type(bytes4)"
                              },
                              "typeName": "bytes4"
                            },
                            "id": 7825,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7764:18:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                },
                                "id": 7835,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 7826,
                                    "name": "scheme",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7793,
                                    "src": "7784:6:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Scheme_$7328_memory_ptr",
                                      "typeString": "struct Controller.Scheme memory"
                                    }
                                  },
                                  "id": 7827,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "permissions",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 7327,
                                  "src": "7784:18:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "id": 7833,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "UnaryOperation",
                                      "operator": "~",
                                      "prefix": true,
                                      "src": "7804:32:43",
                                      "subExpression": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 7828,
                                            "name": "schemes",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 7342,
                                            "src": "7805:7:43",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$7328_storage_$",
                                              "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                                            }
                                          },
                                          "id": 7831,
                                          "indexExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 7829,
                                              "name": "msg",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 16782,
                                              "src": "7813:3:43",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_magic_message",
                                                "typeString": "msg"
                                              }
                                            },
                                            "id": 7830,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "sender",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "7813:10:43",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address_payable",
                                              "typeString": "address payable"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "7805:19:43",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Scheme_$7328_storage",
                                            "typeString": "struct Controller.Scheme storage ref"
                                          }
                                        },
                                        "id": 7832,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "permissions",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 7327,
                                        "src": "7805:31:43",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes4",
                                          "typeString": "bytes4"
                                        }
                                      },
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                      }
                                    }
                                  ],
                                  "id": 7834,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "7803:34:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                "src": "7784:53:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              }
                            ],
                            "id": 7836,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "7783:55:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "7764:74:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 7839,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7849:1:43",
                              "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": 7838,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "7842:6:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes4_$",
                              "typeString": "type(bytes4)"
                            },
                            "typeName": "bytes4"
                          },
                          "id": 7840,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7842:9:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "7764:87:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 7822,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        16785,
                        16786
                      ],
                      "referencedDeclaration": 16785,
                      "src": "7756:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 7842,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7756:96:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7843,
                  "nodeType": "ExpressionStatement",
                  "src": "7756:96:43"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7849,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 7844,
                          "name": "schemes",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7342,
                          "src": "7896:7:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$7328_storage_$",
                            "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                          }
                        },
                        "id": 7846,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 7845,
                          "name": "_scheme",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7773,
                          "src": "7904:7:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "7896:16:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Scheme_$7328_storage",
                          "typeString": "struct Controller.Scheme storage ref"
                        }
                      },
                      "id": 7847,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "paramsHash",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7325,
                      "src": "7896:27:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 7848,
                      "name": "_paramsHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7775,
                      "src": "7926:11:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "7896:41:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 7850,
                  "nodeType": "ExpressionStatement",
                  "src": "7896:41:43"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7860,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 7851,
                          "name": "schemes",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7342,
                          "src": "7947:7:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$7328_storage_$",
                            "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                          }
                        },
                        "id": 7853,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 7852,
                          "name": "_scheme",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7773,
                          "src": "7955:7:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "7947:16:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Scheme_$7328_storage",
                          "typeString": "struct Controller.Scheme storage ref"
                        }
                      },
                      "id": 7854,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "permissions",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7327,
                      "src": "7947:28:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      },
                      "id": 7859,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 7855,
                        "name": "_permissions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7777,
                        "src": "7978:12:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "|",
                      "rightExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30783030303030303031",
                            "id": 7857,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7998:10:43",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "0x00000001"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            }
                          ],
                          "id": 7856,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "7991:6:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes4_$",
                            "typeString": "type(bytes4)"
                          },
                          "typeName": "bytes4"
                        },
                        "id": 7858,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7991:18:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "src": "7978:31:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      }
                    },
                    "src": "7947:62:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "id": 7861,
                  "nodeType": "ExpressionStatement",
                  "src": "7947:62:43"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7863,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16782,
                          "src": "8039:3:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 7864,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "8039:10:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7865,
                        "name": "_scheme",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7773,
                        "src": "8051:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 7862,
                      "name": "RegisterScheme",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7394,
                      "src": "8024:14:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 7866,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8024:35:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7867,
                  "nodeType": "EmitStatement",
                  "src": "8019:40:43"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 7868,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "8076:4:43",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 7791,
                  "id": 7869,
                  "nodeType": "Return",
                  "src": "8069:11:43"
                }
              ]
            },
            "documentation": "@dev register a scheme\n@param _scheme the address of the scheme\n@param _paramsHash a hashed configuration of the usage of the scheme\n@param _permissions the permissions the new scheme will have\n@return bool which represents a success",
            "id": 7871,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7782,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7781,
                  "name": "onlyRegisteringSchemes",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7505,
                  "src": "7093:22:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7093:22:43"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "hexValue": "7265676973746572536368656d65",
                    "id": 7784,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "7144:16:43",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_c6de131411a6b4c4ab26bd5c5ac65f44cdd792220de1a6733d66d35c3433e601",
                      "typeString": "literal_string \"registerScheme\""
                    },
                    "value": "registerScheme"
                  }
                ],
                "id": 7785,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7783,
                  "name": "onlySubjectToConstraint",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7658,
                  "src": "7120:23:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7120:41:43"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 7787,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7779,
                    "src": "7180:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 7788,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7786,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7672,
                  "src": "7166:13:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7166:22:43"
              }
            ],
            "name": "registerScheme",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7780,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7773,
                  "name": "_scheme",
                  "nodeType": "VariableDeclaration",
                  "scope": 7871,
                  "src": "7000:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7772,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7000:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7775,
                  "name": "_paramsHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 7871,
                  "src": "7017:19:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 7774,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7017:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7777,
                  "name": "_permissions",
                  "nodeType": "VariableDeclaration",
                  "scope": 7871,
                  "src": "7038:19:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 7776,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "7038:6:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7779,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 7871,
                  "src": "7059:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7778,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7059:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6999:76:43"
            },
            "returnParameters": {
              "id": 7791,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7790,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7871,
                  "src": "7201:4:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7789,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "7201:4:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7200:6:43"
            },
            "scope": 8772,
            "src": "6976:1111:43",
            "stateMutability": "nonpayable",
            "superFunction": 8822,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7934,
              "nodeType": "Block",
              "src": "8434:440:43",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 7892,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7889,
                          "name": "_scheme",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7873,
                          "src": "8508:7:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 7888,
                        "name": "_isSchemeRegistered",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8771,
                        "src": "8488:19:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                          "typeString": "function (address) view returns (bool)"
                        }
                      },
                      "id": 7890,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8488:28:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "66616c7365",
                      "id": 7891,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8520:5:43",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "false"
                    },
                    "src": "8488:37:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7896,
                  "nodeType": "IfStatement",
                  "src": "8484:80:43",
                  "trueBody": {
                    "id": 7895,
                    "nodeType": "Block",
                    "src": "8527:37:43",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 7893,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "8548:5:43",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 7887,
                        "id": 7894,
                        "nodeType": "Return",
                        "src": "8541:12:43"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 7918,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "id": 7914,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30783030303030303166",
                                "id": 7899,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "8650:10:43",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_31_by_1",
                                  "typeString": "int_const 31"
                                },
                                "value": "0x0000001f"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_31_by_1",
                                  "typeString": "int_const 31"
                                }
                              ],
                              "id": 7898,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "8643:6:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes4_$",
                                "typeString": "type(bytes4)"
                              },
                              "typeName": "bytes4"
                            },
                            "id": 7900,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8643:18:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                },
                                "id": 7912,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 7901,
                                      "name": "schemes",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7342,
                                      "src": "8663:7:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$7328_storage_$",
                                        "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                                      }
                                    },
                                    "id": 7903,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 7902,
                                      "name": "_scheme",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7873,
                                      "src": "8671:7:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "8663:16:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Scheme_$7328_storage",
                                      "typeString": "struct Controller.Scheme storage ref"
                                    }
                                  },
                                  "id": 7904,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "permissions",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 7327,
                                  "src": "8663:28:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "id": 7910,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "UnaryOperation",
                                      "operator": "~",
                                      "prefix": true,
                                      "src": "8693:32:43",
                                      "subExpression": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 7905,
                                            "name": "schemes",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 7342,
                                            "src": "8694:7:43",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$7328_storage_$",
                                              "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                                            }
                                          },
                                          "id": 7908,
                                          "indexExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 7906,
                                              "name": "msg",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 16782,
                                              "src": "8702:3:43",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_magic_message",
                                                "typeString": "msg"
                                              }
                                            },
                                            "id": 7907,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "sender",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "8702:10:43",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address_payable",
                                              "typeString": "address payable"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "8694:19:43",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Scheme_$7328_storage",
                                            "typeString": "struct Controller.Scheme storage ref"
                                          }
                                        },
                                        "id": 7909,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "permissions",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 7327,
                                        "src": "8694:31:43",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes4",
                                          "typeString": "bytes4"
                                        }
                                      },
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                      }
                                    }
                                  ],
                                  "id": 7911,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "8692:34:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                "src": "8663:63:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              }
                            ],
                            "id": 7913,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "8662:65:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "8643:84:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 7916,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8738:1:43",
                              "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": 7915,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "8731:6:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes4_$",
                              "typeString": "type(bytes4)"
                            },
                            "typeName": "bytes4"
                          },
                          "id": 7917,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8731:9:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "8643:97:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 7897,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        16785,
                        16786
                      ],
                      "referencedDeclaration": 16785,
                      "src": "8635:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 7919,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8635:106:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7920,
                  "nodeType": "ExpressionStatement",
                  "src": "8635:106:43"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7922,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16782,
                          "src": "8793:3:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 7923,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "8793:10:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7924,
                        "name": "_scheme",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7873,
                        "src": "8805:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 7921,
                      "name": "UnregisterScheme",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7400,
                      "src": "8776:16:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 7925,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8776:37:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7926,
                  "nodeType": "EmitStatement",
                  "src": "8771:42:43"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7930,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "8823:23:43",
                    "subExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 7927,
                        "name": "schemes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7342,
                        "src": "8830:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$7328_storage_$",
                          "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                        }
                      },
                      "id": 7929,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 7928,
                        "name": "_scheme",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7873,
                        "src": "8838:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "8830:16:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Scheme_$7328_storage",
                        "typeString": "struct Controller.Scheme storage ref"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7931,
                  "nodeType": "ExpressionStatement",
                  "src": "8823:23:43"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 7932,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "8863:4:43",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 7887,
                  "id": 7933,
                  "nodeType": "Return",
                  "src": "8856:11:43"
                }
              ]
            },
            "documentation": "@dev unregister a scheme\n@param _scheme the address of the scheme\n@return bool which represents a success",
            "id": 7935,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7878,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7877,
                  "name": "onlyRegisteringSchemes",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7505,
                  "src": "8314:22:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8314:22:43"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "hexValue": "756e7265676973746572536368656d65",
                    "id": 7880,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "8365:18:43",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_b691bb484251ef01d241995950a354987a3e0c00fe2381f87b564ec41aab942c",
                      "typeString": "literal_string \"unregisterScheme\""
                    },
                    "value": "unregisterScheme"
                  }
                ],
                "id": 7881,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7879,
                  "name": "onlySubjectToConstraint",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7658,
                  "src": "8341:23:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8341:43:43"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 7883,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7875,
                    "src": "8403:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 7884,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7882,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7672,
                  "src": "8389:13:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8389:22:43"
              }
            ],
            "name": "unregisterScheme",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7876,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7873,
                  "name": "_scheme",
                  "nodeType": "VariableDeclaration",
                  "scope": 7935,
                  "src": "8263:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7872,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8263:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7875,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 7935,
                  "src": "8280:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7874,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8280:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8261:35:43"
            },
            "returnParameters": {
              "id": 7887,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7886,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7935,
                  "src": "8424:4:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7885,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8424:4:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8423:6:43"
            },
            "scope": 8772,
            "src": "8236:638:43",
            "stateMutability": "nonpayable",
            "superFunction": 8831,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7970,
              "nodeType": "Block",
              "src": "9073:211:43",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 7950,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 7946,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16782,
                            "src": "9107:3:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 7947,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "9107:10:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        ],
                        "id": 7945,
                        "name": "_isSchemeRegistered",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8771,
                        "src": "9087:19:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                          "typeString": "function (address) view returns (bool)"
                        }
                      },
                      "id": 7948,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9087:31:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "66616c7365",
                      "id": 7949,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9122:5:43",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "false"
                    },
                    "src": "9087:40:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7954,
                  "nodeType": "IfStatement",
                  "src": "9083:83:43",
                  "trueBody": {
                    "id": 7953,
                    "nodeType": "Block",
                    "src": "9129:37:43",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 7951,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "9150:5:43",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 7944,
                        "id": 7952,
                        "nodeType": "Return",
                        "src": "9143:12:43"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7959,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "9175:26:43",
                    "subExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 7955,
                        "name": "schemes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7342,
                        "src": "9182:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$7328_storage_$",
                          "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                        }
                      },
                      "id": 7958,
                      "indexExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7956,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16782,
                          "src": "9190:3:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 7957,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "9190:10:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "9182:19:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Scheme_$7328_storage",
                        "typeString": "struct Controller.Scheme storage ref"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7960,
                  "nodeType": "ExpressionStatement",
                  "src": "9175:26:43"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7962,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16782,
                          "src": "9233:3:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 7963,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "9233:10:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7964,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16782,
                          "src": "9245:3:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 7965,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "9245:10:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 7961,
                      "name": "UnregisterScheme",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7400,
                      "src": "9216:16:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 7966,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9216:40:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7967,
                  "nodeType": "EmitStatement",
                  "src": "9211:45:43"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 7968,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "9273:4:43",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 7944,
                  "id": 7969,
                  "nodeType": "Return",
                  "src": "9266:11:43"
                }
              ]
            },
            "documentation": "@dev unregister the caller's scheme\n@return bool which represents a success",
            "id": 7971,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 7940,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7937,
                    "src": "9050:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 7941,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7939,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7672,
                  "src": "9036:13:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9036:22:43"
              }
            ],
            "name": "unregisterSelf",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7938,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7937,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 7971,
                  "src": "9010:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7936,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9010:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9009:17:43"
            },
            "returnParameters": {
              "id": 7944,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7943,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7971,
                  "src": "9067:4:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7942,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "9067:4:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9066:6:43"
            },
            "scope": 8772,
            "src": "8986:298:43",
            "stateMutability": "nonpayable",
            "superFunction": 8838,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8113,
              "nodeType": "Block",
              "src": "9717:1417:43",
              "statements": [
                {
                  "assignments": [
                    7990
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7990,
                      "name": "when",
                      "nodeType": "VariableDeclaration",
                      "scope": 8113,
                      "src": "9727:40:43",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_CallPhase_$9087",
                        "typeString": "enum GlobalConstraintInterface.CallPhase"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7989,
                        "name": "GlobalConstraintInterface.CallPhase",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 9087,
                        "src": "9727:35:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_CallPhase_$9087",
                          "typeString": "enum GlobalConstraintInterface.CallPhase"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7996,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7992,
                            "name": "_globalConstraint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7973,
                            "src": "9796:17:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 7991,
                          "name": "GlobalConstraintInterface",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9115,
                          "src": "9770:25:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_GlobalConstraintInterface_$9115_$",
                            "typeString": "type(contract GlobalConstraintInterface)"
                          }
                        },
                        "id": 7993,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9770:44:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GlobalConstraintInterface_$9115",
                          "typeString": "contract GlobalConstraintInterface"
                        }
                      },
                      "id": 7994,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "when",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9114,
                      "src": "9770:49:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$__$returns$_t_enum$_CallPhase_$9087_$",
                        "typeString": "function () external returns (enum GlobalConstraintInterface.CallPhase)"
                      }
                    },
                    "id": 7995,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9770:51:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_CallPhase_$9087",
                      "typeString": "enum GlobalConstraintInterface.CallPhase"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9727:94:43"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 8009,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_CallPhase_$9087",
                            "typeString": "enum GlobalConstraintInterface.CallPhase"
                          },
                          "id": 8001,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 7997,
                            "name": "when",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7990,
                            "src": "9836:4:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$9087",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 7998,
                                "name": "GlobalConstraintInterface",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9115,
                                "src": "9844:25:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_GlobalConstraintInterface_$9115_$",
                                  "typeString": "type(contract GlobalConstraintInterface)"
                                }
                              },
                              "id": 7999,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "CallPhase",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9087,
                              "src": "9844:35:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_CallPhase_$9087_$",
                                "typeString": "type(enum GlobalConstraintInterface.CallPhase)"
                              }
                            },
                            "id": 8000,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "Pre",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "9844:39:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$9087",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "src": "9836:47:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 8002,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "9835:49:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_CallPhase_$9087",
                            "typeString": "enum GlobalConstraintInterface.CallPhase"
                          },
                          "id": 8007,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 8003,
                            "name": "when",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7990,
                            "src": "9900:4:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$9087",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8004,
                                "name": "GlobalConstraintInterface",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9115,
                                "src": "9908:25:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_GlobalConstraintInterface_$9115_$",
                                  "typeString": "type(contract GlobalConstraintInterface)"
                                }
                              },
                              "id": 8005,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "CallPhase",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9087,
                              "src": "9908:35:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_CallPhase_$9087_$",
                                "typeString": "type(enum GlobalConstraintInterface.CallPhase)"
                              }
                            },
                            "id": 8006,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "PreAndPost",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "9908:46:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$9087",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "src": "9900:54:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 8008,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "9899:56:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "9835:120:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8050,
                  "nodeType": "IfStatement",
                  "src": "9831:596:43",
                  "trueBody": {
                    "id": 8049,
                    "nodeType": "Block",
                    "src": "9957:470:43",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "id": 8014,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "9975:61:43",
                          "subExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 8010,
                                "name": "globalConstraintsRegisterPre",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7360,
                                "src": "9976:28:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$7338_storage_$",
                                  "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                                }
                              },
                              "id": 8012,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 8011,
                                "name": "_globalConstraint",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7973,
                                "src": "10005:17:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "9976:47:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_storage",
                                "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                              }
                            },
                            "id": 8013,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "isRegistered",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7335,
                            "src": "9976:60:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 8047,
                          "nodeType": "Block",
                          "src": "10292:125:43",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 8045,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 8037,
                                      "name": "globalConstraintsPre",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7353,
                                      "src": "10310:20:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
                                        "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                      }
                                    },
                                    "id": 8042,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 8038,
                                          "name": "globalConstraintsRegisterPre",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7360,
                                          "src": "10331:28:43",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$7338_storage_$",
                                            "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                                          }
                                        },
                                        "id": 8040,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "id": 8039,
                                          "name": "_globalConstraint",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7973,
                                          "src": "10360:17:43",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "10331:47:43",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_storage",
                                          "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                                        }
                                      },
                                      "id": 8041,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "index",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 7337,
                                      "src": "10331:53:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "10310:75:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_GlobalConstraint_$7333_storage",
                                      "typeString": "struct Controller.GlobalConstraint storage ref"
                                    }
                                  },
                                  "id": 8043,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "params",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 7332,
                                  "src": "10310:82:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 8044,
                                  "name": "_params",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7975,
                                  "src": "10395:7:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "src": "10310:92:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "id": 8046,
                              "nodeType": "ExpressionStatement",
                              "src": "10310:92:43"
                            }
                          ]
                        },
                        "id": 8048,
                        "nodeType": "IfStatement",
                        "src": "9971:446:43",
                        "trueBody": {
                          "id": 8036,
                          "nodeType": "Block",
                          "src": "10038:249:43",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 8019,
                                        "name": "_globalConstraint",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7973,
                                        "src": "10099:17:43",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "id": 8020,
                                        "name": "_params",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7975,
                                        "src": "10118:7:43",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      ],
                                      "id": 8018,
                                      "name": "GlobalConstraint",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7333,
                                      "src": "10082:16:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_struct$_GlobalConstraint_$7333_storage_ptr_$",
                                        "typeString": "type(struct Controller.GlobalConstraint storage pointer)"
                                      }
                                    },
                                    "id": 8021,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "structConstructorCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "10082:44:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_GlobalConstraint_$7333_memory",
                                      "typeString": "struct Controller.GlobalConstraint memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_struct$_GlobalConstraint_$7333_memory",
                                      "typeString": "struct Controller.GlobalConstraint memory"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 8015,
                                    "name": "globalConstraintsPre",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7353,
                                    "src": "10056:20:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
                                      "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                    }
                                  },
                                  "id": 8017,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "push",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "10056:25:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_arraypush_nonpayable$_t_struct$_GlobalConstraint_$7333_storage_$returns$_t_uint256_$",
                                    "typeString": "function (struct Controller.GlobalConstraint storage ref) returns (uint256)"
                                  }
                                },
                                "id": 8022,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10056:71:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 8023,
                              "nodeType": "ExpressionStatement",
                              "src": "10056:71:43"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 8034,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 8024,
                                    "name": "globalConstraintsRegisterPre",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7360,
                                    "src": "10145:28:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$7338_storage_$",
                                      "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                                    }
                                  },
                                  "id": 8026,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 8025,
                                    "name": "_globalConstraint",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7973,
                                    "src": "10174:17:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "10145:47:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_storage",
                                    "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "hexValue": "74727565",
                                      "id": 8028,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "bool",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "10236:4:43",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      "value": "true"
                                    },
                                    {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 8032,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 8029,
                                          "name": "globalConstraintsPre",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7353,
                                          "src": "10242:20:43",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
                                            "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                          }
                                        },
                                        "id": 8030,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "length",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": null,
                                        "src": "10242:27:43",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "-",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "31",
                                        "id": 8031,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "10270:1:43",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "10242:29:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 8027,
                                    "name": "GlobalConstraintRegister",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7338,
                                    "src": "10211:24:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_struct$_GlobalConstraintRegister_$7338_storage_ptr_$",
                                      "typeString": "type(struct Controller.GlobalConstraintRegister storage pointer)"
                                    }
                                  },
                                  "id": 8033,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "structConstructorCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "10211:61:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_memory",
                                    "typeString": "struct Controller.GlobalConstraintRegister memory"
                                  }
                                },
                                "src": "10145:127:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_storage",
                                  "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                                }
                              },
                              "id": 8035,
                              "nodeType": "ExpressionStatement",
                              "src": "10145:127:43"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 8063,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_CallPhase_$9087",
                            "typeString": "enum GlobalConstraintInterface.CallPhase"
                          },
                          "id": 8055,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 8051,
                            "name": "when",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7990,
                            "src": "10441:4:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$9087",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8052,
                                "name": "GlobalConstraintInterface",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9115,
                                "src": "10449:25:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_GlobalConstraintInterface_$9115_$",
                                  "typeString": "type(contract GlobalConstraintInterface)"
                                }
                              },
                              "id": 8053,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "CallPhase",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9087,
                              "src": "10449:35:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_CallPhase_$9087_$",
                                "typeString": "type(enum GlobalConstraintInterface.CallPhase)"
                              }
                            },
                            "id": 8054,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "Post",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "10449:40:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$9087",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "src": "10441:48:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 8056,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "10440:50:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_CallPhase_$9087",
                            "typeString": "enum GlobalConstraintInterface.CallPhase"
                          },
                          "id": 8061,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 8057,
                            "name": "when",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7990,
                            "src": "10506:4:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$9087",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8058,
                                "name": "GlobalConstraintInterface",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9115,
                                "src": "10514:25:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_GlobalConstraintInterface_$9115_$",
                                  "typeString": "type(contract GlobalConstraintInterface)"
                                }
                              },
                              "id": 8059,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "CallPhase",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9087,
                              "src": "10514:35:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_CallPhase_$9087_$",
                                "typeString": "type(enum GlobalConstraintInterface.CallPhase)"
                              }
                            },
                            "id": 8060,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "PreAndPost",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "10514:46:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$9087",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "src": "10506:54:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 8062,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "10505:56:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "10440:121:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8104,
                  "nodeType": "IfStatement",
                  "src": "10436:603:43",
                  "trueBody": {
                    "id": 8103,
                    "nodeType": "Block",
                    "src": "10563:476:43",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "id": 8068,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "10581:62:43",
                          "subExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 8064,
                                "name": "globalConstraintsRegisterPost",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7364,
                                "src": "10582:29:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$7338_storage_$",
                                  "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                                }
                              },
                              "id": 8066,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 8065,
                                "name": "_globalConstraint",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7973,
                                "src": "10612:17:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "10582:48:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_storage",
                                "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                              }
                            },
                            "id": 8067,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "isRegistered",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7335,
                            "src": "10582:61:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 8101,
                          "nodeType": "Block",
                          "src": "10902:127:43",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 8099,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 8091,
                                      "name": "globalConstraintsPost",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7356,
                                      "src": "10920:21:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
                                        "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                      }
                                    },
                                    "id": 8096,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 8092,
                                          "name": "globalConstraintsRegisterPost",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7364,
                                          "src": "10942:29:43",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$7338_storage_$",
                                            "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                                          }
                                        },
                                        "id": 8094,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "id": 8093,
                                          "name": "_globalConstraint",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7973,
                                          "src": "10972:17:43",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "10942:48:43",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_storage",
                                          "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                                        }
                                      },
                                      "id": 8095,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "index",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 7337,
                                      "src": "10942:54:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "10920:77:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_GlobalConstraint_$7333_storage",
                                      "typeString": "struct Controller.GlobalConstraint storage ref"
                                    }
                                  },
                                  "id": 8097,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "params",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 7332,
                                  "src": "10920:84:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 8098,
                                  "name": "_params",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7975,
                                  "src": "11007:7:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "src": "10920:94:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "id": 8100,
                              "nodeType": "ExpressionStatement",
                              "src": "10920:94:43"
                            }
                          ]
                        },
                        "id": 8102,
                        "nodeType": "IfStatement",
                        "src": "10577:452:43",
                        "trueBody": {
                          "id": 8090,
                          "nodeType": "Block",
                          "src": "10645:252:43",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 8073,
                                        "name": "_globalConstraint",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7973,
                                        "src": "10707:17:43",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "id": 8074,
                                        "name": "_params",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7975,
                                        "src": "10726:7:43",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      ],
                                      "id": 8072,
                                      "name": "GlobalConstraint",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7333,
                                      "src": "10690:16:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_struct$_GlobalConstraint_$7333_storage_ptr_$",
                                        "typeString": "type(struct Controller.GlobalConstraint storage pointer)"
                                      }
                                    },
                                    "id": 8075,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "structConstructorCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "10690:44:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_GlobalConstraint_$7333_memory",
                                      "typeString": "struct Controller.GlobalConstraint memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_struct$_GlobalConstraint_$7333_memory",
                                      "typeString": "struct Controller.GlobalConstraint memory"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 8069,
                                    "name": "globalConstraintsPost",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7356,
                                    "src": "10663:21:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
                                      "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                    }
                                  },
                                  "id": 8071,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "push",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "10663:26:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_arraypush_nonpayable$_t_struct$_GlobalConstraint_$7333_storage_$returns$_t_uint256_$",
                                    "typeString": "function (struct Controller.GlobalConstraint storage ref) returns (uint256)"
                                  }
                                },
                                "id": 8076,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10663:72:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 8077,
                              "nodeType": "ExpressionStatement",
                              "src": "10663:72:43"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 8088,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 8078,
                                    "name": "globalConstraintsRegisterPost",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7364,
                                    "src": "10753:29:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$7338_storage_$",
                                      "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                                    }
                                  },
                                  "id": 8080,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 8079,
                                    "name": "_globalConstraint",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7973,
                                    "src": "10783:17:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "10753:48:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_storage",
                                    "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "hexValue": "74727565",
                                      "id": 8082,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "bool",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "10845:4:43",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      "value": "true"
                                    },
                                    {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 8086,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 8083,
                                          "name": "globalConstraintsPost",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7356,
                                          "src": "10851:21:43",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
                                            "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                          }
                                        },
                                        "id": 8084,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "length",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": null,
                                        "src": "10851:28:43",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "-",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "31",
                                        "id": 8085,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "10880:1:43",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "10851:30:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 8081,
                                    "name": "GlobalConstraintRegister",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7338,
                                    "src": "10820:24:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_struct$_GlobalConstraintRegister_$7338_storage_ptr_$",
                                      "typeString": "type(struct Controller.GlobalConstraintRegister storage pointer)"
                                    }
                                  },
                                  "id": 8087,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "structConstructorCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "10820:62:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_memory",
                                    "typeString": "struct Controller.GlobalConstraintRegister memory"
                                  }
                                },
                                "src": "10753:129:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_storage",
                                  "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                                }
                              },
                              "id": 8089,
                              "nodeType": "ExpressionStatement",
                              "src": "10753:129:43"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8106,
                        "name": "_globalConstraint",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7973,
                        "src": "11073:17:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8107,
                        "name": "_params",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7975,
                        "src": "11092:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8108,
                        "name": "when",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7990,
                        "src": "11101:4:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_CallPhase_$9087",
                          "typeString": "enum GlobalConstraintInterface.CallPhase"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_enum$_CallPhase_$9087",
                          "typeString": "enum GlobalConstraintInterface.CallPhase"
                        }
                      ],
                      "id": 8105,
                      "name": "AddGlobalConstraint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7414,
                      "src": "11053:19:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes32_$_t_enum$_CallPhase_$9087_$returns$__$",
                        "typeString": "function (address,bytes32,enum GlobalConstraintInterface.CallPhase)"
                      }
                    },
                    "id": 8109,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11053:53:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8110,
                  "nodeType": "EmitStatement",
                  "src": "11048:58:43"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 8111,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "11123:4:43",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 7986,
                  "id": 8112,
                  "nodeType": "Return",
                  "src": "11116:11:43"
                }
              ]
            },
            "documentation": "@dev add or update Global Constraint\n@param _globalConstraint the address of the global constraint to be added.\n@param _params the constraint parameters hash.\n@return bool which represents a success",
            "id": 8114,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7980,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7979,
                  "name": "onlyGlobalConstraintsScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7525,
                  "src": "9640:27:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9640:27:43"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 7982,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7977,
                    "src": "9686:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 7983,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7981,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7672,
                  "src": "9672:13:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9672:22:43"
              }
            ],
            "name": "addGlobalConstraint",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7978,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7973,
                  "name": "_globalConstraint",
                  "nodeType": "VariableDeclaration",
                  "scope": 8114,
                  "src": "9562:25:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7972,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9562:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7975,
                  "name": "_params",
                  "nodeType": "VariableDeclaration",
                  "scope": 8114,
                  "src": "9589:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 7974,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "9589:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7977,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 8114,
                  "src": "9606:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7976,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9606:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9561:61:43"
            },
            "returnParameters": {
              "id": 7986,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7985,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8114,
                  "src": "9707:4:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7984,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "9707:4:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9706:6:43"
            },
            "scope": 8772,
            "src": "9533:1601:43",
            "stateMutability": "nonpayable",
            "superFunction": 8849,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8310,
              "nodeType": "Block",
              "src": "11544:2234:43",
              "statements": [
                {
                  "assignments": [
                    8129
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8129,
                      "name": "globalConstraintRegister",
                      "nodeType": "VariableDeclaration",
                      "scope": 8310,
                      "src": "11554:56:43",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_memory_ptr",
                        "typeString": "struct Controller.GlobalConstraintRegister"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 8128,
                        "name": "GlobalConstraintRegister",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 7338,
                        "src": "11554:24:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_storage_ptr",
                          "typeString": "struct Controller.GlobalConstraintRegister"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8130,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11554:56:43"
                },
                {
                  "assignments": [
                    8132
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8132,
                      "name": "globalConstraint",
                      "nodeType": "VariableDeclaration",
                      "scope": 8310,
                      "src": "11620:40:43",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_GlobalConstraint_$7333_memory_ptr",
                        "typeString": "struct Controller.GlobalConstraint"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 8131,
                        "name": "GlobalConstraint",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 7333,
                        "src": "11620:16:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_GlobalConstraint_$7333_storage_ptr",
                          "typeString": "struct Controller.GlobalConstraint"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8133,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11620:40:43"
                },
                {
                  "assignments": [
                    8137
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8137,
                      "name": "when",
                      "nodeType": "VariableDeclaration",
                      "scope": 8310,
                      "src": "11670:40:43",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_CallPhase_$9087",
                        "typeString": "enum GlobalConstraintInterface.CallPhase"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 8136,
                        "name": "GlobalConstraintInterface.CallPhase",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 9087,
                        "src": "11670:35:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_CallPhase_$9087",
                          "typeString": "enum GlobalConstraintInterface.CallPhase"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8143,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 8139,
                            "name": "_globalConstraint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8116,
                            "src": "11739:17:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 8138,
                          "name": "GlobalConstraintInterface",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9115,
                          "src": "11713:25:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_GlobalConstraintInterface_$9115_$",
                            "typeString": "type(contract GlobalConstraintInterface)"
                          }
                        },
                        "id": 8140,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11713:44:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GlobalConstraintInterface_$9115",
                          "typeString": "contract GlobalConstraintInterface"
                        }
                      },
                      "id": 8141,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "when",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9114,
                      "src": "11713:49:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$__$returns$_t_enum$_CallPhase_$9087_$",
                        "typeString": "function () external returns (enum GlobalConstraintInterface.CallPhase)"
                      }
                    },
                    "id": 8142,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11713:51:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_CallPhase_$9087",
                      "typeString": "enum GlobalConstraintInterface.CallPhase"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11670:94:43"
                },
                {
                  "assignments": [
                    8145
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8145,
                      "name": "retVal",
                      "nodeType": "VariableDeclaration",
                      "scope": 8310,
                      "src": "11774:11:43",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 8144,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "11774:4:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8147,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "66616c7365",
                    "id": 8146,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "11788:5:43",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11774:19:43"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 8160,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_CallPhase_$9087",
                            "typeString": "enum GlobalConstraintInterface.CallPhase"
                          },
                          "id": 8152,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 8148,
                            "name": "when",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8137,
                            "src": "11809:4:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$9087",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8149,
                                "name": "GlobalConstraintInterface",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9115,
                                "src": "11817:25:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_GlobalConstraintInterface_$9115_$",
                                  "typeString": "type(contract GlobalConstraintInterface)"
                                }
                              },
                              "id": 8150,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "CallPhase",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9087,
                              "src": "11817:35:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_CallPhase_$9087_$",
                                "typeString": "type(enum GlobalConstraintInterface.CallPhase)"
                              }
                            },
                            "id": 8151,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "Pre",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "11817:39:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$9087",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "src": "11809:47:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 8153,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "11808:49:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_CallPhase_$9087",
                            "typeString": "enum GlobalConstraintInterface.CallPhase"
                          },
                          "id": 8158,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 8154,
                            "name": "when",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8137,
                            "src": "11873:4:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$9087",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8155,
                                "name": "GlobalConstraintInterface",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9115,
                                "src": "11881:25:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_GlobalConstraintInterface_$9115_$",
                                  "typeString": "type(contract GlobalConstraintInterface)"
                                }
                              },
                              "id": 8156,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "CallPhase",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9087,
                              "src": "11881:35:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_CallPhase_$9087_$",
                                "typeString": "type(enum GlobalConstraintInterface.CallPhase)"
                              }
                            },
                            "id": 8157,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "PreAndPost",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "11881:46:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$9087",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "src": "11873:54:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 8159,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "11872:56:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "11808:120:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8220,
                  "nodeType": "IfStatement",
                  "src": "11804:852:43",
                  "trueBody": {
                    "id": 8219,
                    "nodeType": "Block",
                    "src": "11930:726:43",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8165,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 8161,
                            "name": "globalConstraintRegister",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8129,
                            "src": "11944:24:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_memory_ptr",
                              "typeString": "struct Controller.GlobalConstraintRegister memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 8162,
                              "name": "globalConstraintsRegisterPre",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7360,
                              "src": "11971:28:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$7338_storage_$",
                                "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                              }
                            },
                            "id": 8164,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 8163,
                              "name": "_globalConstraint",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8116,
                              "src": "12000:17:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "11971:47:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_storage",
                              "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                            }
                          },
                          "src": "11944:74:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_memory_ptr",
                            "typeString": "struct Controller.GlobalConstraintRegister memory"
                          }
                        },
                        "id": 8166,
                        "nodeType": "ExpressionStatement",
                        "src": "11944:74:43"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8167,
                            "name": "globalConstraintRegister",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8129,
                            "src": "12036:24:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_memory_ptr",
                              "typeString": "struct Controller.GlobalConstraintRegister memory"
                            }
                          },
                          "id": 8168,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "isRegistered",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7335,
                          "src": "12036:37:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 8218,
                        "nodeType": "IfStatement",
                        "src": "12032:614:43",
                        "trueBody": {
                          "id": 8217,
                          "nodeType": "Block",
                          "src": "12075:571:43",
                          "statements": [
                            {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 8175,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 8169,
                                    "name": "globalConstraintRegister",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8129,
                                    "src": "12097:24:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_memory_ptr",
                                      "typeString": "struct Controller.GlobalConstraintRegister memory"
                                    }
                                  },
                                  "id": 8170,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "index",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 7337,
                                  "src": "12097:30:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 8174,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 8171,
                                      "name": "globalConstraintsPre",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7353,
                                      "src": "12130:20:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
                                        "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                      }
                                    },
                                    "id": 8172,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "length",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "12130:27:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "31",
                                    "id": 8173,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "12158:1:43",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "src": "12130:29:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "12097:62:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": null,
                              "id": 8202,
                              "nodeType": "IfStatement",
                              "src": "12093:389:43",
                              "trueBody": {
                                "id": 8201,
                                "nodeType": "Block",
                                "src": "12161:321:43",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 8183,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 8176,
                                        "name": "globalConstraint",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8132,
                                        "src": "12183:16:43",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_GlobalConstraint_$7333_memory_ptr",
                                          "typeString": "struct Controller.GlobalConstraint memory"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 8177,
                                          "name": "globalConstraintsPre",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7353,
                                          "src": "12202:20:43",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
                                            "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                          }
                                        },
                                        "id": 8182,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 8181,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 8178,
                                              "name": "globalConstraintsPre",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 7353,
                                              "src": "12223:20:43",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
                                                "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                              }
                                            },
                                            "id": 8179,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "length",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "12223:27:43",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "-",
                                          "rightExpression": {
                                            "argumentTypes": null,
                                            "hexValue": "31",
                                            "id": 8180,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "12251:1:43",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_1_by_1",
                                              "typeString": "int_const 1"
                                            },
                                            "value": "1"
                                          },
                                          "src": "12223:29:43",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "12202:51:43",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_GlobalConstraint_$7333_storage",
                                          "typeString": "struct Controller.GlobalConstraint storage ref"
                                        }
                                      },
                                      "src": "12183:70:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_GlobalConstraint_$7333_memory_ptr",
                                        "typeString": "struct Controller.GlobalConstraint memory"
                                      }
                                    },
                                    "id": 8184,
                                    "nodeType": "ExpressionStatement",
                                    "src": "12183:70:43"
                                  },
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 8190,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 8185,
                                          "name": "globalConstraintsPre",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7353,
                                          "src": "12275:20:43",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
                                            "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                          }
                                        },
                                        "id": 8188,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 8186,
                                            "name": "globalConstraintRegister",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8129,
                                            "src": "12296:24:43",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_memory_ptr",
                                              "typeString": "struct Controller.GlobalConstraintRegister memory"
                                            }
                                          },
                                          "id": 8187,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "index",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 7337,
                                          "src": "12296:30:43",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "nodeType": "IndexAccess",
                                        "src": "12275:52:43",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_GlobalConstraint_$7333_storage",
                                          "typeString": "struct Controller.GlobalConstraint storage ref"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "id": 8189,
                                        "name": "globalConstraint",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8132,
                                        "src": "12330:16:43",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_GlobalConstraint_$7333_memory_ptr",
                                          "typeString": "struct Controller.GlobalConstraint memory"
                                        }
                                      },
                                      "src": "12275:71:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_GlobalConstraint_$7333_storage",
                                        "typeString": "struct Controller.GlobalConstraint storage ref"
                                      }
                                    },
                                    "id": 8191,
                                    "nodeType": "ExpressionStatement",
                                    "src": "12275:71:43"
                                  },
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 8199,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 8192,
                                            "name": "globalConstraintsRegisterPre",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 7360,
                                            "src": "12368:28:43",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$7338_storage_$",
                                              "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                                            }
                                          },
                                          "id": 8195,
                                          "indexExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 8193,
                                              "name": "globalConstraint",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 8132,
                                              "src": "12397:16:43",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_GlobalConstraint_$7333_memory_ptr",
                                                "typeString": "struct Controller.GlobalConstraint memory"
                                              }
                                            },
                                            "id": 8194,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "gcAddress",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 7330,
                                            "src": "12397:26:43",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "12368:56:43",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_storage",
                                            "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                                          }
                                        },
                                        "id": 8196,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "memberName": "index",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 7337,
                                        "src": "12368:62:43",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 8197,
                                          "name": "globalConstraintRegister",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 8129,
                                          "src": "12433:24:43",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_memory_ptr",
                                            "typeString": "struct Controller.GlobalConstraintRegister memory"
                                          }
                                        },
                                        "id": 8198,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "index",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 7337,
                                        "src": "12433:30:43",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "12368:95:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 8200,
                                    "nodeType": "ExpressionStatement",
                                    "src": "12368:95:43"
                                  }
                                ]
                              }
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 8206,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "--",
                                "prefix": false,
                                "src": "12499:29:43",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 8203,
                                    "name": "globalConstraintsPre",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7353,
                                    "src": "12499:20:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
                                      "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                    }
                                  },
                                  "id": 8205,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "length",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "12499:27:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 8207,
                              "nodeType": "ExpressionStatement",
                              "src": "12499:29:43"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 8211,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "delete",
                                "prefix": true,
                                "src": "12546:54:43",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 8208,
                                    "name": "globalConstraintsRegisterPre",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7360,
                                    "src": "12553:28:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$7338_storage_$",
                                      "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                                    }
                                  },
                                  "id": 8210,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 8209,
                                    "name": "_globalConstraint",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8116,
                                    "src": "12582:17:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "12553:47:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_storage",
                                    "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8212,
                              "nodeType": "ExpressionStatement",
                              "src": "12546:54:43"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 8215,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 8213,
                                  "name": "retVal",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8145,
                                  "src": "12618:6:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "hexValue": "74727565",
                                  "id": 8214,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "bool",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "12627:4:43",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "value": "true"
                                },
                                "src": "12618:13:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 8216,
                              "nodeType": "ExpressionStatement",
                              "src": "12618:13:43"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 8233,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_CallPhase_$9087",
                            "typeString": "enum GlobalConstraintInterface.CallPhase"
                          },
                          "id": 8225,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 8221,
                            "name": "when",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8137,
                            "src": "12670:4:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$9087",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8222,
                                "name": "GlobalConstraintInterface",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9115,
                                "src": "12678:25:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_GlobalConstraintInterface_$9115_$",
                                  "typeString": "type(contract GlobalConstraintInterface)"
                                }
                              },
                              "id": 8223,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "CallPhase",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9087,
                              "src": "12678:35:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_CallPhase_$9087_$",
                                "typeString": "type(enum GlobalConstraintInterface.CallPhase)"
                              }
                            },
                            "id": 8224,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "Post",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "12678:40:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$9087",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "src": "12670:48:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 8226,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "12669:50:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_CallPhase_$9087",
                            "typeString": "enum GlobalConstraintInterface.CallPhase"
                          },
                          "id": 8231,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 8227,
                            "name": "when",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8137,
                            "src": "12735:4:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$9087",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8228,
                                "name": "GlobalConstraintInterface",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9115,
                                "src": "12743:25:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_GlobalConstraintInterface_$9115_$",
                                  "typeString": "type(contract GlobalConstraintInterface)"
                                }
                              },
                              "id": 8229,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "CallPhase",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9087,
                              "src": "12743:35:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_CallPhase_$9087_$",
                                "typeString": "type(enum GlobalConstraintInterface.CallPhase)"
                              }
                            },
                            "id": 8230,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "PreAndPost",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "12743:46:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$9087",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "src": "12735:54:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 8232,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "12734:56:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "12669:121:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8293,
                  "nodeType": "IfStatement",
                  "src": "12665:861:43",
                  "trueBody": {
                    "id": 8292,
                    "nodeType": "Block",
                    "src": "12792:734:43",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8238,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 8234,
                            "name": "globalConstraintRegister",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8129,
                            "src": "12806:24:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_memory_ptr",
                              "typeString": "struct Controller.GlobalConstraintRegister memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 8235,
                              "name": "globalConstraintsRegisterPost",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7364,
                              "src": "12833:29:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$7338_storage_$",
                                "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                              }
                            },
                            "id": 8237,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 8236,
                              "name": "_globalConstraint",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8116,
                              "src": "12863:17:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "12833:48:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_storage",
                              "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                            }
                          },
                          "src": "12806:75:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_memory_ptr",
                            "typeString": "struct Controller.GlobalConstraintRegister memory"
                          }
                        },
                        "id": 8239,
                        "nodeType": "ExpressionStatement",
                        "src": "12806:75:43"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8240,
                            "name": "globalConstraintRegister",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8129,
                            "src": "12899:24:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_memory_ptr",
                              "typeString": "struct Controller.GlobalConstraintRegister memory"
                            }
                          },
                          "id": 8241,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "isRegistered",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7335,
                          "src": "12899:37:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 8291,
                        "nodeType": "IfStatement",
                        "src": "12895:621:43",
                        "trueBody": {
                          "id": 8290,
                          "nodeType": "Block",
                          "src": "12938:578:43",
                          "statements": [
                            {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 8248,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 8242,
                                    "name": "globalConstraintRegister",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8129,
                                    "src": "12960:24:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_memory_ptr",
                                      "typeString": "struct Controller.GlobalConstraintRegister memory"
                                    }
                                  },
                                  "id": 8243,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "index",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 7337,
                                  "src": "12960:30:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 8247,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 8244,
                                      "name": "globalConstraintsPost",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7356,
                                      "src": "12993:21:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
                                        "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                      }
                                    },
                                    "id": 8245,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "length",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "12993:28:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "31",
                                    "id": 8246,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "13022:1:43",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "src": "12993:30:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "12960:63:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": null,
                              "id": 8275,
                              "nodeType": "IfStatement",
                              "src": "12956:394:43",
                              "trueBody": {
                                "id": 8274,
                                "nodeType": "Block",
                                "src": "13025:325:43",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 8256,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 8249,
                                        "name": "globalConstraint",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8132,
                                        "src": "13047:16:43",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_GlobalConstraint_$7333_memory_ptr",
                                          "typeString": "struct Controller.GlobalConstraint memory"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 8250,
                                          "name": "globalConstraintsPost",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7356,
                                          "src": "13066:21:43",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
                                            "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                          }
                                        },
                                        "id": 8255,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 8254,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 8251,
                                              "name": "globalConstraintsPost",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 7356,
                                              "src": "13088:21:43",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
                                                "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                              }
                                            },
                                            "id": 8252,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "length",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "13088:28:43",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "-",
                                          "rightExpression": {
                                            "argumentTypes": null,
                                            "hexValue": "31",
                                            "id": 8253,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "13117:1:43",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_1_by_1",
                                              "typeString": "int_const 1"
                                            },
                                            "value": "1"
                                          },
                                          "src": "13088:30:43",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "13066:53:43",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_GlobalConstraint_$7333_storage",
                                          "typeString": "struct Controller.GlobalConstraint storage ref"
                                        }
                                      },
                                      "src": "13047:72:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_GlobalConstraint_$7333_memory_ptr",
                                        "typeString": "struct Controller.GlobalConstraint memory"
                                      }
                                    },
                                    "id": 8257,
                                    "nodeType": "ExpressionStatement",
                                    "src": "13047:72:43"
                                  },
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 8263,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 8258,
                                          "name": "globalConstraintsPost",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7356,
                                          "src": "13141:21:43",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
                                            "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                          }
                                        },
                                        "id": 8261,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 8259,
                                            "name": "globalConstraintRegister",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8129,
                                            "src": "13163:24:43",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_memory_ptr",
                                              "typeString": "struct Controller.GlobalConstraintRegister memory"
                                            }
                                          },
                                          "id": 8260,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "index",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 7337,
                                          "src": "13163:30:43",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "nodeType": "IndexAccess",
                                        "src": "13141:53:43",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_GlobalConstraint_$7333_storage",
                                          "typeString": "struct Controller.GlobalConstraint storage ref"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "id": 8262,
                                        "name": "globalConstraint",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8132,
                                        "src": "13197:16:43",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_GlobalConstraint_$7333_memory_ptr",
                                          "typeString": "struct Controller.GlobalConstraint memory"
                                        }
                                      },
                                      "src": "13141:72:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_GlobalConstraint_$7333_storage",
                                        "typeString": "struct Controller.GlobalConstraint storage ref"
                                      }
                                    },
                                    "id": 8264,
                                    "nodeType": "ExpressionStatement",
                                    "src": "13141:72:43"
                                  },
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 8272,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 8265,
                                            "name": "globalConstraintsRegisterPost",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 7364,
                                            "src": "13235:29:43",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$7338_storage_$",
                                              "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                                            }
                                          },
                                          "id": 8268,
                                          "indexExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 8266,
                                              "name": "globalConstraint",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 8132,
                                              "src": "13265:16:43",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_GlobalConstraint_$7333_memory_ptr",
                                                "typeString": "struct Controller.GlobalConstraint memory"
                                              }
                                            },
                                            "id": 8267,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "gcAddress",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 7330,
                                            "src": "13265:26:43",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "13235:57:43",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_storage",
                                            "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                                          }
                                        },
                                        "id": 8269,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "memberName": "index",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 7337,
                                        "src": "13235:63:43",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 8270,
                                          "name": "globalConstraintRegister",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 8129,
                                          "src": "13301:24:43",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_memory_ptr",
                                            "typeString": "struct Controller.GlobalConstraintRegister memory"
                                          }
                                        },
                                        "id": 8271,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "index",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 7337,
                                        "src": "13301:30:43",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "13235:96:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 8273,
                                    "nodeType": "ExpressionStatement",
                                    "src": "13235:96:43"
                                  }
                                ]
                              }
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 8279,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "--",
                                "prefix": false,
                                "src": "13367:30:43",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 8276,
                                    "name": "globalConstraintsPost",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7356,
                                    "src": "13367:21:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
                                      "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                    }
                                  },
                                  "id": 8278,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "length",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "13367:28:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 8280,
                              "nodeType": "ExpressionStatement",
                              "src": "13367:30:43"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 8284,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "delete",
                                "prefix": true,
                                "src": "13415:55:43",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 8281,
                                    "name": "globalConstraintsRegisterPost",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7364,
                                    "src": "13422:29:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$7338_storage_$",
                                      "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                                    }
                                  },
                                  "id": 8283,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 8282,
                                    "name": "_globalConstraint",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8116,
                                    "src": "13452:17:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "13422:48:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_storage",
                                    "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8285,
                              "nodeType": "ExpressionStatement",
                              "src": "13415:55:43"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 8288,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 8286,
                                  "name": "retVal",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8145,
                                  "src": "13488:6:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "hexValue": "74727565",
                                  "id": 8287,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "bool",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "13497:4:43",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "value": "true"
                                },
                                "src": "13488:13:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 8289,
                              "nodeType": "ExpressionStatement",
                              "src": "13488:13:43"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 8294,
                    "name": "retVal",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8145,
                    "src": "13539:6:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8307,
                  "nodeType": "IfStatement",
                  "src": "13535:214:43",
                  "trueBody": {
                    "id": 8306,
                    "nodeType": "Block",
                    "src": "13547:202:43",
                    "statements": [
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 8296,
                              "name": "_globalConstraint",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8116,
                              "src": "13602:17:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8297,
                                "name": "globalConstraintRegister",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8129,
                                "src": "13633:24:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_memory_ptr",
                                  "typeString": "struct Controller.GlobalConstraintRegister memory"
                                }
                              },
                              "id": 8298,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "index",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7337,
                              "src": "13633:30:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_enum$_CallPhase_$9087",
                                "typeString": "enum GlobalConstraintInterface.CallPhase"
                              },
                              "id": 8303,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 8299,
                                "name": "when",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8137,
                                "src": "13677:4:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_CallPhase_$9087",
                                  "typeString": "enum GlobalConstraintInterface.CallPhase"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 8300,
                                    "name": "GlobalConstraintInterface",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9115,
                                    "src": "13685:25:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_GlobalConstraintInterface_$9115_$",
                                      "typeString": "type(contract GlobalConstraintInterface)"
                                    }
                                  },
                                  "id": 8301,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "CallPhase",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 9087,
                                  "src": "13685:35:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_enum$_CallPhase_$9087_$",
                                    "typeString": "type(enum GlobalConstraintInterface.CallPhase)"
                                  }
                                },
                                "id": 8302,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "Pre",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "13685:39:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_CallPhase_$9087",
                                  "typeString": "enum GlobalConstraintInterface.CallPhase"
                                }
                              },
                              "src": "13677:47:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 8295,
                            "name": "RemoveGlobalConstraint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7422,
                            "src": "13566:22:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$",
                              "typeString": "function (address,uint256,bool)"
                            }
                          },
                          "id": 8304,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13566:172:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8305,
                        "nodeType": "EmitStatement",
                        "src": "13561:177:43"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8308,
                    "name": "retVal",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8145,
                    "src": "13765:6:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 8127,
                  "id": 8309,
                  "nodeType": "Return",
                  "src": "13758:13:43"
                }
              ]
            },
            "documentation": "@dev remove Global Constraint\n@param _globalConstraint the address of the global constraint to be remove.\n@return bool which represents a success",
            "id": 8311,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8121,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8120,
                  "name": "onlyGlobalConstraintsScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7525,
                  "src": "11467:27:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "11467:27:43"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8123,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8118,
                    "src": "11513:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 8124,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8122,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7672,
                  "src": "11499:13:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "11499:22:43"
              }
            ],
            "name": "removeGlobalConstraint",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8119,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8116,
                  "name": "_globalConstraint",
                  "nodeType": "VariableDeclaration",
                  "scope": 8311,
                  "src": "11406:25:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8115,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11406:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8118,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 8311,
                  "src": "11433:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8117,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11433:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11405:44:43"
            },
            "returnParameters": {
              "id": 8127,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8126,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8311,
                  "src": "11534:4:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8125,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "11534:4:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11533:6:43"
            },
            "scope": 8772,
            "src": "11373:2405:43",
            "stateMutability": "nonpayable",
            "superFunction": 8858,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8416,
              "nodeType": "Block",
              "src": "14170:756:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 8332,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 8328,
                          "name": "newController",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7350,
                          "src": "14188:13:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 8330,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14213:1:43",
                              "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": 8329,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "14205:7:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 8331,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14205:10:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "14188:27:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 8327,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        16785,
                        16786
                      ],
                      "referencedDeclaration": 16785,
                      "src": "14180:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 8333,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14180:36:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8334,
                  "nodeType": "ExpressionStatement",
                  "src": "14180:36:43"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 8340,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 8336,
                          "name": "_newController",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8313,
                          "src": "14289:14:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 8338,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14315:1:43",
                              "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": 8337,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "14307:7:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 8339,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14307:10:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "14289:28:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 8335,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        16785,
                        16786
                      ],
                      "referencedDeclaration": 16785,
                      "src": "14281:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 8341,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14281:37:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8342,
                  "nodeType": "ExpressionStatement",
                  "src": "14281:37:43"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8345,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8343,
                      "name": "newController",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7350,
                      "src": "14328:13:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 8344,
                      "name": "_newController",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8313,
                      "src": "14344:14:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "14328:30:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 8346,
                  "nodeType": "ExpressionStatement",
                  "src": "14328:30:43"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8350,
                        "name": "_newController",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8313,
                        "src": "14393:14:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8347,
                        "name": "avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7344,
                        "src": "14368:6:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$7316",
                          "typeString": "contract Avatar"
                        }
                      },
                      "id": 8349,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transferOwnership",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16004,
                      "src": "14368:24:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address) external"
                      }
                    },
                    "id": 8351,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14368:40:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8352,
                  "nodeType": "ExpressionStatement",
                  "src": "14368:40:43"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 8358,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 8354,
                              "name": "avatar",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7344,
                              "src": "14426:6:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Avatar_$7316",
                                "typeString": "contract Avatar"
                              }
                            },
                            "id": 8355,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "owner",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 15953,
                            "src": "14426:12:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                              "typeString": "function () view external returns (address)"
                            }
                          },
                          "id": 8356,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14426:14:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 8357,
                          "name": "_newController",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8313,
                          "src": "14444:14:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "14426:32:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 8353,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        16785,
                        16786
                      ],
                      "referencedDeclaration": 16785,
                      "src": "14418:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 8359,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14418:41:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8360,
                  "nodeType": "ExpressionStatement",
                  "src": "14418:41:43"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 8367,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 8361,
                          "name": "nativeToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7346,
                          "src": "14473:11:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_DAOToken_$9081",
                            "typeString": "contract DAOToken"
                          }
                        },
                        "id": 8362,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "owner",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 15953,
                        "src": "14473:17:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                          "typeString": "function () view external returns (address)"
                        }
                      },
                      "id": 8363,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "14473:19:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8365,
                          "name": "this",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16824,
                          "src": "14504:4:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Controller_$8772",
                            "typeString": "contract Controller"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_Controller_$8772",
                            "typeString": "contract Controller"
                          }
                        ],
                        "id": 8364,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "14496:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 8366,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "14496:13:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "14473:36:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8383,
                  "nodeType": "IfStatement",
                  "src": "14469:172:43",
                  "trueBody": {
                    "id": 8382,
                    "nodeType": "Block",
                    "src": "14511:130:43",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 8371,
                              "name": "_newController",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8313,
                              "src": "14555:14:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 8368,
                              "name": "nativeToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7346,
                              "src": "14525:11:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_DAOToken_$9081",
                                "typeString": "contract DAOToken"
                              }
                            },
                            "id": 8370,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transferOwnership",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 16004,
                            "src": "14525:29:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address) external"
                            }
                          },
                          "id": 8372,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14525:45:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8373,
                        "nodeType": "ExpressionStatement",
                        "src": "14525:45:43"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 8379,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 8375,
                                    "name": "nativeToken",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7346,
                                    "src": "14592:11:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_DAOToken_$9081",
                                      "typeString": "contract DAOToken"
                                    }
                                  },
                                  "id": 8376,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "owner",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 15953,
                                  "src": "14592:17:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                    "typeString": "function () view external returns (address)"
                                  }
                                },
                                "id": 8377,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "14592:19:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 8378,
                                "name": "_newController",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8313,
                                "src": "14615:14:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "14592:37:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 8374,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              16785,
                              16786
                            ],
                            "referencedDeclaration": 16785,
                            "src": "14584:7:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 8380,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14584:46:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8381,
                        "nodeType": "ExpressionStatement",
                        "src": "14584:46:43"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 8390,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 8384,
                          "name": "nativeReputation",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7348,
                          "src": "14654:16:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Reputation_$11034",
                            "typeString": "contract Reputation"
                          }
                        },
                        "id": 8385,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "owner",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 15953,
                        "src": "14654:22:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                          "typeString": "function () view external returns (address)"
                        }
                      },
                      "id": 8386,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "14654:24:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8388,
                          "name": "this",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16824,
                          "src": "14690:4:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Controller_$8772",
                            "typeString": "contract Controller"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_Controller_$8772",
                            "typeString": "contract Controller"
                          }
                        ],
                        "id": 8387,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "14682:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 8389,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "14682:13:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "14654:41:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8406,
                  "nodeType": "IfStatement",
                  "src": "14650:187:43",
                  "trueBody": {
                    "id": 8405,
                    "nodeType": "Block",
                    "src": "14697:140:43",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 8394,
                              "name": "_newController",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8313,
                              "src": "14746:14:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 8391,
                              "name": "nativeReputation",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7348,
                              "src": "14711:16:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Reputation_$11034",
                                "typeString": "contract Reputation"
                              }
                            },
                            "id": 8393,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transferOwnership",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 16004,
                            "src": "14711:34:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address) external"
                            }
                          },
                          "id": 8395,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14711:50:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8396,
                        "nodeType": "ExpressionStatement",
                        "src": "14711:50:43"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 8402,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 8398,
                                    "name": "nativeReputation",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7348,
                                    "src": "14783:16:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_Reputation_$11034",
                                      "typeString": "contract Reputation"
                                    }
                                  },
                                  "id": 8399,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "owner",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 15953,
                                  "src": "14783:22:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                    "typeString": "function () view external returns (address)"
                                  }
                                },
                                "id": 8400,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "14783:24:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 8401,
                                "name": "_newController",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8313,
                                "src": "14811:14:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "14783:42:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 8397,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              16785,
                              16786
                            ],
                            "referencedDeclaration": 16785,
                            "src": "14775:7:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 8403,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14775:51:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8404,
                        "nodeType": "ExpressionStatement",
                        "src": "14775:51:43"
                      }
                    ]
                  }
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 8409,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16824,
                            "src": "14877:4:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Controller_$8772",
                              "typeString": "contract Controller"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Controller_$8772",
                              "typeString": "contract Controller"
                            }
                          ],
                          "id": 8408,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "14869:7:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 8410,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14869:13:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8411,
                        "name": "newController",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7350,
                        "src": "14884:13:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8407,
                      "name": "UpgradeController",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7406,
                      "src": "14851:17:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 8412,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14851:47:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8413,
                  "nodeType": "EmitStatement",
                  "src": "14846:52:43"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 8414,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "14915:4:43",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 8326,
                  "id": 8415,
                  "nodeType": "Return",
                  "src": "14908:11:43"
                }
              ]
            },
            "documentation": "@dev upgrade the Controller\n     The function will trigger an event 'UpgradeController'.\n@param  _newController the address of the new controller.\n@return bool which represents a success",
            "id": 8417,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8318,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8317,
                  "name": "onlyUpgradingScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7545,
                  "src": "14092:19:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "14092:19:43"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8321,
                        "name": "_avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8315,
                        "src": "14138:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$7316",
                          "typeString": "contract Avatar"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Avatar_$7316",
                          "typeString": "contract Avatar"
                        }
                      ],
                      "id": 8320,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "14130:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 8322,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14130:16:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 8323,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8319,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7672,
                  "src": "14116:13:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "14116:31:43"
              }
            ],
            "name": "upgradeController",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8316,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8313,
                  "name": "_newController",
                  "nodeType": "VariableDeclaration",
                  "scope": 8417,
                  "src": "14035:22:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8312,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14035:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8315,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 8417,
                  "src": "14059:14:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Avatar_$7316",
                    "typeString": "contract Avatar"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8314,
                    "name": "Avatar",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7316,
                    "src": "14059:6:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$7316",
                      "typeString": "contract Avatar"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14034:40:43"
            },
            "returnParameters": {
              "id": 8326,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8325,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8417,
                  "src": "14160:4:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8324,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "14160:4:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14159:6:43"
            },
            "scope": 8772,
            "src": "14008:918:43",
            "stateMutability": "nonpayable",
            "superFunction": 8867,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8449,
              "nodeType": "Block",
              "src": "15606:68:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8444,
                        "name": "_contract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8419,
                        "src": "15642:9:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8445,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8421,
                        "src": "15653:5:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8446,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8425,
                        "src": "15660:6:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8442,
                        "name": "avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7344,
                        "src": "15623:6:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$7316",
                          "typeString": "contract Avatar"
                        }
                      },
                      "id": 8443,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "genericCall",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7174,
                      "src": "15623:18:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "function (address,bytes memory,uint256) external returns (bool,bytes memory)"
                      }
                    },
                    "id": 8447,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15623:44:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "functionReturnParameters": 8441,
                  "id": 8448,
                  "nodeType": "Return",
                  "src": "15616:51:43"
                }
              ]
            },
            "documentation": "@dev perform a generic call to an arbitrary contract\n@param _contract  the contract's address to call\n@param _data ABI-encoded contract call to call `_contract` address.\n@param _avatar the controller's avatar address\n@param _value value (ETH) to transfer with the transaction\n@return bool -success\n        bytes  - the return value of the called _contract's function.",
            "id": 8450,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8428,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8427,
                  "name": "onlyGenericCallScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7565,
                  "src": "15468:21:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15468:21:43"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "hexValue": "67656e6572696343616c6c",
                    "id": 8430,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "15518:13:43",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_f50c9c0d8078680ea2ffd7664f6b8e067777195c71561a9aa7bb8b53f908fb39",
                      "typeString": "literal_string \"genericCall\""
                    },
                    "value": "genericCall"
                  }
                ],
                "id": 8431,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8429,
                  "name": "onlySubjectToConstraint",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7658,
                  "src": "15494:23:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15494:38:43"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8434,
                        "name": "_avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8423,
                        "src": "15559:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$7316",
                          "typeString": "contract Avatar"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Avatar_$7316",
                          "typeString": "contract Avatar"
                        }
                      ],
                      "id": 8433,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "15551:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 8435,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15551:16:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 8436,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8432,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7672,
                  "src": "15537:13:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15537:31:43"
              }
            ],
            "name": "genericCall",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8426,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8419,
                  "name": "_contract",
                  "nodeType": "VariableDeclaration",
                  "scope": 8450,
                  "src": "15378:17:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8418,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15378:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8421,
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 8450,
                  "src": "15397:20:43",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 8420,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "15397:5:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8423,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 8450,
                  "src": "15419:14:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Avatar_$7316",
                    "typeString": "contract Avatar"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8422,
                    "name": "Avatar",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7316,
                    "src": "15419:6:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$7316",
                      "typeString": "contract Avatar"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8425,
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 8450,
                  "src": "15435:14:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8424,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15435:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15377:73:43"
            },
            "returnParameters": {
              "id": 8441,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8438,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8450,
                  "src": "15582:4:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8437,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "15582:4:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8440,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8450,
                  "src": "15588:12:43",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 8439,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "15588:5:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15581:20:43"
            },
            "scope": 8772,
            "src": "15357:317:43",
            "stateMutability": "nonpayable",
            "superFunction": 8882,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8477,
              "nodeType": "Block",
              "src": "16083:59:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8473,
                        "name": "_amountInWei",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8452,
                        "src": "16117:12:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8474,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8454,
                        "src": "16131:3:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8471,
                        "name": "avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7344,
                        "src": "16100:6:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$7316",
                          "typeString": "contract Avatar"
                        }
                      },
                      "id": 8472,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sendEther",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7199,
                      "src": "16100:16:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_address_payable_$returns$_t_bool_$",
                        "typeString": "function (uint256,address payable) external returns (bool)"
                      }
                    },
                    "id": 8475,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16100:35:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 8470,
                  "id": 8476,
                  "nodeType": "Return",
                  "src": "16093:42:43"
                }
              ]
            },
            "documentation": "@dev send some ether\n@param _amountInWei the amount of ether (in Wei) to send\n@param _to address of the beneficiary\n@return bool which represents a success",
            "id": 8478,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8459,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8458,
                  "name": "onlyRegisteredScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7485,
                  "src": "15963:20:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15963:20:43"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "hexValue": "73656e644574686572",
                    "id": 8461,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "16012:11:43",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_c700fcf825bb96908bcfa40b8d91237381cd207a842fc67195330064c6f87772",
                      "typeString": "literal_string \"sendEther\""
                    },
                    "value": "sendEther"
                  }
                ],
                "id": 8462,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8460,
                  "name": "onlySubjectToConstraint",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7658,
                  "src": "15988:23:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15988:36:43"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8465,
                        "name": "_avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8456,
                        "src": "16051:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$7316",
                          "typeString": "contract Avatar"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Avatar_$7316",
                          "typeString": "contract Avatar"
                        }
                      ],
                      "id": 8464,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "16043:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 8466,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16043:16:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 8467,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8463,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7672,
                  "src": "16029:13:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "16029:31:43"
              }
            ],
            "name": "sendEther",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8457,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8452,
                  "name": "_amountInWei",
                  "nodeType": "VariableDeclaration",
                  "scope": 8478,
                  "src": "15887:20:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8451,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15887:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8454,
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 8478,
                  "src": "15909:19:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 8453,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15909:15:43",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8456,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 8478,
                  "src": "15930:14:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Avatar_$7316",
                    "typeString": "contract Avatar"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8455,
                    "name": "Avatar",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7316,
                    "src": "15930:6:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$7316",
                      "typeString": "contract Avatar"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15886:59:43"
            },
            "returnParameters": {
              "id": 8470,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8469,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8478,
                  "src": "16073:4:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8468,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "16073:4:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16072:6:43"
            },
            "scope": 8772,
            "src": "15868:274:43",
            "stateMutability": "nonpayable",
            "superFunction": 8893,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8508,
              "nodeType": "Block",
              "src": "16674:81:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8503,
                        "name": "_externalToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8480,
                        "src": "16720:14:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$16748",
                          "typeString": "contract IERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8504,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8482,
                        "src": "16736:3:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8505,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8484,
                        "src": "16741:6:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20_$16748",
                          "typeString": "contract IERC20"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8501,
                        "name": "avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7344,
                        "src": "16691:6:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$7316",
                          "typeString": "contract Avatar"
                        }
                      },
                      "id": 8502,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "externalTokenTransfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7231,
                      "src": "16691:28:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_contract$_IERC20_$16748_$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (contract IERC20,address,uint256) external returns (bool)"
                      }
                    },
                    "id": 8506,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16691:57:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 8500,
                  "id": 8507,
                  "nodeType": "Return",
                  "src": "16684:64:43"
                }
              ]
            },
            "documentation": "@dev send some amount of arbitrary ERC20 Tokens\n@param _externalToken the address of the Token Contract\n@param _to address of the beneficiary\n@param _value the amount of ether (in Wei) to send\n@return bool which represents a success",
            "id": 8509,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8489,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8488,
                  "name": "onlyRegisteredScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7485,
                  "src": "16542:20:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "16542:20:43"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "hexValue": "65787465726e616c546f6b656e5472616e73666572",
                    "id": 8491,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "16591:23:43",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_7813035546e060c03dbe66bdee1941f9a0ad6551df13f617f14419ad20f4154f",
                      "typeString": "literal_string \"externalTokenTransfer\""
                    },
                    "value": "externalTokenTransfer"
                  }
                ],
                "id": 8492,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8490,
                  "name": "onlySubjectToConstraint",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7658,
                  "src": "16567:23:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "16567:48:43"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8495,
                        "name": "_avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8486,
                        "src": "16642:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$7316",
                          "typeString": "contract Avatar"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Avatar_$7316",
                          "typeString": "contract Avatar"
                        }
                      ],
                      "id": 8494,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "16634:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 8496,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16634:16:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 8497,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8493,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7672,
                  "src": "16620:13:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "16620:31:43"
              }
            ],
            "name": "externalTokenTransfer",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8487,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8480,
                  "name": "_externalToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 8509,
                  "src": "16457:21:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$16748",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8479,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 16748,
                    "src": "16457:6:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$16748",
                      "typeString": "contract IERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8482,
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 8509,
                  "src": "16480:11:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8481,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16480:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8484,
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 8509,
                  "src": "16493:14:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8483,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16493:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8486,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 8509,
                  "src": "16509:14:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Avatar_$7316",
                    "typeString": "contract Avatar"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8485,
                    "name": "Avatar",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7316,
                    "src": "16509:6:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$7316",
                      "typeString": "contract Avatar"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16456:68:43"
            },
            "returnParameters": {
              "id": 8500,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8499,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8509,
                  "src": "16664:4:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8498,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "16664:4:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16663:6:43"
            },
            "scope": 8772,
            "src": "16426:329:43",
            "stateMutability": "nonpayable",
            "superFunction": 8906,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8542,
              "nodeType": "Block",
              "src": "17537:92:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8536,
                        "name": "_externalToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8511,
                        "src": "17587:14:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$16748",
                          "typeString": "contract IERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8537,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8513,
                        "src": "17603:5:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8538,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8515,
                        "src": "17610:3:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8539,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8517,
                        "src": "17615:6:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20_$16748",
                          "typeString": "contract IERC20"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8534,
                        "name": "avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7344,
                        "src": "17554:6:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$7316",
                          "typeString": "contract Avatar"
                        }
                      },
                      "id": 8535,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "externalTokenTransferFrom",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7267,
                      "src": "17554:32:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_contract$_IERC20_$16748_$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (contract IERC20,address,address,uint256) external returns (bool)"
                      }
                    },
                    "id": 8540,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17554:68:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 8533,
                  "id": 8541,
                  "nodeType": "Return",
                  "src": "17547:75:43"
                }
              ]
            },
            "documentation": "@dev transfer token \"from\" address \"to\" address\n     One must to approve the amount of tokens which can be spend from the\n     \"from\" account.This can be done using externalTokenApprove.\n@param _externalToken the address of the Token Contract\n@param _from address of the account to send from\n@param _to address of the beneficiary\n@param _value the amount of ether (in Wei) to send\n@return bool which represents a success",
            "id": 8543,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8522,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8521,
                  "name": "onlyRegisteredScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7485,
                  "src": "17401:20:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "17401:20:43"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "hexValue": "65787465726e616c546f6b656e5472616e7366657246726f6d",
                    "id": 8524,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "17450:27:43",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_ac07667e4f3fe9c6116bdfeed71f93079924e4156b3ee8a0c3180f10145562f3",
                      "typeString": "literal_string \"externalTokenTransferFrom\""
                    },
                    "value": "externalTokenTransferFrom"
                  }
                ],
                "id": 8525,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8523,
                  "name": "onlySubjectToConstraint",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7658,
                  "src": "17426:23:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "17426:52:43"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8528,
                        "name": "_avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8519,
                        "src": "17505:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$7316",
                          "typeString": "contract Avatar"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Avatar_$7316",
                          "typeString": "contract Avatar"
                        }
                      ],
                      "id": 8527,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "17497:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 8529,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17497:16:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 8530,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8526,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7672,
                  "src": "17483:13:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "17483:31:43"
              }
            ],
            "name": "externalTokenTransferFrom",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8520,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8511,
                  "name": "_externalToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 8543,
                  "src": "17285:21:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$16748",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8510,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 16748,
                    "src": "17285:6:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$16748",
                      "typeString": "contract IERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8513,
                  "name": "_from",
                  "nodeType": "VariableDeclaration",
                  "scope": 8543,
                  "src": "17312:13:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8512,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17312:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8515,
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 8543,
                  "src": "17331:11:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8514,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17331:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8517,
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 8543,
                  "src": "17348:14:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8516,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17348:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8519,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 8543,
                  "src": "17368:14:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Avatar_$7316",
                    "typeString": "contract Avatar"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8518,
                    "name": "Avatar",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7316,
                    "src": "17368:6:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$7316",
                      "typeString": "contract Avatar"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17279:104:43"
            },
            "returnParameters": {
              "id": 8533,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8532,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8543,
                  "src": "17527:4:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8531,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "17527:4:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17526:6:43"
            },
            "scope": 8772,
            "src": "17245:384:43",
            "stateMutability": "nonpayable",
            "superFunction": 8921,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8573,
              "nodeType": "Block",
              "src": "18269:86:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8568,
                        "name": "_externalToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8545,
                        "src": "18315:14:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$16748",
                          "typeString": "contract IERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8569,
                        "name": "_spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8547,
                        "src": "18331:8:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8570,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8549,
                        "src": "18341:6:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20_$16748",
                          "typeString": "contract IERC20"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8566,
                        "name": "avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7344,
                        "src": "18286:6:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$7316",
                          "typeString": "contract Avatar"
                        }
                      },
                      "id": 8567,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "externalTokenApproval",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7299,
                      "src": "18286:28:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_contract$_IERC20_$16748_$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (contract IERC20,address,uint256) external returns (bool)"
                      }
                    },
                    "id": 8571,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18286:62:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 8565,
                  "id": 8572,
                  "nodeType": "Return",
                  "src": "18279:69:43"
                }
              ]
            },
            "documentation": "@dev externalTokenApproval approve the spender address to spend a specified amount of tokens\n     on behalf of msg.sender.\n@param _externalToken the address of the Token Contract\n@param _spender address\n@param _value the amount of ether (in Wei) which the approval is referring to.\n@return bool which represents a success",
            "id": 8574,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8554,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8553,
                  "name": "onlyRegisteredScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7485,
                  "src": "18129:20:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "18129:20:43"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "hexValue": "65787465726e616c546f6b656e496e637265617365417070726f76616c",
                    "id": 8556,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "18178:31:43",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_a6b5493ce06b69199b7c164b2fe8141dd5ecf7d2d491b28efc85f9c00fdfd15c",
                      "typeString": "literal_string \"externalTokenIncreaseApproval\""
                    },
                    "value": "externalTokenIncreaseApproval"
                  }
                ],
                "id": 8557,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8555,
                  "name": "onlySubjectToConstraint",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7658,
                  "src": "18154:23:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "18154:56:43"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8560,
                        "name": "_avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8551,
                        "src": "18237:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$7316",
                          "typeString": "contract Avatar"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Avatar_$7316",
                          "typeString": "contract Avatar"
                        }
                      ],
                      "id": 8559,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "18229:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 8561,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18229:16:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 8562,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8558,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7672,
                  "src": "18215:13:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "18215:31:43"
              }
            ],
            "name": "externalTokenApproval",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8552,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8545,
                  "name": "_externalToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 8574,
                  "src": "18039:21:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$16748",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8544,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 16748,
                    "src": "18039:6:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$16748",
                      "typeString": "contract IERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8547,
                  "name": "_spender",
                  "nodeType": "VariableDeclaration",
                  "scope": 8574,
                  "src": "18062:16:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8546,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18062:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8549,
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 8574,
                  "src": "18080:14:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8548,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18080:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8551,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 8574,
                  "src": "18096:14:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Avatar_$7316",
                    "typeString": "contract Avatar"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8550,
                    "name": "Avatar",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7316,
                    "src": "18096:6:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$7316",
                      "typeString": "contract Avatar"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18038:73:43"
            },
            "returnParameters": {
              "id": 8565,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8564,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8574,
                  "src": "18259:4:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8563,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "18259:4:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18258:6:43"
            },
            "scope": 8772,
            "src": "18008:347:43",
            "stateMutability": "nonpayable",
            "superFunction": 8934,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8595,
              "nodeType": "Block",
              "src": "18787:50:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8592,
                        "name": "_metaData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8576,
                        "src": "18820:9:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8590,
                        "name": "avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7344,
                        "src": "18804:6:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$7316",
                          "typeString": "contract Avatar"
                        }
                      },
                      "id": 8591,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "metaData",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7315,
                      "src": "18804:15:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_string_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (string memory) external returns (bool)"
                      }
                    },
                    "id": 8593,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18804:26:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 8589,
                  "id": 8594,
                  "nodeType": "Return",
                  "src": "18797:33:43"
                }
              ]
            },
            "documentation": "@dev metaData emits an event with a string, should contain the hash of some meta data.\n@param _metaData a string representing a hash of the meta data\n@param _avatar Avatar\n@return bool which represents a success",
            "id": 8596,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8581,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8580,
                  "name": "onlyMetaDataScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7585,
                  "src": "18698:18:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "18698:18:43"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8584,
                        "name": "_avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8578,
                        "src": "18747:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$7316",
                          "typeString": "contract Avatar"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Avatar_$7316",
                          "typeString": "contract Avatar"
                        }
                      ],
                      "id": 8583,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "18739:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 8585,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18739:16:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 8586,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8582,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7672,
                  "src": "18725:13:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "18725:31:43"
              }
            ],
            "name": "metaData",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8579,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8576,
                  "name": "_metaData",
                  "nodeType": "VariableDeclaration",
                  "scope": 8596,
                  "src": "18630:25:43",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 8575,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "18630:6:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8578,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 8596,
                  "src": "18657:14:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Avatar_$7316",
                    "typeString": "contract Avatar"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8577,
                    "name": "Avatar",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7316,
                    "src": "18657:6:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$7316",
                      "typeString": "contract Avatar"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18629:43:43"
            },
            "returnParameters": {
              "id": 8589,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8588,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8596,
                  "src": "18773:4:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8587,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "18773:4:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18772:6:43"
            },
            "scope": 8772,
            "src": "18612:225:43",
            "stateMutability": "nonpayable",
            "superFunction": 8943,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8610,
              "nodeType": "Block",
              "src": "19084:49:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8607,
                        "name": "nativeReputation",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7348,
                        "src": "19109:16:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Reputation_$11034",
                          "typeString": "contract Reputation"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Reputation_$11034",
                          "typeString": "contract Reputation"
                        }
                      ],
                      "id": 8606,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "19101:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 8608,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19101:25:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 8605,
                  "id": 8609,
                  "nodeType": "Return",
                  "src": "19094:32:43"
                }
              ]
            },
            "documentation": "@dev getNativeReputation\n@param _avatar the organization avatar.\n@return organization native reputation",
            "id": 8611,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8601,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8598,
                    "src": "19053:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 8602,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8600,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7672,
                  "src": "19039:13:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "19039:22:43"
              }
            ],
            "name": "getNativeReputation",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8599,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8598,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 8611,
                  "src": "19013:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8597,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19013:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19012:17:43"
            },
            "returnParameters": {
              "id": 8605,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8604,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8611,
                  "src": "19075:7:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8603,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19075:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19074:9:43"
            },
            "scope": 8772,
            "src": "18984:149:43",
            "stateMutability": "view",
            "superFunction": 8950,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8627,
              "nodeType": "Block",
              "src": "19252:52:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8624,
                        "name": "_scheme",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8613,
                        "src": "19289:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8623,
                      "name": "_isSchemeRegistered",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8771,
                      "src": "19269:19:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                        "typeString": "function (address) view returns (bool)"
                      }
                    },
                    "id": 8625,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19269:28:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 8622,
                  "id": 8626,
                  "nodeType": "Return",
                  "src": "19262:35:43"
                }
              ]
            },
            "documentation": null,
            "id": 8628,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8618,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8615,
                    "src": "19224:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 8619,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8617,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7672,
                  "src": "19210:13:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "19210:22:43"
              }
            ],
            "name": "isSchemeRegistered",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8616,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8613,
                  "name": "_scheme",
                  "nodeType": "VariableDeclaration",
                  "scope": 8628,
                  "src": "19167:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8612,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19167:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8615,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 8628,
                  "src": "19184:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8614,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19184:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19166:34:43"
            },
            "returnParameters": {
              "id": 8622,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8621,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8628,
                  "src": "19246:4:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8620,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "19246:4:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19245:6:43"
            },
            "scope": 8772,
            "src": "19139:165:43",
            "stateMutability": "view",
            "superFunction": 8959,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8645,
              "nodeType": "Block",
              "src": "19447:51:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 8640,
                        "name": "schemes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7342,
                        "src": "19464:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$7328_storage_$",
                          "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                        }
                      },
                      "id": 8642,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 8641,
                        "name": "_scheme",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8630,
                        "src": "19472:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "19464:16:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Scheme_$7328_storage",
                        "typeString": "struct Controller.Scheme storage ref"
                      }
                    },
                    "id": 8643,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "paramsHash",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 7325,
                    "src": "19464:27:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 8639,
                  "id": 8644,
                  "nodeType": "Return",
                  "src": "19457:34:43"
                }
              ]
            },
            "documentation": null,
            "id": 8646,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8635,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8632,
                    "src": "19404:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 8636,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8634,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7672,
                  "src": "19390:13:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "19390:22:43"
              }
            ],
            "name": "getSchemeParameters",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8633,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8630,
                  "name": "_scheme",
                  "nodeType": "VariableDeclaration",
                  "scope": 8646,
                  "src": "19339:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8629,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19339:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8632,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 8646,
                  "src": "19356:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8631,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19356:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19338:34:43"
            },
            "returnParameters": {
              "id": 8639,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8638,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8646,
                  "src": "19434:7:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8637,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "19434:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19433:9:43"
            },
            "scope": 8772,
            "src": "19310:188:43",
            "stateMutability": "view",
            "superFunction": 8968,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8663,
              "nodeType": "Block",
              "src": "19641:52:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 8658,
                        "name": "schemes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7342,
                        "src": "19658:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$7328_storage_$",
                          "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                        }
                      },
                      "id": 8660,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 8659,
                        "name": "_scheme",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8648,
                        "src": "19666:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "19658:16:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Scheme_$7328_storage",
                        "typeString": "struct Controller.Scheme storage ref"
                      }
                    },
                    "id": 8661,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "permissions",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 7327,
                    "src": "19658:28:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "functionReturnParameters": 8657,
                  "id": 8662,
                  "nodeType": "Return",
                  "src": "19651:35:43"
                }
              ]
            },
            "documentation": null,
            "id": 8664,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8653,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8650,
                    "src": "19599:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 8654,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8652,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7672,
                  "src": "19585:13:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "19585:22:43"
              }
            ],
            "name": "getSchemePermissions",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8651,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8648,
                  "name": "_scheme",
                  "nodeType": "VariableDeclaration",
                  "scope": 8664,
                  "src": "19534:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8647,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19534:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8650,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 8664,
                  "src": "19551:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8649,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19551:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19533:34:43"
            },
            "returnParameters": {
              "id": 8657,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8656,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8664,
                  "src": "19629:6:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 8655,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "19629:6:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19628:8:43"
            },
            "scope": 8772,
            "src": "19504:189:43",
            "stateMutability": "view",
            "superFunction": 8986,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8705,
              "nodeType": "Block",
              "src": "19805:403:43",
              "statements": [
                {
                  "assignments": [
                    8674
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8674,
                      "name": "register",
                      "nodeType": "VariableDeclaration",
                      "scope": 8705,
                      "src": "19816:40:43",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_memory_ptr",
                        "typeString": "struct Controller.GlobalConstraintRegister"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 8673,
                        "name": "GlobalConstraintRegister",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 7338,
                        "src": "19816:24:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_storage_ptr",
                          "typeString": "struct Controller.GlobalConstraintRegister"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8678,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 8675,
                      "name": "globalConstraintsRegisterPre",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7360,
                      "src": "19859:28:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$7338_storage_$",
                        "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                      }
                    },
                    "id": 8677,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 8676,
                      "name": "_globalConstraint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8666,
                      "src": "19888:17:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "19859:47:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_storage",
                      "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "19816:90:43"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 8679,
                      "name": "register",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8674,
                      "src": "19921:8:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_memory_ptr",
                        "typeString": "struct Controller.GlobalConstraintRegister memory"
                      }
                    },
                    "id": 8680,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "isRegistered",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 7335,
                    "src": "19921:21:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8688,
                  "nodeType": "IfStatement",
                  "src": "19917:102:43",
                  "trueBody": {
                    "id": 8687,
                    "nodeType": "Block",
                    "src": "19944:75:43",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 8681,
                              "name": "globalConstraintsPre",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7353,
                              "src": "19965:20:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
                                "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                              }
                            },
                            "id": 8684,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8682,
                                "name": "register",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8674,
                                "src": "19986:8:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_memory_ptr",
                                  "typeString": "struct Controller.GlobalConstraintRegister memory"
                                }
                              },
                              "id": 8683,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "index",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7337,
                              "src": "19986:14:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "19965:36:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConstraint_$7333_storage",
                              "typeString": "struct Controller.GlobalConstraint storage ref"
                            }
                          },
                          "id": 8685,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "params",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7332,
                          "src": "19965:43:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "functionReturnParameters": 8672,
                        "id": 8686,
                        "nodeType": "Return",
                        "src": "19958:50:43"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8693,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8689,
                      "name": "register",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8674,
                      "src": "20029:8:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_memory_ptr",
                        "typeString": "struct Controller.GlobalConstraintRegister memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 8690,
                        "name": "globalConstraintsRegisterPost",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7364,
                        "src": "20040:29:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$7338_storage_$",
                          "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                        }
                      },
                      "id": 8692,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 8691,
                        "name": "_globalConstraint",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8666,
                        "src": "20070:17:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "20040:48:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_storage",
                        "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                      }
                    },
                    "src": "20029:59:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_memory_ptr",
                      "typeString": "struct Controller.GlobalConstraintRegister memory"
                    }
                  },
                  "id": 8694,
                  "nodeType": "ExpressionStatement",
                  "src": "20029:59:43"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 8695,
                      "name": "register",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8674,
                      "src": "20103:8:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_memory_ptr",
                        "typeString": "struct Controller.GlobalConstraintRegister memory"
                      }
                    },
                    "id": 8696,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "isRegistered",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 7335,
                    "src": "20103:21:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8704,
                  "nodeType": "IfStatement",
                  "src": "20099:103:43",
                  "trueBody": {
                    "id": 8703,
                    "nodeType": "Block",
                    "src": "20126:76:43",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 8697,
                              "name": "globalConstraintsPost",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7356,
                              "src": "20147:21:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
                                "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                              }
                            },
                            "id": 8700,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8698,
                                "name": "register",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8674,
                                "src": "20169:8:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_memory_ptr",
                                  "typeString": "struct Controller.GlobalConstraintRegister memory"
                                }
                              },
                              "id": 8699,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "index",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7337,
                              "src": "20169:14:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "20147:37:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConstraint_$7333_storage",
                              "typeString": "struct Controller.GlobalConstraint storage ref"
                            }
                          },
                          "id": 8701,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "params",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7332,
                          "src": "20147:44:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "functionReturnParameters": 8672,
                        "id": 8702,
                        "nodeType": "Return",
                        "src": "20140:51:43"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "id": 8706,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getGlobalConstraintParameters",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8669,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8666,
                  "name": "_globalConstraint",
                  "nodeType": "VariableDeclaration",
                  "scope": 8706,
                  "src": "19738:25:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8665,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19738:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8668,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8706,
                  "src": "19765:7:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8667,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19765:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19737:36:43"
            },
            "returnParameters": {
              "id": 8672,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8671,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8706,
                  "src": "19796:7:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8670,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "19796:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19795:9:43"
            },
            "scope": 8772,
            "src": "19699:509:43",
            "stateMutability": "view",
            "superFunction": 8977,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8724,
              "nodeType": "Block",
              "src": "20557:83:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8718,
                          "name": "globalConstraintsPre",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7353,
                          "src": "20575:20:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
                            "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                          }
                        },
                        "id": 8719,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "20575:27:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8720,
                          "name": "globalConstraintsPost",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7356,
                          "src": "20604:21:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
                            "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                          }
                        },
                        "id": 8721,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "20604:28:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 8722,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "20574:59:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 8717,
                  "id": 8723,
                  "nodeType": "Return",
                  "src": "20567:66:43"
                }
              ]
            },
            "documentation": "@dev globalConstraintsCount return the global constraint pre and post count\n@return uint256 globalConstraintsPre count.\n@return uint256 globalConstraintsPost count.",
            "id": 8725,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8711,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8708,
                    "src": "20499:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 8712,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8710,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7672,
                  "src": "20485:13:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "20485:22:43"
              }
            ],
            "name": "globalConstraintsCount",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8709,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8708,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 8725,
                  "src": "20443:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8707,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "20443:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20442:17:43"
            },
            "returnParameters": {
              "id": 8717,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8714,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8725,
                  "src": "20537:4:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8713,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "20537:4:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8716,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8725,
                  "src": "20543:4:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8715,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "20543:4:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20536:12:43"
            },
            "scope": 8772,
            "src": "20411:229:43",
            "stateMutability": "view",
            "superFunction": 8995,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8748,
              "nodeType": "Block",
              "src": "20819:167:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 8745,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 8737,
                              "name": "globalConstraintsRegisterPre",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7360,
                              "src": "20837:28:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$7338_storage_$",
                                "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                              }
                            },
                            "id": 8739,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 8738,
                              "name": "_globalConstraint",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8727,
                              "src": "20866:17:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "20837:47:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_storage",
                              "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                            }
                          },
                          "id": 8740,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "isRegistered",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7335,
                          "src": "20837:60:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 8741,
                              "name": "globalConstraintsRegisterPost",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7364,
                              "src": "20917:29:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$7338_storage_$",
                                "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                              }
                            },
                            "id": 8743,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 8742,
                              "name": "_globalConstraint",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8727,
                              "src": "20947:17:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "20917:48:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_storage",
                              "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                            }
                          },
                          "id": 8744,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "isRegistered",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7335,
                          "src": "20917:61:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "20837:141:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "id": 8746,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "20836:143:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 8736,
                  "id": 8747,
                  "nodeType": "Return",
                  "src": "20829:150:43"
                }
              ]
            },
            "documentation": null,
            "id": 8749,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8732,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8729,
                    "src": "20767:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 8733,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8731,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7672,
                  "src": "20753:13:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "20753:22:43"
              }
            ],
            "name": "isGlobalConstraintRegistered",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8730,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8727,
                  "name": "_globalConstraint",
                  "nodeType": "VariableDeclaration",
                  "scope": 8749,
                  "src": "20684:25:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8726,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "20684:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8729,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 8749,
                  "src": "20711:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8728,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "20711:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20683:44:43"
            },
            "returnParameters": {
              "id": 8736,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8735,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8749,
                  "src": "20805:4:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8734,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "20805:4:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20804:6:43"
            },
            "scope": 8772,
            "src": "20646:340:43",
            "stateMutability": "view",
            "superFunction": 9004,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8770,
              "nodeType": "Block",
              "src": "21065:86:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 8767,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "id": 8763,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 8756,
                                "name": "schemes",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7342,
                                "src": "21083:7:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$7328_storage_$",
                                  "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                                }
                              },
                              "id": 8758,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 8757,
                                "name": "_scheme",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8751,
                                "src": "21091:7:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "21083:16:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Scheme_$7328_storage",
                                "typeString": "struct Controller.Scheme storage ref"
                              }
                            },
                            "id": 8759,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "permissions",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7327,
                            "src": "21083:28:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30783030303030303031",
                                "id": 8761,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "21119:10:43",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "0x00000001"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                }
                              ],
                              "id": 8760,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "21112:6:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes4_$",
                                "typeString": "type(bytes4)"
                              },
                              "typeName": "bytes4"
                            },
                            "id": 8762,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "21112:18:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "21083:47:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 8765,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "21141:1:43",
                              "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": 8764,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "21134:6:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes4_$",
                              "typeString": "type(bytes4)"
                            },
                            "typeName": "bytes4"
                          },
                          "id": 8766,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "21134:9:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "21083:60:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "id": 8768,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "21082:62:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 8755,
                  "id": 8769,
                  "nodeType": "Return",
                  "src": "21075:69:43"
                }
              ]
            },
            "documentation": null,
            "id": 8771,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_isSchemeRegistered",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8752,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8751,
                  "name": "_scheme",
                  "nodeType": "VariableDeclaration",
                  "scope": 8771,
                  "src": "21021:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8750,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "21021:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21020:17:43"
            },
            "returnParameters": {
              "id": 8755,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8754,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8771,
                  "src": "21059:4:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8753,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "21059:4:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21058:6:43"
            },
            "scope": 8772,
            "src": "20992:159:43",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "private"
          }
        ],
        "scope": 8773,
        "src": "410:20743:43"
      }
    ],
    "src": "0:21154:43"
  },
  "legacyAST": {
    "absolutePath": "@daostack/arc/contracts/controller/Controller.sol",
    "exportedSymbols": {
      "Controller": [
        8772
      ]
    },
    "id": 8773,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 7318,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".4"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:43"
      },
      {
        "absolutePath": "@daostack/arc/contracts/controller/Avatar.sol",
        "file": "./Avatar.sol",
        "id": 7319,
        "nodeType": "ImportDirective",
        "scope": 8773,
        "sourceUnit": 7317,
        "src": "25:22:43",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@daostack/arc/contracts/globalConstraints/GlobalConstraintInterface.sol",
        "file": "../globalConstraints/GlobalConstraintInterface.sol",
        "id": 7320,
        "nodeType": "ImportDirective",
        "scope": 8773,
        "sourceUnit": 9116,
        "src": "48:60:43",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@daostack/arc/contracts/controller/ControllerInterface.sol",
        "file": "./ControllerInterface.sol",
        "id": 7321,
        "nodeType": "ImportDirective",
        "scope": 8773,
        "sourceUnit": 9006,
        "src": "109:35:43",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 7322,
              "name": "ControllerInterface",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9005,
              "src": "433:19:43",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ControllerInterface_$9005",
                "typeString": "contract ControllerInterface"
              }
            },
            "id": 7323,
            "nodeType": "InheritanceSpecifier",
            "src": "433:19:43"
          }
        ],
        "contractDependencies": [
          9005
        ],
        "contractKind": "contract",
        "documentation": "@title Controller contract\n@dev A controller controls the organizations tokens, reputation and avatar.\nIt is subject to a set of schemes and constraints that determine its behavior.\nEach scheme has it own parameters and operation permissions.",
        "fullyImplemented": true,
        "id": 8772,
        "linearizedBaseContracts": [
          8772,
          9005
        ],
        "name": "Controller",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "canonicalName": "Controller.Scheme",
            "id": 7328,
            "members": [
              {
                "constant": false,
                "id": 7325,
                "name": "paramsHash",
                "nodeType": "VariableDeclaration",
                "scope": 7328,
                "src": "484:18:43",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 7324,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "484:7:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 7327,
                "name": "permissions",
                "nodeType": "VariableDeclaration",
                "scope": 7328,
                "src": "553:19:43",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes4",
                  "typeString": "bytes4"
                },
                "typeName": {
                  "id": 7326,
                  "name": "bytes4",
                  "nodeType": "ElementaryTypeName",
                  "src": "553:6:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Scheme",
            "nodeType": "StructDefinition",
            "scope": 8772,
            "src": "460:663:43",
            "visibility": "public"
          },
          {
            "canonicalName": "Controller.GlobalConstraint",
            "id": 7333,
            "members": [
              {
                "constant": false,
                "id": 7330,
                "name": "gcAddress",
                "nodeType": "VariableDeclaration",
                "scope": 7333,
                "src": "1163:17:43",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 7329,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "1163:7:43",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 7332,
                "name": "params",
                "nodeType": "VariableDeclaration",
                "scope": 7333,
                "src": "1190:14:43",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 7331,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "1190:7:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "GlobalConstraint",
            "nodeType": "StructDefinition",
            "scope": 8772,
            "src": "1129:82:43",
            "visibility": "public"
          },
          {
            "canonicalName": "Controller.GlobalConstraintRegister",
            "id": 7338,
            "members": [
              {
                "constant": false,
                "id": 7335,
                "name": "isRegistered",
                "nodeType": "VariableDeclaration",
                "scope": 7338,
                "src": "1259:17:43",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 7334,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "1259:4:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 7337,
                "name": "index",
                "nodeType": "VariableDeclaration",
                "scope": 7338,
                "src": "1302:13:43",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 7336,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1302:7:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "GlobalConstraintRegister",
            "nodeType": "StructDefinition",
            "scope": 8772,
            "src": "1217:137:43",
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 7342,
            "name": "schemes",
            "nodeType": "VariableDeclaration",
            "scope": 8772,
            "src": "1360:39:43",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$7328_storage_$",
              "typeString": "mapping(address => struct Controller.Scheme)"
            },
            "typeName": {
              "id": 7341,
              "keyType": {
                "id": 7339,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1368:7:43",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1360:24:43",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$7328_storage_$",
                "typeString": "mapping(address => struct Controller.Scheme)"
              },
              "valueType": {
                "contractScope": null,
                "id": 7340,
                "name": "Scheme",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 7328,
                "src": "1377:6:43",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Scheme_$7328_storage_ptr",
                  "typeString": "struct Controller.Scheme"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 7344,
            "name": "avatar",
            "nodeType": "VariableDeclaration",
            "scope": 8772,
            "src": "1406:20:43",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_Avatar_$7316",
              "typeString": "contract Avatar"
            },
            "typeName": {
              "contractScope": null,
              "id": 7343,
              "name": "Avatar",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 7316,
              "src": "1406:6:43",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Avatar_$7316",
                "typeString": "contract Avatar"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 7346,
            "name": "nativeToken",
            "nodeType": "VariableDeclaration",
            "scope": 8772,
            "src": "1432:27:43",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_DAOToken_$9081",
              "typeString": "contract DAOToken"
            },
            "typeName": {
              "contractScope": null,
              "id": 7345,
              "name": "DAOToken",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9081,
              "src": "1432:8:43",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_DAOToken_$9081",
                "typeString": "contract DAOToken"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 7348,
            "name": "nativeReputation",
            "nodeType": "VariableDeclaration",
            "scope": 8772,
            "src": "1465:34:43",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_Reputation_$11034",
              "typeString": "contract Reputation"
            },
            "typeName": {
              "contractScope": null,
              "id": 7347,
              "name": "Reputation",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 11034,
              "src": "1465:10:43",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Reputation_$11034",
                "typeString": "contract Reputation"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 7350,
            "name": "newController",
            "nodeType": "VariableDeclaration",
            "scope": 8772,
            "src": "1598:28:43",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 7349,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1598:7:43",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 7353,
            "name": "globalConstraintsPre",
            "nodeType": "VariableDeclaration",
            "scope": 8772,
            "src": "1723:46:43",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
              "typeString": "struct Controller.GlobalConstraint[]"
            },
            "typeName": {
              "baseType": {
                "contractScope": null,
                "id": 7351,
                "name": "GlobalConstraint",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 7333,
                "src": "1723:16:43",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_GlobalConstraint_$7333_storage_ptr",
                  "typeString": "struct Controller.GlobalConstraint"
                }
              },
              "id": 7352,
              "length": null,
              "nodeType": "ArrayTypeName",
              "src": "1723:18:43",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage_ptr",
                "typeString": "struct Controller.GlobalConstraint[]"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 7356,
            "name": "globalConstraintsPost",
            "nodeType": "VariableDeclaration",
            "scope": 8772,
            "src": "1867:47:43",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
              "typeString": "struct Controller.GlobalConstraint[]"
            },
            "typeName": {
              "baseType": {
                "contractScope": null,
                "id": 7354,
                "name": "GlobalConstraint",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 7333,
                "src": "1867:16:43",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_GlobalConstraint_$7333_storage_ptr",
                  "typeString": "struct Controller.GlobalConstraint"
                }
              },
              "id": 7355,
              "length": null,
              "nodeType": "ArrayTypeName",
              "src": "1867:18:43",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage_ptr",
                "typeString": "struct Controller.GlobalConstraint[]"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 7360,
            "name": "globalConstraintsRegisterPre",
            "nodeType": "VariableDeclaration",
            "scope": 8772,
            "src": "2027:78:43",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$7338_storage_$",
              "typeString": "mapping(address => struct Controller.GlobalConstraintRegister)"
            },
            "typeName": {
              "id": 7359,
              "keyType": {
                "id": 7357,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "2035:7:43",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "2027:42:43",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$7338_storage_$",
                "typeString": "mapping(address => struct Controller.GlobalConstraintRegister)"
              },
              "valueType": {
                "contractScope": null,
                "id": 7358,
                "name": "GlobalConstraintRegister",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 7338,
                "src": "2044:24:43",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_storage_ptr",
                  "typeString": "struct Controller.GlobalConstraintRegister"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 7364,
            "name": "globalConstraintsRegisterPost",
            "nodeType": "VariableDeclaration",
            "scope": 8772,
            "src": "2220:79:43",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$7338_storage_$",
              "typeString": "mapping(address => struct Controller.GlobalConstraintRegister)"
            },
            "typeName": {
              "id": 7363,
              "keyType": {
                "id": 7361,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "2228:7:43",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "2220:42:43",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$7338_storage_$",
                "typeString": "mapping(address => struct Controller.GlobalConstraintRegister)"
              },
              "valueType": {
                "contractScope": null,
                "id": 7362,
                "name": "GlobalConstraintRegister",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 7338,
                "src": "2237:24:43",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_storage_ptr",
                  "typeString": "struct Controller.GlobalConstraintRegister"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 7372,
            "name": "MintReputation",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7371,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7366,
                  "indexed": true,
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 7372,
                  "src": "2328:23:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7365,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2328:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7368,
                  "indexed": true,
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 7372,
                  "src": "2353:19:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7367,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2353:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7370,
                  "indexed": false,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 7372,
                  "src": "2374:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7369,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2374:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2327:63:43"
            },
            "src": "2306:85:43"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 7380,
            "name": "BurnReputation",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7379,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7374,
                  "indexed": true,
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 7380,
                  "src": "2418:23:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7373,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2418:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7376,
                  "indexed": true,
                  "name": "_from",
                  "nodeType": "VariableDeclaration",
                  "scope": 7380,
                  "src": "2443:21:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7375,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2443:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7378,
                  "indexed": false,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 7380,
                  "src": "2466:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7377,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2466:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2417:65:43"
            },
            "src": "2396:87:43"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 7388,
            "name": "MintTokens",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7387,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7382,
                  "indexed": true,
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 7388,
                  "src": "2506:23:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7381,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2506:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7384,
                  "indexed": true,
                  "name": "_beneficiary",
                  "nodeType": "VariableDeclaration",
                  "scope": 7388,
                  "src": "2531:28:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7383,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2531:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7386,
                  "indexed": false,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 7388,
                  "src": "2561:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7385,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2561:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2505:72:43"
            },
            "src": "2488:90:43"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 7394,
            "name": "RegisterScheme",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7393,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7390,
                  "indexed": true,
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 7394,
                  "src": "2605:23:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7389,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2605:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7392,
                  "indexed": true,
                  "name": "_scheme",
                  "nodeType": "VariableDeclaration",
                  "scope": 7394,
                  "src": "2630:23:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7391,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2630:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2604:50:43"
            },
            "src": "2583:72:43"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 7400,
            "name": "UnregisterScheme",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7399,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7396,
                  "indexed": true,
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 7400,
                  "src": "2684:23:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7395,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2684:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7398,
                  "indexed": true,
                  "name": "_scheme",
                  "nodeType": "VariableDeclaration",
                  "scope": 7400,
                  "src": "2709:23:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7397,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2709:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2683:50:43"
            },
            "src": "2660:74:43"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 7406,
            "name": "UpgradeController",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7405,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7402,
                  "indexed": true,
                  "name": "_oldController",
                  "nodeType": "VariableDeclaration",
                  "scope": 7406,
                  "src": "2763:30:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7401,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2763:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7404,
                  "indexed": false,
                  "name": "_newController",
                  "nodeType": "VariableDeclaration",
                  "scope": 7406,
                  "src": "2795:22:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7403,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2795:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2762:56:43"
            },
            "src": "2739:80:43"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 7414,
            "name": "AddGlobalConstraint",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7413,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7408,
                  "indexed": true,
                  "name": "_globalConstraint",
                  "nodeType": "VariableDeclaration",
                  "scope": 7414,
                  "src": "2860:33:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7407,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2860:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7410,
                  "indexed": false,
                  "name": "_params",
                  "nodeType": "VariableDeclaration",
                  "scope": 7414,
                  "src": "2903:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 7409,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2903:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7412,
                  "indexed": false,
                  "name": "_when",
                  "nodeType": "VariableDeclaration",
                  "scope": 7414,
                  "src": "2928:41:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_CallPhase_$9087",
                    "typeString": "enum GlobalConstraintInterface.CallPhase"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7411,
                    "name": "GlobalConstraintInterface.CallPhase",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 9087,
                    "src": "2928:35:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_CallPhase_$9087",
                      "typeString": "enum GlobalConstraintInterface.CallPhase"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2850:120:43"
            },
            "src": "2825:146:43"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 7422,
            "name": "RemoveGlobalConstraint",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7421,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7416,
                  "indexed": true,
                  "name": "_globalConstraint",
                  "nodeType": "VariableDeclaration",
                  "scope": 7422,
                  "src": "3006:33:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7415,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3006:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7418,
                  "indexed": false,
                  "name": "_index",
                  "nodeType": "VariableDeclaration",
                  "scope": 7422,
                  "src": "3041:14:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7417,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3041:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7420,
                  "indexed": false,
                  "name": "_isPre",
                  "nodeType": "VariableDeclaration",
                  "scope": 7422,
                  "src": "3057:11:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7419,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3057:4:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3005:64:43"
            },
            "src": "2977:93:43"
          },
          {
            "body": {
              "id": 7457,
              "nodeType": "Block",
              "src": "3112:228:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7429,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7427,
                      "name": "avatar",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7344,
                      "src": "3122:6:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Avatar_$7316",
                        "typeString": "contract Avatar"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 7428,
                      "name": "_avatar",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7424,
                      "src": "3131:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Avatar_$7316",
                        "typeString": "contract Avatar"
                      }
                    },
                    "src": "3122:16:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$7316",
                      "typeString": "contract Avatar"
                    }
                  },
                  "id": 7430,
                  "nodeType": "ExpressionStatement",
                  "src": "3122:16:43"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7435,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7431,
                      "name": "nativeToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7346,
                      "src": "3148:11:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_DAOToken_$9081",
                        "typeString": "contract DAOToken"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 7432,
                          "name": "avatar",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7344,
                          "src": "3162:6:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Avatar_$7316",
                            "typeString": "contract Avatar"
                          }
                        },
                        "id": 7433,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "nativeToken",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7052,
                        "src": "3162:18:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_DAOToken_$9081_$",
                          "typeString": "function () view external returns (contract DAOToken)"
                        }
                      },
                      "id": 7434,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3162:20:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_DAOToken_$9081",
                        "typeString": "contract DAOToken"
                      }
                    },
                    "src": "3148:34:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_DAOToken_$9081",
                      "typeString": "contract DAOToken"
                    }
                  },
                  "id": 7436,
                  "nodeType": "ExpressionStatement",
                  "src": "3148:34:43"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7441,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7437,
                      "name": "nativeReputation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7348,
                      "src": "3192:16:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Reputation_$11034",
                        "typeString": "contract Reputation"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 7438,
                          "name": "avatar",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7344,
                          "src": "3211:6:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Avatar_$7316",
                            "typeString": "contract Avatar"
                          }
                        },
                        "id": 7439,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "nativeReputation",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7054,
                        "src": "3211:23:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_Reputation_$11034_$",
                          "typeString": "function () view external returns (contract Reputation)"
                        }
                      },
                      "id": 7440,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3211:25:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Reputation_$11034",
                        "typeString": "contract Reputation"
                      }
                    },
                    "src": "3192:44:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Reputation_$11034",
                      "typeString": "contract Reputation"
                    }
                  },
                  "id": 7442,
                  "nodeType": "ExpressionStatement",
                  "src": "3192:44:43"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7455,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 7443,
                        "name": "schemes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7342,
                        "src": "3246:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$7328_storage_$",
                          "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                        }
                      },
                      "id": 7446,
                      "indexExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7444,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16782,
                          "src": "3254:3:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 7445,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "3254:10:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3246:19:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Scheme_$7328_storage",
                        "typeString": "struct Controller.Scheme storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 7449,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3296:1:43",
                              "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": 7448,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3288:7:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes32_$",
                              "typeString": "type(bytes32)"
                            },
                            "typeName": "bytes32"
                          },
                          "id": 7450,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3288:10:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30783030303030303146",
                              "id": 7452,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3320:10:43",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_31_by_1",
                                "typeString": "int_const 31"
                              },
                              "value": "0x0000001F"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_31_by_1",
                                "typeString": "int_const 31"
                              }
                            ],
                            "id": 7451,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3313:6:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes4_$",
                              "typeString": "type(bytes4)"
                            },
                            "typeName": "bytes4"
                          },
                          "id": 7453,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3313:18:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7447,
                        "name": "Scheme",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7328,
                        "src": "3268:6:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_struct$_Scheme_$7328_storage_ptr_$",
                          "typeString": "type(struct Controller.Scheme storage pointer)"
                        }
                      },
                      "id": 7454,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "structConstructorCall",
                      "lValueRequested": false,
                      "names": [
                        "paramsHash",
                        "permissions"
                      ],
                      "nodeType": "FunctionCall",
                      "src": "3268:65:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Scheme_$7328_memory",
                        "typeString": "struct Controller.Scheme memory"
                      }
                    },
                    "src": "3246:87:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Scheme_$7328_storage",
                      "typeString": "struct Controller.Scheme storage ref"
                    }
                  },
                  "id": 7456,
                  "nodeType": "ExpressionStatement",
                  "src": "3246:87:43"
                }
              ]
            },
            "documentation": null,
            "id": 7458,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7425,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7424,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 7458,
                  "src": "3089:14:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Avatar_$7316",
                    "typeString": "contract Avatar"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7423,
                    "name": "Avatar",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7316,
                    "src": "3089:6:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$7316",
                      "typeString": "contract Avatar"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3087:17:43"
            },
            "returnParameters": {
              "id": 7426,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3112:0:43"
            },
            "scope": 8772,
            "src": "3076:264:43",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7464,
              "nodeType": "Block",
              "src": "3449:25:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 7461,
                      "name": "revert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        16787,
                        16788
                      ],
                      "referencedDeclaration": 16787,
                      "src": "3459:6:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_revert_pure$__$returns$__$",
                        "typeString": "function () pure"
                      }
                    },
                    "id": 7462,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3459:8:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7463,
                  "nodeType": "ExpressionStatement",
                  "src": "3459:8:43"
                }
              ]
            },
            "documentation": null,
            "id": 7465,
            "implemented": true,
            "kind": "fallback",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7459,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3437:2:43"
            },
            "returnParameters": {
              "id": 7460,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3449:0:43"
            },
            "scope": 8772,
            "src": "3429:45:43",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7484,
              "nodeType": "Block",
              "src": "3528:109:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 7480,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "id": 7476,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 7468,
                                "name": "schemes",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7342,
                                "src": "3546:7:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$7328_storage_$",
                                  "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                                }
                              },
                              "id": 7471,
                              "indexExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 7469,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 16782,
                                  "src": "3554:3:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 7470,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "3554:10:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3546:19:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Scheme_$7328_storage",
                                "typeString": "struct Controller.Scheme storage ref"
                              }
                            },
                            "id": 7472,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "permissions",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7327,
                            "src": "3546:31:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30783030303030303031",
                                "id": 7474,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3585:10:43",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "0x00000001"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                }
                              ],
                              "id": 7473,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3578:6:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes4_$",
                                "typeString": "type(bytes4)"
                              },
                              "typeName": "bytes4"
                            },
                            "id": 7475,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3578:18:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "3546:50:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30783030303030303031",
                              "id": 7478,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3607:10:43",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "0x00000001"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              }
                            ],
                            "id": 7477,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3600:6:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes4_$",
                              "typeString": "type(bytes4)"
                            },
                            "typeName": "bytes4"
                          },
                          "id": 7479,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3600:18:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "3546:72:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 7467,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        16785,
                        16786
                      ],
                      "referencedDeclaration": 16785,
                      "src": "3538:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 7481,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3538:81:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7482,
                  "nodeType": "ExpressionStatement",
                  "src": "3538:81:43"
                },
                {
                  "id": 7483,
                  "nodeType": "PlaceholderStatement",
                  "src": "3629:1:43"
                }
              ]
            },
            "documentation": null,
            "id": 7485,
            "name": "onlyRegisteredScheme",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 7466,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3525:2:43"
            },
            "src": "3496:141:43",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7504,
              "nodeType": "Block",
              "src": "3677:109:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 7500,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "id": 7496,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 7488,
                                "name": "schemes",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7342,
                                "src": "3695:7:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$7328_storage_$",
                                  "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                                }
                              },
                              "id": 7491,
                              "indexExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 7489,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 16782,
                                  "src": "3703:3:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 7490,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "3703:10:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3695:19:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Scheme_$7328_storage",
                                "typeString": "struct Controller.Scheme storage ref"
                              }
                            },
                            "id": 7492,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "permissions",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7327,
                            "src": "3695:31:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30783030303030303032",
                                "id": 7494,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3734:10:43",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_2_by_1",
                                  "typeString": "int_const 2"
                                },
                                "value": "0x00000002"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_2_by_1",
                                  "typeString": "int_const 2"
                                }
                              ],
                              "id": 7493,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3727:6:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes4_$",
                                "typeString": "type(bytes4)"
                              },
                              "typeName": "bytes4"
                            },
                            "id": 7495,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3727:18:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "3695:50:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30783030303030303032",
                              "id": 7498,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3756:10:43",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "0x00000002"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              }
                            ],
                            "id": 7497,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3749:6:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes4_$",
                              "typeString": "type(bytes4)"
                            },
                            "typeName": "bytes4"
                          },
                          "id": 7499,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3749:18:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "3695:72:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 7487,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        16785,
                        16786
                      ],
                      "referencedDeclaration": 16785,
                      "src": "3687:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 7501,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3687:81:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7502,
                  "nodeType": "ExpressionStatement",
                  "src": "3687:81:43"
                },
                {
                  "id": 7503,
                  "nodeType": "PlaceholderStatement",
                  "src": "3778:1:43"
                }
              ]
            },
            "documentation": null,
            "id": 7505,
            "name": "onlyRegisteringSchemes",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 7486,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3674:2:43"
            },
            "src": "3643:143:43",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7524,
              "nodeType": "Block",
              "src": "3831:109:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 7520,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "id": 7516,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 7508,
                                "name": "schemes",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7342,
                                "src": "3849:7:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$7328_storage_$",
                                  "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                                }
                              },
                              "id": 7511,
                              "indexExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 7509,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 16782,
                                  "src": "3857:3:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 7510,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "3857:10:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3849:19:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Scheme_$7328_storage",
                                "typeString": "struct Controller.Scheme storage ref"
                              }
                            },
                            "id": 7512,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "permissions",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7327,
                            "src": "3849:31:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30783030303030303034",
                                "id": 7514,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3888:10:43",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_4_by_1",
                                  "typeString": "int_const 4"
                                },
                                "value": "0x00000004"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_4_by_1",
                                  "typeString": "int_const 4"
                                }
                              ],
                              "id": 7513,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3881:6:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes4_$",
                                "typeString": "type(bytes4)"
                              },
                              "typeName": "bytes4"
                            },
                            "id": 7515,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3881:18:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "3849:50:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30783030303030303034",
                              "id": 7518,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3910:10:43",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_4_by_1",
                                "typeString": "int_const 4"
                              },
                              "value": "0x00000004"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_4_by_1",
                                "typeString": "int_const 4"
                              }
                            ],
                            "id": 7517,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3903:6:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes4_$",
                              "typeString": "type(bytes4)"
                            },
                            "typeName": "bytes4"
                          },
                          "id": 7519,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3903:18:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "3849:72:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 7507,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        16785,
                        16786
                      ],
                      "referencedDeclaration": 16785,
                      "src": "3841:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 7521,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3841:81:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7522,
                  "nodeType": "ExpressionStatement",
                  "src": "3841:81:43"
                },
                {
                  "id": 7523,
                  "nodeType": "PlaceholderStatement",
                  "src": "3932:1:43"
                }
              ]
            },
            "documentation": null,
            "id": 7525,
            "name": "onlyGlobalConstraintsScheme",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 7506,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3828:2:43"
            },
            "src": "3792:148:43",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7544,
              "nodeType": "Block",
              "src": "3977:109:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 7540,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "id": 7536,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 7528,
                                "name": "schemes",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7342,
                                "src": "3995:7:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$7328_storage_$",
                                  "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                                }
                              },
                              "id": 7531,
                              "indexExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 7529,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 16782,
                                  "src": "4003:3:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 7530,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "4003:10:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3995:19:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Scheme_$7328_storage",
                                "typeString": "struct Controller.Scheme storage ref"
                              }
                            },
                            "id": 7532,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "permissions",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7327,
                            "src": "3995:31:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30783030303030303038",
                                "id": 7534,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4034:10:43",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_8_by_1",
                                  "typeString": "int_const 8"
                                },
                                "value": "0x00000008"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_8_by_1",
                                  "typeString": "int_const 8"
                                }
                              ],
                              "id": 7533,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "4027:6:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes4_$",
                                "typeString": "type(bytes4)"
                              },
                              "typeName": "bytes4"
                            },
                            "id": 7535,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4027:18:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "3995:50:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30783030303030303038",
                              "id": 7538,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4056:10:43",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_8_by_1",
                                "typeString": "int_const 8"
                              },
                              "value": "0x00000008"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_8_by_1",
                                "typeString": "int_const 8"
                              }
                            ],
                            "id": 7537,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "4049:6:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes4_$",
                              "typeString": "type(bytes4)"
                            },
                            "typeName": "bytes4"
                          },
                          "id": 7539,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4049:18:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "3995:72:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 7527,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        16785,
                        16786
                      ],
                      "referencedDeclaration": 16785,
                      "src": "3987:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 7541,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3987:81:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7542,
                  "nodeType": "ExpressionStatement",
                  "src": "3987:81:43"
                },
                {
                  "id": 7543,
                  "nodeType": "PlaceholderStatement",
                  "src": "4078:1:43"
                }
              ]
            },
            "documentation": null,
            "id": 7545,
            "name": "onlyUpgradingScheme",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 7526,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3974:2:43"
            },
            "src": "3946:140:43",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7564,
              "nodeType": "Block",
              "src": "4125:109:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 7560,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "id": 7556,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 7548,
                                "name": "schemes",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7342,
                                "src": "4143:7:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$7328_storage_$",
                                  "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                                }
                              },
                              "id": 7551,
                              "indexExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 7549,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 16782,
                                  "src": "4151:3:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 7550,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "4151:10:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "4143:19:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Scheme_$7328_storage",
                                "typeString": "struct Controller.Scheme storage ref"
                              }
                            },
                            "id": 7552,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "permissions",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7327,
                            "src": "4143:31:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30783030303030303130",
                                "id": 7554,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4182:10:43",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_16_by_1",
                                  "typeString": "int_const 16"
                                },
                                "value": "0x00000010"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_16_by_1",
                                  "typeString": "int_const 16"
                                }
                              ],
                              "id": 7553,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "4175:6:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes4_$",
                                "typeString": "type(bytes4)"
                              },
                              "typeName": "bytes4"
                            },
                            "id": 7555,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4175:18:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "4143:50:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30783030303030303130",
                              "id": 7558,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4204:10:43",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_16_by_1",
                                "typeString": "int_const 16"
                              },
                              "value": "0x00000010"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_16_by_1",
                                "typeString": "int_const 16"
                              }
                            ],
                            "id": 7557,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "4197:6:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes4_$",
                              "typeString": "type(bytes4)"
                            },
                            "typeName": "bytes4"
                          },
                          "id": 7559,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4197:18:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "4143:72:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 7547,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        16785,
                        16786
                      ],
                      "referencedDeclaration": 16785,
                      "src": "4135:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 7561,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4135:81:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7562,
                  "nodeType": "ExpressionStatement",
                  "src": "4135:81:43"
                },
                {
                  "id": 7563,
                  "nodeType": "PlaceholderStatement",
                  "src": "4226:1:43"
                }
              ]
            },
            "documentation": null,
            "id": 7565,
            "name": "onlyGenericCallScheme",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 7546,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4122:2:43"
            },
            "src": "4092:142:43",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7584,
              "nodeType": "Block",
              "src": "4270:109:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 7580,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "id": 7576,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 7568,
                                "name": "schemes",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7342,
                                "src": "4288:7:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$7328_storage_$",
                                  "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                                }
                              },
                              "id": 7571,
                              "indexExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 7569,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 16782,
                                  "src": "4296:3:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 7570,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "4296:10:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "4288:19:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Scheme_$7328_storage",
                                "typeString": "struct Controller.Scheme storage ref"
                              }
                            },
                            "id": 7572,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "permissions",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7327,
                            "src": "4288:31:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30783030303030303130",
                                "id": 7574,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4327:10:43",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_16_by_1",
                                  "typeString": "int_const 16"
                                },
                                "value": "0x00000010"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_16_by_1",
                                  "typeString": "int_const 16"
                                }
                              ],
                              "id": 7573,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "4320:6:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes4_$",
                                "typeString": "type(bytes4)"
                              },
                              "typeName": "bytes4"
                            },
                            "id": 7575,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4320:18:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "4288:50:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30783030303030303130",
                              "id": 7578,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4349:10:43",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_16_by_1",
                                "typeString": "int_const 16"
                              },
                              "value": "0x00000010"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_16_by_1",
                                "typeString": "int_const 16"
                              }
                            ],
                            "id": 7577,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "4342:6:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes4_$",
                              "typeString": "type(bytes4)"
                            },
                            "typeName": "bytes4"
                          },
                          "id": 7579,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4342:18:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "4288:72:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 7567,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        16785,
                        16786
                      ],
                      "referencedDeclaration": 16785,
                      "src": "4280:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 7581,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4280:81:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7582,
                  "nodeType": "ExpressionStatement",
                  "src": "4280:81:43"
                },
                {
                  "id": 7583,
                  "nodeType": "PlaceholderStatement",
                  "src": "4371:1:43"
                }
              ]
            },
            "documentation": null,
            "id": 7585,
            "name": "onlyMetaDataScheme",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 7566,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4267:2:43"
            },
            "src": "4240:139:43",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7657,
              "nodeType": "Block",
              "src": "4432:533:43",
              "statements": [
                {
                  "assignments": [
                    7590
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7590,
                      "name": "idx",
                      "nodeType": "VariableDeclaration",
                      "scope": 7657,
                      "src": "4442:11:43",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7589,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4442:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7591,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4442:11:43"
                },
                {
                  "body": {
                    "id": 7622,
                    "nodeType": "Block",
                    "src": "4519:180:43",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 7612,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 16782,
                                    "src": "4636:3:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 7613,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "4636:10:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 7614,
                                      "name": "globalConstraintsPre",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7353,
                                      "src": "4648:20:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
                                        "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                      }
                                    },
                                    "id": 7616,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 7615,
                                      "name": "idx",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7590,
                                      "src": "4669:3:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "4648:25:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_GlobalConstraint_$7333_storage",
                                      "typeString": "struct Controller.GlobalConstraint storage ref"
                                    }
                                  },
                                  "id": 7617,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "params",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 7332,
                                  "src": "4648:32:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 7618,
                                  "name": "func",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7587,
                                  "src": "4682:4:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "expression": {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                              "argumentTypes": null,
                                              "id": 7605,
                                              "name": "globalConstraintsPre",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 7353,
                                              "src": "4581:20:43",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
                                                "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                              }
                                            },
                                            "id": 7607,
                                            "indexExpression": {
                                              "argumentTypes": null,
                                              "id": 7606,
                                              "name": "idx",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 7590,
                                              "src": "4602:3:43",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "4581:25:43",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_GlobalConstraint_$7333_storage",
                                              "typeString": "struct Controller.GlobalConstraint storage ref"
                                            }
                                          },
                                          "id": 7608,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "gcAddress",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 7330,
                                          "src": "4581:35:43",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        ],
                                        "id": 7604,
                                        "name": "GlobalConstraintInterface",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 9115,
                                        "src": "4555:25:43",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_contract$_GlobalConstraintInterface_$9115_$",
                                          "typeString": "type(contract GlobalConstraintInterface)"
                                        }
                                      },
                                      "id": 7609,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "4555:62:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_GlobalConstraintInterface_$9115",
                                        "typeString": "contract GlobalConstraintInterface"
                                      }
                                    }
                                  ],
                                  "id": 7610,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "4554:64:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_GlobalConstraintInterface_$9115",
                                    "typeString": "contract GlobalConstraintInterface"
                                  }
                                },
                                "id": 7611,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "pre",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 9098,
                                "src": "4554:81:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_bytes32_$_t_bytes32_$returns$_t_bool_$",
                                  "typeString": "function (address,bytes32,bytes32) external returns (bool)"
                                }
                              },
                              "id": 7619,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4554:133:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 7603,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              16785,
                              16786
                            ],
                            "referencedDeclaration": 16785,
                            "src": "4533:7:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 7620,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4533:155:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7621,
                        "nodeType": "ExpressionStatement",
                        "src": "4533:155:43"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7599,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7596,
                      "name": "idx",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7590,
                      "src": "4477:3:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7597,
                        "name": "globalConstraintsPre",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7353,
                        "src": "4483:20:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
                          "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                        }
                      },
                      "id": 7598,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "4483:27:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4477:33:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 7623,
                  "initializationExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 7594,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 7592,
                        "name": "idx",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7590,
                        "src": "4468:3:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 7593,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4474:1:43",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "4468:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 7595,
                    "nodeType": "ExpressionStatement",
                    "src": "4468:7:43"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 7601,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "4512:5:43",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 7600,
                        "name": "idx",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7590,
                        "src": "4512:3:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 7602,
                    "nodeType": "ExpressionStatement",
                    "src": "4512:5:43"
                  },
                  "nodeType": "ForStatement",
                  "src": "4463:236:43"
                },
                {
                  "id": 7624,
                  "nodeType": "PlaceholderStatement",
                  "src": "4708:1:43"
                },
                {
                  "body": {
                    "id": 7655,
                    "nodeType": "Block",
                    "src": "4776:183:43",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 7645,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 16782,
                                    "src": "4895:3:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 7646,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "4895:10:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 7647,
                                      "name": "globalConstraintsPost",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7356,
                                      "src": "4907:21:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
                                        "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                      }
                                    },
                                    "id": 7649,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 7648,
                                      "name": "idx",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7590,
                                      "src": "4929:3:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "4907:26:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_GlobalConstraint_$7333_storage",
                                      "typeString": "struct Controller.GlobalConstraint storage ref"
                                    }
                                  },
                                  "id": 7650,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "params",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 7332,
                                  "src": "4907:33:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 7651,
                                  "name": "func",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7587,
                                  "src": "4942:4:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "expression": {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                              "argumentTypes": null,
                                              "id": 7638,
                                              "name": "globalConstraintsPost",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 7356,
                                              "src": "4838:21:43",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
                                                "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                              }
                                            },
                                            "id": 7640,
                                            "indexExpression": {
                                              "argumentTypes": null,
                                              "id": 7639,
                                              "name": "idx",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 7590,
                                              "src": "4860:3:43",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "4838:26:43",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_GlobalConstraint_$7333_storage",
                                              "typeString": "struct Controller.GlobalConstraint storage ref"
                                            }
                                          },
                                          "id": 7641,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "gcAddress",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 7330,
                                          "src": "4838:36:43",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        ],
                                        "id": 7637,
                                        "name": "GlobalConstraintInterface",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 9115,
                                        "src": "4812:25:43",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_contract$_GlobalConstraintInterface_$9115_$",
                                          "typeString": "type(contract GlobalConstraintInterface)"
                                        }
                                      },
                                      "id": 7642,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "4812:63:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_GlobalConstraintInterface_$9115",
                                        "typeString": "contract GlobalConstraintInterface"
                                      }
                                    }
                                  ],
                                  "id": 7643,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "4811:65:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_GlobalConstraintInterface_$9115",
                                    "typeString": "contract GlobalConstraintInterface"
                                  }
                                },
                                "id": 7644,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "post",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 9109,
                                "src": "4811:83:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_bytes32_$_t_bytes32_$returns$_t_bool_$",
                                  "typeString": "function (address,bytes32,bytes32) external returns (bool)"
                                }
                              },
                              "id": 7652,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4811:136:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 7636,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              16785,
                              16786
                            ],
                            "referencedDeclaration": 16785,
                            "src": "4790:7:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 7653,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4790:158:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7654,
                        "nodeType": "ExpressionStatement",
                        "src": "4790:158:43"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7632,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7629,
                      "name": "idx",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7590,
                      "src": "4733:3:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7630,
                        "name": "globalConstraintsPost",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7356,
                        "src": "4739:21:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
                          "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                        }
                      },
                      "id": 7631,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "4739:28:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4733:34:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 7656,
                  "initializationExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 7627,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 7625,
                        "name": "idx",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7590,
                        "src": "4724:3:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 7626,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4730:1:43",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "4724:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 7628,
                    "nodeType": "ExpressionStatement",
                    "src": "4724:7:43"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 7634,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "4769:5:43",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 7633,
                        "name": "idx",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7590,
                        "src": "4769:3:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 7635,
                    "nodeType": "ExpressionStatement",
                    "src": "4769:5:43"
                  },
                  "nodeType": "ForStatement",
                  "src": "4719:240:43"
                }
              ]
            },
            "documentation": null,
            "id": 7658,
            "name": "onlySubjectToConstraint",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 7588,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7587,
                  "name": "func",
                  "nodeType": "VariableDeclaration",
                  "scope": 7658,
                  "src": "4418:12:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 7586,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4418:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4417:14:43"
            },
            "src": "4385:580:43",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7671,
              "nodeType": "Block",
              "src": "5011:63:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 7667,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 7663,
                          "name": "_avatar",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7660,
                          "src": "5029:7:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 7665,
                              "name": "avatar",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7344,
                              "src": "5048:6:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Avatar_$7316",
                                "typeString": "contract Avatar"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_Avatar_$7316",
                                "typeString": "contract Avatar"
                              }
                            ],
                            "id": 7664,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "5040:7:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 7666,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5040:15:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "5029:26:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 7662,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        16785,
                        16786
                      ],
                      "referencedDeclaration": 16785,
                      "src": "5021:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 7668,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5021:35:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7669,
                  "nodeType": "ExpressionStatement",
                  "src": "5021:35:43"
                },
                {
                  "id": 7670,
                  "nodeType": "PlaceholderStatement",
                  "src": "5066:1:43"
                }
              ]
            },
            "documentation": null,
            "id": 7672,
            "name": "isAvatarValid",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 7661,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7660,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 7672,
                  "src": "4994:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7659,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4994:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4993:17:43"
            },
            "src": "4971:103:43",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7704,
              "nodeType": "Block",
              "src": "5507:114:43",
              "statements": [
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7692,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16782,
                          "src": "5537:3:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 7693,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "5537:10:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7694,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7676,
                        "src": "5549:3:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7695,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7674,
                        "src": "5554:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7691,
                      "name": "MintReputation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7372,
                      "src": "5522:14:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 7696,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5522:40:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7697,
                  "nodeType": "EmitStatement",
                  "src": "5517:45:43"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7700,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7676,
                        "src": "5601:3:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7701,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7674,
                        "src": "5606:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7698,
                        "name": "nativeReputation",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7348,
                        "src": "5579:16:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Reputation_$11034",
                          "typeString": "contract Reputation"
                        }
                      },
                      "id": 7699,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10796,
                      "src": "5579:21:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 7702,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5579:35:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 7690,
                  "id": 7703,
                  "nodeType": "Return",
                  "src": "5572:42:43"
                }
              ]
            },
            "documentation": "@dev Mint `_amount` of reputation that are assigned to `_to` .\n@param  _amount amount of reputation to mint\n@param _to beneficiary address\n@return bool which represents a success",
            "id": 7705,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7681,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7680,
                  "name": "onlyRegisteredScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7485,
                  "src": "5391:20:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5391:20:43"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "hexValue": "6d696e7452657075746174696f6e",
                    "id": 7683,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "5440:16:43",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_1a219662897983599a6b9002ff87ae94af2205e820352b0884d9af0be457f05d",
                      "typeString": "literal_string \"mintReputation\""
                    },
                    "value": "mintReputation"
                  }
                ],
                "id": 7684,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7682,
                  "name": "onlySubjectToConstraint",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7658,
                  "src": "5416:23:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5416:41:43"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 7686,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7678,
                    "src": "5476:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 7687,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7685,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7672,
                  "src": "5462:13:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5462:22:43"
              }
            ],
            "name": "mintReputation",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7679,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7674,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 7705,
                  "src": "5327:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7673,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5327:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7676,
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 7705,
                  "src": "5344:11:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7675,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5344:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7678,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 7705,
                  "src": "5357:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7677,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5357:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5326:47:43"
            },
            "returnParameters": {
              "id": 7690,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7689,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7705,
                  "src": "5497:4:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7688,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5497:4:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5496:6:43"
            },
            "scope": 8772,
            "src": "5303:318:43",
            "stateMutability": "nonpayable",
            "superFunction": 8787,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7737,
              "nodeType": "Block",
              "src": "6064:118:43",
              "statements": [
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7725,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16782,
                          "src": "6094:3:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 7726,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "6094:10:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7727,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7709,
                        "src": "6106:5:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7728,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7707,
                        "src": "6113:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7724,
                      "name": "BurnReputation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7380,
                      "src": "6079:14:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 7729,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6079:42:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7730,
                  "nodeType": "EmitStatement",
                  "src": "6074:47:43"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7733,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7709,
                        "src": "6160:5:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7734,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7707,
                        "src": "6167:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7731,
                        "name": "nativeReputation",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7348,
                        "src": "6138:16:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Reputation_$11034",
                          "typeString": "contract Reputation"
                        }
                      },
                      "id": 7732,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "burn",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10855,
                      "src": "6138:21:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 7735,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6138:37:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 7723,
                  "id": 7736,
                  "nodeType": "Return",
                  "src": "6131:44:43"
                }
              ]
            },
            "documentation": "@dev Burns `_amount` of reputation from `_from`\n@param _amount amount of reputation to burn\n@param _from The address that will lose the reputation\n@return bool which represents a success",
            "id": 7738,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7714,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7713,
                  "name": "onlyRegisteredScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7485,
                  "src": "5948:20:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5948:20:43"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "hexValue": "6275726e52657075746174696f6e",
                    "id": 7716,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "5997:16:43",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_701c6a9b3c30976c567c709256889545b87c2151a8fd377ac6f0366a5ce4dd74",
                      "typeString": "literal_string \"burnReputation\""
                    },
                    "value": "burnReputation"
                  }
                ],
                "id": 7717,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7715,
                  "name": "onlySubjectToConstraint",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7658,
                  "src": "5973:23:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5973:41:43"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 7719,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7711,
                    "src": "6033:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 7720,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7718,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7672,
                  "src": "6019:13:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6019:22:43"
              }
            ],
            "name": "burnReputation",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7712,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7707,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 7738,
                  "src": "5882:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7706,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5882:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7709,
                  "name": "_from",
                  "nodeType": "VariableDeclaration",
                  "scope": 7738,
                  "src": "5899:13:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7708,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5899:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7711,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 7738,
                  "src": "5914:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7710,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5914:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5881:49:43"
            },
            "returnParameters": {
              "id": 7723,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7722,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7738,
                  "src": "6054:4:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7721,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6054:4:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6053:6:43"
            },
            "scope": 8772,
            "src": "5858:324:43",
            "stateMutability": "nonpayable",
            "superFunction": 8798,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7770,
              "nodeType": "Block",
              "src": "6576:123:43",
              "statements": [
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7758,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16782,
                          "src": "6602:3:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 7759,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "6602:10:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7760,
                        "name": "_beneficiary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7742,
                        "src": "6614:12:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7761,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7740,
                        "src": "6628:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7757,
                      "name": "MintTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7388,
                      "src": "6591:10:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 7762,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6591:45:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7763,
                  "nodeType": "EmitStatement",
                  "src": "6586:50:43"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7766,
                        "name": "_beneficiary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7742,
                        "src": "6670:12:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7767,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7740,
                        "src": "6684:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7764,
                        "name": "nativeToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7346,
                        "src": "6653:11:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_DAOToken_$9081",
                          "typeString": "contract DAOToken"
                        }
                      },
                      "id": 7765,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9080,
                      "src": "6653:16:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 7768,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6653:39:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 7756,
                  "id": 7769,
                  "nodeType": "Return",
                  "src": "6646:46:43"
                }
              ]
            },
            "documentation": "@dev mint tokens .\n@param  _amount amount of token to mint\n@param _beneficiary beneficiary address\n@return bool which represents a success",
            "id": 7771,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7747,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7746,
                  "name": "onlyRegisteredScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7485,
                  "src": "6464:20:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6464:20:43"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "hexValue": "6d696e74546f6b656e73",
                    "id": 7749,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "6513:12:43",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_21b23862db72e99373f312e35ae4594cf48c0e3462d6964e450d863eb9283120",
                      "typeString": "literal_string \"mintTokens\""
                    },
                    "value": "mintTokens"
                  }
                ],
                "id": 7750,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7748,
                  "name": "onlySubjectToConstraint",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7658,
                  "src": "6489:23:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6489:37:43"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 7752,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7744,
                    "src": "6545:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 7753,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7751,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7672,
                  "src": "6531:13:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6531:22:43"
              }
            ],
            "name": "mintTokens",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7745,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7740,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 7771,
                  "src": "6391:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7739,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6391:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7742,
                  "name": "_beneficiary",
                  "nodeType": "VariableDeclaration",
                  "scope": 7771,
                  "src": "6408:20:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7741,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6408:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7744,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 7771,
                  "src": "6430:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7743,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6430:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6390:56:43"
            },
            "returnParameters": {
              "id": 7756,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7755,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7771,
                  "src": "6566:4:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7754,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6566:4:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6565:6:43"
            },
            "scope": 8772,
            "src": "6371:328:43",
            "stateMutability": "nonpayable",
            "superFunction": 8809,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7870,
              "nodeType": "Block",
              "src": "7211:876:43",
              "statements": [
                {
                  "assignments": [
                    7793
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7793,
                      "name": "scheme",
                      "nodeType": "VariableDeclaration",
                      "scope": 7870,
                      "src": "7222:20:43",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Scheme_$7328_memory_ptr",
                        "typeString": "struct Controller.Scheme"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7792,
                        "name": "Scheme",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 7328,
                        "src": "7222:6:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Scheme_$7328_storage_ptr",
                          "typeString": "struct Controller.Scheme"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7797,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 7794,
                      "name": "schemes",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7342,
                      "src": "7245:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$7328_storage_$",
                        "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                      }
                    },
                    "id": 7796,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 7795,
                      "name": "_scheme",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7773,
                      "src": "7253:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "7245:16:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Scheme_$7328_storage",
                      "typeString": "struct Controller.Scheme storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7222:39:43"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 7819,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "id": 7815,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            },
                            "id": 7807,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30783030303030303166",
                                  "id": 7800,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "7567:10:43",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_31_by_1",
                                    "typeString": "int_const 31"
                                  },
                                  "value": "0x0000001f"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_31_by_1",
                                    "typeString": "int_const 31"
                                  }
                                ],
                                "id": 7799,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "7560:6:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes4_$",
                                  "typeString": "type(bytes4)"
                                },
                                "typeName": "bytes4"
                              },
                              "id": 7801,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7560:18:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "argumentTypes": null,
                              "components": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  },
                                  "id": 7805,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 7802,
                                    "name": "_permissions",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7777,
                                    "src": "7580:12:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes4",
                                      "typeString": "bytes4"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "^",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 7803,
                                      "name": "scheme",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7793,
                                      "src": "7593:6:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Scheme_$7328_memory_ptr",
                                        "typeString": "struct Controller.Scheme memory"
                                      }
                                    },
                                    "id": 7804,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "permissions",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 7327,
                                    "src": "7593:18:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes4",
                                      "typeString": "bytes4"
                                    }
                                  },
                                  "src": "7580:31:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                }
                              ],
                              "id": 7806,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "7579:33:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              }
                            },
                            "src": "7560:52:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "id": 7813,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "~",
                                "prefix": true,
                                "src": "7614:32:43",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 7808,
                                      "name": "schemes",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7342,
                                      "src": "7615:7:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$7328_storage_$",
                                        "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                                      }
                                    },
                                    "id": 7811,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 7809,
                                        "name": "msg",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 16782,
                                        "src": "7623:3:43",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_message",
                                          "typeString": "msg"
                                        }
                                      },
                                      "id": 7810,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "sender",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": null,
                                      "src": "7623:10:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "7615:19:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Scheme_$7328_storage",
                                      "typeString": "struct Controller.Scheme storage ref"
                                    }
                                  },
                                  "id": 7812,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "permissions",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 7327,
                                  "src": "7615:31:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              }
                            ],
                            "id": 7814,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "7613:34:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "7560:87:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 7817,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7658:1:43",
                              "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": 7816,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "7651:6:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes4_$",
                              "typeString": "type(bytes4)"
                            },
                            "typeName": "bytes4"
                          },
                          "id": 7818,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7651:9:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "7560:100:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 7798,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        16785,
                        16786
                      ],
                      "referencedDeclaration": 16785,
                      "src": "7552:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 7820,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7552:109:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7821,
                  "nodeType": "ExpressionStatement",
                  "src": "7552:109:43"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 7841,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "id": 7837,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30783030303030303166",
                                "id": 7824,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "7771:10:43",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_31_by_1",
                                  "typeString": "int_const 31"
                                },
                                "value": "0x0000001f"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_31_by_1",
                                  "typeString": "int_const 31"
                                }
                              ],
                              "id": 7823,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "7764:6:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes4_$",
                                "typeString": "type(bytes4)"
                              },
                              "typeName": "bytes4"
                            },
                            "id": 7825,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7764:18:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                },
                                "id": 7835,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 7826,
                                    "name": "scheme",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7793,
                                    "src": "7784:6:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Scheme_$7328_memory_ptr",
                                      "typeString": "struct Controller.Scheme memory"
                                    }
                                  },
                                  "id": 7827,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "permissions",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 7327,
                                  "src": "7784:18:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "id": 7833,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "UnaryOperation",
                                      "operator": "~",
                                      "prefix": true,
                                      "src": "7804:32:43",
                                      "subExpression": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 7828,
                                            "name": "schemes",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 7342,
                                            "src": "7805:7:43",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$7328_storage_$",
                                              "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                                            }
                                          },
                                          "id": 7831,
                                          "indexExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 7829,
                                              "name": "msg",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 16782,
                                              "src": "7813:3:43",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_magic_message",
                                                "typeString": "msg"
                                              }
                                            },
                                            "id": 7830,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "sender",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "7813:10:43",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address_payable",
                                              "typeString": "address payable"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "7805:19:43",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Scheme_$7328_storage",
                                            "typeString": "struct Controller.Scheme storage ref"
                                          }
                                        },
                                        "id": 7832,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "permissions",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 7327,
                                        "src": "7805:31:43",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes4",
                                          "typeString": "bytes4"
                                        }
                                      },
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                      }
                                    }
                                  ],
                                  "id": 7834,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "7803:34:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                "src": "7784:53:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              }
                            ],
                            "id": 7836,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "7783:55:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "7764:74:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 7839,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7849:1:43",
                              "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": 7838,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "7842:6:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes4_$",
                              "typeString": "type(bytes4)"
                            },
                            "typeName": "bytes4"
                          },
                          "id": 7840,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7842:9:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "7764:87:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 7822,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        16785,
                        16786
                      ],
                      "referencedDeclaration": 16785,
                      "src": "7756:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 7842,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7756:96:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7843,
                  "nodeType": "ExpressionStatement",
                  "src": "7756:96:43"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7849,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 7844,
                          "name": "schemes",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7342,
                          "src": "7896:7:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$7328_storage_$",
                            "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                          }
                        },
                        "id": 7846,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 7845,
                          "name": "_scheme",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7773,
                          "src": "7904:7:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "7896:16:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Scheme_$7328_storage",
                          "typeString": "struct Controller.Scheme storage ref"
                        }
                      },
                      "id": 7847,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "paramsHash",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7325,
                      "src": "7896:27:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 7848,
                      "name": "_paramsHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7775,
                      "src": "7926:11:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "7896:41:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 7850,
                  "nodeType": "ExpressionStatement",
                  "src": "7896:41:43"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7860,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 7851,
                          "name": "schemes",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7342,
                          "src": "7947:7:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$7328_storage_$",
                            "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                          }
                        },
                        "id": 7853,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 7852,
                          "name": "_scheme",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7773,
                          "src": "7955:7:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "7947:16:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Scheme_$7328_storage",
                          "typeString": "struct Controller.Scheme storage ref"
                        }
                      },
                      "id": 7854,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "permissions",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7327,
                      "src": "7947:28:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      },
                      "id": 7859,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 7855,
                        "name": "_permissions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7777,
                        "src": "7978:12:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "|",
                      "rightExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30783030303030303031",
                            "id": 7857,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7998:10:43",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "0x00000001"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            }
                          ],
                          "id": 7856,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "7991:6:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes4_$",
                            "typeString": "type(bytes4)"
                          },
                          "typeName": "bytes4"
                        },
                        "id": 7858,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7991:18:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "src": "7978:31:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      }
                    },
                    "src": "7947:62:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "id": 7861,
                  "nodeType": "ExpressionStatement",
                  "src": "7947:62:43"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7863,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16782,
                          "src": "8039:3:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 7864,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "8039:10:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7865,
                        "name": "_scheme",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7773,
                        "src": "8051:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 7862,
                      "name": "RegisterScheme",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7394,
                      "src": "8024:14:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 7866,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8024:35:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7867,
                  "nodeType": "EmitStatement",
                  "src": "8019:40:43"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 7868,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "8076:4:43",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 7791,
                  "id": 7869,
                  "nodeType": "Return",
                  "src": "8069:11:43"
                }
              ]
            },
            "documentation": "@dev register a scheme\n@param _scheme the address of the scheme\n@param _paramsHash a hashed configuration of the usage of the scheme\n@param _permissions the permissions the new scheme will have\n@return bool which represents a success",
            "id": 7871,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7782,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7781,
                  "name": "onlyRegisteringSchemes",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7505,
                  "src": "7093:22:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7093:22:43"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "hexValue": "7265676973746572536368656d65",
                    "id": 7784,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "7144:16:43",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_c6de131411a6b4c4ab26bd5c5ac65f44cdd792220de1a6733d66d35c3433e601",
                      "typeString": "literal_string \"registerScheme\""
                    },
                    "value": "registerScheme"
                  }
                ],
                "id": 7785,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7783,
                  "name": "onlySubjectToConstraint",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7658,
                  "src": "7120:23:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7120:41:43"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 7787,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7779,
                    "src": "7180:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 7788,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7786,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7672,
                  "src": "7166:13:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7166:22:43"
              }
            ],
            "name": "registerScheme",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7780,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7773,
                  "name": "_scheme",
                  "nodeType": "VariableDeclaration",
                  "scope": 7871,
                  "src": "7000:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7772,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7000:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7775,
                  "name": "_paramsHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 7871,
                  "src": "7017:19:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 7774,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7017:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7777,
                  "name": "_permissions",
                  "nodeType": "VariableDeclaration",
                  "scope": 7871,
                  "src": "7038:19:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 7776,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "7038:6:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7779,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 7871,
                  "src": "7059:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7778,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7059:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6999:76:43"
            },
            "returnParameters": {
              "id": 7791,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7790,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7871,
                  "src": "7201:4:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7789,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "7201:4:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7200:6:43"
            },
            "scope": 8772,
            "src": "6976:1111:43",
            "stateMutability": "nonpayable",
            "superFunction": 8822,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7934,
              "nodeType": "Block",
              "src": "8434:440:43",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 7892,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7889,
                          "name": "_scheme",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7873,
                          "src": "8508:7:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 7888,
                        "name": "_isSchemeRegistered",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8771,
                        "src": "8488:19:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                          "typeString": "function (address) view returns (bool)"
                        }
                      },
                      "id": 7890,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8488:28:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "66616c7365",
                      "id": 7891,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8520:5:43",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "false"
                    },
                    "src": "8488:37:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7896,
                  "nodeType": "IfStatement",
                  "src": "8484:80:43",
                  "trueBody": {
                    "id": 7895,
                    "nodeType": "Block",
                    "src": "8527:37:43",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 7893,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "8548:5:43",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 7887,
                        "id": 7894,
                        "nodeType": "Return",
                        "src": "8541:12:43"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 7918,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "id": 7914,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30783030303030303166",
                                "id": 7899,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "8650:10:43",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_31_by_1",
                                  "typeString": "int_const 31"
                                },
                                "value": "0x0000001f"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_31_by_1",
                                  "typeString": "int_const 31"
                                }
                              ],
                              "id": 7898,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "8643:6:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes4_$",
                                "typeString": "type(bytes4)"
                              },
                              "typeName": "bytes4"
                            },
                            "id": 7900,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8643:18:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                },
                                "id": 7912,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 7901,
                                      "name": "schemes",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7342,
                                      "src": "8663:7:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$7328_storage_$",
                                        "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                                      }
                                    },
                                    "id": 7903,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 7902,
                                      "name": "_scheme",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7873,
                                      "src": "8671:7:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "8663:16:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Scheme_$7328_storage",
                                      "typeString": "struct Controller.Scheme storage ref"
                                    }
                                  },
                                  "id": 7904,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "permissions",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 7327,
                                  "src": "8663:28:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "id": 7910,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "UnaryOperation",
                                      "operator": "~",
                                      "prefix": true,
                                      "src": "8693:32:43",
                                      "subExpression": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 7905,
                                            "name": "schemes",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 7342,
                                            "src": "8694:7:43",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$7328_storage_$",
                                              "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                                            }
                                          },
                                          "id": 7908,
                                          "indexExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 7906,
                                              "name": "msg",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 16782,
                                              "src": "8702:3:43",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_magic_message",
                                                "typeString": "msg"
                                              }
                                            },
                                            "id": 7907,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "sender",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "8702:10:43",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address_payable",
                                              "typeString": "address payable"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "8694:19:43",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Scheme_$7328_storage",
                                            "typeString": "struct Controller.Scheme storage ref"
                                          }
                                        },
                                        "id": 7909,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "permissions",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 7327,
                                        "src": "8694:31:43",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes4",
                                          "typeString": "bytes4"
                                        }
                                      },
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                      }
                                    }
                                  ],
                                  "id": 7911,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "8692:34:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                "src": "8663:63:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              }
                            ],
                            "id": 7913,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "8662:65:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "8643:84:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 7916,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8738:1:43",
                              "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": 7915,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "8731:6:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes4_$",
                              "typeString": "type(bytes4)"
                            },
                            "typeName": "bytes4"
                          },
                          "id": 7917,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8731:9:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "8643:97:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 7897,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        16785,
                        16786
                      ],
                      "referencedDeclaration": 16785,
                      "src": "8635:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 7919,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8635:106:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7920,
                  "nodeType": "ExpressionStatement",
                  "src": "8635:106:43"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7922,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16782,
                          "src": "8793:3:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 7923,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "8793:10:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7924,
                        "name": "_scheme",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7873,
                        "src": "8805:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 7921,
                      "name": "UnregisterScheme",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7400,
                      "src": "8776:16:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 7925,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8776:37:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7926,
                  "nodeType": "EmitStatement",
                  "src": "8771:42:43"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7930,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "8823:23:43",
                    "subExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 7927,
                        "name": "schemes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7342,
                        "src": "8830:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$7328_storage_$",
                          "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                        }
                      },
                      "id": 7929,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 7928,
                        "name": "_scheme",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7873,
                        "src": "8838:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "8830:16:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Scheme_$7328_storage",
                        "typeString": "struct Controller.Scheme storage ref"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7931,
                  "nodeType": "ExpressionStatement",
                  "src": "8823:23:43"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 7932,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "8863:4:43",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 7887,
                  "id": 7933,
                  "nodeType": "Return",
                  "src": "8856:11:43"
                }
              ]
            },
            "documentation": "@dev unregister a scheme\n@param _scheme the address of the scheme\n@return bool which represents a success",
            "id": 7935,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7878,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7877,
                  "name": "onlyRegisteringSchemes",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7505,
                  "src": "8314:22:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8314:22:43"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "hexValue": "756e7265676973746572536368656d65",
                    "id": 7880,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "8365:18:43",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_b691bb484251ef01d241995950a354987a3e0c00fe2381f87b564ec41aab942c",
                      "typeString": "literal_string \"unregisterScheme\""
                    },
                    "value": "unregisterScheme"
                  }
                ],
                "id": 7881,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7879,
                  "name": "onlySubjectToConstraint",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7658,
                  "src": "8341:23:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8341:43:43"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 7883,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7875,
                    "src": "8403:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 7884,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7882,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7672,
                  "src": "8389:13:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8389:22:43"
              }
            ],
            "name": "unregisterScheme",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7876,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7873,
                  "name": "_scheme",
                  "nodeType": "VariableDeclaration",
                  "scope": 7935,
                  "src": "8263:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7872,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8263:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7875,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 7935,
                  "src": "8280:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7874,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8280:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8261:35:43"
            },
            "returnParameters": {
              "id": 7887,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7886,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7935,
                  "src": "8424:4:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7885,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8424:4:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8423:6:43"
            },
            "scope": 8772,
            "src": "8236:638:43",
            "stateMutability": "nonpayable",
            "superFunction": 8831,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7970,
              "nodeType": "Block",
              "src": "9073:211:43",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 7950,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 7946,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16782,
                            "src": "9107:3:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 7947,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "9107:10:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        ],
                        "id": 7945,
                        "name": "_isSchemeRegistered",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8771,
                        "src": "9087:19:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                          "typeString": "function (address) view returns (bool)"
                        }
                      },
                      "id": 7948,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9087:31:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "66616c7365",
                      "id": 7949,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9122:5:43",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "false"
                    },
                    "src": "9087:40:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7954,
                  "nodeType": "IfStatement",
                  "src": "9083:83:43",
                  "trueBody": {
                    "id": 7953,
                    "nodeType": "Block",
                    "src": "9129:37:43",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 7951,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "9150:5:43",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 7944,
                        "id": 7952,
                        "nodeType": "Return",
                        "src": "9143:12:43"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7959,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "9175:26:43",
                    "subExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 7955,
                        "name": "schemes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7342,
                        "src": "9182:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$7328_storage_$",
                          "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                        }
                      },
                      "id": 7958,
                      "indexExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7956,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16782,
                          "src": "9190:3:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 7957,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "9190:10:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "9182:19:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Scheme_$7328_storage",
                        "typeString": "struct Controller.Scheme storage ref"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7960,
                  "nodeType": "ExpressionStatement",
                  "src": "9175:26:43"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7962,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16782,
                          "src": "9233:3:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 7963,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "9233:10:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7964,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16782,
                          "src": "9245:3:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 7965,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "9245:10:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 7961,
                      "name": "UnregisterScheme",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7400,
                      "src": "9216:16:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 7966,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9216:40:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7967,
                  "nodeType": "EmitStatement",
                  "src": "9211:45:43"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 7968,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "9273:4:43",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 7944,
                  "id": 7969,
                  "nodeType": "Return",
                  "src": "9266:11:43"
                }
              ]
            },
            "documentation": "@dev unregister the caller's scheme\n@return bool which represents a success",
            "id": 7971,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 7940,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7937,
                    "src": "9050:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 7941,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7939,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7672,
                  "src": "9036:13:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9036:22:43"
              }
            ],
            "name": "unregisterSelf",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7938,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7937,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 7971,
                  "src": "9010:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7936,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9010:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9009:17:43"
            },
            "returnParameters": {
              "id": 7944,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7943,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7971,
                  "src": "9067:4:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7942,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "9067:4:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9066:6:43"
            },
            "scope": 8772,
            "src": "8986:298:43",
            "stateMutability": "nonpayable",
            "superFunction": 8838,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8113,
              "nodeType": "Block",
              "src": "9717:1417:43",
              "statements": [
                {
                  "assignments": [
                    7990
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7990,
                      "name": "when",
                      "nodeType": "VariableDeclaration",
                      "scope": 8113,
                      "src": "9727:40:43",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_CallPhase_$9087",
                        "typeString": "enum GlobalConstraintInterface.CallPhase"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7989,
                        "name": "GlobalConstraintInterface.CallPhase",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 9087,
                        "src": "9727:35:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_CallPhase_$9087",
                          "typeString": "enum GlobalConstraintInterface.CallPhase"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7996,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7992,
                            "name": "_globalConstraint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7973,
                            "src": "9796:17:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 7991,
                          "name": "GlobalConstraintInterface",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9115,
                          "src": "9770:25:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_GlobalConstraintInterface_$9115_$",
                            "typeString": "type(contract GlobalConstraintInterface)"
                          }
                        },
                        "id": 7993,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9770:44:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GlobalConstraintInterface_$9115",
                          "typeString": "contract GlobalConstraintInterface"
                        }
                      },
                      "id": 7994,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "when",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9114,
                      "src": "9770:49:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$__$returns$_t_enum$_CallPhase_$9087_$",
                        "typeString": "function () external returns (enum GlobalConstraintInterface.CallPhase)"
                      }
                    },
                    "id": 7995,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9770:51:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_CallPhase_$9087",
                      "typeString": "enum GlobalConstraintInterface.CallPhase"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9727:94:43"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 8009,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_CallPhase_$9087",
                            "typeString": "enum GlobalConstraintInterface.CallPhase"
                          },
                          "id": 8001,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 7997,
                            "name": "when",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7990,
                            "src": "9836:4:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$9087",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 7998,
                                "name": "GlobalConstraintInterface",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9115,
                                "src": "9844:25:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_GlobalConstraintInterface_$9115_$",
                                  "typeString": "type(contract GlobalConstraintInterface)"
                                }
                              },
                              "id": 7999,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "CallPhase",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9087,
                              "src": "9844:35:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_CallPhase_$9087_$",
                                "typeString": "type(enum GlobalConstraintInterface.CallPhase)"
                              }
                            },
                            "id": 8000,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "Pre",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "9844:39:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$9087",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "src": "9836:47:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 8002,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "9835:49:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_CallPhase_$9087",
                            "typeString": "enum GlobalConstraintInterface.CallPhase"
                          },
                          "id": 8007,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 8003,
                            "name": "when",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7990,
                            "src": "9900:4:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$9087",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8004,
                                "name": "GlobalConstraintInterface",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9115,
                                "src": "9908:25:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_GlobalConstraintInterface_$9115_$",
                                  "typeString": "type(contract GlobalConstraintInterface)"
                                }
                              },
                              "id": 8005,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "CallPhase",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9087,
                              "src": "9908:35:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_CallPhase_$9087_$",
                                "typeString": "type(enum GlobalConstraintInterface.CallPhase)"
                              }
                            },
                            "id": 8006,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "PreAndPost",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "9908:46:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$9087",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "src": "9900:54:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 8008,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "9899:56:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "9835:120:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8050,
                  "nodeType": "IfStatement",
                  "src": "9831:596:43",
                  "trueBody": {
                    "id": 8049,
                    "nodeType": "Block",
                    "src": "9957:470:43",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "id": 8014,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "9975:61:43",
                          "subExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 8010,
                                "name": "globalConstraintsRegisterPre",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7360,
                                "src": "9976:28:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$7338_storage_$",
                                  "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                                }
                              },
                              "id": 8012,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 8011,
                                "name": "_globalConstraint",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7973,
                                "src": "10005:17:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "9976:47:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_storage",
                                "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                              }
                            },
                            "id": 8013,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "isRegistered",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7335,
                            "src": "9976:60:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 8047,
                          "nodeType": "Block",
                          "src": "10292:125:43",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 8045,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 8037,
                                      "name": "globalConstraintsPre",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7353,
                                      "src": "10310:20:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
                                        "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                      }
                                    },
                                    "id": 8042,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 8038,
                                          "name": "globalConstraintsRegisterPre",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7360,
                                          "src": "10331:28:43",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$7338_storage_$",
                                            "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                                          }
                                        },
                                        "id": 8040,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "id": 8039,
                                          "name": "_globalConstraint",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7973,
                                          "src": "10360:17:43",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "10331:47:43",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_storage",
                                          "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                                        }
                                      },
                                      "id": 8041,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "index",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 7337,
                                      "src": "10331:53:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "10310:75:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_GlobalConstraint_$7333_storage",
                                      "typeString": "struct Controller.GlobalConstraint storage ref"
                                    }
                                  },
                                  "id": 8043,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "params",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 7332,
                                  "src": "10310:82:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 8044,
                                  "name": "_params",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7975,
                                  "src": "10395:7:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "src": "10310:92:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "id": 8046,
                              "nodeType": "ExpressionStatement",
                              "src": "10310:92:43"
                            }
                          ]
                        },
                        "id": 8048,
                        "nodeType": "IfStatement",
                        "src": "9971:446:43",
                        "trueBody": {
                          "id": 8036,
                          "nodeType": "Block",
                          "src": "10038:249:43",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 8019,
                                        "name": "_globalConstraint",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7973,
                                        "src": "10099:17:43",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "id": 8020,
                                        "name": "_params",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7975,
                                        "src": "10118:7:43",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      ],
                                      "id": 8018,
                                      "name": "GlobalConstraint",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7333,
                                      "src": "10082:16:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_struct$_GlobalConstraint_$7333_storage_ptr_$",
                                        "typeString": "type(struct Controller.GlobalConstraint storage pointer)"
                                      }
                                    },
                                    "id": 8021,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "structConstructorCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "10082:44:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_GlobalConstraint_$7333_memory",
                                      "typeString": "struct Controller.GlobalConstraint memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_struct$_GlobalConstraint_$7333_memory",
                                      "typeString": "struct Controller.GlobalConstraint memory"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 8015,
                                    "name": "globalConstraintsPre",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7353,
                                    "src": "10056:20:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
                                      "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                    }
                                  },
                                  "id": 8017,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "push",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "10056:25:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_arraypush_nonpayable$_t_struct$_GlobalConstraint_$7333_storage_$returns$_t_uint256_$",
                                    "typeString": "function (struct Controller.GlobalConstraint storage ref) returns (uint256)"
                                  }
                                },
                                "id": 8022,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10056:71:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 8023,
                              "nodeType": "ExpressionStatement",
                              "src": "10056:71:43"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 8034,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 8024,
                                    "name": "globalConstraintsRegisterPre",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7360,
                                    "src": "10145:28:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$7338_storage_$",
                                      "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                                    }
                                  },
                                  "id": 8026,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 8025,
                                    "name": "_globalConstraint",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7973,
                                    "src": "10174:17:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "10145:47:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_storage",
                                    "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "hexValue": "74727565",
                                      "id": 8028,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "bool",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "10236:4:43",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      "value": "true"
                                    },
                                    {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 8032,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 8029,
                                          "name": "globalConstraintsPre",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7353,
                                          "src": "10242:20:43",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
                                            "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                          }
                                        },
                                        "id": 8030,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "length",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": null,
                                        "src": "10242:27:43",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "-",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "31",
                                        "id": 8031,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "10270:1:43",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "10242:29:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 8027,
                                    "name": "GlobalConstraintRegister",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7338,
                                    "src": "10211:24:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_struct$_GlobalConstraintRegister_$7338_storage_ptr_$",
                                      "typeString": "type(struct Controller.GlobalConstraintRegister storage pointer)"
                                    }
                                  },
                                  "id": 8033,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "structConstructorCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "10211:61:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_memory",
                                    "typeString": "struct Controller.GlobalConstraintRegister memory"
                                  }
                                },
                                "src": "10145:127:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_storage",
                                  "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                                }
                              },
                              "id": 8035,
                              "nodeType": "ExpressionStatement",
                              "src": "10145:127:43"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 8063,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_CallPhase_$9087",
                            "typeString": "enum GlobalConstraintInterface.CallPhase"
                          },
                          "id": 8055,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 8051,
                            "name": "when",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7990,
                            "src": "10441:4:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$9087",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8052,
                                "name": "GlobalConstraintInterface",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9115,
                                "src": "10449:25:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_GlobalConstraintInterface_$9115_$",
                                  "typeString": "type(contract GlobalConstraintInterface)"
                                }
                              },
                              "id": 8053,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "CallPhase",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9087,
                              "src": "10449:35:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_CallPhase_$9087_$",
                                "typeString": "type(enum GlobalConstraintInterface.CallPhase)"
                              }
                            },
                            "id": 8054,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "Post",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "10449:40:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$9087",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "src": "10441:48:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 8056,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "10440:50:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_CallPhase_$9087",
                            "typeString": "enum GlobalConstraintInterface.CallPhase"
                          },
                          "id": 8061,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 8057,
                            "name": "when",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7990,
                            "src": "10506:4:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$9087",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8058,
                                "name": "GlobalConstraintInterface",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9115,
                                "src": "10514:25:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_GlobalConstraintInterface_$9115_$",
                                  "typeString": "type(contract GlobalConstraintInterface)"
                                }
                              },
                              "id": 8059,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "CallPhase",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9087,
                              "src": "10514:35:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_CallPhase_$9087_$",
                                "typeString": "type(enum GlobalConstraintInterface.CallPhase)"
                              }
                            },
                            "id": 8060,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "PreAndPost",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "10514:46:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$9087",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "src": "10506:54:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 8062,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "10505:56:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "10440:121:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8104,
                  "nodeType": "IfStatement",
                  "src": "10436:603:43",
                  "trueBody": {
                    "id": 8103,
                    "nodeType": "Block",
                    "src": "10563:476:43",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "id": 8068,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "10581:62:43",
                          "subExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 8064,
                                "name": "globalConstraintsRegisterPost",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7364,
                                "src": "10582:29:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$7338_storage_$",
                                  "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                                }
                              },
                              "id": 8066,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 8065,
                                "name": "_globalConstraint",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7973,
                                "src": "10612:17:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "10582:48:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_storage",
                                "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                              }
                            },
                            "id": 8067,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "isRegistered",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7335,
                            "src": "10582:61:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 8101,
                          "nodeType": "Block",
                          "src": "10902:127:43",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 8099,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 8091,
                                      "name": "globalConstraintsPost",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7356,
                                      "src": "10920:21:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
                                        "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                      }
                                    },
                                    "id": 8096,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 8092,
                                          "name": "globalConstraintsRegisterPost",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7364,
                                          "src": "10942:29:43",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$7338_storage_$",
                                            "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                                          }
                                        },
                                        "id": 8094,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "id": 8093,
                                          "name": "_globalConstraint",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7973,
                                          "src": "10972:17:43",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "10942:48:43",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_storage",
                                          "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                                        }
                                      },
                                      "id": 8095,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "index",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 7337,
                                      "src": "10942:54:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "10920:77:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_GlobalConstraint_$7333_storage",
                                      "typeString": "struct Controller.GlobalConstraint storage ref"
                                    }
                                  },
                                  "id": 8097,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "params",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 7332,
                                  "src": "10920:84:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 8098,
                                  "name": "_params",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7975,
                                  "src": "11007:7:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "src": "10920:94:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "id": 8100,
                              "nodeType": "ExpressionStatement",
                              "src": "10920:94:43"
                            }
                          ]
                        },
                        "id": 8102,
                        "nodeType": "IfStatement",
                        "src": "10577:452:43",
                        "trueBody": {
                          "id": 8090,
                          "nodeType": "Block",
                          "src": "10645:252:43",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 8073,
                                        "name": "_globalConstraint",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7973,
                                        "src": "10707:17:43",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "id": 8074,
                                        "name": "_params",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7975,
                                        "src": "10726:7:43",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      ],
                                      "id": 8072,
                                      "name": "GlobalConstraint",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7333,
                                      "src": "10690:16:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_struct$_GlobalConstraint_$7333_storage_ptr_$",
                                        "typeString": "type(struct Controller.GlobalConstraint storage pointer)"
                                      }
                                    },
                                    "id": 8075,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "structConstructorCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "10690:44:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_GlobalConstraint_$7333_memory",
                                      "typeString": "struct Controller.GlobalConstraint memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_struct$_GlobalConstraint_$7333_memory",
                                      "typeString": "struct Controller.GlobalConstraint memory"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 8069,
                                    "name": "globalConstraintsPost",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7356,
                                    "src": "10663:21:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
                                      "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                    }
                                  },
                                  "id": 8071,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "push",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "10663:26:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_arraypush_nonpayable$_t_struct$_GlobalConstraint_$7333_storage_$returns$_t_uint256_$",
                                    "typeString": "function (struct Controller.GlobalConstraint storage ref) returns (uint256)"
                                  }
                                },
                                "id": 8076,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10663:72:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 8077,
                              "nodeType": "ExpressionStatement",
                              "src": "10663:72:43"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 8088,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 8078,
                                    "name": "globalConstraintsRegisterPost",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7364,
                                    "src": "10753:29:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$7338_storage_$",
                                      "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                                    }
                                  },
                                  "id": 8080,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 8079,
                                    "name": "_globalConstraint",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7973,
                                    "src": "10783:17:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "10753:48:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_storage",
                                    "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "hexValue": "74727565",
                                      "id": 8082,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "bool",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "10845:4:43",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      "value": "true"
                                    },
                                    {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 8086,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 8083,
                                          "name": "globalConstraintsPost",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7356,
                                          "src": "10851:21:43",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
                                            "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                          }
                                        },
                                        "id": 8084,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "length",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": null,
                                        "src": "10851:28:43",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "-",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "31",
                                        "id": 8085,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "10880:1:43",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "10851:30:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 8081,
                                    "name": "GlobalConstraintRegister",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7338,
                                    "src": "10820:24:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_struct$_GlobalConstraintRegister_$7338_storage_ptr_$",
                                      "typeString": "type(struct Controller.GlobalConstraintRegister storage pointer)"
                                    }
                                  },
                                  "id": 8087,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "structConstructorCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "10820:62:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_memory",
                                    "typeString": "struct Controller.GlobalConstraintRegister memory"
                                  }
                                },
                                "src": "10753:129:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_storage",
                                  "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                                }
                              },
                              "id": 8089,
                              "nodeType": "ExpressionStatement",
                              "src": "10753:129:43"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8106,
                        "name": "_globalConstraint",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7973,
                        "src": "11073:17:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8107,
                        "name": "_params",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7975,
                        "src": "11092:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8108,
                        "name": "when",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7990,
                        "src": "11101:4:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_CallPhase_$9087",
                          "typeString": "enum GlobalConstraintInterface.CallPhase"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_enum$_CallPhase_$9087",
                          "typeString": "enum GlobalConstraintInterface.CallPhase"
                        }
                      ],
                      "id": 8105,
                      "name": "AddGlobalConstraint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7414,
                      "src": "11053:19:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes32_$_t_enum$_CallPhase_$9087_$returns$__$",
                        "typeString": "function (address,bytes32,enum GlobalConstraintInterface.CallPhase)"
                      }
                    },
                    "id": 8109,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11053:53:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8110,
                  "nodeType": "EmitStatement",
                  "src": "11048:58:43"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 8111,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "11123:4:43",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 7986,
                  "id": 8112,
                  "nodeType": "Return",
                  "src": "11116:11:43"
                }
              ]
            },
            "documentation": "@dev add or update Global Constraint\n@param _globalConstraint the address of the global constraint to be added.\n@param _params the constraint parameters hash.\n@return bool which represents a success",
            "id": 8114,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7980,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7979,
                  "name": "onlyGlobalConstraintsScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7525,
                  "src": "9640:27:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9640:27:43"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 7982,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7977,
                    "src": "9686:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 7983,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7981,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7672,
                  "src": "9672:13:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9672:22:43"
              }
            ],
            "name": "addGlobalConstraint",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7978,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7973,
                  "name": "_globalConstraint",
                  "nodeType": "VariableDeclaration",
                  "scope": 8114,
                  "src": "9562:25:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7972,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9562:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7975,
                  "name": "_params",
                  "nodeType": "VariableDeclaration",
                  "scope": 8114,
                  "src": "9589:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 7974,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "9589:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7977,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 8114,
                  "src": "9606:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7976,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9606:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9561:61:43"
            },
            "returnParameters": {
              "id": 7986,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7985,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8114,
                  "src": "9707:4:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7984,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "9707:4:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9706:6:43"
            },
            "scope": 8772,
            "src": "9533:1601:43",
            "stateMutability": "nonpayable",
            "superFunction": 8849,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8310,
              "nodeType": "Block",
              "src": "11544:2234:43",
              "statements": [
                {
                  "assignments": [
                    8129
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8129,
                      "name": "globalConstraintRegister",
                      "nodeType": "VariableDeclaration",
                      "scope": 8310,
                      "src": "11554:56:43",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_memory_ptr",
                        "typeString": "struct Controller.GlobalConstraintRegister"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 8128,
                        "name": "GlobalConstraintRegister",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 7338,
                        "src": "11554:24:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_storage_ptr",
                          "typeString": "struct Controller.GlobalConstraintRegister"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8130,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11554:56:43"
                },
                {
                  "assignments": [
                    8132
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8132,
                      "name": "globalConstraint",
                      "nodeType": "VariableDeclaration",
                      "scope": 8310,
                      "src": "11620:40:43",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_GlobalConstraint_$7333_memory_ptr",
                        "typeString": "struct Controller.GlobalConstraint"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 8131,
                        "name": "GlobalConstraint",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 7333,
                        "src": "11620:16:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_GlobalConstraint_$7333_storage_ptr",
                          "typeString": "struct Controller.GlobalConstraint"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8133,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11620:40:43"
                },
                {
                  "assignments": [
                    8137
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8137,
                      "name": "when",
                      "nodeType": "VariableDeclaration",
                      "scope": 8310,
                      "src": "11670:40:43",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_CallPhase_$9087",
                        "typeString": "enum GlobalConstraintInterface.CallPhase"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 8136,
                        "name": "GlobalConstraintInterface.CallPhase",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 9087,
                        "src": "11670:35:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_CallPhase_$9087",
                          "typeString": "enum GlobalConstraintInterface.CallPhase"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8143,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 8139,
                            "name": "_globalConstraint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8116,
                            "src": "11739:17:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 8138,
                          "name": "GlobalConstraintInterface",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9115,
                          "src": "11713:25:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_GlobalConstraintInterface_$9115_$",
                            "typeString": "type(contract GlobalConstraintInterface)"
                          }
                        },
                        "id": 8140,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11713:44:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GlobalConstraintInterface_$9115",
                          "typeString": "contract GlobalConstraintInterface"
                        }
                      },
                      "id": 8141,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "when",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9114,
                      "src": "11713:49:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$__$returns$_t_enum$_CallPhase_$9087_$",
                        "typeString": "function () external returns (enum GlobalConstraintInterface.CallPhase)"
                      }
                    },
                    "id": 8142,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11713:51:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_CallPhase_$9087",
                      "typeString": "enum GlobalConstraintInterface.CallPhase"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11670:94:43"
                },
                {
                  "assignments": [
                    8145
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8145,
                      "name": "retVal",
                      "nodeType": "VariableDeclaration",
                      "scope": 8310,
                      "src": "11774:11:43",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 8144,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "11774:4:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8147,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "66616c7365",
                    "id": 8146,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "11788:5:43",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11774:19:43"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 8160,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_CallPhase_$9087",
                            "typeString": "enum GlobalConstraintInterface.CallPhase"
                          },
                          "id": 8152,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 8148,
                            "name": "when",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8137,
                            "src": "11809:4:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$9087",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8149,
                                "name": "GlobalConstraintInterface",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9115,
                                "src": "11817:25:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_GlobalConstraintInterface_$9115_$",
                                  "typeString": "type(contract GlobalConstraintInterface)"
                                }
                              },
                              "id": 8150,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "CallPhase",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9087,
                              "src": "11817:35:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_CallPhase_$9087_$",
                                "typeString": "type(enum GlobalConstraintInterface.CallPhase)"
                              }
                            },
                            "id": 8151,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "Pre",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "11817:39:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$9087",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "src": "11809:47:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 8153,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "11808:49:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_CallPhase_$9087",
                            "typeString": "enum GlobalConstraintInterface.CallPhase"
                          },
                          "id": 8158,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 8154,
                            "name": "when",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8137,
                            "src": "11873:4:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$9087",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8155,
                                "name": "GlobalConstraintInterface",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9115,
                                "src": "11881:25:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_GlobalConstraintInterface_$9115_$",
                                  "typeString": "type(contract GlobalConstraintInterface)"
                                }
                              },
                              "id": 8156,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "CallPhase",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9087,
                              "src": "11881:35:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_CallPhase_$9087_$",
                                "typeString": "type(enum GlobalConstraintInterface.CallPhase)"
                              }
                            },
                            "id": 8157,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "PreAndPost",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "11881:46:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$9087",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "src": "11873:54:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 8159,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "11872:56:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "11808:120:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8220,
                  "nodeType": "IfStatement",
                  "src": "11804:852:43",
                  "trueBody": {
                    "id": 8219,
                    "nodeType": "Block",
                    "src": "11930:726:43",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8165,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 8161,
                            "name": "globalConstraintRegister",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8129,
                            "src": "11944:24:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_memory_ptr",
                              "typeString": "struct Controller.GlobalConstraintRegister memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 8162,
                              "name": "globalConstraintsRegisterPre",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7360,
                              "src": "11971:28:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$7338_storage_$",
                                "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                              }
                            },
                            "id": 8164,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 8163,
                              "name": "_globalConstraint",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8116,
                              "src": "12000:17:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "11971:47:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_storage",
                              "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                            }
                          },
                          "src": "11944:74:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_memory_ptr",
                            "typeString": "struct Controller.GlobalConstraintRegister memory"
                          }
                        },
                        "id": 8166,
                        "nodeType": "ExpressionStatement",
                        "src": "11944:74:43"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8167,
                            "name": "globalConstraintRegister",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8129,
                            "src": "12036:24:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_memory_ptr",
                              "typeString": "struct Controller.GlobalConstraintRegister memory"
                            }
                          },
                          "id": 8168,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "isRegistered",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7335,
                          "src": "12036:37:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 8218,
                        "nodeType": "IfStatement",
                        "src": "12032:614:43",
                        "trueBody": {
                          "id": 8217,
                          "nodeType": "Block",
                          "src": "12075:571:43",
                          "statements": [
                            {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 8175,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 8169,
                                    "name": "globalConstraintRegister",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8129,
                                    "src": "12097:24:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_memory_ptr",
                                      "typeString": "struct Controller.GlobalConstraintRegister memory"
                                    }
                                  },
                                  "id": 8170,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "index",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 7337,
                                  "src": "12097:30:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 8174,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 8171,
                                      "name": "globalConstraintsPre",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7353,
                                      "src": "12130:20:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
                                        "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                      }
                                    },
                                    "id": 8172,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "length",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "12130:27:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "31",
                                    "id": 8173,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "12158:1:43",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "src": "12130:29:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "12097:62:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": null,
                              "id": 8202,
                              "nodeType": "IfStatement",
                              "src": "12093:389:43",
                              "trueBody": {
                                "id": 8201,
                                "nodeType": "Block",
                                "src": "12161:321:43",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 8183,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 8176,
                                        "name": "globalConstraint",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8132,
                                        "src": "12183:16:43",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_GlobalConstraint_$7333_memory_ptr",
                                          "typeString": "struct Controller.GlobalConstraint memory"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 8177,
                                          "name": "globalConstraintsPre",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7353,
                                          "src": "12202:20:43",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
                                            "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                          }
                                        },
                                        "id": 8182,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 8181,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 8178,
                                              "name": "globalConstraintsPre",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 7353,
                                              "src": "12223:20:43",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
                                                "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                              }
                                            },
                                            "id": 8179,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "length",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "12223:27:43",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "-",
                                          "rightExpression": {
                                            "argumentTypes": null,
                                            "hexValue": "31",
                                            "id": 8180,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "12251:1:43",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_1_by_1",
                                              "typeString": "int_const 1"
                                            },
                                            "value": "1"
                                          },
                                          "src": "12223:29:43",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "12202:51:43",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_GlobalConstraint_$7333_storage",
                                          "typeString": "struct Controller.GlobalConstraint storage ref"
                                        }
                                      },
                                      "src": "12183:70:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_GlobalConstraint_$7333_memory_ptr",
                                        "typeString": "struct Controller.GlobalConstraint memory"
                                      }
                                    },
                                    "id": 8184,
                                    "nodeType": "ExpressionStatement",
                                    "src": "12183:70:43"
                                  },
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 8190,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 8185,
                                          "name": "globalConstraintsPre",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7353,
                                          "src": "12275:20:43",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
                                            "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                          }
                                        },
                                        "id": 8188,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 8186,
                                            "name": "globalConstraintRegister",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8129,
                                            "src": "12296:24:43",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_memory_ptr",
                                              "typeString": "struct Controller.GlobalConstraintRegister memory"
                                            }
                                          },
                                          "id": 8187,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "index",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 7337,
                                          "src": "12296:30:43",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "nodeType": "IndexAccess",
                                        "src": "12275:52:43",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_GlobalConstraint_$7333_storage",
                                          "typeString": "struct Controller.GlobalConstraint storage ref"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "id": 8189,
                                        "name": "globalConstraint",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8132,
                                        "src": "12330:16:43",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_GlobalConstraint_$7333_memory_ptr",
                                          "typeString": "struct Controller.GlobalConstraint memory"
                                        }
                                      },
                                      "src": "12275:71:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_GlobalConstraint_$7333_storage",
                                        "typeString": "struct Controller.GlobalConstraint storage ref"
                                      }
                                    },
                                    "id": 8191,
                                    "nodeType": "ExpressionStatement",
                                    "src": "12275:71:43"
                                  },
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 8199,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 8192,
                                            "name": "globalConstraintsRegisterPre",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 7360,
                                            "src": "12368:28:43",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$7338_storage_$",
                                              "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                                            }
                                          },
                                          "id": 8195,
                                          "indexExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 8193,
                                              "name": "globalConstraint",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 8132,
                                              "src": "12397:16:43",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_GlobalConstraint_$7333_memory_ptr",
                                                "typeString": "struct Controller.GlobalConstraint memory"
                                              }
                                            },
                                            "id": 8194,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "gcAddress",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 7330,
                                            "src": "12397:26:43",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "12368:56:43",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_storage",
                                            "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                                          }
                                        },
                                        "id": 8196,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "memberName": "index",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 7337,
                                        "src": "12368:62:43",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 8197,
                                          "name": "globalConstraintRegister",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 8129,
                                          "src": "12433:24:43",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_memory_ptr",
                                            "typeString": "struct Controller.GlobalConstraintRegister memory"
                                          }
                                        },
                                        "id": 8198,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "index",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 7337,
                                        "src": "12433:30:43",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "12368:95:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 8200,
                                    "nodeType": "ExpressionStatement",
                                    "src": "12368:95:43"
                                  }
                                ]
                              }
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 8206,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "--",
                                "prefix": false,
                                "src": "12499:29:43",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 8203,
                                    "name": "globalConstraintsPre",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7353,
                                    "src": "12499:20:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
                                      "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                    }
                                  },
                                  "id": 8205,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "length",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "12499:27:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 8207,
                              "nodeType": "ExpressionStatement",
                              "src": "12499:29:43"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 8211,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "delete",
                                "prefix": true,
                                "src": "12546:54:43",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 8208,
                                    "name": "globalConstraintsRegisterPre",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7360,
                                    "src": "12553:28:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$7338_storage_$",
                                      "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                                    }
                                  },
                                  "id": 8210,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 8209,
                                    "name": "_globalConstraint",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8116,
                                    "src": "12582:17:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "12553:47:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_storage",
                                    "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8212,
                              "nodeType": "ExpressionStatement",
                              "src": "12546:54:43"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 8215,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 8213,
                                  "name": "retVal",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8145,
                                  "src": "12618:6:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "hexValue": "74727565",
                                  "id": 8214,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "bool",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "12627:4:43",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "value": "true"
                                },
                                "src": "12618:13:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 8216,
                              "nodeType": "ExpressionStatement",
                              "src": "12618:13:43"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 8233,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_CallPhase_$9087",
                            "typeString": "enum GlobalConstraintInterface.CallPhase"
                          },
                          "id": 8225,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 8221,
                            "name": "when",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8137,
                            "src": "12670:4:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$9087",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8222,
                                "name": "GlobalConstraintInterface",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9115,
                                "src": "12678:25:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_GlobalConstraintInterface_$9115_$",
                                  "typeString": "type(contract GlobalConstraintInterface)"
                                }
                              },
                              "id": 8223,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "CallPhase",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9087,
                              "src": "12678:35:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_CallPhase_$9087_$",
                                "typeString": "type(enum GlobalConstraintInterface.CallPhase)"
                              }
                            },
                            "id": 8224,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "Post",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "12678:40:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$9087",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "src": "12670:48:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 8226,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "12669:50:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_CallPhase_$9087",
                            "typeString": "enum GlobalConstraintInterface.CallPhase"
                          },
                          "id": 8231,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 8227,
                            "name": "when",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8137,
                            "src": "12735:4:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$9087",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8228,
                                "name": "GlobalConstraintInterface",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9115,
                                "src": "12743:25:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_GlobalConstraintInterface_$9115_$",
                                  "typeString": "type(contract GlobalConstraintInterface)"
                                }
                              },
                              "id": 8229,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "CallPhase",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9087,
                              "src": "12743:35:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_CallPhase_$9087_$",
                                "typeString": "type(enum GlobalConstraintInterface.CallPhase)"
                              }
                            },
                            "id": 8230,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "PreAndPost",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "12743:46:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$9087",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "src": "12735:54:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 8232,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "12734:56:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "12669:121:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8293,
                  "nodeType": "IfStatement",
                  "src": "12665:861:43",
                  "trueBody": {
                    "id": 8292,
                    "nodeType": "Block",
                    "src": "12792:734:43",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8238,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 8234,
                            "name": "globalConstraintRegister",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8129,
                            "src": "12806:24:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_memory_ptr",
                              "typeString": "struct Controller.GlobalConstraintRegister memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 8235,
                              "name": "globalConstraintsRegisterPost",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7364,
                              "src": "12833:29:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$7338_storage_$",
                                "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                              }
                            },
                            "id": 8237,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 8236,
                              "name": "_globalConstraint",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8116,
                              "src": "12863:17:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "12833:48:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_storage",
                              "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                            }
                          },
                          "src": "12806:75:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_memory_ptr",
                            "typeString": "struct Controller.GlobalConstraintRegister memory"
                          }
                        },
                        "id": 8239,
                        "nodeType": "ExpressionStatement",
                        "src": "12806:75:43"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8240,
                            "name": "globalConstraintRegister",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8129,
                            "src": "12899:24:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_memory_ptr",
                              "typeString": "struct Controller.GlobalConstraintRegister memory"
                            }
                          },
                          "id": 8241,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "isRegistered",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7335,
                          "src": "12899:37:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 8291,
                        "nodeType": "IfStatement",
                        "src": "12895:621:43",
                        "trueBody": {
                          "id": 8290,
                          "nodeType": "Block",
                          "src": "12938:578:43",
                          "statements": [
                            {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 8248,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 8242,
                                    "name": "globalConstraintRegister",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8129,
                                    "src": "12960:24:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_memory_ptr",
                                      "typeString": "struct Controller.GlobalConstraintRegister memory"
                                    }
                                  },
                                  "id": 8243,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "index",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 7337,
                                  "src": "12960:30:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 8247,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 8244,
                                      "name": "globalConstraintsPost",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7356,
                                      "src": "12993:21:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
                                        "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                      }
                                    },
                                    "id": 8245,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "length",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "12993:28:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "31",
                                    "id": 8246,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "13022:1:43",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "src": "12993:30:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "12960:63:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": null,
                              "id": 8275,
                              "nodeType": "IfStatement",
                              "src": "12956:394:43",
                              "trueBody": {
                                "id": 8274,
                                "nodeType": "Block",
                                "src": "13025:325:43",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 8256,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 8249,
                                        "name": "globalConstraint",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8132,
                                        "src": "13047:16:43",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_GlobalConstraint_$7333_memory_ptr",
                                          "typeString": "struct Controller.GlobalConstraint memory"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 8250,
                                          "name": "globalConstraintsPost",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7356,
                                          "src": "13066:21:43",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
                                            "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                          }
                                        },
                                        "id": 8255,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 8254,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 8251,
                                              "name": "globalConstraintsPost",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 7356,
                                              "src": "13088:21:43",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
                                                "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                              }
                                            },
                                            "id": 8252,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "length",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "13088:28:43",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "-",
                                          "rightExpression": {
                                            "argumentTypes": null,
                                            "hexValue": "31",
                                            "id": 8253,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "13117:1:43",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_1_by_1",
                                              "typeString": "int_const 1"
                                            },
                                            "value": "1"
                                          },
                                          "src": "13088:30:43",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "13066:53:43",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_GlobalConstraint_$7333_storage",
                                          "typeString": "struct Controller.GlobalConstraint storage ref"
                                        }
                                      },
                                      "src": "13047:72:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_GlobalConstraint_$7333_memory_ptr",
                                        "typeString": "struct Controller.GlobalConstraint memory"
                                      }
                                    },
                                    "id": 8257,
                                    "nodeType": "ExpressionStatement",
                                    "src": "13047:72:43"
                                  },
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 8263,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 8258,
                                          "name": "globalConstraintsPost",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7356,
                                          "src": "13141:21:43",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
                                            "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                          }
                                        },
                                        "id": 8261,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 8259,
                                            "name": "globalConstraintRegister",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8129,
                                            "src": "13163:24:43",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_memory_ptr",
                                              "typeString": "struct Controller.GlobalConstraintRegister memory"
                                            }
                                          },
                                          "id": 8260,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "index",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 7337,
                                          "src": "13163:30:43",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "nodeType": "IndexAccess",
                                        "src": "13141:53:43",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_GlobalConstraint_$7333_storage",
                                          "typeString": "struct Controller.GlobalConstraint storage ref"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "id": 8262,
                                        "name": "globalConstraint",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8132,
                                        "src": "13197:16:43",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_GlobalConstraint_$7333_memory_ptr",
                                          "typeString": "struct Controller.GlobalConstraint memory"
                                        }
                                      },
                                      "src": "13141:72:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_GlobalConstraint_$7333_storage",
                                        "typeString": "struct Controller.GlobalConstraint storage ref"
                                      }
                                    },
                                    "id": 8264,
                                    "nodeType": "ExpressionStatement",
                                    "src": "13141:72:43"
                                  },
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 8272,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 8265,
                                            "name": "globalConstraintsRegisterPost",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 7364,
                                            "src": "13235:29:43",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$7338_storage_$",
                                              "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                                            }
                                          },
                                          "id": 8268,
                                          "indexExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 8266,
                                              "name": "globalConstraint",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 8132,
                                              "src": "13265:16:43",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_GlobalConstraint_$7333_memory_ptr",
                                                "typeString": "struct Controller.GlobalConstraint memory"
                                              }
                                            },
                                            "id": 8267,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "gcAddress",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 7330,
                                            "src": "13265:26:43",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "13235:57:43",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_storage",
                                            "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                                          }
                                        },
                                        "id": 8269,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "memberName": "index",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 7337,
                                        "src": "13235:63:43",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 8270,
                                          "name": "globalConstraintRegister",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 8129,
                                          "src": "13301:24:43",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_memory_ptr",
                                            "typeString": "struct Controller.GlobalConstraintRegister memory"
                                          }
                                        },
                                        "id": 8271,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "index",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 7337,
                                        "src": "13301:30:43",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "13235:96:43",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 8273,
                                    "nodeType": "ExpressionStatement",
                                    "src": "13235:96:43"
                                  }
                                ]
                              }
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 8279,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "--",
                                "prefix": false,
                                "src": "13367:30:43",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 8276,
                                    "name": "globalConstraintsPost",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7356,
                                    "src": "13367:21:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
                                      "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                    }
                                  },
                                  "id": 8278,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "length",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "13367:28:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 8280,
                              "nodeType": "ExpressionStatement",
                              "src": "13367:30:43"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 8284,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "delete",
                                "prefix": true,
                                "src": "13415:55:43",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 8281,
                                    "name": "globalConstraintsRegisterPost",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7364,
                                    "src": "13422:29:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$7338_storage_$",
                                      "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                                    }
                                  },
                                  "id": 8283,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 8282,
                                    "name": "_globalConstraint",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8116,
                                    "src": "13452:17:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "13422:48:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_storage",
                                    "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8285,
                              "nodeType": "ExpressionStatement",
                              "src": "13415:55:43"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 8288,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 8286,
                                  "name": "retVal",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8145,
                                  "src": "13488:6:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "hexValue": "74727565",
                                  "id": 8287,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "bool",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "13497:4:43",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "value": "true"
                                },
                                "src": "13488:13:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 8289,
                              "nodeType": "ExpressionStatement",
                              "src": "13488:13:43"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 8294,
                    "name": "retVal",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8145,
                    "src": "13539:6:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8307,
                  "nodeType": "IfStatement",
                  "src": "13535:214:43",
                  "trueBody": {
                    "id": 8306,
                    "nodeType": "Block",
                    "src": "13547:202:43",
                    "statements": [
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 8296,
                              "name": "_globalConstraint",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8116,
                              "src": "13602:17:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8297,
                                "name": "globalConstraintRegister",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8129,
                                "src": "13633:24:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_memory_ptr",
                                  "typeString": "struct Controller.GlobalConstraintRegister memory"
                                }
                              },
                              "id": 8298,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "index",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7337,
                              "src": "13633:30:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_enum$_CallPhase_$9087",
                                "typeString": "enum GlobalConstraintInterface.CallPhase"
                              },
                              "id": 8303,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 8299,
                                "name": "when",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8137,
                                "src": "13677:4:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_CallPhase_$9087",
                                  "typeString": "enum GlobalConstraintInterface.CallPhase"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 8300,
                                    "name": "GlobalConstraintInterface",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9115,
                                    "src": "13685:25:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_GlobalConstraintInterface_$9115_$",
                                      "typeString": "type(contract GlobalConstraintInterface)"
                                    }
                                  },
                                  "id": 8301,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "CallPhase",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 9087,
                                  "src": "13685:35:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_enum$_CallPhase_$9087_$",
                                    "typeString": "type(enum GlobalConstraintInterface.CallPhase)"
                                  }
                                },
                                "id": 8302,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "Pre",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "13685:39:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_CallPhase_$9087",
                                  "typeString": "enum GlobalConstraintInterface.CallPhase"
                                }
                              },
                              "src": "13677:47:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 8295,
                            "name": "RemoveGlobalConstraint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7422,
                            "src": "13566:22:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$",
                              "typeString": "function (address,uint256,bool)"
                            }
                          },
                          "id": 8304,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13566:172:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8305,
                        "nodeType": "EmitStatement",
                        "src": "13561:177:43"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8308,
                    "name": "retVal",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8145,
                    "src": "13765:6:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 8127,
                  "id": 8309,
                  "nodeType": "Return",
                  "src": "13758:13:43"
                }
              ]
            },
            "documentation": "@dev remove Global Constraint\n@param _globalConstraint the address of the global constraint to be remove.\n@return bool which represents a success",
            "id": 8311,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8121,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8120,
                  "name": "onlyGlobalConstraintsScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7525,
                  "src": "11467:27:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "11467:27:43"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8123,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8118,
                    "src": "11513:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 8124,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8122,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7672,
                  "src": "11499:13:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "11499:22:43"
              }
            ],
            "name": "removeGlobalConstraint",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8119,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8116,
                  "name": "_globalConstraint",
                  "nodeType": "VariableDeclaration",
                  "scope": 8311,
                  "src": "11406:25:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8115,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11406:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8118,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 8311,
                  "src": "11433:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8117,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11433:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11405:44:43"
            },
            "returnParameters": {
              "id": 8127,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8126,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8311,
                  "src": "11534:4:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8125,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "11534:4:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11533:6:43"
            },
            "scope": 8772,
            "src": "11373:2405:43",
            "stateMutability": "nonpayable",
            "superFunction": 8858,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8416,
              "nodeType": "Block",
              "src": "14170:756:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 8332,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 8328,
                          "name": "newController",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7350,
                          "src": "14188:13:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 8330,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14213:1:43",
                              "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": 8329,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "14205:7:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 8331,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14205:10:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "14188:27:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 8327,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        16785,
                        16786
                      ],
                      "referencedDeclaration": 16785,
                      "src": "14180:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 8333,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14180:36:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8334,
                  "nodeType": "ExpressionStatement",
                  "src": "14180:36:43"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 8340,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 8336,
                          "name": "_newController",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8313,
                          "src": "14289:14:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 8338,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14315:1:43",
                              "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": 8337,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "14307:7:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 8339,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14307:10:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "14289:28:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 8335,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        16785,
                        16786
                      ],
                      "referencedDeclaration": 16785,
                      "src": "14281:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 8341,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14281:37:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8342,
                  "nodeType": "ExpressionStatement",
                  "src": "14281:37:43"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8345,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8343,
                      "name": "newController",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7350,
                      "src": "14328:13:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 8344,
                      "name": "_newController",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8313,
                      "src": "14344:14:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "14328:30:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 8346,
                  "nodeType": "ExpressionStatement",
                  "src": "14328:30:43"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8350,
                        "name": "_newController",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8313,
                        "src": "14393:14:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8347,
                        "name": "avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7344,
                        "src": "14368:6:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$7316",
                          "typeString": "contract Avatar"
                        }
                      },
                      "id": 8349,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transferOwnership",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16004,
                      "src": "14368:24:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address) external"
                      }
                    },
                    "id": 8351,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14368:40:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8352,
                  "nodeType": "ExpressionStatement",
                  "src": "14368:40:43"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 8358,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 8354,
                              "name": "avatar",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7344,
                              "src": "14426:6:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Avatar_$7316",
                                "typeString": "contract Avatar"
                              }
                            },
                            "id": 8355,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "owner",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 15953,
                            "src": "14426:12:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                              "typeString": "function () view external returns (address)"
                            }
                          },
                          "id": 8356,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14426:14:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 8357,
                          "name": "_newController",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8313,
                          "src": "14444:14:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "14426:32:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 8353,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        16785,
                        16786
                      ],
                      "referencedDeclaration": 16785,
                      "src": "14418:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 8359,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14418:41:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8360,
                  "nodeType": "ExpressionStatement",
                  "src": "14418:41:43"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 8367,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 8361,
                          "name": "nativeToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7346,
                          "src": "14473:11:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_DAOToken_$9081",
                            "typeString": "contract DAOToken"
                          }
                        },
                        "id": 8362,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "owner",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 15953,
                        "src": "14473:17:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                          "typeString": "function () view external returns (address)"
                        }
                      },
                      "id": 8363,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "14473:19:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8365,
                          "name": "this",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16824,
                          "src": "14504:4:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Controller_$8772",
                            "typeString": "contract Controller"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_Controller_$8772",
                            "typeString": "contract Controller"
                          }
                        ],
                        "id": 8364,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "14496:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 8366,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "14496:13:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "14473:36:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8383,
                  "nodeType": "IfStatement",
                  "src": "14469:172:43",
                  "trueBody": {
                    "id": 8382,
                    "nodeType": "Block",
                    "src": "14511:130:43",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 8371,
                              "name": "_newController",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8313,
                              "src": "14555:14:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 8368,
                              "name": "nativeToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7346,
                              "src": "14525:11:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_DAOToken_$9081",
                                "typeString": "contract DAOToken"
                              }
                            },
                            "id": 8370,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transferOwnership",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 16004,
                            "src": "14525:29:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address) external"
                            }
                          },
                          "id": 8372,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14525:45:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8373,
                        "nodeType": "ExpressionStatement",
                        "src": "14525:45:43"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 8379,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 8375,
                                    "name": "nativeToken",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7346,
                                    "src": "14592:11:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_DAOToken_$9081",
                                      "typeString": "contract DAOToken"
                                    }
                                  },
                                  "id": 8376,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "owner",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 15953,
                                  "src": "14592:17:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                    "typeString": "function () view external returns (address)"
                                  }
                                },
                                "id": 8377,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "14592:19:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 8378,
                                "name": "_newController",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8313,
                                "src": "14615:14:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "14592:37:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 8374,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              16785,
                              16786
                            ],
                            "referencedDeclaration": 16785,
                            "src": "14584:7:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 8380,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14584:46:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8381,
                        "nodeType": "ExpressionStatement",
                        "src": "14584:46:43"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 8390,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 8384,
                          "name": "nativeReputation",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7348,
                          "src": "14654:16:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Reputation_$11034",
                            "typeString": "contract Reputation"
                          }
                        },
                        "id": 8385,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "owner",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 15953,
                        "src": "14654:22:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                          "typeString": "function () view external returns (address)"
                        }
                      },
                      "id": 8386,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "14654:24:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8388,
                          "name": "this",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16824,
                          "src": "14690:4:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Controller_$8772",
                            "typeString": "contract Controller"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_Controller_$8772",
                            "typeString": "contract Controller"
                          }
                        ],
                        "id": 8387,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "14682:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 8389,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "14682:13:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "14654:41:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8406,
                  "nodeType": "IfStatement",
                  "src": "14650:187:43",
                  "trueBody": {
                    "id": 8405,
                    "nodeType": "Block",
                    "src": "14697:140:43",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 8394,
                              "name": "_newController",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8313,
                              "src": "14746:14:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 8391,
                              "name": "nativeReputation",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7348,
                              "src": "14711:16:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Reputation_$11034",
                                "typeString": "contract Reputation"
                              }
                            },
                            "id": 8393,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transferOwnership",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 16004,
                            "src": "14711:34:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address) external"
                            }
                          },
                          "id": 8395,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14711:50:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8396,
                        "nodeType": "ExpressionStatement",
                        "src": "14711:50:43"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 8402,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 8398,
                                    "name": "nativeReputation",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7348,
                                    "src": "14783:16:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_Reputation_$11034",
                                      "typeString": "contract Reputation"
                                    }
                                  },
                                  "id": 8399,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "owner",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 15953,
                                  "src": "14783:22:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                    "typeString": "function () view external returns (address)"
                                  }
                                },
                                "id": 8400,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "14783:24:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 8401,
                                "name": "_newController",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8313,
                                "src": "14811:14:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "14783:42:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 8397,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              16785,
                              16786
                            ],
                            "referencedDeclaration": 16785,
                            "src": "14775:7:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 8403,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14775:51:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8404,
                        "nodeType": "ExpressionStatement",
                        "src": "14775:51:43"
                      }
                    ]
                  }
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 8409,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16824,
                            "src": "14877:4:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Controller_$8772",
                              "typeString": "contract Controller"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Controller_$8772",
                              "typeString": "contract Controller"
                            }
                          ],
                          "id": 8408,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "14869:7:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 8410,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14869:13:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8411,
                        "name": "newController",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7350,
                        "src": "14884:13:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8407,
                      "name": "UpgradeController",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7406,
                      "src": "14851:17:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 8412,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14851:47:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8413,
                  "nodeType": "EmitStatement",
                  "src": "14846:52:43"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 8414,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "14915:4:43",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 8326,
                  "id": 8415,
                  "nodeType": "Return",
                  "src": "14908:11:43"
                }
              ]
            },
            "documentation": "@dev upgrade the Controller\n     The function will trigger an event 'UpgradeController'.\n@param  _newController the address of the new controller.\n@return bool which represents a success",
            "id": 8417,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8318,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8317,
                  "name": "onlyUpgradingScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7545,
                  "src": "14092:19:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "14092:19:43"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8321,
                        "name": "_avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8315,
                        "src": "14138:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$7316",
                          "typeString": "contract Avatar"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Avatar_$7316",
                          "typeString": "contract Avatar"
                        }
                      ],
                      "id": 8320,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "14130:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 8322,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14130:16:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 8323,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8319,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7672,
                  "src": "14116:13:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "14116:31:43"
              }
            ],
            "name": "upgradeController",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8316,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8313,
                  "name": "_newController",
                  "nodeType": "VariableDeclaration",
                  "scope": 8417,
                  "src": "14035:22:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8312,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14035:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8315,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 8417,
                  "src": "14059:14:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Avatar_$7316",
                    "typeString": "contract Avatar"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8314,
                    "name": "Avatar",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7316,
                    "src": "14059:6:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$7316",
                      "typeString": "contract Avatar"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14034:40:43"
            },
            "returnParameters": {
              "id": 8326,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8325,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8417,
                  "src": "14160:4:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8324,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "14160:4:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14159:6:43"
            },
            "scope": 8772,
            "src": "14008:918:43",
            "stateMutability": "nonpayable",
            "superFunction": 8867,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8449,
              "nodeType": "Block",
              "src": "15606:68:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8444,
                        "name": "_contract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8419,
                        "src": "15642:9:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8445,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8421,
                        "src": "15653:5:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8446,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8425,
                        "src": "15660:6:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8442,
                        "name": "avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7344,
                        "src": "15623:6:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$7316",
                          "typeString": "contract Avatar"
                        }
                      },
                      "id": 8443,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "genericCall",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7174,
                      "src": "15623:18:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "function (address,bytes memory,uint256) external returns (bool,bytes memory)"
                      }
                    },
                    "id": 8447,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15623:44:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "functionReturnParameters": 8441,
                  "id": 8448,
                  "nodeType": "Return",
                  "src": "15616:51:43"
                }
              ]
            },
            "documentation": "@dev perform a generic call to an arbitrary contract\n@param _contract  the contract's address to call\n@param _data ABI-encoded contract call to call `_contract` address.\n@param _avatar the controller's avatar address\n@param _value value (ETH) to transfer with the transaction\n@return bool -success\n        bytes  - the return value of the called _contract's function.",
            "id": 8450,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8428,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8427,
                  "name": "onlyGenericCallScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7565,
                  "src": "15468:21:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15468:21:43"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "hexValue": "67656e6572696343616c6c",
                    "id": 8430,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "15518:13:43",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_f50c9c0d8078680ea2ffd7664f6b8e067777195c71561a9aa7bb8b53f908fb39",
                      "typeString": "literal_string \"genericCall\""
                    },
                    "value": "genericCall"
                  }
                ],
                "id": 8431,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8429,
                  "name": "onlySubjectToConstraint",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7658,
                  "src": "15494:23:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15494:38:43"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8434,
                        "name": "_avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8423,
                        "src": "15559:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$7316",
                          "typeString": "contract Avatar"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Avatar_$7316",
                          "typeString": "contract Avatar"
                        }
                      ],
                      "id": 8433,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "15551:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 8435,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15551:16:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 8436,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8432,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7672,
                  "src": "15537:13:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15537:31:43"
              }
            ],
            "name": "genericCall",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8426,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8419,
                  "name": "_contract",
                  "nodeType": "VariableDeclaration",
                  "scope": 8450,
                  "src": "15378:17:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8418,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15378:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8421,
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 8450,
                  "src": "15397:20:43",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 8420,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "15397:5:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8423,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 8450,
                  "src": "15419:14:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Avatar_$7316",
                    "typeString": "contract Avatar"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8422,
                    "name": "Avatar",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7316,
                    "src": "15419:6:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$7316",
                      "typeString": "contract Avatar"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8425,
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 8450,
                  "src": "15435:14:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8424,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15435:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15377:73:43"
            },
            "returnParameters": {
              "id": 8441,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8438,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8450,
                  "src": "15582:4:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8437,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "15582:4:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8440,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8450,
                  "src": "15588:12:43",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 8439,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "15588:5:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15581:20:43"
            },
            "scope": 8772,
            "src": "15357:317:43",
            "stateMutability": "nonpayable",
            "superFunction": 8882,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8477,
              "nodeType": "Block",
              "src": "16083:59:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8473,
                        "name": "_amountInWei",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8452,
                        "src": "16117:12:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8474,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8454,
                        "src": "16131:3:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8471,
                        "name": "avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7344,
                        "src": "16100:6:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$7316",
                          "typeString": "contract Avatar"
                        }
                      },
                      "id": 8472,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sendEther",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7199,
                      "src": "16100:16:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_address_payable_$returns$_t_bool_$",
                        "typeString": "function (uint256,address payable) external returns (bool)"
                      }
                    },
                    "id": 8475,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16100:35:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 8470,
                  "id": 8476,
                  "nodeType": "Return",
                  "src": "16093:42:43"
                }
              ]
            },
            "documentation": "@dev send some ether\n@param _amountInWei the amount of ether (in Wei) to send\n@param _to address of the beneficiary\n@return bool which represents a success",
            "id": 8478,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8459,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8458,
                  "name": "onlyRegisteredScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7485,
                  "src": "15963:20:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15963:20:43"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "hexValue": "73656e644574686572",
                    "id": 8461,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "16012:11:43",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_c700fcf825bb96908bcfa40b8d91237381cd207a842fc67195330064c6f87772",
                      "typeString": "literal_string \"sendEther\""
                    },
                    "value": "sendEther"
                  }
                ],
                "id": 8462,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8460,
                  "name": "onlySubjectToConstraint",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7658,
                  "src": "15988:23:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15988:36:43"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8465,
                        "name": "_avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8456,
                        "src": "16051:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$7316",
                          "typeString": "contract Avatar"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Avatar_$7316",
                          "typeString": "contract Avatar"
                        }
                      ],
                      "id": 8464,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "16043:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 8466,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16043:16:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 8467,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8463,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7672,
                  "src": "16029:13:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "16029:31:43"
              }
            ],
            "name": "sendEther",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8457,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8452,
                  "name": "_amountInWei",
                  "nodeType": "VariableDeclaration",
                  "scope": 8478,
                  "src": "15887:20:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8451,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15887:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8454,
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 8478,
                  "src": "15909:19:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 8453,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15909:15:43",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8456,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 8478,
                  "src": "15930:14:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Avatar_$7316",
                    "typeString": "contract Avatar"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8455,
                    "name": "Avatar",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7316,
                    "src": "15930:6:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$7316",
                      "typeString": "contract Avatar"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15886:59:43"
            },
            "returnParameters": {
              "id": 8470,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8469,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8478,
                  "src": "16073:4:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8468,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "16073:4:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16072:6:43"
            },
            "scope": 8772,
            "src": "15868:274:43",
            "stateMutability": "nonpayable",
            "superFunction": 8893,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8508,
              "nodeType": "Block",
              "src": "16674:81:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8503,
                        "name": "_externalToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8480,
                        "src": "16720:14:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$16748",
                          "typeString": "contract IERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8504,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8482,
                        "src": "16736:3:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8505,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8484,
                        "src": "16741:6:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20_$16748",
                          "typeString": "contract IERC20"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8501,
                        "name": "avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7344,
                        "src": "16691:6:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$7316",
                          "typeString": "contract Avatar"
                        }
                      },
                      "id": 8502,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "externalTokenTransfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7231,
                      "src": "16691:28:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_contract$_IERC20_$16748_$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (contract IERC20,address,uint256) external returns (bool)"
                      }
                    },
                    "id": 8506,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16691:57:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 8500,
                  "id": 8507,
                  "nodeType": "Return",
                  "src": "16684:64:43"
                }
              ]
            },
            "documentation": "@dev send some amount of arbitrary ERC20 Tokens\n@param _externalToken the address of the Token Contract\n@param _to address of the beneficiary\n@param _value the amount of ether (in Wei) to send\n@return bool which represents a success",
            "id": 8509,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8489,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8488,
                  "name": "onlyRegisteredScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7485,
                  "src": "16542:20:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "16542:20:43"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "hexValue": "65787465726e616c546f6b656e5472616e73666572",
                    "id": 8491,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "16591:23:43",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_7813035546e060c03dbe66bdee1941f9a0ad6551df13f617f14419ad20f4154f",
                      "typeString": "literal_string \"externalTokenTransfer\""
                    },
                    "value": "externalTokenTransfer"
                  }
                ],
                "id": 8492,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8490,
                  "name": "onlySubjectToConstraint",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7658,
                  "src": "16567:23:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "16567:48:43"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8495,
                        "name": "_avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8486,
                        "src": "16642:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$7316",
                          "typeString": "contract Avatar"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Avatar_$7316",
                          "typeString": "contract Avatar"
                        }
                      ],
                      "id": 8494,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "16634:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 8496,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16634:16:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 8497,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8493,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7672,
                  "src": "16620:13:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "16620:31:43"
              }
            ],
            "name": "externalTokenTransfer",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8487,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8480,
                  "name": "_externalToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 8509,
                  "src": "16457:21:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$16748",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8479,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 16748,
                    "src": "16457:6:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$16748",
                      "typeString": "contract IERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8482,
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 8509,
                  "src": "16480:11:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8481,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16480:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8484,
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 8509,
                  "src": "16493:14:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8483,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16493:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8486,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 8509,
                  "src": "16509:14:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Avatar_$7316",
                    "typeString": "contract Avatar"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8485,
                    "name": "Avatar",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7316,
                    "src": "16509:6:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$7316",
                      "typeString": "contract Avatar"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16456:68:43"
            },
            "returnParameters": {
              "id": 8500,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8499,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8509,
                  "src": "16664:4:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8498,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "16664:4:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16663:6:43"
            },
            "scope": 8772,
            "src": "16426:329:43",
            "stateMutability": "nonpayable",
            "superFunction": 8906,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8542,
              "nodeType": "Block",
              "src": "17537:92:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8536,
                        "name": "_externalToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8511,
                        "src": "17587:14:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$16748",
                          "typeString": "contract IERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8537,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8513,
                        "src": "17603:5:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8538,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8515,
                        "src": "17610:3:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8539,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8517,
                        "src": "17615:6:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20_$16748",
                          "typeString": "contract IERC20"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8534,
                        "name": "avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7344,
                        "src": "17554:6:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$7316",
                          "typeString": "contract Avatar"
                        }
                      },
                      "id": 8535,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "externalTokenTransferFrom",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7267,
                      "src": "17554:32:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_contract$_IERC20_$16748_$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (contract IERC20,address,address,uint256) external returns (bool)"
                      }
                    },
                    "id": 8540,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17554:68:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 8533,
                  "id": 8541,
                  "nodeType": "Return",
                  "src": "17547:75:43"
                }
              ]
            },
            "documentation": "@dev transfer token \"from\" address \"to\" address\n     One must to approve the amount of tokens which can be spend from the\n     \"from\" account.This can be done using externalTokenApprove.\n@param _externalToken the address of the Token Contract\n@param _from address of the account to send from\n@param _to address of the beneficiary\n@param _value the amount of ether (in Wei) to send\n@return bool which represents a success",
            "id": 8543,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8522,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8521,
                  "name": "onlyRegisteredScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7485,
                  "src": "17401:20:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "17401:20:43"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "hexValue": "65787465726e616c546f6b656e5472616e7366657246726f6d",
                    "id": 8524,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "17450:27:43",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_ac07667e4f3fe9c6116bdfeed71f93079924e4156b3ee8a0c3180f10145562f3",
                      "typeString": "literal_string \"externalTokenTransferFrom\""
                    },
                    "value": "externalTokenTransferFrom"
                  }
                ],
                "id": 8525,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8523,
                  "name": "onlySubjectToConstraint",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7658,
                  "src": "17426:23:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "17426:52:43"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8528,
                        "name": "_avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8519,
                        "src": "17505:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$7316",
                          "typeString": "contract Avatar"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Avatar_$7316",
                          "typeString": "contract Avatar"
                        }
                      ],
                      "id": 8527,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "17497:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 8529,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17497:16:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 8530,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8526,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7672,
                  "src": "17483:13:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "17483:31:43"
              }
            ],
            "name": "externalTokenTransferFrom",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8520,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8511,
                  "name": "_externalToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 8543,
                  "src": "17285:21:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$16748",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8510,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 16748,
                    "src": "17285:6:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$16748",
                      "typeString": "contract IERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8513,
                  "name": "_from",
                  "nodeType": "VariableDeclaration",
                  "scope": 8543,
                  "src": "17312:13:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8512,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17312:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8515,
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 8543,
                  "src": "17331:11:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8514,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17331:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8517,
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 8543,
                  "src": "17348:14:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8516,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17348:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8519,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 8543,
                  "src": "17368:14:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Avatar_$7316",
                    "typeString": "contract Avatar"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8518,
                    "name": "Avatar",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7316,
                    "src": "17368:6:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$7316",
                      "typeString": "contract Avatar"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17279:104:43"
            },
            "returnParameters": {
              "id": 8533,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8532,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8543,
                  "src": "17527:4:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8531,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "17527:4:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17526:6:43"
            },
            "scope": 8772,
            "src": "17245:384:43",
            "stateMutability": "nonpayable",
            "superFunction": 8921,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8573,
              "nodeType": "Block",
              "src": "18269:86:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8568,
                        "name": "_externalToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8545,
                        "src": "18315:14:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$16748",
                          "typeString": "contract IERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8569,
                        "name": "_spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8547,
                        "src": "18331:8:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8570,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8549,
                        "src": "18341:6:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20_$16748",
                          "typeString": "contract IERC20"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8566,
                        "name": "avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7344,
                        "src": "18286:6:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$7316",
                          "typeString": "contract Avatar"
                        }
                      },
                      "id": 8567,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "externalTokenApproval",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7299,
                      "src": "18286:28:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_contract$_IERC20_$16748_$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (contract IERC20,address,uint256) external returns (bool)"
                      }
                    },
                    "id": 8571,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18286:62:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 8565,
                  "id": 8572,
                  "nodeType": "Return",
                  "src": "18279:69:43"
                }
              ]
            },
            "documentation": "@dev externalTokenApproval approve the spender address to spend a specified amount of tokens\n     on behalf of msg.sender.\n@param _externalToken the address of the Token Contract\n@param _spender address\n@param _value the amount of ether (in Wei) which the approval is referring to.\n@return bool which represents a success",
            "id": 8574,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8554,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8553,
                  "name": "onlyRegisteredScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7485,
                  "src": "18129:20:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "18129:20:43"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "hexValue": "65787465726e616c546f6b656e496e637265617365417070726f76616c",
                    "id": 8556,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "18178:31:43",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_a6b5493ce06b69199b7c164b2fe8141dd5ecf7d2d491b28efc85f9c00fdfd15c",
                      "typeString": "literal_string \"externalTokenIncreaseApproval\""
                    },
                    "value": "externalTokenIncreaseApproval"
                  }
                ],
                "id": 8557,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8555,
                  "name": "onlySubjectToConstraint",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7658,
                  "src": "18154:23:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "18154:56:43"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8560,
                        "name": "_avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8551,
                        "src": "18237:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$7316",
                          "typeString": "contract Avatar"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Avatar_$7316",
                          "typeString": "contract Avatar"
                        }
                      ],
                      "id": 8559,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "18229:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 8561,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18229:16:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 8562,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8558,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7672,
                  "src": "18215:13:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "18215:31:43"
              }
            ],
            "name": "externalTokenApproval",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8552,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8545,
                  "name": "_externalToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 8574,
                  "src": "18039:21:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$16748",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8544,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 16748,
                    "src": "18039:6:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$16748",
                      "typeString": "contract IERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8547,
                  "name": "_spender",
                  "nodeType": "VariableDeclaration",
                  "scope": 8574,
                  "src": "18062:16:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8546,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18062:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8549,
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 8574,
                  "src": "18080:14:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8548,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18080:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8551,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 8574,
                  "src": "18096:14:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Avatar_$7316",
                    "typeString": "contract Avatar"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8550,
                    "name": "Avatar",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7316,
                    "src": "18096:6:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$7316",
                      "typeString": "contract Avatar"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18038:73:43"
            },
            "returnParameters": {
              "id": 8565,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8564,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8574,
                  "src": "18259:4:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8563,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "18259:4:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18258:6:43"
            },
            "scope": 8772,
            "src": "18008:347:43",
            "stateMutability": "nonpayable",
            "superFunction": 8934,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8595,
              "nodeType": "Block",
              "src": "18787:50:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8592,
                        "name": "_metaData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8576,
                        "src": "18820:9:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8590,
                        "name": "avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7344,
                        "src": "18804:6:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$7316",
                          "typeString": "contract Avatar"
                        }
                      },
                      "id": 8591,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "metaData",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7315,
                      "src": "18804:15:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_string_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (string memory) external returns (bool)"
                      }
                    },
                    "id": 8593,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18804:26:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 8589,
                  "id": 8594,
                  "nodeType": "Return",
                  "src": "18797:33:43"
                }
              ]
            },
            "documentation": "@dev metaData emits an event with a string, should contain the hash of some meta data.\n@param _metaData a string representing a hash of the meta data\n@param _avatar Avatar\n@return bool which represents a success",
            "id": 8596,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8581,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8580,
                  "name": "onlyMetaDataScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7585,
                  "src": "18698:18:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "18698:18:43"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8584,
                        "name": "_avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8578,
                        "src": "18747:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$7316",
                          "typeString": "contract Avatar"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Avatar_$7316",
                          "typeString": "contract Avatar"
                        }
                      ],
                      "id": 8583,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "18739:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 8585,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18739:16:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 8586,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8582,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7672,
                  "src": "18725:13:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "18725:31:43"
              }
            ],
            "name": "metaData",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8579,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8576,
                  "name": "_metaData",
                  "nodeType": "VariableDeclaration",
                  "scope": 8596,
                  "src": "18630:25:43",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 8575,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "18630:6:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8578,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 8596,
                  "src": "18657:14:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Avatar_$7316",
                    "typeString": "contract Avatar"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8577,
                    "name": "Avatar",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7316,
                    "src": "18657:6:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$7316",
                      "typeString": "contract Avatar"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18629:43:43"
            },
            "returnParameters": {
              "id": 8589,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8588,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8596,
                  "src": "18773:4:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8587,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "18773:4:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18772:6:43"
            },
            "scope": 8772,
            "src": "18612:225:43",
            "stateMutability": "nonpayable",
            "superFunction": 8943,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8610,
              "nodeType": "Block",
              "src": "19084:49:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8607,
                        "name": "nativeReputation",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7348,
                        "src": "19109:16:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Reputation_$11034",
                          "typeString": "contract Reputation"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Reputation_$11034",
                          "typeString": "contract Reputation"
                        }
                      ],
                      "id": 8606,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "19101:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 8608,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19101:25:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 8605,
                  "id": 8609,
                  "nodeType": "Return",
                  "src": "19094:32:43"
                }
              ]
            },
            "documentation": "@dev getNativeReputation\n@param _avatar the organization avatar.\n@return organization native reputation",
            "id": 8611,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8601,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8598,
                    "src": "19053:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 8602,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8600,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7672,
                  "src": "19039:13:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "19039:22:43"
              }
            ],
            "name": "getNativeReputation",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8599,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8598,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 8611,
                  "src": "19013:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8597,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19013:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19012:17:43"
            },
            "returnParameters": {
              "id": 8605,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8604,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8611,
                  "src": "19075:7:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8603,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19075:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19074:9:43"
            },
            "scope": 8772,
            "src": "18984:149:43",
            "stateMutability": "view",
            "superFunction": 8950,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8627,
              "nodeType": "Block",
              "src": "19252:52:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8624,
                        "name": "_scheme",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8613,
                        "src": "19289:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8623,
                      "name": "_isSchemeRegistered",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8771,
                      "src": "19269:19:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                        "typeString": "function (address) view returns (bool)"
                      }
                    },
                    "id": 8625,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19269:28:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 8622,
                  "id": 8626,
                  "nodeType": "Return",
                  "src": "19262:35:43"
                }
              ]
            },
            "documentation": null,
            "id": 8628,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8618,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8615,
                    "src": "19224:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 8619,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8617,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7672,
                  "src": "19210:13:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "19210:22:43"
              }
            ],
            "name": "isSchemeRegistered",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8616,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8613,
                  "name": "_scheme",
                  "nodeType": "VariableDeclaration",
                  "scope": 8628,
                  "src": "19167:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8612,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19167:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8615,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 8628,
                  "src": "19184:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8614,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19184:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19166:34:43"
            },
            "returnParameters": {
              "id": 8622,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8621,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8628,
                  "src": "19246:4:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8620,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "19246:4:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19245:6:43"
            },
            "scope": 8772,
            "src": "19139:165:43",
            "stateMutability": "view",
            "superFunction": 8959,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8645,
              "nodeType": "Block",
              "src": "19447:51:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 8640,
                        "name": "schemes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7342,
                        "src": "19464:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$7328_storage_$",
                          "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                        }
                      },
                      "id": 8642,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 8641,
                        "name": "_scheme",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8630,
                        "src": "19472:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "19464:16:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Scheme_$7328_storage",
                        "typeString": "struct Controller.Scheme storage ref"
                      }
                    },
                    "id": 8643,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "paramsHash",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 7325,
                    "src": "19464:27:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 8639,
                  "id": 8644,
                  "nodeType": "Return",
                  "src": "19457:34:43"
                }
              ]
            },
            "documentation": null,
            "id": 8646,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8635,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8632,
                    "src": "19404:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 8636,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8634,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7672,
                  "src": "19390:13:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "19390:22:43"
              }
            ],
            "name": "getSchemeParameters",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8633,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8630,
                  "name": "_scheme",
                  "nodeType": "VariableDeclaration",
                  "scope": 8646,
                  "src": "19339:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8629,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19339:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8632,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 8646,
                  "src": "19356:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8631,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19356:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19338:34:43"
            },
            "returnParameters": {
              "id": 8639,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8638,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8646,
                  "src": "19434:7:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8637,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "19434:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19433:9:43"
            },
            "scope": 8772,
            "src": "19310:188:43",
            "stateMutability": "view",
            "superFunction": 8968,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8663,
              "nodeType": "Block",
              "src": "19641:52:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 8658,
                        "name": "schemes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7342,
                        "src": "19658:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$7328_storage_$",
                          "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                        }
                      },
                      "id": 8660,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 8659,
                        "name": "_scheme",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8648,
                        "src": "19666:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "19658:16:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Scheme_$7328_storage",
                        "typeString": "struct Controller.Scheme storage ref"
                      }
                    },
                    "id": 8661,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "permissions",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 7327,
                    "src": "19658:28:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "functionReturnParameters": 8657,
                  "id": 8662,
                  "nodeType": "Return",
                  "src": "19651:35:43"
                }
              ]
            },
            "documentation": null,
            "id": 8664,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8653,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8650,
                    "src": "19599:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 8654,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8652,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7672,
                  "src": "19585:13:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "19585:22:43"
              }
            ],
            "name": "getSchemePermissions",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8651,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8648,
                  "name": "_scheme",
                  "nodeType": "VariableDeclaration",
                  "scope": 8664,
                  "src": "19534:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8647,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19534:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8650,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 8664,
                  "src": "19551:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8649,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19551:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19533:34:43"
            },
            "returnParameters": {
              "id": 8657,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8656,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8664,
                  "src": "19629:6:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 8655,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "19629:6:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19628:8:43"
            },
            "scope": 8772,
            "src": "19504:189:43",
            "stateMutability": "view",
            "superFunction": 8986,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8705,
              "nodeType": "Block",
              "src": "19805:403:43",
              "statements": [
                {
                  "assignments": [
                    8674
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8674,
                      "name": "register",
                      "nodeType": "VariableDeclaration",
                      "scope": 8705,
                      "src": "19816:40:43",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_memory_ptr",
                        "typeString": "struct Controller.GlobalConstraintRegister"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 8673,
                        "name": "GlobalConstraintRegister",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 7338,
                        "src": "19816:24:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_storage_ptr",
                          "typeString": "struct Controller.GlobalConstraintRegister"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8678,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 8675,
                      "name": "globalConstraintsRegisterPre",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7360,
                      "src": "19859:28:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$7338_storage_$",
                        "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                      }
                    },
                    "id": 8677,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 8676,
                      "name": "_globalConstraint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8666,
                      "src": "19888:17:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "19859:47:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_storage",
                      "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "19816:90:43"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 8679,
                      "name": "register",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8674,
                      "src": "19921:8:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_memory_ptr",
                        "typeString": "struct Controller.GlobalConstraintRegister memory"
                      }
                    },
                    "id": 8680,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "isRegistered",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 7335,
                    "src": "19921:21:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8688,
                  "nodeType": "IfStatement",
                  "src": "19917:102:43",
                  "trueBody": {
                    "id": 8687,
                    "nodeType": "Block",
                    "src": "19944:75:43",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 8681,
                              "name": "globalConstraintsPre",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7353,
                              "src": "19965:20:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
                                "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                              }
                            },
                            "id": 8684,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8682,
                                "name": "register",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8674,
                                "src": "19986:8:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_memory_ptr",
                                  "typeString": "struct Controller.GlobalConstraintRegister memory"
                                }
                              },
                              "id": 8683,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "index",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7337,
                              "src": "19986:14:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "19965:36:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConstraint_$7333_storage",
                              "typeString": "struct Controller.GlobalConstraint storage ref"
                            }
                          },
                          "id": 8685,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "params",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7332,
                          "src": "19965:43:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "functionReturnParameters": 8672,
                        "id": 8686,
                        "nodeType": "Return",
                        "src": "19958:50:43"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8693,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8689,
                      "name": "register",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8674,
                      "src": "20029:8:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_memory_ptr",
                        "typeString": "struct Controller.GlobalConstraintRegister memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 8690,
                        "name": "globalConstraintsRegisterPost",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7364,
                        "src": "20040:29:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$7338_storage_$",
                          "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                        }
                      },
                      "id": 8692,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 8691,
                        "name": "_globalConstraint",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8666,
                        "src": "20070:17:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "20040:48:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_storage",
                        "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                      }
                    },
                    "src": "20029:59:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_memory_ptr",
                      "typeString": "struct Controller.GlobalConstraintRegister memory"
                    }
                  },
                  "id": 8694,
                  "nodeType": "ExpressionStatement",
                  "src": "20029:59:43"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 8695,
                      "name": "register",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8674,
                      "src": "20103:8:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_memory_ptr",
                        "typeString": "struct Controller.GlobalConstraintRegister memory"
                      }
                    },
                    "id": 8696,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "isRegistered",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 7335,
                    "src": "20103:21:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8704,
                  "nodeType": "IfStatement",
                  "src": "20099:103:43",
                  "trueBody": {
                    "id": 8703,
                    "nodeType": "Block",
                    "src": "20126:76:43",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 8697,
                              "name": "globalConstraintsPost",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7356,
                              "src": "20147:21:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
                                "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                              }
                            },
                            "id": 8700,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8698,
                                "name": "register",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8674,
                                "src": "20169:8:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_memory_ptr",
                                  "typeString": "struct Controller.GlobalConstraintRegister memory"
                                }
                              },
                              "id": 8699,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "index",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7337,
                              "src": "20169:14:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "20147:37:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConstraint_$7333_storage",
                              "typeString": "struct Controller.GlobalConstraint storage ref"
                            }
                          },
                          "id": 8701,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "params",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7332,
                          "src": "20147:44:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "functionReturnParameters": 8672,
                        "id": 8702,
                        "nodeType": "Return",
                        "src": "20140:51:43"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "id": 8706,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getGlobalConstraintParameters",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8669,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8666,
                  "name": "_globalConstraint",
                  "nodeType": "VariableDeclaration",
                  "scope": 8706,
                  "src": "19738:25:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8665,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19738:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8668,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8706,
                  "src": "19765:7:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8667,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19765:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19737:36:43"
            },
            "returnParameters": {
              "id": 8672,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8671,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8706,
                  "src": "19796:7:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8670,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "19796:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19795:9:43"
            },
            "scope": 8772,
            "src": "19699:509:43",
            "stateMutability": "view",
            "superFunction": 8977,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8724,
              "nodeType": "Block",
              "src": "20557:83:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8718,
                          "name": "globalConstraintsPre",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7353,
                          "src": "20575:20:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
                            "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                          }
                        },
                        "id": 8719,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "20575:27:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8720,
                          "name": "globalConstraintsPost",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7356,
                          "src": "20604:21:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$7333_storage_$dyn_storage",
                            "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                          }
                        },
                        "id": 8721,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "20604:28:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 8722,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "20574:59:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 8717,
                  "id": 8723,
                  "nodeType": "Return",
                  "src": "20567:66:43"
                }
              ]
            },
            "documentation": "@dev globalConstraintsCount return the global constraint pre and post count\n@return uint256 globalConstraintsPre count.\n@return uint256 globalConstraintsPost count.",
            "id": 8725,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8711,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8708,
                    "src": "20499:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 8712,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8710,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7672,
                  "src": "20485:13:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "20485:22:43"
              }
            ],
            "name": "globalConstraintsCount",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8709,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8708,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 8725,
                  "src": "20443:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8707,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "20443:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20442:17:43"
            },
            "returnParameters": {
              "id": 8717,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8714,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8725,
                  "src": "20537:4:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8713,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "20537:4:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8716,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8725,
                  "src": "20543:4:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8715,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "20543:4:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20536:12:43"
            },
            "scope": 8772,
            "src": "20411:229:43",
            "stateMutability": "view",
            "superFunction": 8995,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8748,
              "nodeType": "Block",
              "src": "20819:167:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 8745,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 8737,
                              "name": "globalConstraintsRegisterPre",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7360,
                              "src": "20837:28:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$7338_storage_$",
                                "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                              }
                            },
                            "id": 8739,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 8738,
                              "name": "_globalConstraint",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8727,
                              "src": "20866:17:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "20837:47:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_storage",
                              "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                            }
                          },
                          "id": 8740,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "isRegistered",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7335,
                          "src": "20837:60:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 8741,
                              "name": "globalConstraintsRegisterPost",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7364,
                              "src": "20917:29:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$7338_storage_$",
                                "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                              }
                            },
                            "id": 8743,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 8742,
                              "name": "_globalConstraint",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8727,
                              "src": "20947:17:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "20917:48:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConstraintRegister_$7338_storage",
                              "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                            }
                          },
                          "id": 8744,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "isRegistered",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7335,
                          "src": "20917:61:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "20837:141:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "id": 8746,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "20836:143:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 8736,
                  "id": 8747,
                  "nodeType": "Return",
                  "src": "20829:150:43"
                }
              ]
            },
            "documentation": null,
            "id": 8749,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8732,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8729,
                    "src": "20767:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 8733,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8731,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7672,
                  "src": "20753:13:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "20753:22:43"
              }
            ],
            "name": "isGlobalConstraintRegistered",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8730,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8727,
                  "name": "_globalConstraint",
                  "nodeType": "VariableDeclaration",
                  "scope": 8749,
                  "src": "20684:25:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8726,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "20684:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8729,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 8749,
                  "src": "20711:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8728,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "20711:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20683:44:43"
            },
            "returnParameters": {
              "id": 8736,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8735,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8749,
                  "src": "20805:4:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8734,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "20805:4:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20804:6:43"
            },
            "scope": 8772,
            "src": "20646:340:43",
            "stateMutability": "view",
            "superFunction": 9004,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8770,
              "nodeType": "Block",
              "src": "21065:86:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 8767,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "id": 8763,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 8756,
                                "name": "schemes",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7342,
                                "src": "21083:7:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$7328_storage_$",
                                  "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                                }
                              },
                              "id": 8758,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 8757,
                                "name": "_scheme",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8751,
                                "src": "21091:7:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "21083:16:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Scheme_$7328_storage",
                                "typeString": "struct Controller.Scheme storage ref"
                              }
                            },
                            "id": 8759,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "permissions",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7327,
                            "src": "21083:28:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30783030303030303031",
                                "id": 8761,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "21119:10:43",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "0x00000001"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                }
                              ],
                              "id": 8760,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "21112:6:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes4_$",
                                "typeString": "type(bytes4)"
                              },
                              "typeName": "bytes4"
                            },
                            "id": 8762,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "21112:18:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "21083:47:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 8765,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "21141:1:43",
                              "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": 8764,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "21134:6:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes4_$",
                              "typeString": "type(bytes4)"
                            },
                            "typeName": "bytes4"
                          },
                          "id": 8766,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "21134:9:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "21083:60:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "id": 8768,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "21082:62:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 8755,
                  "id": 8769,
                  "nodeType": "Return",
                  "src": "21075:69:43"
                }
              ]
            },
            "documentation": null,
            "id": 8771,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_isSchemeRegistered",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8752,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8751,
                  "name": "_scheme",
                  "nodeType": "VariableDeclaration",
                  "scope": 8771,
                  "src": "21021:15:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8750,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "21021:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21020:17:43"
            },
            "returnParameters": {
              "id": 8755,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8754,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8771,
                  "src": "21059:4:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8753,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "21059:4:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21058:6:43"
            },
            "scope": 8772,
            "src": "20992:159:43",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "private"
          }
        ],
        "scope": 8773,
        "src": "410:20743:43"
      }
    ],
    "src": "0:21154:43"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.4+commit.9549d8ff.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.2.3",
  "updatedAt": "2021-01-27T19:47:37.804Z",
  "networkType": "ethereum",
  "devdoc": {
    "details": "A controller controls the organizations tokens, reputation and avatar. It is subject to a set of schemes and constraints that determine its behavior. Each scheme has it own parameters and operation permissions.",
    "methods": {
      "addGlobalConstraint(address,bytes32,address)": {
        "details": "add or update Global Constraint",
        "params": {
          "_globalConstraint": "the address of the global constraint to be added.",
          "_params": "the constraint parameters hash."
        },
        "return": "bool which represents a success"
      },
      "burnReputation(uint256,address,address)": {
        "details": "Burns `_amount` of reputation from `_from`",
        "params": {
          "_amount": "amount of reputation to burn",
          "_from": "The address that will lose the reputation"
        },
        "return": "bool which represents a success"
      },
      "externalTokenApproval(address,address,uint256,address)": {
        "details": "externalTokenApproval approve the spender address to spend a specified amount of tokens     on behalf of msg.sender.",
        "params": {
          "_externalToken": "the address of the Token Contract",
          "_spender": "address",
          "_value": "the amount of ether (in Wei) which the approval is referring to."
        },
        "return": "bool which represents a success"
      },
      "externalTokenTransfer(address,address,uint256,address)": {
        "details": "send some amount of arbitrary ERC20 Tokens",
        "params": {
          "_externalToken": "the address of the Token Contract",
          "_to": "address of the beneficiary",
          "_value": "the amount of ether (in Wei) to send"
        },
        "return": "bool which represents a success"
      },
      "externalTokenTransferFrom(address,address,address,uint256,address)": {
        "details": "transfer token \"from\" address \"to\" address     One must to approve the amount of tokens which can be spend from the     \"from\" account.This can be done using externalTokenApprove.",
        "params": {
          "_externalToken": "the address of the Token Contract",
          "_from": "address of the account to send from",
          "_to": "address of the beneficiary",
          "_value": "the amount of ether (in Wei) to send"
        },
        "return": "bool which represents a success"
      },
      "genericCall(address,bytes,address,uint256)": {
        "details": "perform a generic call to an arbitrary contract",
        "params": {
          "_avatar": "the controller's avatar address",
          "_contract": "the contract's address to call",
          "_data": "ABI-encoded contract call to call `_contract` address.",
          "_value": "value (ETH) to transfer with the transaction"
        },
        "return": "bool -success        bytes  - the return value of the called _contract's function."
      },
      "getNativeReputation(address)": {
        "details": "getNativeReputation",
        "params": {
          "_avatar": "the organization avatar."
        },
        "return": "organization native reputation"
      },
      "globalConstraintsCount(address)": {
        "details": "globalConstraintsCount return the global constraint pre and post count",
        "return": "uint256 globalConstraintsPre count.uint256 globalConstraintsPost count."
      },
      "metaData(string,address)": {
        "details": "metaData emits an event with a string, should contain the hash of some meta data.",
        "params": {
          "_avatar": "Avatar",
          "_metaData": "a string representing a hash of the meta data"
        },
        "return": "bool which represents a success"
      },
      "mintReputation(uint256,address,address)": {
        "details": "Mint `_amount` of reputation that are assigned to `_to` .",
        "params": {
          "_amount": "amount of reputation to mint",
          "_to": "beneficiary address"
        },
        "return": "bool which represents a success"
      },
      "mintTokens(uint256,address,address)": {
        "details": "mint tokens .",
        "params": {
          "_amount": "amount of token to mint",
          "_beneficiary": "beneficiary address"
        },
        "return": "bool which represents a success"
      },
      "registerScheme(address,bytes32,bytes4,address)": {
        "details": "register a scheme",
        "params": {
          "_paramsHash": "a hashed configuration of the usage of the scheme",
          "_permissions": "the permissions the new scheme will have",
          "_scheme": "the address of the scheme"
        },
        "return": "bool which represents a success"
      },
      "removeGlobalConstraint(address,address)": {
        "details": "remove Global Constraint",
        "params": {
          "_globalConstraint": "the address of the global constraint to be remove."
        },
        "return": "bool which represents a success"
      },
      "sendEther(uint256,address,address)": {
        "details": "send some ether",
        "params": {
          "_amountInWei": "the amount of ether (in Wei) to send",
          "_to": "address of the beneficiary"
        },
        "return": "bool which represents a success"
      },
      "unregisterScheme(address,address)": {
        "details": "unregister a scheme",
        "params": {
          "_scheme": "the address of the scheme"
        },
        "return": "bool which represents a success"
      },
      "unregisterSelf(address)": {
        "details": "unregister the caller's scheme",
        "return": "bool which represents a success"
      },
      "upgradeController(address,address)": {
        "details": "upgrade the Controller     The function will trigger an event 'UpgradeController'.",
        "params": {
          "_newController": "the address of the new controller."
        },
        "return": "bool which represents a success"
      }
    },
    "title": "Controller contract"
  },
  "userdoc": {
    "methods": {}
  }
}