{
  "contractName": "DecentralizedAutonomousTrust",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_fairValue",
          "type": "uint256"
        }
      ],
      "name": "Burn",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_currencyValue",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_fairValue",
          "type": "uint256"
        }
      ],
      "name": "Buy",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_exitFee",
          "type": "uint256"
        }
      ],
      "name": "Close",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_currencyValue",
          "type": "uint256"
        }
      ],
      "name": "Pay",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_currencyValue",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_fairValue",
          "type": "uint256"
        }
      ],
      "name": "Sell",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_previousState",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_newState",
          "type": "uint256"
        }
      ],
      "name": "StateChange",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_whitelistAddress",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_beneficiary",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_control",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_feeCollector",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_revenueCommitmentBasisPoints",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_feeBasisPoints",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_minInvestment",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_minDuration",
          "type": "uint256"
        }
      ],
      "name": "UpdateConfig",
      "type": "event"
    },
    {
      "payable": true,
      "stateMutability": "payable",
      "type": "fallback"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "DOMAIN_SEPARATOR",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "PERMIT_BUY_TYPEHASH",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "PERMIT_SELL_TYPEHASH",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "PERMIT_TYPEHASH",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "__startedOn",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "beneficiary",
      "outputs": [
        {
          "internalType": "address payable",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "burn",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "burnFrom",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "burnedSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_currencyValue",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_minTokensBought",
          "type": "uint256"
        }
      ],
      "name": "buy",
      "outputs": [],
      "payable": true,
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "buySlopeDen",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "buySlopeNum",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "buybackReserve",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "control",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "currency",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "subtractedValue",
          "type": "uint256"
        }
      ],
      "name": "decreaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_currencyValue",
          "type": "uint256"
        }
      ],
      "name": "estimateBuyValue",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_quantityToSell",
          "type": "uint256"
        }
      ],
      "name": "estimateSellValue",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "feeBasisPoints",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "feeCollector",
      "outputs": [
        {
          "internalType": "address payable",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "addedValue",
          "type": "uint256"
        }
      ],
      "name": "increaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "initGoal",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "initInvestors",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "initReserve",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "initializeDomainSeparator",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "minDuration",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "minInvestment",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "nonces",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "permit",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address payable",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_currencyValue",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_minTokensBought",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_deadline",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "_v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "_r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "_s",
          "type": "bytes32"
        }
      ],
      "name": "permitBuy",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address payable",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_quantityToSell",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_minCurrencyReturned",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_deadline",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "_v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "_r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "_s",
          "type": "bytes32"
        }
      ],
      "name": "permitSell",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address payable",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_quantityToSell",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_minCurrencyReturned",
          "type": "uint256"
        }
      ],
      "name": "sell",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "setupFee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "setupFeeRecipient",
      "outputs": [
        {
          "internalType": "address payable",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "state",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "version",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "whitelist",
      "outputs": [
        {
          "internalType": "contract IWhitelist",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "revenueCommitmentBasisPoints",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "investmentReserveBasisPoints",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "runStartedOn",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "string",
          "name": "name",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol",
          "type": "string"
        },
        {
          "internalType": "uint8",
          "name": "decimals",
          "type": "uint8"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_initReserve",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_currencyAddress",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_initGoal",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_buySlopeNum",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_buySlopeDen",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_investmentReserveBasisPoints",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_setupFee",
          "type": "uint256"
        },
        {
          "internalType": "address payable",
          "name": "_setupFeeRecipient",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "_name",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "_symbol",
          "type": "string"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_msgValue",
          "type": "uint256"
        }
      ],
      "name": "estimateExitFee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "close",
      "outputs": [],
      "payable": true,
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_currencyValue",
          "type": "uint256"
        }
      ],
      "name": "pay",
      "outputs": [],
      "payable": true,
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_whitelistAddress",
          "type": "address"
        },
        {
          "internalType": "address payable",
          "name": "_beneficiary",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_control",
          "type": "address"
        },
        {
          "internalType": "address payable",
          "name": "_feeCollector",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_feeBasisPoints",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_revenueCommitmentBasisPoints",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_minInvestment",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_minDuration",
          "type": "uint256"
        }
      ],
      "name": "updateConfig",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_runStartedOn",
          "type": "uint256"
        }
      ],
      "name": "initializeRunStartedOn",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.17+commit.d19bba13\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_fairValue\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_currencyValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_fairValue\",\"type\":\"uint256\"}],\"name\":\"Buy\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_exitFee\",\"type\":\"uint256\"}],\"name\":\"Close\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_currencyValue\",\"type\":\"uint256\"}],\"name\":\"Pay\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_currencyValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_fairValue\",\"type\":\"uint256\"}],\"name\":\"Sell\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_previousState\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_newState\",\"type\":\"uint256\"}],\"name\":\"StateChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_whitelistAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_beneficiary\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_control\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_feeCollector\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_revenueCommitmentBasisPoints\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_feeBasisPoints\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_minInvestment\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_minDuration\",\"type\":\"uint256\"}],\"name\":\"UpdateConfig\",\"type\":\"event\"},{\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"constant\":true,\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"PERMIT_BUY_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"PERMIT_SELL_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"PERMIT_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"__startedOn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"beneficiary\",\"outputs\":[{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"burnFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"burnedSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_currencyValue\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_minTokensBought\",\"type\":\"uint256\"}],\"name\":\"buy\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"buySlopeDen\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"buySlopeNum\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"buybackReserve\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"close\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"control\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"currency\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_currencyValue\",\"type\":\"uint256\"}],\"name\":\"estimateBuyValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_msgValue\",\"type\":\"uint256\"}],\"name\":\"estimateExitFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_quantityToSell\",\"type\":\"uint256\"}],\"name\":\"estimateSellValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"feeBasisPoints\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"feeCollector\",\"outputs\":[{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"initGoal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"initInvestors\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"initReserve\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"name\":\"initialize\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_initReserve\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_currencyAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_initGoal\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_buySlopeNum\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_buySlopeDen\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_investmentReserveBasisPoints\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_setupFee\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"_setupFeeRecipient\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"}],\"name\":\"initialize\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"initializeDomainSeparator\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_runStartedOn\",\"type\":\"uint256\"}],\"name\":\"initializeRunStartedOn\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"investmentReserveBasisPoints\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"minDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"minInvestment\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_currencyValue\",\"type\":\"uint256\"}],\"name\":\"pay\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_currencyValue\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_minTokensBought\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"_v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"_r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_s\",\"type\":\"bytes32\"}],\"name\":\"permitBuy\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_quantityToSell\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_minCurrencyReturned\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"_v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"_r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_s\",\"type\":\"bytes32\"}],\"name\":\"permitSell\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"revenueCommitmentBasisPoints\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"runStartedOn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_quantityToSell\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_minCurrencyReturned\",\"type\":\"uint256\"}],\"name\":\"sell\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"setupFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"setupFeeRecipient\",\"outputs\":[{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"state\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_whitelistAddress\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"_beneficiary\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_control\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"_feeCollector\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_feeBasisPoints\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_revenueCommitmentBasisPoints\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_minInvestment\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_minDuration\",\"type\":\"uint256\"}],\"name\":\"updateConfig\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"whitelist\",\"outputs\":[{\"internalType\":\"contract IWhitelist\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}.     * Requirements:     * - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"burn(uint256)\":{\"details\":\"Note that this is not the same as a `sell` via the DAT.\"},\"buy(address,uint256,uint256)\":{\"details\":\"_minTokensBought is necessary as the price will change if some elses transaction mines after yours was submitted.\",\"params\":{\"_currencyValue\":\"How much currency to spend in order to buy FAIR.\",\"_minTokensBought\":\"Buy at least this many FAIR tokens or the transaction reverts.\",\"_to\":\"The account to receive the FAIR tokens from this purchase.\"}},\"close()\":{\"details\":\"Requires an `exitFee` to be paid.  If the currency is ETH, include a little more than what appears to be required and any remainder will be returned to your account.  This is because another user may have a transaction mined which changes the exitFee required. For other `currency` types, the beneficiary account will be billed the exact amount required.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5,05` (`505 / 10 ** 2`).     * Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei.     * NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller.     * This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}.     * Emits an {Approval} event indicating the updated allowance.     * Requirements:     * - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"estimateBuyValue(uint256)\":{\"params\":{\"_currencyValue\":\"How much currency to spend in order to buy FAIR.\"}},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller.     * This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}.     * Emits an {Approval} event indicating the updated allowance.     * Requirements:     * - `spender` cannot be the zero address.\"},\"initialize(string,string,uint8)\":{\"details\":\"Sets the values for `name`, `symbol`, and `decimals`. All three of these values are immutable: they can only be set once during construction.\"},\"initializeDomainSeparator()\":{\"details\":\"This is separate from `initialize` to allow upgraded contracts to update the version There is no harm in calling this multiple times / no permissions required\"},\"initializeRunStartedOn(uint256)\":{\"details\":\"This function will be removed once known users have called the function.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"pay(uint256)\":{\"details\":\"Pay the organization on-chain.\",\"params\":{\"_currencyValue\":\"How much currency which was paid.\"}},\"sell(address,uint256,uint256)\":{\"details\":\"_minCurrencyReturned is necessary as the price will change if some elses transaction mines after yours was submitted.\",\"params\":{\"_minCurrencyReturned\":\"Get at least this many currency tokens or the transaction reverts.\",\"_quantityToSell\":\"How many FAIR tokens to sell for currency value.\",\"_to\":\"The account to receive the currency from this sale.\"}},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}.     * Requirements:     * - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}.     * Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20};     * Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `amount`. - the caller must have allowance for `sender`'s tokens of at least `amount`.\"}},\"title\":\"Decentralized Autonomous Trust This contract is the reference implementation provided by Fairmint for a Decentralized Autonomous Trust as described in the continuous organization whitepaper (https://github.com/c-org/whitepaper) and specified here: https://github.com/fairmint/c-org/wiki. Use at your own risk. If you have question or if you're looking for a ready-to-use solution using this contract, you might be interested in Fairmint's offering. Do not hesitate to get in touch with us: https://fairmint.co\"},\"userdoc\":{\"methods\":{\"burn(uint256)\":{\"notice\":\"Burn the amount of tokens from the address msg.sender if authorized.\"},\"burnFrom(address,uint256)\":{\"notice\":\"Burn the amount of tokens from the given address if approved.\"},\"buy(address,uint256,uint256)\":{\"notice\":\"Purchase FAIR tokens with the given amount of currency.\"},\"buybackReserve()\":{\"notice\":\"The total amount of currency value currently locked in the contract and available to sellers.\"},\"close()\":{\"notice\":\"Called by the beneficiary account to STATE_CLOSE or STATE_CANCEL the c-org, preventing any more tokens from being minted.\"},\"estimateBuyValue(uint256)\":{\"notice\":\"Calculate how many FAIR tokens you would buy with the given amount of currency if `buy` was called now.\"},\"estimateExitFee(uint256)\":{\"notice\":\"Close\"},\"estimateSellValue(uint256)\":{\"notice\":\"Sell\"},\"initializeDomainSeparator()\":{\"notice\":\"Used to initialize the domain separator used in meta-transactions\"},\"initializeRunStartedOn(uint256)\":{\"notice\":\"A temporary function to set `runStartedOn`, to be used by contracts which were already deployed before this feature was introduced.\"},\"investmentReserveBasisPoints()\":{\"notice\":\"The investment reserve of the c-org. Defines the percentage of the value invested that is automatically funneled and held into the buyback_reserve expressed in basis points. Internal since this is n/a to all derivative contracts.\"},\"pay(uint256)\":{\"notice\":\"Pay\"},\"permitBuy(address,address,uint256,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Allow users to sign a message authorizing a buy\"},\"permitSell(address,address,uint256,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Allow users to sign a message authorizing a sell\"},\"revenueCommitmentBasisPoints()\":{\"notice\":\"The revenue commitment of the organization. Defines the percentage of the value paid through the contract that is automatically funneled and held into the buyback_reserve expressed in basis points. Internal since this is n/a to all derivative contracts.\"},\"runStartedOn()\":{\"notice\":\"Initialized at `0` and updated when the contract switches from `init` state to `run` state with the current timestamp.\"},\"sell(address,uint256,uint256)\":{\"notice\":\"Sell FAIR tokens for at least the given amount of currency.\"}}}},\"settings\":{\"compilationTarget\":{\"/home/circleci/repo/contracts/DecentralizedAutonomousTrust.sol\":\"DecentralizedAutonomousTrust\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/circleci/repo/contracts/ContinuousOffering.sol\":{\"keccak256\":\"0x66c9a1ff6e55e2839d0b52bdbfa79e13e26b5c36aef9d9f1208d4c3346278659\",\"urls\":[\"bzz-raw://efd111a84e533b47a097036d92071b4110eca8ca10a0606febe7d6cbf669c386\",\"dweb:/ipfs/QmfJJzzoxkrFLzvgxT1ABx8of8iZFF2GDGzZHRXSC1ZBgd\"]},\"/home/circleci/repo/contracts/DecentralizedAutonomousTrust.sol\":{\"keccak256\":\"0x765ba31b73e0690fefbfd37e469c4674ca2693cb3414911edbff1f5a0e61ce80\",\"urls\":[\"bzz-raw://edfed3ae8395265f2bd8442320ece00dde1eaa18bfcada773a65cb5bbeec0214\",\"dweb:/ipfs/QmaFj2BCfk9p2QgJmoRiLZjsWSULNGxnoAkzXkUx2z6rCA\"]},\"/home/circleci/repo/contracts/interfaces/IERC20Detailed.sol\":{\"keccak256\":\"0x80d2d2bbc8ec5b558c84aa5575e7767a01e4e3d82c046cc48ad1c12880620714\",\"urls\":[\"bzz-raw://c1b6756fd04a5a97089fdd9fb3549cc4bc10495e017a5fff2f55cbcf889fbee8\",\"dweb:/ipfs/QmQoEra5mhMm7yVeqGpjHvo8faHz8F53g91w8F9JfJaJw5\"]},\"/home/circleci/repo/contracts/interfaces/IWhitelist.sol\":{\"keccak256\":\"0x1ab9b967293b5df5b5a4f1fb9ca886a5da3d390c6093a9759695369c59be4348\",\"urls\":[\"bzz-raw://dc8f72a6df60a20b34ca2b5cf2ea8ce53f66afe73673805c68ff91e4a2a78d17\",\"dweb:/ipfs/QmQHrcnL1jEPxj2YfVkg31u1egZ1tBWuZcJfPME5c5dpbV\"]},\"/home/circleci/repo/contracts/math/BigDiv.sol\":{\"keccak256\":\"0xf695ffefeaf1c536baecf7684f56cc089e54d8a852d6ff299b7cb02313d821f7\",\"urls\":[\"bzz-raw://90052e8d9837cf9529de377bee6bf5ccf33f640b586fd05539f4543863f4b474\",\"dweb:/ipfs/QmPoWhkbMZm1pYjPEkzKG3aSpPHaMnwqqXRs7gbFrH62Fk\"]},\"/home/circleci/repo/contracts/math/Sqrt.sol\":{\"keccak256\":\"0xf33a94e15e4e6f1de5420c93a105fba5368d1b8a63248f4a851adedaeb51ab6e\",\"urls\":[\"bzz-raw://3ce900b908a7193a08c9a17f82963ae90b5297c508e062255fa6b98ebef2d5e5\",\"dweb:/ipfs/QmWoTxDa85oFTqA7TF6sYSyMibji916HVFsGkch6jbGJrW\"]},\"@openzeppelin/contracts-ethereum-package/contracts/GSN/Context.sol\":{\"keccak256\":\"0x3491510fa4862af1a43f6c860d9cf7392240196540cd3c0eea79d374d419c5a1\",\"urls\":[\"bzz-raw://3e51386d74eb723d3acaaddafce1dd0b4082ad4c10ddba6b9fc154aad2930d02\",\"dweb:/ipfs/QmcA8Huap1c7YjdVjx5TGasxKNMLgsa3XyLvQUaMa1nMt8\"]},\"@openzeppelin/contracts-ethereum-package/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x640b6dee7a4b830bdfd52b5031a07fc2b12209f5b2e29e5d364a7d37f69d8076\",\"urls\":[\"bzz-raw://31113152e1ddb78fe7a4197f247591ca894e93f916867beb708d8e747b6cc74f\",\"dweb:/ipfs/QmbZaJyXdpsYGykVhHH9qpVGQg9DGCxE2QufbCUy3daTgq\"]},\"@openzeppelin/contracts-ethereum-package/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x2a474399663812668bb8e9c9e7d011d54fd09de386bd6e9fcb2407a677ebd1aa\",\"urls\":[\"bzz-raw://93754fbe81bcf1f111288152c40987a9fd7cdb43dc72b9f8d7eabb96a4fa9976\",\"dweb:/ipfs/QmNZadpwGrNYB6jndNcAk6dT7f6HHMZBPXdNTa5fKu3HVp\"]},\"@openzeppelin/contracts-ethereum-package/contracts/token/ERC20/ERC20Detailed.sol\":{\"keccak256\":\"0x704e0cb521f0b571096a72266a34d9a2a59a89853b5b271bc97fa307a4cc4dcc\",\"urls\":[\"bzz-raw://96317e95d4c301e54ff42f2b6dede996ac4d714e50a6b5552c68fbb378330dcf\",\"dweb:/ipfs/QmawKJQVK7yXeBhGcvkmujYpo8n7CWQJizDV2dWzsxupnh\"]},\"@openzeppelin/contracts-ethereum-package/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe5bb0f57cff3e299f360052ba50f1ea0fff046df2be070b6943e0e3c3fdad8a9\",\"urls\":[\"bzz-raw://59fd025151435da35faa8093a5c7a17de02de9d08ad27275c5cdf05050820d91\",\"dweb:/ipfs/QmQMvwEcPhoRXzbXyrdoeRtvLoifUW9Qh7Luho7bmUPRkc\"]},\"@openzeppelin/contracts-ethereum-package/contracts/token/ERC20/SafeERC20.sol\":{\"keccak256\":\"0x6f2c9955d65c522b80f4b8792f076512d2df947d2112cbc4d98a4781ed42ede2\",\"urls\":[\"bzz-raw://7d8ec81683520c06baeef3f7e06cd82bd6fd5fa611f26857f475f6c829540aff\",\"dweb:/ipfs/QmTDkFzKnrpiV1UKnSoiZAHPuguWzokrr4pFbSPvyaSo56\"]},\"@openzeppelin/contracts-ethereum-package/contracts/utils/Address.sol\":{\"keccak256\":\"0x1a8e5072509c5ea7365eb1d48030b9be865140c8fb779968da0a459a0e174a11\",\"urls\":[\"bzz-raw://03335b7b07c7c8c8d613cfdd8ec39a0b5ec133ee510bf2fe6cc5a496767bef4b\",\"dweb:/ipfs/Qmebp4nzPja645c9yXSdJkGq96oU3am3LUnG2K3R7XxyKf\"]},\"@openzeppelin/upgrades/contracts/Initializable.sol\":{\"keccak256\":\"0x9bfec92e36234ecc99b5d37230acb6cd1f99560233753162204104a4897e8721\",\"urls\":[\"bzz-raw://5cf7c208583d4d046d75bd99f5507412ab01cce9dd9f802ce9768a416d93ea2f\",\"dweb:/ipfs/QmcQS1BBMPpVEkXP3qzwSjxHNrqDek8YeR7xbVWDC9ApC7\"]}},\"version\":1}",
  "bytecode": "0x6080604052614699806100136000396000f3fe60806040526004361061036b5760003560e01c80637ecebe00116101c6578063b12f4153116100f7578063ca5244a111610095578063d8de65871161006f578063d8de658714610e7a578063dd62ed3e14610e8f578063e5a6b10f14610eca578063ff90956014610edf5761036b565b8063ca5244a114610c93578063d29157fb14610e07578063d505accf14610e1c5761036b565b8063c25b25bd116100d1578063c25b25bd14610c37578063c290d69114610c4c578063c415b95c14610c69578063c715930714610c7e5761036b565b8063b12f415314610be3578063b8606eef14610c0d578063c19d93fb14610c225761036b565b8063a457c2d711610164578063a71ddd251161013e578063a71ddd2514610b1a578063a9059cbb14610b2f578063ad3b763314610b68578063af575ab714610b7d5761036b565b8063a457c2d714610a4a578063a551bfc414610a83578063a59ac6dd14610ae85761036b565b806393e59dc1116101a057806393e59dc1146109f657806395d89b4114610a0b5780639df3f4f614610a20578063a40b56b914610a355761036b565b80637ecebe0014610984578063896d1708146109b75780638ac2c680146109e15761036b565b80633644e515116102a0578063567157611161023e5780636a272462116102185780636a272462146108a657806370a08231146108e5578063736dcb1f1461091857806379cc67901461094b5761036b565b8063567157611461086757806358439fa51461087c5780636177e37c146108915761036b565b806342966c681161027a57806342966c681461080b57806343d726d61461083557806354fd4d501461083d57806355d0a1d0146108525761036b565b80633644e5151461078c57806338af3eed146107a157806339509351146107d25761036b565b8063270588ee1161030d5780632ff79161116102e75780632ff791611461072257806330adf81f14610737578063313ce5671461074c57806335e5cc31146107775761036b565b8063270588ee146106695780632973434a146106ce5780632e872bb3146106f85761036b565b806318160ddd1161034957806318160ddd146105d55780631d833ec5146105fc57806323b872dd1461061157806326315438146106545761036b565b806306fdde03146103c3578063095ea7b31461044d5780631624f6c61461049a575b60a3546001600160a01b0316156103c1576040805162461bcd60e51b815260206004820152601560248201527409e9c98b2be8c9ea4be86aaa4a48a9c86b2be8aa89605b1b604482015290519081900360640190fd5b005b3480156103cf57600080fd5b506103d8610ef4565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104125781810151838201526020016103fa565b50505050905090810190601f16801561043f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561045957600080fd5b506104866004803603604081101561047057600080fd5b506001600160a01b038135169060200135610f8b565b604080519115158252519081900360200190f35b3480156104a657600080fd5b506103c1600480360360608110156104bd57600080fd5b810190602081018135600160201b8111156104d757600080fd5b8201836020820111156104e957600080fd5b803590602001918460018302840111600160201b8311171561050a57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561055c57600080fd5b82018360208201111561056e57600080fd5b803590602001918460018302840111600160201b8311171561058f57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505050903560ff169150610fa99050565b3480156105e157600080fd5b506105ea611085565b60408051918252519081900360200190f35b34801561060857600080fd5b506105ea61108b565b34801561061d57600080fd5b506104866004803603606081101561063457600080fd5b506001600160a01b038135811691602081013590911690604001356110af565b34801561066057600080fd5b506105ea61113d565b34801561067557600080fd5b506103c1600480360361010081101561068d57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060808101359060ff60a0820135169060c08101359060e00135611143565b3480156106da57600080fd5b506103c1600480360360208110156106f157600080fd5b5035611338565b34801561070457600080fd5b506105ea6004803603602081101561071b57600080fd5b5035611476565b34801561072e57600080fd5b506103c16115ed565b34801561074357600080fd5b506105ea611691565b34801561075857600080fd5b506107616116b5565b6040805160ff9092168252519081900360200190f35b34801561078357600080fd5b506105ea6116be565b34801561079857600080fd5b506105ea6116c4565b3480156107ad57600080fd5b506107b66116ca565b604080516001600160a01b039092168252519081900360200190f35b3480156107de57600080fd5b50610486600480360360408110156107f557600080fd5b506001600160a01b0381351690602001356116de565b34801561081757600080fd5b506103c16004803603602081101561082e57600080fd5b5035611732565b6103c1611741565b34801561084957600080fd5b506103d86117a5565b34801561085e57600080fd5b506105ea6117c2565b34801561087357600080fd5b506105ea6117c8565b34801561088857600080fd5b506105ea6117ce565b34801561089d57600080fd5b506105ea6117d4565b3480156108b257600080fd5b506103c1600480360360608110156108c957600080fd5b506001600160a01b0381351690602081013590604001356117da565b3480156108f157600080fd5b506105ea6004803603602081101561090857600080fd5b50356001600160a01b03166117eb565b34801561092457600080fd5b506105ea6004803603602081101561093b57600080fd5b50356001600160a01b0316611806565b34801561095757600080fd5b506103c16004803603604081101561096e57600080fd5b506001600160a01b038135169060200135611818565b34801561099057600080fd5b506105ea600480360360208110156109a757600080fd5b50356001600160a01b0316611861565b3480156109c357600080fd5b506105ea600480360360208110156109da57600080fd5b5035611873565b3480156109ed57600080fd5b506105ea6118f4565b348015610a0257600080fd5b506107b66118fa565b348015610a1757600080fd5b506103d8611909565b348015610a2c57600080fd5b506105ea61196a565b348015610a4157600080fd5b506105ea611970565b348015610a5657600080fd5b5061048660048036036040811015610a6d57600080fd5b506001600160a01b038135169060200135611976565b348015610a8f57600080fd5b506103c16004803603610100811015610aa757600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060808101359060ff60a0820135169060c08101359060e001356119e4565b6103c160048036036060811015610afe57600080fd5b506001600160a01b038135169060208101359060400135611bcd565b348015610b2657600080fd5b506105ea611bd9565b348015610b3b57600080fd5b5061048660048036036040811015610b5257600080fd5b506001600160a01b038135169060200135611bdf565b348015610b7457600080fd5b506105ea611bf3565b348015610b8957600080fd5b506103c16004803603610100811015610ba157600080fd5b506001600160a01b0381358116916020810135821691604082013581169160608101359091169060808101359060a08101359060c08101359060e00135611bf9565b348015610bef57600080fd5b506105ea60048036036020811015610c0657600080fd5b5035611d1e565b348015610c1957600080fd5b506105ea611e39565b348015610c2e57600080fd5b506105ea611e3f565b348015610c4357600080fd5b506107b6611e45565b6103c160048036036020811015610c6257600080fd5b5035611e54565b348015610c7557600080fd5b506107b6611f66565b348015610c8a57600080fd5b506105ea611f75565b348015610c9f57600080fd5b506103c16004803603610140811015610cb757600080fd5b8135916001600160a01b03602082013581169260408301359260608101359260808201359260a08301359260c08101359260e082013516918101906101208101610100820135600160201b811115610d0e57600080fd5b820183602082011115610d2057600080fd5b803590602001918460018302840111600160201b83111715610d4157600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b811115610d9357600080fd5b820183602082011115610da557600080fd5b803590602001918460018302840111600160201b83111715610dc657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611f7b945050505050565b348015610e1357600080fd5b506105ea61207f565b348015610e2857600080fd5b506103c1600480360360e0811015610e3f57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356120a3565b348015610e8657600080fd5b506107b661228e565b348015610e9b57600080fd5b506105ea60048036036040811015610eb257600080fd5b506001600160a01b038135811691602001351661229d565b348015610ed657600080fd5b506107b66122c8565b348015610eeb57600080fd5b506105ea6122d7565b60688054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610f805780601f10610f5557610100808354040283529160200191610f80565b820191906000526020600020905b815481529060010190602001808311610f6357829003601f168201915b505050505090505b90565b6000610f9f610f9861238b565b848461238f565b5060015b92915050565b600054610100900460ff1680610fc25750610fc261247b565b80610fd0575060005460ff16155b61100b5760405162461bcd60e51b815260040180806020018281038252602e815260200180614532602e913960400191505060405180910390fd5b600054610100900460ff16158015611036576000805460ff1961ff0019909116610100171660011790555b8351611049906068906020870190614317565b50825161105d906069906020860190614317565b50606a805460ff191660ff8416179055801561107f576000805461ff00191690555b50505050565b60355490565b7faf42a244b3020d6a2253d9f291b4d3e82240da42b22129a8113a58aa7a3ddb6a81565b60006110bc848484612481565b611132846110c861238b565b61112d8560405180606001604052806028815260200161450a602891396001600160a01b038a1660009081526034602052604081209061110661238b565b6001600160a01b03168152602081019190915260400160002054919063ffffffff6125a016565b61238f565b5060015b9392505050565b60a65481565b42841015611182576040805162461bcd60e51b81526020600482015260076024820152661156141254915160ca1b604482015290519081900360640190fd5b6001600160a01b03808916600081815260ae602090815260408083208054600180820190925582517faf42a244b3020d6a2253d9f291b4d3e82240da42b22129a8113a58aa7a3ddb6a8186015280840196909652958d166060860152608085018c905260a085018b905260c085019590955260e08085018a9052815180860390910181526101008501825280519083012060af5461190160f01b6101208701526101228601526101428086019190915281518086039091018152610162850180835281519184019190912090849052610182850180835281905260ff89166101a28601526101c285018890526101e285018790529051909492936102028082019392601f1981019281900390910190855afa1580156112a5573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906112db5750896001600160a01b0316816001600160a01b0316145b611320576040805162461bcd60e51b8152602060048201526011602482015270494e56414c49445f5349474e415455524560781b604482015290519081900360640190fd5b61132c8a8a8a8a612637565b50505050505050505050565b60a2546001600160a01b03163314611386576040805162461bcd60e51b815260206004820152600c60248201526b434f4e54524f4c5f4f4e4c5960a01b604482015290519081900360640190fd5b600160ad54146113d0576040805162461bcd60e51b815260206004820152601060248201526f27a7262cafa1a0a6262fa4a72fa92aa760811b604482015290519081900360640190fd5b60b35415611425576040805162461bcd60e51b815260206004820152601960248201527f4f4e4c595f43414c4c5f49465f4e4f545f4155544f5f53455400000000000000604482015290519081900360640190fd5b42811115611471576040805162461bcd60e51b81526020600482015260146024820152731110551157d35554d517d09157d25397d41054d560621b604482015290519081900360640190fd5b60b355565b600060ab5482101561148a575060006115e8565b60008060ad541415611571578260006114a1611085565b905060006114c060a05460a654028360a85460a654010360a1546128c0565b9050808311156114ce578092505b6114e18360a15460a05460a654026128c0565b93508583146115695760a1548187039350600202611505818563ffffffff612a4916565b60a65460a0549195508002915061152390829063ffffffff612a4916565b9050611535848263ffffffff612aa216565b905060a054818161154257fe5b04905061154e81612afc565b60a65490039050611565858263ffffffff612aa216565b9450505b5050506115e5565b600160ad5414156115db57600060a854609e5461158c611085565b010390506115a28460a15460020260a0546128c0565b91506115b68282800263ffffffff612aa216565b91506115c182612afc565b91506115d3828263ffffffff612b6b16565b9150506115e5565b60009150506115e8565b90505b919050565b604051469080605261447782396052019050604051809103902061160f610ef4565b805160209182012060408051808201825260018152603360f81b90840152805180840194909452838101919091527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606084015260808301939093523060a0808401919091528351808403909101815260c0909201909252805191012060af55565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b606a5460ff1690565b60a05481565b60af5481565b609f5461010090046001600160a01b031681565b6000610f9f6116eb61238b565b8461112d85603460006116fc61238b565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff612aa216565b61173e33826000612bad565b50565b60ad54600090600114156117675761175834611873565b90506117673382346001612ceb565b61176f612ddd565b6040805182815290517fbf67515a38ee520223d32c1266d52101c30d936ed1f3e436c8caeb0a43cb06bf9181900360200190a150565b604051806040016040528060018152602001603360f81b81525081565b609e5481565b60b25481565b60a15481565b60ac5490565b6117e633848484612f7f565b505050565b6001600160a01b031660009081526033602052604090205490565b60a76020526000908152604090205481565b611851823361112d8460405180606001604052806024815260200161456060249139611844883361229d565b919063ffffffff6125a016565b61185d82826000612bad565b5050565b60ae6020526000908152604090205481565b600080600160ad5414156115e557600061188b6122d7565b905061189d818563ffffffff612b6b16565b905060006118a9611085565b90506118be8160a054609e540260a1546128c0565b92506118d1818260a0540260a1546128c0565b830192508183116118e557600092506118eb565b81830392505b50509050919050565b60ab5481565b609d546001600160a01b031681565b60698054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610f805780601f10610f5557610100808354040283529160200191610f80565b60a95490565b60b05481565b6000610f9f61198361238b565b8461112d8560405180606001604052806025815260200161464060259139603460006119ad61238b565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff6125a016565b42841015611a23576040805162461bcd60e51b81526020600482015260076024820152661156141254915160ca1b604482015290519081900360640190fd5b6001600160a01b03808916600081815260ae602090815260408083208054600180820190925582517f5dfdc7fb4c68a4c249de5e08597626b84fbbe7bfef4ed3500f58003e722cc5488186015280840196909652958d166060860152608085018c905260a085018b905260c085019590955260e08085018a9052815180860390910181526101008501825280519083012060af5461190160f01b6101208701526101228601526101428086019190915281518086039091018152610162850180835281519184019190912090849052610182850180835281905260ff89166101a28601526101c285018890526101e285018790529051909492936102028082019392601f1981019281900390910190855afa158015611b46573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590611b7c5750896001600160a01b0316816001600160a01b0316145b611bc1576040805162461bcd60e51b8152602060048201526011602482015270494e56414c49445f5349474e415455524560781b604482015290519081900360640190fd5b61132c8a8a8a8a612f7f565b6117e633848484612637565b60a85481565b6000610f9f611bec61238b565b8484612481565b60b35481565b611c0888888888888787613168565b612710831115611c54576040805162461bcd60e51b81526020600482015260126024820152711253959053125117d0d3d35352551351539560721b604482015290519081900360640190fd5b60ac54831015611cab576040805162461bcd60e51b815260206004820152601d60248201527f434f4d4d49544d454e545f4d41595f4e4f545f42455f52454455434544000000604482015290519081900360640190fd5b60ac839055604080516001600160a01b038a8116825260208201869052818301879052606082018590526080820184905291518288169289811692908b16917fab33ca83001031840bf8a88b6a384c984aeb1ffcfebc562f13dab66a81306f969181900360a00190a45050505050505050565b600080611d296122d7565b90506000600160ad541415611dd5576000609e54611d45611085565b019050611d70611d5b868563ffffffff612a4916565b609e548002611d68611085565b8485026134d0565b91506000611d87866002860263ffffffff612a4916565b9050818181611d9257fe5b04928301929050611db5611dac878063ffffffff612a4916565b8584850261367c565b905080831115611dc9578083039250611dce565b600092505b5050611136565b600260ad541415611e0a57611df0848363ffffffff612a4916565b9050611dfa611085565b8181611e0257fe5b049050611136565b611e1a848363ffffffff612a4916565b905060a854611e27611085565b038181611e3057fe5b04949350505050565b60a55481565b60ad5481565b60b1546001600160a01b031681565b611e613382346000612ceb565b600160ad5414611ea8576040805162461bcd60e51b815260206004820152600d60248201526c494e56414c49445f535441544560981b604482015290519081900360640190fd5b60008111611ef0576040805162461bcd60e51b815260206004820152601060248201526f4d495353494e475f43555252454e435960801b604482015290519081900360640190fd5b6000611f0760ac5483612a4990919063ffffffff16565b609f546127109091049150611f2c9061010090046001600160a01b03168284036136c7565b60408051838152905133917f357b676c439b9e49b4410f8eb8680bee4223724802d8e3fd422e1756f87b475f919081900360200190a25050565b60a4546001600160a01b031681565b60b35490565b611f8c8a8a8a8a8a89898989613709565b87611fca5760ad54604080519182526001602083015280516000805160206144c98339815191529281900390910190a1600160ad554260b355612025565b6f4b3b4ca85a86c47a098a224000000000881061201f576040805162461bcd60e51b815260206004820152600e60248201526d115610d154d4d2559157d1d3d05360921b604482015290519081900360640190fd5b60a68890555b61271085111561206e576040805162461bcd60e51b815260206004820152600f60248201526e494e56414c49445f5245534552564560881b604482015290519081900360640190fd5b50505060a991909155505050505050565b7f5dfdc7fb4c68a4c249de5e08597626b84fbbe7bfef4ed3500f58003e722cc54881565b428410156120e2576040805162461bcd60e51b81526020600482015260076024820152661156141254915160ca1b604482015290519081900360640190fd5b6001600160a01b03808816600081815260ae602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958c166060860152608085018b905260a085019590955260c08085018a90528151808603909101815260e08501825280519083012060af5461190160f01b6101008701526101028601526101228086019190915281518086039091018152610142850180835281519184019190912090849052610162850180835281905260ff89166101828601526101a285018890526101c285018790529051909492936101e28082019392601f1981019281900390910190855afa1580156121fd573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906122335750886001600160a01b0316816001600160a01b0316145b612278576040805162461bcd60e51b8152602060048201526011602482015270494e56414c49445f5349474e415455524560781b604482015290519081900360640190fd5b61228389898961238f565b505050505050505050565b60a2546001600160a01b031681565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b60a3546001600160a01b031681565b60a35460009047906001600160a01b0316156123675760a354604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561233857600080fd5b505afa15801561234c573d6000803e3d6000fd5b505050506040513d602081101561236257600080fd5b505190505b6001600160801b03811115612386576001600160801b03915050610f88565b905090565b3390565b6001600160a01b0383166123d45760405162461bcd60e51b81526004018080602001828103825260248152602001806145f26024913960400191505060405180910390fd5b6001600160a01b0382166124195760405162461bcd60e51b81526004018080602001828103825260228152602001806143f56022913960400191505060405180910390fd5b6001600160a01b03808416600081815260346020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b303b1590565b609d548390839083906000906001600160a01b03161561251957609d54604080516336dffedf60e01b81526001600160a01b0387811660048301528681166024830152604482018690528415156064830152915191909216916336dffedf91608480830192600092919082900301818387803b15801561250057600080fd5b505af1158015612514573d6000803e3d6000fd5b505050505b60ad5415158061253b5750609f546001600160a01b0388811661010090920416145b61258c576040805162461bcd60e51b815260206004820152601c60248201527f4f4e4c595f42454e45464943494152595f445552494e475f494e495400000000604482015290519081900360640190fd5b612597878787613ab3565b50505050505050565b6000818484111561262f5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156125f45781810151838201526020016125dc565b50505050905090810190601f1680156126215780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b038316612684576040805162461bcd60e51b815260206004820152600f60248201526e494e56414c49445f4144445245535360881b604482015290519081900360640190fd5b600081116126cf576040805162461bcd60e51b81526020600482015260136024820152724d5553545f4255595f41545f4c454153545f3160681b604482015290519081900360640190fd5b60006126da83611476565b905081811015612722576040805162461bcd60e51b815260206004820152600e60248201526d50524943455f534c49505041474560901b604482015290519081900360640190fd5b836001600160a01b0316856001600160a01b03167f89f5adc174562e07c9c9b1cae7109bbecb21cf9d1b2847e550042b8653c54a0e8584604051808381526020018281526020019250505060405180910390a36127828584346000612ceb565b60ad5461288c576001600160a01b038416600090815260a76020526040902080548201905560a65460a854826127b6611085565b0103106128875760ad54604080519182526001602083015280516000805160206144c98339815191529281900390910190a1600160ad554260b355609f5461010090046001600160a01b0316600090815260a7602052604081205460a65460a05460a154612829939291909102906128c0565b60b054909150156128655760b15460b05461284d916001600160a01b0316906136c7565b60b0548111156128615760b0549003612865565b5060005b612885612880826128746122d7565b9063ffffffff612b6b16565b613c11565b505b6128af565b609f546001600160a01b0385811661010090920416146128af576128af83613c11565b6128b98482613c8c565b5050505050565b60008315806128cd575082155b156128da57506000611136565b60008385600019816128e857fe5b041061290557508383028281816128fb57fe5b0491506111369050565b8385818111156129155750859050845b84828161291e57fe5b0492506305f5e1008311156129485761293d838263ffffffff612a4916565b935061113692505050565b60001981016001600160801b038104600101905060001983016001600160801b038104600101905080826000198161297c57fe5b04106129ec579081029081848161298f57fe5b049450630bebc2008511156129ec576129ae858463ffffffff612a4916565b94505060001986018181816129bf57fe5b0490506129d381600163ffffffff612aa216565b90508085816129de57fe5b049550611136945050505050565b60016001600160801b03600019850104019150818381612a0857fe5b049450506000198601818181612a1a57fe5b046001019050808481612a2957fe5b049050612a3c858263ffffffff612a4916565b9998505050505050505050565b600082612a5857506000610fa3565b82820282848281612a6557fe5b04146111365760405162461bcd60e51b81526004018080602001828103825260218152602001806144e96021913960400191505060405180910390fd5b600082820183811015611136576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600081612b0b575060006115e8565b60038211612b1b575060016115e8565b600019821415612b3357506001600160801b036115e8565b5080600260018201045b81811015612b6557809150600281828581612b5457fe5b040181612b5d57fe5b049050612b3d565b50919050565b600061113683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506125a0565b609d548390600090849084906001600160a01b031615612c4557609d54604080516336dffedf60e01b81526001600160a01b0387811660048301528681166024830152604482018690528415156064830152915191909216916336dffedf91608480830192600092919082900301818387803b158015612c2c57600080fd5b505af1158015612c40573d6000803e3d6000fd5b505050505b612c4f8787613da7565b8461259757600160ad5414612c9b576040805162461bcd60e51b815260206004820152600d60248201526c494e56414c49445f535441544560981b604482015290519081900360640190fd5b609e8054870190556040805187815290516001600160a01b038916917fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5919081900360200190a250505050505050565b60a3546001600160a01b0316612d7a578015612d2b576000612d13838563ffffffff612b6b16565b90508015612d2557612d253382613ea3565b50612d75565b818314612d75576040805162461bcd60e51b8152602060048201526013602482015272494e434f52524543545f4d53475f56414c554560681b604482015290519081900360640190fd5b61107f565b8115612dbf576040805162461bcd60e51b815260206004820152600f60248201526e0889ebe9c9ea8bea68a9c88be8aa89608b1b604482015290519081900360640190fd5b60a35461107f906001600160a01b031685308663ffffffff613f8816565b609f5461010090046001600160a01b03163314612e34576040805162461bcd60e51b815260206004820152601060248201526f42454e45464943494152595f4f4e4c5960801b604482015290519081900360640190fd5b60ad54612e705760ad54604080519182526003602083015280516000805160206144c98339815191529281900390910190a1600360ad55612f7d565b600160ad541415612f405760b35460b2541911612ec4576040805162461bcd60e51b815260206004820152600d60248201526c4d41595f4e4f545f434c4f534560981b604482015290519081900360640190fd5b4260b35460b254011115612f0b576040805162461bcd60e51b8152602060048201526009602482015268544f4f5f4541524c5960b81b604482015290519081900360640190fd5b60ad54604080519182526002602083015280516000805160206144c98339815191529281900390910190a1600260ad55612f7d565b6040805162461bcd60e51b815260206004820152600d60248201526c494e56414c49445f535441544560981b604482015290519081900360640190fd5b565b609f546001600160a01b0385811661010090920416141580612fa45750600260ad5410155b612fdf5760405162461bcd60e51b81526004018080602001828103825260288152602001806145846028913960400191505060405180910390fd5b6000811161302b576040805162461bcd60e51b81526020600482015260146024820152734d5553545f53454c4c5f41545f4c454153545f3160601b604482015290519081900360640190fd5b600061303683611d1e565b90508181101561307e576040805162461bcd60e51b815260206004820152600e60248201526d50524943455f534c49505041474560901b604482015290519081900360640190fd5b60ad54158061308f5750600360ad54145b156130d7576001600160a01b038516600090815260a760205260409020546130bd908463ffffffff612b6b16565b6001600160a01b038616600090815260a760205260409020555b6130e385846001612bad565b6000609e546130f0611085565b01905060a8548110156131035760a88190555b61310d85836136c7565b846001600160a01b0316866001600160a01b03167fa082022e93cfcd9f1da5f9236718053910f7e840da080c789c7845698dc032ff8487604051808381526020018281526020019250505060405180910390a3505050505050565b60a2546001600160a01b031633146131b6576040805162461bcd60e51b815260206004820152600c60248201526b434f4e54524f4c5f4f4e4c5960a01b604482015290519081900360640190fd5b609d80546001600160a01b0319166001600160a01b0389811691909117909155851661321b576040805162461bcd60e51b815260206004820152600f60248201526e494e56414c49445f4144445245535360881b604482015290519081900360640190fd5b60a280546001600160a01b0319166001600160a01b03878116919091179091558416613280576040805162461bcd60e51b815260206004820152600f60248201526e494e56414c49445f4144445245535360881b604482015290519081900360640190fd5b60a480546001600160a01b0319166001600160a01b0386161790556127108311156132e0576040805162461bcd60e51b815260206004820152600b60248201526a494e56414c49445f46454560a81b604482015290519081900360640190fd5b60a583905581613330576040805162461bcd60e51b81526020600482015260166024820152751253959053125117d3525397d253959154d51351539560521b604482015290519081900360640190fd5b60ab82905560b25481101561338c576040805162461bcd60e51b815260206004820152601f60248201527f4d494e5f4455524154494f4e5f4d41595f4e4f545f42455f5245445543454400604482015290519081900360640190fd5b60b2819055609f546001600160a01b038781166101009092041614612597576001600160a01b0386166133f8576040805162461bcd60e51b815260206004820152600f60248201526e494e56414c49445f4144445245535360881b604482015290519081900360640190fd5b609f546000906134159061010090046001600160a01b03166117eb565b609f546001600160a01b036101009091048116600090815260a7602052604080822054928b168252902054919250613453919063ffffffff612aa216565b6001600160a01b03808916600090815260a7602052604080822093909355609f54610100900490911681529081205580156134a457609f546134a49061010090046001600160a01b03168883612481565b50609f80546001600160a01b03881661010002610100600160a81b031990911617905550505050505050565b60008183600019816134de57fe5b04106134f8576134f185858486026128c0565b9050613674565b841580613503575083155b1561351057506000613674565b8183818111156135205750839050825b600086886000198161352e57fe5b0410613559575086860281818161354157fe5b04905082818161354d57fe5b04935061367492505050565b8688818111156135695750889050875b600084838161357457fe5b049050630bebc20081111561359b5761358e8183886128c0565b9650505050505050613674565b506001600160801b0360001983810182900460019081019284830104019082908290816135c457fe5b041061363f5781028084816135d557fe5b049450630bebc20085111561363f576135f4858463ffffffff612a4916565b94508585816135ff57fe5b04945060008511801561361d575080856000198161361957fe5b0410155b1561363f579384029386858161362f57fe5b0497506136749650505050505050565b5050600160801b85046001600160801b038504810261366a81858161366057fe5b04846000196128c0565b9750505050505050505b949350505050565b60008061368a8585856128c0565b90508061369b576001915050611136565b60016305f5e1006000198301040181198111156136be5760001992505050611136565b01949350505050565b801561185d5760a3546001600160a01b03166136ec576136e78282613ea3565b61185d565b60a35461185d906001600160a01b0316838363ffffffff613fe216565b61371582826012610fa9565b6000861161375e576040805162461bcd60e51b8152602060048201526011602482015270494e56414c49445f534c4f50455f4e554d60781b604482015290519081900360640190fd5b600085116137a7576040805162461bcd60e51b815260206004820152601160248201527024a72b20a624a22fa9a627a822afa222a760791b604482015290519081900360640190fd5b6001600160801b0386106137f8576040805162461bcd60e51b81526020600482015260136024820152724558434553534956455f534c4f50455f4e554d60681b604482015290519081900360640190fd5b6001600160801b038510613849576040805162461bcd60e51b815260206004820152601360248201527222ac21a2a9a9a4ab22afa9a627a822afa222a760691b604482015290519081900360640190fd5b60a086905560a185905583158061386857506001600160a01b03831615155b6138b9576040805162461bcd60e51b815260206004820152601b60248201527f4d495353494e475f53455455505f4645455f524543495049454e540000000000604482015290519081900360640190fd5b6001600160a01b03831615806138ce57508315155b613913576040805162461bcd60e51b81526020600482015260116024820152704d495353494e475f53455455505f46454560781b604482015290519081900360640190fd5b868002613926818863ffffffff612a4916565b905085600202818161393457fe5b04905080851115613982576040805162461bcd60e51b81526020600482015260136024820152724558434553534956455f53455455505f46454560681b604482015290519081900360640190fd5b60b085905560b180546001600160a01b0319166001600160a01b03868116919091179091556012908a1615613a1c57896001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156139ea57600080fd5b505afa1580156139fe573d6000803e3d6000fd5b505050506040513d6020811015613a1457600080fd5b505160ff1690505b600a81900a60640260ab55609f8054610100600160a81b0319163361010081029190911790915560a280546001600160a01b0319908116831790915560a48054821690921790915560a380549091166001600160a01b038c161790558a15613a9e5760a88b9055609f54613a9e9061010090046001600160a01b03168c613c8c565b613aa66115ed565b5050505050505050505050565b6001600160a01b038316613af85760405162461bcd60e51b81526004018080602001828103825260258152602001806145cd6025913960400191505060405180910390fd5b6001600160a01b038216613b3d5760405162461bcd60e51b81526004018080602001828103825260238152602001806143b06023913960400191505060405180910390fd5b613b8081604051806060016040528060268152602001614417602691396001600160a01b038616600090815260336020526040902054919063ffffffff6125a016565b6001600160a01b038085166000908152603360205260408082209390935590841681522054613bb5908263ffffffff612aa216565b6001600160a01b0380841660008181526033602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60a954600090613c27908363ffffffff612a4916565b61271090049050613c388282612b6b565b90506000613c5160a55483612a4990919063ffffffff16565b609f546127109091049150613c769061010090046001600160a01b03168284036136c7565b60a4546117e6906001600160a01b0316826136c7565b609d546000908390839083906001600160a01b031615613d2457609d54604080516336dffedf60e01b81526001600160a01b0387811660048301528681166024830152604482018690528415156064830152915191909216916336dffedf91608480830192600092919082900301818387803b158015613d0b57600080fd5b505af1158015613d1f573d6000803e3d6000fd5b505050505b613d2e8686614034565b6f4b3b4ca85a86c47a098a224000000000613d59609e54613d4d611085565b9063ffffffff612aa216565b1115613d9f576040805162461bcd60e51b815260206004820152601060248201526f4558434553534956455f535550504c5960801b604482015290519081900360640190fd5b505050505050565b6001600160a01b038216613dec5760405162461bcd60e51b81526004018080602001828103825260218152602001806145ac6021913960400191505060405180910390fd5b613e2f816040518060600160405280602281526020016143d3602291396001600160a01b038516600090815260336020526040902054919063ffffffff6125a016565b6001600160a01b038316600090815260336020526040902055603554613e5b908263ffffffff612b6b16565b6035556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b80471015613ef8576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015290519081900360640190fd5b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114613f43576040519150601f19603f3d011682016040523d82523d6000602084013e613f48565b606091505b50509050806117e65760405162461bcd60e51b815260040180806020018281038252603a81526020018061443d603a913960400191505060405180910390fd5b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261107f908590614126565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526117e6908490614126565b6001600160a01b03821661408f576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6035546140a2908263ffffffff612aa216565b6035556001600160a01b0382166000908152603360205260409020546140ce908263ffffffff612aa216565b6001600160a01b03831660008181526033602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b614138826001600160a01b03166142de565b614189576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106141c75780518252601f1990920191602091820191016141a8565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614229576040519150601f19603f3d011682016040523d82523d6000602084013e61422e565b606091505b509150915081614285576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b80511561107f578080602001905160208110156142a157600080fd5b505161107f5760405162461bcd60e51b815260040180806020018281038252602a815260200180614616602a913960400191505060405180910390fd5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590613674575050151592915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061435857805160ff1916838001178555614385565b82800160010185558215614385579182015b8281111561438557825182559160200191906001019061436a565b50614391929150614395565b5090565b610f8891905b80821115614391576000815560010161439b56fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429107dddb4541735557564238389eccfc9979bfdde5e57e24e9777b6fe79b4d22f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a656445524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636542454e45464943494152595f4f4e4c595f53454c4c5f494e5f434c4f53455f4f525f43414e43454c45524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa265627a7a72315820698eb69f483cd33d2adc240dfce394a38537b872cab998289da5f48c1ba1cba064736f6c63430005110032",
  "deployedBytecode": "0x60806040526004361061036b5760003560e01c80637ecebe00116101c6578063b12f4153116100f7578063ca5244a111610095578063d8de65871161006f578063d8de658714610e7a578063dd62ed3e14610e8f578063e5a6b10f14610eca578063ff90956014610edf5761036b565b8063ca5244a114610c93578063d29157fb14610e07578063d505accf14610e1c5761036b565b8063c25b25bd116100d1578063c25b25bd14610c37578063c290d69114610c4c578063c415b95c14610c69578063c715930714610c7e5761036b565b8063b12f415314610be3578063b8606eef14610c0d578063c19d93fb14610c225761036b565b8063a457c2d711610164578063a71ddd251161013e578063a71ddd2514610b1a578063a9059cbb14610b2f578063ad3b763314610b68578063af575ab714610b7d5761036b565b8063a457c2d714610a4a578063a551bfc414610a83578063a59ac6dd14610ae85761036b565b806393e59dc1116101a057806393e59dc1146109f657806395d89b4114610a0b5780639df3f4f614610a20578063a40b56b914610a355761036b565b80637ecebe0014610984578063896d1708146109b75780638ac2c680146109e15761036b565b80633644e515116102a0578063567157611161023e5780636a272462116102185780636a272462146108a657806370a08231146108e5578063736dcb1f1461091857806379cc67901461094b5761036b565b8063567157611461086757806358439fa51461087c5780636177e37c146108915761036b565b806342966c681161027a57806342966c681461080b57806343d726d61461083557806354fd4d501461083d57806355d0a1d0146108525761036b565b80633644e5151461078c57806338af3eed146107a157806339509351146107d25761036b565b8063270588ee1161030d5780632ff79161116102e75780632ff791611461072257806330adf81f14610737578063313ce5671461074c57806335e5cc31146107775761036b565b8063270588ee146106695780632973434a146106ce5780632e872bb3146106f85761036b565b806318160ddd1161034957806318160ddd146105d55780631d833ec5146105fc57806323b872dd1461061157806326315438146106545761036b565b806306fdde03146103c3578063095ea7b31461044d5780631624f6c61461049a575b60a3546001600160a01b0316156103c1576040805162461bcd60e51b815260206004820152601560248201527409e9c98b2be8c9ea4be86aaa4a48a9c86b2be8aa89605b1b604482015290519081900360640190fd5b005b3480156103cf57600080fd5b506103d8610ef4565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104125781810151838201526020016103fa565b50505050905090810190601f16801561043f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561045957600080fd5b506104866004803603604081101561047057600080fd5b506001600160a01b038135169060200135610f8b565b604080519115158252519081900360200190f35b3480156104a657600080fd5b506103c1600480360360608110156104bd57600080fd5b810190602081018135600160201b8111156104d757600080fd5b8201836020820111156104e957600080fd5b803590602001918460018302840111600160201b8311171561050a57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561055c57600080fd5b82018360208201111561056e57600080fd5b803590602001918460018302840111600160201b8311171561058f57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505050903560ff169150610fa99050565b3480156105e157600080fd5b506105ea611085565b60408051918252519081900360200190f35b34801561060857600080fd5b506105ea61108b565b34801561061d57600080fd5b506104866004803603606081101561063457600080fd5b506001600160a01b038135811691602081013590911690604001356110af565b34801561066057600080fd5b506105ea61113d565b34801561067557600080fd5b506103c1600480360361010081101561068d57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060808101359060ff60a0820135169060c08101359060e00135611143565b3480156106da57600080fd5b506103c1600480360360208110156106f157600080fd5b5035611338565b34801561070457600080fd5b506105ea6004803603602081101561071b57600080fd5b5035611476565b34801561072e57600080fd5b506103c16115ed565b34801561074357600080fd5b506105ea611691565b34801561075857600080fd5b506107616116b5565b6040805160ff9092168252519081900360200190f35b34801561078357600080fd5b506105ea6116be565b34801561079857600080fd5b506105ea6116c4565b3480156107ad57600080fd5b506107b66116ca565b604080516001600160a01b039092168252519081900360200190f35b3480156107de57600080fd5b50610486600480360360408110156107f557600080fd5b506001600160a01b0381351690602001356116de565b34801561081757600080fd5b506103c16004803603602081101561082e57600080fd5b5035611732565b6103c1611741565b34801561084957600080fd5b506103d86117a5565b34801561085e57600080fd5b506105ea6117c2565b34801561087357600080fd5b506105ea6117c8565b34801561088857600080fd5b506105ea6117ce565b34801561089d57600080fd5b506105ea6117d4565b3480156108b257600080fd5b506103c1600480360360608110156108c957600080fd5b506001600160a01b0381351690602081013590604001356117da565b3480156108f157600080fd5b506105ea6004803603602081101561090857600080fd5b50356001600160a01b03166117eb565b34801561092457600080fd5b506105ea6004803603602081101561093b57600080fd5b50356001600160a01b0316611806565b34801561095757600080fd5b506103c16004803603604081101561096e57600080fd5b506001600160a01b038135169060200135611818565b34801561099057600080fd5b506105ea600480360360208110156109a757600080fd5b50356001600160a01b0316611861565b3480156109c357600080fd5b506105ea600480360360208110156109da57600080fd5b5035611873565b3480156109ed57600080fd5b506105ea6118f4565b348015610a0257600080fd5b506107b66118fa565b348015610a1757600080fd5b506103d8611909565b348015610a2c57600080fd5b506105ea61196a565b348015610a4157600080fd5b506105ea611970565b348015610a5657600080fd5b5061048660048036036040811015610a6d57600080fd5b506001600160a01b038135169060200135611976565b348015610a8f57600080fd5b506103c16004803603610100811015610aa757600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060808101359060ff60a0820135169060c08101359060e001356119e4565b6103c160048036036060811015610afe57600080fd5b506001600160a01b038135169060208101359060400135611bcd565b348015610b2657600080fd5b506105ea611bd9565b348015610b3b57600080fd5b5061048660048036036040811015610b5257600080fd5b506001600160a01b038135169060200135611bdf565b348015610b7457600080fd5b506105ea611bf3565b348015610b8957600080fd5b506103c16004803603610100811015610ba157600080fd5b506001600160a01b0381358116916020810135821691604082013581169160608101359091169060808101359060a08101359060c08101359060e00135611bf9565b348015610bef57600080fd5b506105ea60048036036020811015610c0657600080fd5b5035611d1e565b348015610c1957600080fd5b506105ea611e39565b348015610c2e57600080fd5b506105ea611e3f565b348015610c4357600080fd5b506107b6611e45565b6103c160048036036020811015610c6257600080fd5b5035611e54565b348015610c7557600080fd5b506107b6611f66565b348015610c8a57600080fd5b506105ea611f75565b348015610c9f57600080fd5b506103c16004803603610140811015610cb757600080fd5b8135916001600160a01b03602082013581169260408301359260608101359260808201359260a08301359260c08101359260e082013516918101906101208101610100820135600160201b811115610d0e57600080fd5b820183602082011115610d2057600080fd5b803590602001918460018302840111600160201b83111715610d4157600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b811115610d9357600080fd5b820183602082011115610da557600080fd5b803590602001918460018302840111600160201b83111715610dc657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611f7b945050505050565b348015610e1357600080fd5b506105ea61207f565b348015610e2857600080fd5b506103c1600480360360e0811015610e3f57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356120a3565b348015610e8657600080fd5b506107b661228e565b348015610e9b57600080fd5b506105ea60048036036040811015610eb257600080fd5b506001600160a01b038135811691602001351661229d565b348015610ed657600080fd5b506107b66122c8565b348015610eeb57600080fd5b506105ea6122d7565b60688054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610f805780601f10610f5557610100808354040283529160200191610f80565b820191906000526020600020905b815481529060010190602001808311610f6357829003601f168201915b505050505090505b90565b6000610f9f610f9861238b565b848461238f565b5060015b92915050565b600054610100900460ff1680610fc25750610fc261247b565b80610fd0575060005460ff16155b61100b5760405162461bcd60e51b815260040180806020018281038252602e815260200180614532602e913960400191505060405180910390fd5b600054610100900460ff16158015611036576000805460ff1961ff0019909116610100171660011790555b8351611049906068906020870190614317565b50825161105d906069906020860190614317565b50606a805460ff191660ff8416179055801561107f576000805461ff00191690555b50505050565b60355490565b7faf42a244b3020d6a2253d9f291b4d3e82240da42b22129a8113a58aa7a3ddb6a81565b60006110bc848484612481565b611132846110c861238b565b61112d8560405180606001604052806028815260200161450a602891396001600160a01b038a1660009081526034602052604081209061110661238b565b6001600160a01b03168152602081019190915260400160002054919063ffffffff6125a016565b61238f565b5060015b9392505050565b60a65481565b42841015611182576040805162461bcd60e51b81526020600482015260076024820152661156141254915160ca1b604482015290519081900360640190fd5b6001600160a01b03808916600081815260ae602090815260408083208054600180820190925582517faf42a244b3020d6a2253d9f291b4d3e82240da42b22129a8113a58aa7a3ddb6a8186015280840196909652958d166060860152608085018c905260a085018b905260c085019590955260e08085018a9052815180860390910181526101008501825280519083012060af5461190160f01b6101208701526101228601526101428086019190915281518086039091018152610162850180835281519184019190912090849052610182850180835281905260ff89166101a28601526101c285018890526101e285018790529051909492936102028082019392601f1981019281900390910190855afa1580156112a5573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906112db5750896001600160a01b0316816001600160a01b0316145b611320576040805162461bcd60e51b8152602060048201526011602482015270494e56414c49445f5349474e415455524560781b604482015290519081900360640190fd5b61132c8a8a8a8a612637565b50505050505050505050565b60a2546001600160a01b03163314611386576040805162461bcd60e51b815260206004820152600c60248201526b434f4e54524f4c5f4f4e4c5960a01b604482015290519081900360640190fd5b600160ad54146113d0576040805162461bcd60e51b815260206004820152601060248201526f27a7262cafa1a0a6262fa4a72fa92aa760811b604482015290519081900360640190fd5b60b35415611425576040805162461bcd60e51b815260206004820152601960248201527f4f4e4c595f43414c4c5f49465f4e4f545f4155544f5f53455400000000000000604482015290519081900360640190fd5b42811115611471576040805162461bcd60e51b81526020600482015260146024820152731110551157d35554d517d09157d25397d41054d560621b604482015290519081900360640190fd5b60b355565b600060ab5482101561148a575060006115e8565b60008060ad541415611571578260006114a1611085565b905060006114c060a05460a654028360a85460a654010360a1546128c0565b9050808311156114ce578092505b6114e18360a15460a05460a654026128c0565b93508583146115695760a1548187039350600202611505818563ffffffff612a4916565b60a65460a0549195508002915061152390829063ffffffff612a4916565b9050611535848263ffffffff612aa216565b905060a054818161154257fe5b04905061154e81612afc565b60a65490039050611565858263ffffffff612aa216565b9450505b5050506115e5565b600160ad5414156115db57600060a854609e5461158c611085565b010390506115a28460a15460020260a0546128c0565b91506115b68282800263ffffffff612aa216565b91506115c182612afc565b91506115d3828263ffffffff612b6b16565b9150506115e5565b60009150506115e8565b90505b919050565b604051469080605261447782396052019050604051809103902061160f610ef4565b805160209182012060408051808201825260018152603360f81b90840152805180840194909452838101919091527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606084015260808301939093523060a0808401919091528351808403909101815260c0909201909252805191012060af55565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b606a5460ff1690565b60a05481565b60af5481565b609f5461010090046001600160a01b031681565b6000610f9f6116eb61238b565b8461112d85603460006116fc61238b565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff612aa216565b61173e33826000612bad565b50565b60ad54600090600114156117675761175834611873565b90506117673382346001612ceb565b61176f612ddd565b6040805182815290517fbf67515a38ee520223d32c1266d52101c30d936ed1f3e436c8caeb0a43cb06bf9181900360200190a150565b604051806040016040528060018152602001603360f81b81525081565b609e5481565b60b25481565b60a15481565b60ac5490565b6117e633848484612f7f565b505050565b6001600160a01b031660009081526033602052604090205490565b60a76020526000908152604090205481565b611851823361112d8460405180606001604052806024815260200161456060249139611844883361229d565b919063ffffffff6125a016565b61185d82826000612bad565b5050565b60ae6020526000908152604090205481565b600080600160ad5414156115e557600061188b6122d7565b905061189d818563ffffffff612b6b16565b905060006118a9611085565b90506118be8160a054609e540260a1546128c0565b92506118d1818260a0540260a1546128c0565b830192508183116118e557600092506118eb565b81830392505b50509050919050565b60ab5481565b609d546001600160a01b031681565b60698054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610f805780601f10610f5557610100808354040283529160200191610f80565b60a95490565b60b05481565b6000610f9f61198361238b565b8461112d8560405180606001604052806025815260200161464060259139603460006119ad61238b565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff6125a016565b42841015611a23576040805162461bcd60e51b81526020600482015260076024820152661156141254915160ca1b604482015290519081900360640190fd5b6001600160a01b03808916600081815260ae602090815260408083208054600180820190925582517f5dfdc7fb4c68a4c249de5e08597626b84fbbe7bfef4ed3500f58003e722cc5488186015280840196909652958d166060860152608085018c905260a085018b905260c085019590955260e08085018a9052815180860390910181526101008501825280519083012060af5461190160f01b6101208701526101228601526101428086019190915281518086039091018152610162850180835281519184019190912090849052610182850180835281905260ff89166101a28601526101c285018890526101e285018790529051909492936102028082019392601f1981019281900390910190855afa158015611b46573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590611b7c5750896001600160a01b0316816001600160a01b0316145b611bc1576040805162461bcd60e51b8152602060048201526011602482015270494e56414c49445f5349474e415455524560781b604482015290519081900360640190fd5b61132c8a8a8a8a612f7f565b6117e633848484612637565b60a85481565b6000610f9f611bec61238b565b8484612481565b60b35481565b611c0888888888888787613168565b612710831115611c54576040805162461bcd60e51b81526020600482015260126024820152711253959053125117d0d3d35352551351539560721b604482015290519081900360640190fd5b60ac54831015611cab576040805162461bcd60e51b815260206004820152601d60248201527f434f4d4d49544d454e545f4d41595f4e4f545f42455f52454455434544000000604482015290519081900360640190fd5b60ac839055604080516001600160a01b038a8116825260208201869052818301879052606082018590526080820184905291518288169289811692908b16917fab33ca83001031840bf8a88b6a384c984aeb1ffcfebc562f13dab66a81306f969181900360a00190a45050505050505050565b600080611d296122d7565b90506000600160ad541415611dd5576000609e54611d45611085565b019050611d70611d5b868563ffffffff612a4916565b609e548002611d68611085565b8485026134d0565b91506000611d87866002860263ffffffff612a4916565b9050818181611d9257fe5b04928301929050611db5611dac878063ffffffff612a4916565b8584850261367c565b905080831115611dc9578083039250611dce565b600092505b5050611136565b600260ad541415611e0a57611df0848363ffffffff612a4916565b9050611dfa611085565b8181611e0257fe5b049050611136565b611e1a848363ffffffff612a4916565b905060a854611e27611085565b038181611e3057fe5b04949350505050565b60a55481565b60ad5481565b60b1546001600160a01b031681565b611e613382346000612ceb565b600160ad5414611ea8576040805162461bcd60e51b815260206004820152600d60248201526c494e56414c49445f535441544560981b604482015290519081900360640190fd5b60008111611ef0576040805162461bcd60e51b815260206004820152601060248201526f4d495353494e475f43555252454e435960801b604482015290519081900360640190fd5b6000611f0760ac5483612a4990919063ffffffff16565b609f546127109091049150611f2c9061010090046001600160a01b03168284036136c7565b60408051838152905133917f357b676c439b9e49b4410f8eb8680bee4223724802d8e3fd422e1756f87b475f919081900360200190a25050565b60a4546001600160a01b031681565b60b35490565b611f8c8a8a8a8a8a89898989613709565b87611fca5760ad54604080519182526001602083015280516000805160206144c98339815191529281900390910190a1600160ad554260b355612025565b6f4b3b4ca85a86c47a098a224000000000881061201f576040805162461bcd60e51b815260206004820152600e60248201526d115610d154d4d2559157d1d3d05360921b604482015290519081900360640190fd5b60a68890555b61271085111561206e576040805162461bcd60e51b815260206004820152600f60248201526e494e56414c49445f5245534552564560881b604482015290519081900360640190fd5b50505060a991909155505050505050565b7f5dfdc7fb4c68a4c249de5e08597626b84fbbe7bfef4ed3500f58003e722cc54881565b428410156120e2576040805162461bcd60e51b81526020600482015260076024820152661156141254915160ca1b604482015290519081900360640190fd5b6001600160a01b03808816600081815260ae602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958c166060860152608085018b905260a085019590955260c08085018a90528151808603909101815260e08501825280519083012060af5461190160f01b6101008701526101028601526101228086019190915281518086039091018152610142850180835281519184019190912090849052610162850180835281905260ff89166101828601526101a285018890526101c285018790529051909492936101e28082019392601f1981019281900390910190855afa1580156121fd573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906122335750886001600160a01b0316816001600160a01b0316145b612278576040805162461bcd60e51b8152602060048201526011602482015270494e56414c49445f5349474e415455524560781b604482015290519081900360640190fd5b61228389898961238f565b505050505050505050565b60a2546001600160a01b031681565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b60a3546001600160a01b031681565b60a35460009047906001600160a01b0316156123675760a354604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561233857600080fd5b505afa15801561234c573d6000803e3d6000fd5b505050506040513d602081101561236257600080fd5b505190505b6001600160801b03811115612386576001600160801b03915050610f88565b905090565b3390565b6001600160a01b0383166123d45760405162461bcd60e51b81526004018080602001828103825260248152602001806145f26024913960400191505060405180910390fd5b6001600160a01b0382166124195760405162461bcd60e51b81526004018080602001828103825260228152602001806143f56022913960400191505060405180910390fd5b6001600160a01b03808416600081815260346020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b303b1590565b609d548390839083906000906001600160a01b03161561251957609d54604080516336dffedf60e01b81526001600160a01b0387811660048301528681166024830152604482018690528415156064830152915191909216916336dffedf91608480830192600092919082900301818387803b15801561250057600080fd5b505af1158015612514573d6000803e3d6000fd5b505050505b60ad5415158061253b5750609f546001600160a01b0388811661010090920416145b61258c576040805162461bcd60e51b815260206004820152601c60248201527f4f4e4c595f42454e45464943494152595f445552494e475f494e495400000000604482015290519081900360640190fd5b612597878787613ab3565b50505050505050565b6000818484111561262f5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156125f45781810151838201526020016125dc565b50505050905090810190601f1680156126215780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b038316612684576040805162461bcd60e51b815260206004820152600f60248201526e494e56414c49445f4144445245535360881b604482015290519081900360640190fd5b600081116126cf576040805162461bcd60e51b81526020600482015260136024820152724d5553545f4255595f41545f4c454153545f3160681b604482015290519081900360640190fd5b60006126da83611476565b905081811015612722576040805162461bcd60e51b815260206004820152600e60248201526d50524943455f534c49505041474560901b604482015290519081900360640190fd5b836001600160a01b0316856001600160a01b03167f89f5adc174562e07c9c9b1cae7109bbecb21cf9d1b2847e550042b8653c54a0e8584604051808381526020018281526020019250505060405180910390a36127828584346000612ceb565b60ad5461288c576001600160a01b038416600090815260a76020526040902080548201905560a65460a854826127b6611085565b0103106128875760ad54604080519182526001602083015280516000805160206144c98339815191529281900390910190a1600160ad554260b355609f5461010090046001600160a01b0316600090815260a7602052604081205460a65460a05460a154612829939291909102906128c0565b60b054909150156128655760b15460b05461284d916001600160a01b0316906136c7565b60b0548111156128615760b0549003612865565b5060005b612885612880826128746122d7565b9063ffffffff612b6b16565b613c11565b505b6128af565b609f546001600160a01b0385811661010090920416146128af576128af83613c11565b6128b98482613c8c565b5050505050565b60008315806128cd575082155b156128da57506000611136565b60008385600019816128e857fe5b041061290557508383028281816128fb57fe5b0491506111369050565b8385818111156129155750859050845b84828161291e57fe5b0492506305f5e1008311156129485761293d838263ffffffff612a4916565b935061113692505050565b60001981016001600160801b038104600101905060001983016001600160801b038104600101905080826000198161297c57fe5b04106129ec579081029081848161298f57fe5b049450630bebc2008511156129ec576129ae858463ffffffff612a4916565b94505060001986018181816129bf57fe5b0490506129d381600163ffffffff612aa216565b90508085816129de57fe5b049550611136945050505050565b60016001600160801b03600019850104019150818381612a0857fe5b049450506000198601818181612a1a57fe5b046001019050808481612a2957fe5b049050612a3c858263ffffffff612a4916565b9998505050505050505050565b600082612a5857506000610fa3565b82820282848281612a6557fe5b04146111365760405162461bcd60e51b81526004018080602001828103825260218152602001806144e96021913960400191505060405180910390fd5b600082820183811015611136576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600081612b0b575060006115e8565b60038211612b1b575060016115e8565b600019821415612b3357506001600160801b036115e8565b5080600260018201045b81811015612b6557809150600281828581612b5457fe5b040181612b5d57fe5b049050612b3d565b50919050565b600061113683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506125a0565b609d548390600090849084906001600160a01b031615612c4557609d54604080516336dffedf60e01b81526001600160a01b0387811660048301528681166024830152604482018690528415156064830152915191909216916336dffedf91608480830192600092919082900301818387803b158015612c2c57600080fd5b505af1158015612c40573d6000803e3d6000fd5b505050505b612c4f8787613da7565b8461259757600160ad5414612c9b576040805162461bcd60e51b815260206004820152600d60248201526c494e56414c49445f535441544560981b604482015290519081900360640190fd5b609e8054870190556040805187815290516001600160a01b038916917fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5919081900360200190a250505050505050565b60a3546001600160a01b0316612d7a578015612d2b576000612d13838563ffffffff612b6b16565b90508015612d2557612d253382613ea3565b50612d75565b818314612d75576040805162461bcd60e51b8152602060048201526013602482015272494e434f52524543545f4d53475f56414c554560681b604482015290519081900360640190fd5b61107f565b8115612dbf576040805162461bcd60e51b815260206004820152600f60248201526e0889ebe9c9ea8bea68a9c88be8aa89608b1b604482015290519081900360640190fd5b60a35461107f906001600160a01b031685308663ffffffff613f8816565b609f5461010090046001600160a01b03163314612e34576040805162461bcd60e51b815260206004820152601060248201526f42454e45464943494152595f4f4e4c5960801b604482015290519081900360640190fd5b60ad54612e705760ad54604080519182526003602083015280516000805160206144c98339815191529281900390910190a1600360ad55612f7d565b600160ad541415612f405760b35460b2541911612ec4576040805162461bcd60e51b815260206004820152600d60248201526c4d41595f4e4f545f434c4f534560981b604482015290519081900360640190fd5b4260b35460b254011115612f0b576040805162461bcd60e51b8152602060048201526009602482015268544f4f5f4541524c5960b81b604482015290519081900360640190fd5b60ad54604080519182526002602083015280516000805160206144c98339815191529281900390910190a1600260ad55612f7d565b6040805162461bcd60e51b815260206004820152600d60248201526c494e56414c49445f535441544560981b604482015290519081900360640190fd5b565b609f546001600160a01b0385811661010090920416141580612fa45750600260ad5410155b612fdf5760405162461bcd60e51b81526004018080602001828103825260288152602001806145846028913960400191505060405180910390fd5b6000811161302b576040805162461bcd60e51b81526020600482015260146024820152734d5553545f53454c4c5f41545f4c454153545f3160601b604482015290519081900360640190fd5b600061303683611d1e565b90508181101561307e576040805162461bcd60e51b815260206004820152600e60248201526d50524943455f534c49505041474560901b604482015290519081900360640190fd5b60ad54158061308f5750600360ad54145b156130d7576001600160a01b038516600090815260a760205260409020546130bd908463ffffffff612b6b16565b6001600160a01b038616600090815260a760205260409020555b6130e385846001612bad565b6000609e546130f0611085565b01905060a8548110156131035760a88190555b61310d85836136c7565b846001600160a01b0316866001600160a01b03167fa082022e93cfcd9f1da5f9236718053910f7e840da080c789c7845698dc032ff8487604051808381526020018281526020019250505060405180910390a3505050505050565b60a2546001600160a01b031633146131b6576040805162461bcd60e51b815260206004820152600c60248201526b434f4e54524f4c5f4f4e4c5960a01b604482015290519081900360640190fd5b609d80546001600160a01b0319166001600160a01b0389811691909117909155851661321b576040805162461bcd60e51b815260206004820152600f60248201526e494e56414c49445f4144445245535360881b604482015290519081900360640190fd5b60a280546001600160a01b0319166001600160a01b03878116919091179091558416613280576040805162461bcd60e51b815260206004820152600f60248201526e494e56414c49445f4144445245535360881b604482015290519081900360640190fd5b60a480546001600160a01b0319166001600160a01b0386161790556127108311156132e0576040805162461bcd60e51b815260206004820152600b60248201526a494e56414c49445f46454560a81b604482015290519081900360640190fd5b60a583905581613330576040805162461bcd60e51b81526020600482015260166024820152751253959053125117d3525397d253959154d51351539560521b604482015290519081900360640190fd5b60ab82905560b25481101561338c576040805162461bcd60e51b815260206004820152601f60248201527f4d494e5f4455524154494f4e5f4d41595f4e4f545f42455f5245445543454400604482015290519081900360640190fd5b60b2819055609f546001600160a01b038781166101009092041614612597576001600160a01b0386166133f8576040805162461bcd60e51b815260206004820152600f60248201526e494e56414c49445f4144445245535360881b604482015290519081900360640190fd5b609f546000906134159061010090046001600160a01b03166117eb565b609f546001600160a01b036101009091048116600090815260a7602052604080822054928b168252902054919250613453919063ffffffff612aa216565b6001600160a01b03808916600090815260a7602052604080822093909355609f54610100900490911681529081205580156134a457609f546134a49061010090046001600160a01b03168883612481565b50609f80546001600160a01b03881661010002610100600160a81b031990911617905550505050505050565b60008183600019816134de57fe5b04106134f8576134f185858486026128c0565b9050613674565b841580613503575083155b1561351057506000613674565b8183818111156135205750839050825b600086886000198161352e57fe5b0410613559575086860281818161354157fe5b04905082818161354d57fe5b04935061367492505050565b8688818111156135695750889050875b600084838161357457fe5b049050630bebc20081111561359b5761358e8183886128c0565b9650505050505050613674565b506001600160801b0360001983810182900460019081019284830104019082908290816135c457fe5b041061363f5781028084816135d557fe5b049450630bebc20085111561363f576135f4858463ffffffff612a4916565b94508585816135ff57fe5b04945060008511801561361d575080856000198161361957fe5b0410155b1561363f579384029386858161362f57fe5b0497506136749650505050505050565b5050600160801b85046001600160801b038504810261366a81858161366057fe5b04846000196128c0565b9750505050505050505b949350505050565b60008061368a8585856128c0565b90508061369b576001915050611136565b60016305f5e1006000198301040181198111156136be5760001992505050611136565b01949350505050565b801561185d5760a3546001600160a01b03166136ec576136e78282613ea3565b61185d565b60a35461185d906001600160a01b0316838363ffffffff613fe216565b61371582826012610fa9565b6000861161375e576040805162461bcd60e51b8152602060048201526011602482015270494e56414c49445f534c4f50455f4e554d60781b604482015290519081900360640190fd5b600085116137a7576040805162461bcd60e51b815260206004820152601160248201527024a72b20a624a22fa9a627a822afa222a760791b604482015290519081900360640190fd5b6001600160801b0386106137f8576040805162461bcd60e51b81526020600482015260136024820152724558434553534956455f534c4f50455f4e554d60681b604482015290519081900360640190fd5b6001600160801b038510613849576040805162461bcd60e51b815260206004820152601360248201527222ac21a2a9a9a4ab22afa9a627a822afa222a760691b604482015290519081900360640190fd5b60a086905560a185905583158061386857506001600160a01b03831615155b6138b9576040805162461bcd60e51b815260206004820152601b60248201527f4d495353494e475f53455455505f4645455f524543495049454e540000000000604482015290519081900360640190fd5b6001600160a01b03831615806138ce57508315155b613913576040805162461bcd60e51b81526020600482015260116024820152704d495353494e475f53455455505f46454560781b604482015290519081900360640190fd5b868002613926818863ffffffff612a4916565b905085600202818161393457fe5b04905080851115613982576040805162461bcd60e51b81526020600482015260136024820152724558434553534956455f53455455505f46454560681b604482015290519081900360640190fd5b60b085905560b180546001600160a01b0319166001600160a01b03868116919091179091556012908a1615613a1c57896001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156139ea57600080fd5b505afa1580156139fe573d6000803e3d6000fd5b505050506040513d6020811015613a1457600080fd5b505160ff1690505b600a81900a60640260ab55609f8054610100600160a81b0319163361010081029190911790915560a280546001600160a01b0319908116831790915560a48054821690921790915560a380549091166001600160a01b038c161790558a15613a9e5760a88b9055609f54613a9e9061010090046001600160a01b03168c613c8c565b613aa66115ed565b5050505050505050505050565b6001600160a01b038316613af85760405162461bcd60e51b81526004018080602001828103825260258152602001806145cd6025913960400191505060405180910390fd5b6001600160a01b038216613b3d5760405162461bcd60e51b81526004018080602001828103825260238152602001806143b06023913960400191505060405180910390fd5b613b8081604051806060016040528060268152602001614417602691396001600160a01b038616600090815260336020526040902054919063ffffffff6125a016565b6001600160a01b038085166000908152603360205260408082209390935590841681522054613bb5908263ffffffff612aa216565b6001600160a01b0380841660008181526033602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60a954600090613c27908363ffffffff612a4916565b61271090049050613c388282612b6b565b90506000613c5160a55483612a4990919063ffffffff16565b609f546127109091049150613c769061010090046001600160a01b03168284036136c7565b60a4546117e6906001600160a01b0316826136c7565b609d546000908390839083906001600160a01b031615613d2457609d54604080516336dffedf60e01b81526001600160a01b0387811660048301528681166024830152604482018690528415156064830152915191909216916336dffedf91608480830192600092919082900301818387803b158015613d0b57600080fd5b505af1158015613d1f573d6000803e3d6000fd5b505050505b613d2e8686614034565b6f4b3b4ca85a86c47a098a224000000000613d59609e54613d4d611085565b9063ffffffff612aa216565b1115613d9f576040805162461bcd60e51b815260206004820152601060248201526f4558434553534956455f535550504c5960801b604482015290519081900360640190fd5b505050505050565b6001600160a01b038216613dec5760405162461bcd60e51b81526004018080602001828103825260218152602001806145ac6021913960400191505060405180910390fd5b613e2f816040518060600160405280602281526020016143d3602291396001600160a01b038516600090815260336020526040902054919063ffffffff6125a016565b6001600160a01b038316600090815260336020526040902055603554613e5b908263ffffffff612b6b16565b6035556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b80471015613ef8576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015290519081900360640190fd5b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114613f43576040519150601f19603f3d011682016040523d82523d6000602084013e613f48565b606091505b50509050806117e65760405162461bcd60e51b815260040180806020018281038252603a81526020018061443d603a913960400191505060405180910390fd5b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261107f908590614126565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526117e6908490614126565b6001600160a01b03821661408f576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6035546140a2908263ffffffff612aa216565b6035556001600160a01b0382166000908152603360205260409020546140ce908263ffffffff612aa216565b6001600160a01b03831660008181526033602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b614138826001600160a01b03166142de565b614189576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106141c75780518252601f1990920191602091820191016141a8565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614229576040519150601f19603f3d011682016040523d82523d6000602084013e61422e565b606091505b509150915081614285576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b80511561107f578080602001905160208110156142a157600080fd5b505161107f5760405162461bcd60e51b815260040180806020018281038252602a815260200180614616602a913960400191505060405180910390fd5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590613674575050151592915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061435857805160ff1916838001178555614385565b82800160010185558215614385579182015b8281111561438557825182559160200191906001019061436a565b50614391929150614395565b5090565b610f8891905b80821115614391576000815560010161439b56fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429107dddb4541735557564238389eccfc9979bfdde5e57e24e9777b6fe79b4d22f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a656445524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636542454e45464943494152595f4f4e4c595f53454c4c5f494e5f434c4f53455f4f525f43414e43454c45524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa265627a7a72315820698eb69f483cd33d2adc240dfce394a38537b872cab998289da5f48c1ba1cba064736f6c63430005110032",
  "sourceMap": "610:7769:1:-;;;;;;;;;",
  "deployedSourceMap": "610:7769:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5932:8;;-1:-1:-1;;;;;5932:8:1;5924:31;5916:65;;;;;-1:-1:-1;;;5916:65:1;;;;;;;;;;;;-1:-1:-1;;;5916:65:1;;;;;;;;;;;;;;;610:7769;739:81:21;;8:9:-1;5:2;;;30:1;27;20:12;5:2;739:81:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;739:81:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2577:149:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2577:149:20;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2577:149:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;492:182:21;;8:9:-1;5:2;;;30:1;27;20:12;5:2;492:182:21;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;492:182:21;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;492:182:21;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;492:182:21;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;492:182:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;492:182:21;;;;;;;;-1:-1:-1;492:182:21;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;492:182:21;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;492:182:21;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;492:182:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;492:182:21;;-1:-1:-1;;;492:182:21;;;;;-1:-1:-1;492:182:21;;-1:-1:-1;492:182:21:i;1636:89:20:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1636:89:20;;;:::i;:::-;;;;;;;;;;;;;;;;7192:112:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7192:112:0;;;:::i;3184:300:20:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3184:300:20;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;3184:300:20;;;;;;;;;;;;;;;;;:::i;3913:20:0:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3913:20:0;;;:::i;21480:731::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21480:731:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;21480:731:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;7192:346:1:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7192:346:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7192:346:1;;:::i;15975:2958:0:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15975:2958:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15975:2958:0;;:::i;13258:418::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13258:418:0;;;:::i;6115:108::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6115:108:0;;;:::i;1567:81:21:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1567:81:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3016:23:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3016:23:0;;;:::i;5978:31::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5978:31:0;;;:::i;2786:34::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2786:34:0;;;:::i;:::-;;;;-1:-1:-1;;;;;2786:34:0;;;;;;;;;;;;;;3879:207:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3879:207:20;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;3879:207:20;;;;;;;;:::i;15219:89:0:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15219:89:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15219:89:0;;:::i;4649:250:1:-;;;:::i;5767:36:0:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5767:36:0;;;:::i;2478:24::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2478:24:0;;;:::i;6772:23::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6772:23:0;;;:::i;3237:::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3237:23:0;;;:::i;1312:115:1:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1312:115:1;;;:::i;25886:181:0:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25886:181:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;25886:181:0;;;;;;;;;;;;;:::i;1783:108:20:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1783:108:20;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1783:108:20;-1:-1:-1;;;;;1783:108:20;;:::i;4161:45:0:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4161:45:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4161:45:0;-1:-1:-1;;;;;4161:45:0;;:::i;15388:223::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15388:223:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;15388:223:0;;;;;;;;:::i;5935:39::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5935:39:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5935:39:0;-1:-1:-1;;;;;5935:39:0;;:::i;3167:952:1:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3167:952:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3167:952:1;;:::i;5201:25:0:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5201:25:0;;;:::i;2335:27::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2335:27:0;;;:::i;933:85:21:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;933:85:21;;;:::i;1687:115:1:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1687:115:1;;;:::i;6403:20:0:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6403:20:0;;;:::i;4573:258:20:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4573:258:20;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;4573:258:20;;;;;;;;:::i;26134:749:0:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26134:749:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;26134:749:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;21245:169::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;21245:169:0;;;;;;;;;;;;;:::i;4697:23::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4697:23:0;;;:::i;2094:155:20:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2094:155:20;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2094:155:20;;;;;;;;:::i;6947:23:0:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6947:23:0;;;:::i;5990:962:1:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5990:962:1;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;5990:962:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;22227:2360:0:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22227:2360:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22227:2360:0;;:::i;3700:26::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3700:26:0;;;:::i;5668:17::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5668:17:0;;;:::i;6490:40::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6490:40:0;;;:::i;5018:716:1:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5018:716:1;;:::i;3563:35:0:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3563:35:0;;;:::i;1945:80:1:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1945:80:1;;;:::i;2029:1121::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2029:1121:1;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;2029:1121:1;;;-1:-1:-1;;;;;2029:1121:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;2029:1121:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;2029:1121:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;2029:1121:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;2029:1121:1;;;;;;;;-1:-1:-1;2029:1121:1;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;2029:1121:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;2029:1121:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;2029:1121:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;2029:1121:1;;-1:-1:-1;2029:1121:1;;-1:-1:-1;;;;;2029:1121:1:i;7446:113:0:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7446:113:0;;;:::i;28228:633::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28228:633:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;28228:633:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;3341:22::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3341:22:0;;;:::i;2307:132:20:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2307:132:20;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2307:132:20;;;;;;;;;;:::i;3489:22:0:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3489:22:0;;;:::i;8002:412::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8002:412:0;;;:::i;739:81:21:-;808:5;801:12;;;;;;;;-1:-1:-1;;801:12:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;776:13;;801:12;;808:5;;801:12;;808:5;801:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;739:81;;:::o;2577:149:20:-;2643:4;2659:39;2668:12;:10;:12::i;:::-;2682:7;2691:6;2659:8;:39::i;:::-;-1:-1:-1;2715:4:20;2577:149;;;;;:::o;492:182:21:-;1024:12:30;;;;;;;;:31;;;1040:15;:13;:15::i;:::-;1024:47;;;-1:-1:-1;1060:11:30;;;;1059:12;1024:47;1016:106;;;;-1:-1:-1;;;1016:106:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1129:19;1152:12;;;;;;1151:13;1170:80;;;;1198:12;:19;;-1:-1:-1;;;;1198:19:30;;;;;1225:18;1213:4;1225:18;;;1170:80;599:12:21;;;;:5;;:12;;;;;:::i;:::-;-1:-1:-1;621:16:21;;;;:7;;:16;;;;;:::i;:::-;-1:-1:-1;647:9:21;:20;;-1:-1:-1;;647:20:21;;;;;;;1264:55:30;;;;1307:5;1292:20;;-1:-1:-1;;1292:20:30;;;1264:55;492:182:21;;;;:::o;1636:89:20:-;1706:12;;1636:89;:::o;7192:112:0:-;7238:66;7192:112;:::o;3184:300:20:-;3273:4;3289:36;3299:6;3307:9;3318:6;3289:9;:36::i;:::-;3335:121;3344:6;3352:12;:10;:12::i;:::-;3366:89;3404:6;3366:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3366:19:20;;;;;;:11;:19;;;;;;3386:12;:10;:12::i;:::-;-1:-1:-1;;;;;3366:33:20;;;;;;;;;;;;-1:-1:-1;3366:33:20;;;:89;;:37;:89;:::i;:::-;3335:8;:121::i;:::-;-1:-1:-1;3473:4:20;3184:300;;;;;;:::o;3913:20:0:-;;;;:::o;21480:731::-;21703:15;21690:9;:28;;21682:48;;;;;-1:-1:-1;;;21682:48:0;;;;;;;;;;;;-1:-1:-1;;;21682:48:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;21841:13:0;;;21736:14;21841:13;;;:6;:13;;;;;;;;:15;;;;;;;;;21763:105;;7238:66;21763:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;21763:105:0;;;;;21753:116;;;;;;21947:16;;-1:-1:-1;;;21901:86:0;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;21901:86:0;;;;;;21884:109;;;;;;;;;22026:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21884:109;;21736:14;;22026:29;;;;;21841:13;-1:-1:-1;;22026:29:0;;;;;;;;;;21841:15;22026:29;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;22026:29:0;;-1:-1:-1;;22026:29:0;;;-1:-1:-1;;;;;;;22069:30:0;;;;;;:59;;;22123:5;-1:-1:-1;;;;;22103:25:0;:16;-1:-1:-1;;;;;22103:25:0;;22069:59;22061:89;;;;;-1:-1:-1;;;22061:89:0;;;;;;;;;;;;-1:-1:-1;;;22061:89:0;;;;;;;;;;;;;;;22156:50;22161:5;22168:3;22173:14;22189:16;22156:4;:50::i;:::-;21480:731;;;;;;;;;;:::o;7192:346:1:-;7291:7;;-1:-1:-1;;;;;7291:7:1;7277:10;:21;7269:46;;;;;-1:-1:-1;;;7269:46:1;;;;;;;;;;;;-1:-1:-1;;;7269:46:1;;;;;;;;;;;;;;;1507:1:0;7329:5:1;;:18;7321:47;;;;;-1:-1:-1;;;7321:47:1;;;;;;;;;;;;-1:-1:-1;;;7321:47:1;;;;;;;;;;;;;;;7382:11;;:16;7374:54;;;;;-1:-1:-1;;;7374:54:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;7459:15;7442:13;:32;;7434:65;;;;;-1:-1:-1;;;7434:65:1;;;;;;;;;;;;-1:-1:-1;;;7434:65:1;;;;;;;;;;;;;;;7506:11;:27;7192:346::o;15975:2958:0:-;16055:4;16089:13;;16072:14;:30;16069:62;;;-1:-1:-1;16123:1:0;16116:8;;16069:62;16190:15;1410:1;16214:5;;:19;16211:2694;;;16268:14;16247:18;16310:13;:11;:13::i;:::-;16290:33;;16668:8;16679:124;16716:11;;16705:8;;:22;16762:12;16748:11;;16737:8;;:22;:37;16784:11;;16679:16;:124::i;:::-;16668:135;;16830:3;16814:13;:19;16811:68;;;16867:3;16851:19;;16811:68;17007:100;17033:13;17056:11;;17088;;17077:8;;:22;17007:16;:100::i;:::-;16994:113;;17136:14;17119:13;:31;17116:1031;;17610:11;;17184:20;;;;-1:-1:-1;17606:1:0;:15;17647:23;17606:15;17184:20;17647:23;:8;:23;:::i;:::-;17711:8;;17793:11;;17631:39;;-1:-1:-1;17729:12:0;;;-1:-1:-1;17784:21:0;;17729:12;;17784:21;:8;:21;:::i;:::-;17777:28;-1:-1:-1;17858:23:0;:13;17777:28;17858:23;:17;:23;:::i;:::-;17851:30;;17937:11;;17929:19;;;;;;;;;18009:11;:4;:9;:11::i;:::-;18086:8;;18078:16;;;-1:-1:-1;18118:20:0;:10;18078:16;18118:20;:14;:20;:::i;:::-;18105:33;;17116:1031;;16211:2694;;;;;;1507:1;18166:5;;:18;18163:742;;;18294:11;18339;;18324:12;;18308:13;:11;:13::i;:::-;:28;:42;18294:56;;18463:94;18489:14;18517:11;;18513:1;:15;18538:11;;18463:16;:94::i;:::-;18450:107;-1:-1:-1;18651:31:0;18450:107;18666:15;;;18651:31;:14;:31;:::i;:::-;18638:44;;18703:17;:10;:15;:17::i;:::-;18690:30;-1:-1:-1;18816:22:0;18690:30;18831:6;18816:22;:14;:22;:::i;:::-;18803:35;;18163:742;;;;18897:1;18890:8;;;;;18163:742;18918:10;-1:-1:-1;15975:2958:0;;;;:::o;13258:418::-;13458:95;;13382:9;;13458:95;;;;;;;;;;;;;;;;13579:6;:4;:6::i;:::-;13563:24;;;;;;;13613:7;;;;;;;;;;;-1:-1:-1;;;13613:7:0;;;;13438:227;;;;;;;;;;;;;;;;13597:25;13438:227;;;;;;;;;;;13652:4;13438:227;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;13438:227:0;;;;;;;13421:250;;;;;13402:16;:269;13258:418::o;6115:108::-;6157:66;6115:108;:::o;1567:81:21:-;1632:9;;;;1567:81;:::o;3016:23:0:-;;;;:::o;5978:31::-;;;;:::o;2786:34::-;;;;;;-1:-1:-1;;;;;2786:34:0;;:::o;3879:207:20:-;3959:4;3975:83;3984:12;:10;:12::i;:::-;3998:7;4007:50;4046:10;4007:11;:25;4019:12;:10;:12::i;:::-;-1:-1:-1;;;;;4007:25:20;;;;;;;;;;;;;;;;;-1:-1:-1;4007:25:20;;;:34;;;;;;;;;;;:50;:38;:50;:::i;15219:89:0:-;15270:33;15276:10;15288:7;15297:5;15270;:33::i;:::-;15219:89;:::o;4649:250:1:-;4714:5;;4687:12;;1507:1:0;4714:18:1;4710:139;;;4752:26;4768:9;4752:15;:26::i;:::-;4742:36;;4786:56;4805:10;4817:7;4826:9;4837:4;4786:18;:56::i;:::-;4855:14;:12;:14::i;:::-;4880;;;;;;;;;;;;;;;;;4649:250;:::o;5767:36:0:-;;;;;;;;;;;;;;-1:-1:-1;;;5767:36:0;;;;:::o;2478:24::-;;;;:::o;6772:23::-;;;;:::o;3237:::-;;;;:::o;1312:115:1:-;1392:30;;1312:115;:::o;25886:181:0:-;26001:61;26007:10;26019:3;26024:15;26041:20;26001:5;:61::i;:::-;25886:181;;;:::o;1783:108:20:-;-1:-1:-1;;;;;1866:18:20;1840:7;1866:18;;;:9;:18;;;;;;;1783:108::o;4161:45:0:-;;;;;;;;;;;;;:::o;15388:223::-;15462:110;15471:5;15478:10;15490:81;15523:7;15490:81;;;;;;;;;;;;;;;;;:28;15500:5;15507:10;15490:9;:28::i;:::-;:32;:81;;:32;:81;:::i;15462:110::-;15578:28;15584:5;15591:7;15600:5;15578;:28::i;:::-;15388:223;;:::o;5935:39::-;;;;;;;;;;;;;:::o;3167:952:1:-;3229:4;3241:12;1507:1:0;3264:5:1;;:18;3260:834;;;3292:12;3307:16;:14;:16::i;:::-;3292:31;-1:-1:-1;3341:22:1;3292:31;3353:9;3341:22;:11;:22;:::i;:::-;3331:32;;3457:17;3477:13;:11;:13::i;:::-;3457:33;;3604:103;3630:12;3667:11;;3652:12;;:26;3688:11;;3604:16;:103::i;:::-;3594:113;;3819:103;3845:12;3881;3867:11;;:26;3903:11;;3819:16;:103::i;:::-;3808:114;;;;4006:7;3995;:18;3991:97;;4035:1;4025:11;;3991:97;;;4072:7;4061:18;;;;3991:97;3260:834;;4107:7;-1:-1:-1;3167:952:1;;;:::o;5201:25:0:-;;;;:::o;2335:27::-;;;-1:-1:-1;;;;;2335:27:0;;:::o;933:85:21:-;1004:7;997:14;;;;;;;;-1:-1:-1;;997:14:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;972:13;;997:14;;1004:7;;997:14;;1004:7;997:14;;;;;;;;;;;;;;;;;;;;;;;;1687:115:1;1767:30;;1687:115;:::o;6403:20:0:-;;;;:::o;4573:258:20:-;4658:4;4674:129;4683:12;:10;:12::i;:::-;4697:7;4706:96;4745:15;4706:96;;;;;;;;;;;;;;;;;:11;:25;4718:12;:10;:12::i;:::-;-1:-1:-1;;;;;4706:25:20;;;;;;;;;;;;;;;;;-1:-1:-1;4706:25:20;;;:34;;;;;;;;;;;:96;;:38;:96;:::i;26134:749:0:-;26363:15;26350:9;:28;;26342:48;;;;;-1:-1:-1;;;26342:48:0;;;;;;;;;;;;-1:-1:-1;;;26342:48:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;26507:13:0;;;26396:14;26507:13;;;:6;:13;;;;;;;;:15;;;;;;;;;26423:111;;7493:66;26423:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;26423:111:0;;;;;26413:122;;;;;;26613:16;;-1:-1:-1;;;26567:86:0;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;26567:86:0;;;;;;26550:109;;;;;;;;;26692:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26550:109;;26396:14;;26692:29;;;;;26507:13;-1:-1:-1;;26692:29:0;;;;;;;;;;26507:15;26692:29;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;26692:29:0;;-1:-1:-1;;26692:29:0;;;-1:-1:-1;;;;;;;26735:30:0;;;;;;:59;;;26789:5;-1:-1:-1;;;;;26769:25:0;:16;-1:-1:-1;;;;;26769:25:0;;26735:59;26727:89;;;;;-1:-1:-1;;;26727:89:0;;;;;;;;;;;;-1:-1:-1;;;26727:89:0;;;;;;;;;;;;;;;26822:56;26828:5;26835:3;26840:15;26857:20;26822:5;:56::i;21245:169::-;21354:55;21359:10;21371:3;21376:14;21392:16;21354:4;:55::i;4697:23::-;;;;:::o;2094:155:20:-;2163:4;2179:42;2189:12;:10;:12::i;:::-;2203:9;2214:6;2179:9;:42::i;6947:23:0:-;;;;:::o;5990:962:1:-;6265:166;6286:17;6311:12;6331:8;6347:13;6368:15;6391:14;6413:12;6265:13;:166::i;:::-;2006:5:0;6453:29:1;:49;;6438:98;;;;;-1:-1:-1;;;6438:98:1;;;;;;;;;;;;-1:-1:-1;;;6438:98:1;;;;;;;;;;;;;;;6590:30;;6557:29;:63;;6542:123;;;;;-1:-1:-1;;;6542:123:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;6671:30;:62;;;6745:202;;;-1:-1:-1;;;;;6745:202:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5990:962;;;;;;;;:::o;22227:2360:0:-;22308:4;22322:12;22337:16;:14;:16::i;:::-;22322:31;;22405:18;1507:1;22432:5;;:18;22429:2127;;;22464:11;22494:12;;22478:13;:11;:13::i;:::-;:28;;-1:-1:-1;23073:139:0;23099:28;:15;23119:7;23099:28;:19;:28;:::i;:::-;23152:12;;23137:27;;23174:13;:11;:13::i;:::-;23198:6;23189;:15;23073:16;:139::i;:::-;23057:155;-1:-1:-1;23369:9:0;23381:32;:15;23401:1;:11;;23381:32;:19;:32;:::i;:::-;23369:44;;23429:6;23421:14;;;;;;;23614:21;;;;23421:14;-1:-1:-1;23769:119:0;23802:36;23822:15;;23802:36;:19;:36;:::i;:::-;23848:7;23874:6;23865;:15;23769:23;:119::i;:::-;23762:126;;23915:4;23899:13;:20;23896:125;;;23954:4;23937:21;;;;23896:125;;;24011:1;23995:17;;23896:125;22429:2127;;;;;1631:1;24040:5;;:20;24037:519;;;24148:28;:15;24168:7;24148:28;:19;:28;:::i;:::-;24132:44;;24201:13;:11;:13::i;:::-;24184:30;;;;;;;;;24037:519;;;24354:28;:15;24374:7;24354:28;:19;:28;:::i;:::-;24338:44;;24538:11;;24522:13;:11;:13::i;:::-;:27;24505:44;;;;;;;;24569:13;-1:-1:-1;;;;22227:2360:0:o;3700:26::-;;;;:::o;5668:17::-;;;;:::o;6490:40::-;;;-1:-1:-1;;;;;6490:40:0;;:::o;5018:716:1:-;5073:64;5092:10;5104:14;5120:9;5131:5;5073:18;:64::i;:::-;1507:1:0;5151:5:1;;:18;5143:44;;;;;-1:-1:-1;;;5143:44:1;;;;;;;;;;;;-1:-1:-1;;;5143:44:1;;;;;;;;;;;;;;;5218:1;5201:14;:18;5193:47;;;;;-1:-1:-1;;;5193:47:1;;;;;;;;;;;;-1:-1:-1;;;5193:47:1;;;;;;;;;;;;;;;5421:12;5436:50;5455:30;;5436:14;:18;;:50;;;;:::i;:::-;5648:11;;2006:5:0;5492:27:1;;;;-1:-1:-1;5630:56:1;;5648:11;;;-1:-1:-1;;;;;5648:11:1;5661:24;;;5630:17;:56::i;:::-;5698:31;;;;;;;;5702:10;;5698:31;;;;;;;;;;5018:716;;:::o;3563:35:0:-;;;-1:-1:-1;;;;;3563:35:0;;:::o;1945:80:1:-;2009:11;;1945:80;:::o;2029:1121::-;2396:195;2421:12;2441:16;2465:9;2482:12;2502;2522:9;2539:18;2565:5;2578:7;2396:17;:195::i;:::-;2662:14;2659:315;;2707:5;;2695:29;;;;;;1507:1:0;2695:29:1;;;;;;-1:-1:-1;;;;;;;;;;;2695:29:1;;;;;;;;;1507:1:0;2732:5:1;:17;2771:15;2757:11;:29;2659:315;;;2198:8:0;2898:9:1;:22;2890:49;;;;;-1:-1:-1;;;2890:49:1;;;;;;;;;;;;-1:-1:-1;;;2890:49:1;;;;;;;;;;;;;;;2947:8;:20;;;2659:315;2006:5:0;3008:29:1;:49;;3000:77;;;;;-1:-1:-1;;;3000:77:1;;;;;;;;;;;;-1:-1:-1;;;3000:77:1;;;;;;;;;;;;;;;-1:-1:-1;;;3083:30:1;:62;;;;-1:-1:-1;;;;;;2029:1121:1:o;7446:113:0:-;7493:66;7446:113;:::o;28228:633::-;28403:15;28391:8;:27;;28383:47;;;;;-1:-1:-1;;;28383:47:0;;;;;;;;;;;;-1:-1:-1;;;28383:47:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28514:13:0;;;28436:14;28514:13;;;:6;:13;;;;;;;;:15;;;;;;;;;28463:77;;6157:66;28463:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;28463:77:0;;;;;28453:88;;;;;;28619:16;;-1:-1:-1;;;28573:86:0;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;28573:86:0;;;;;;28556:109;;;;;;;;;28698:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28556:109;;28436:14;;28698:26;;;;;28514:13;-1:-1:-1;;28698:26:0;;;;;;;;;;28514:15;28698:26;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;28698:26:0;;-1:-1:-1;;28698:26:0;;;-1:-1:-1;;;;;;;28738:30:0;;;;;;:59;;;28792:5;-1:-1:-1;;;;;28772:25:0;:16;-1:-1:-1;;;;;28772:25:0;;28738:59;28730:89;;;;;-1:-1:-1;;;28730:89:0;;;;;;;;;;;;-1:-1:-1;;;28730:89:0;;;;;;;;;;;;;;;28825:31;28834:5;28841:7;28850:5;28825:8;:31::i;:::-;28228:633;;;;;;;;;:::o;3341:22::-;;;-1:-1:-1;;;;;3341:22:0;;:::o;2307:132:20:-;-1:-1:-1;;;;;2405:18:20;;;2379:7;2405:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;2307:132::o;3489:22:0:-;;;-1:-1:-1;;;;;3489:22:0;;:::o;8002:412::-;8116:8;;8049:4;;8078:21;;-1:-1:-1;;;;;8116:8:0;8108:31;8105:98;;8163:8;;:33;;;-1:-1:-1;;;8163:33:0;;8190:4;8163:33;;;;;;-1:-1:-1;;;;;8163:8:0;;;;:18;;:33;;;;;;;;;;;;;;;:8;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;8163:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8163:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8163:33:0;;-1:-1:-1;8105:98:0;-1:-1:-1;;;;;8212:7:0;:27;8209:180;;;-1:-1:-1;;;;;8358:24:0;;;;;8209:180;8402:7;-1:-1:-1;8002:412:0;:::o;867:96:15:-;946:10;867:96;:::o;7427:332:20:-;-1:-1:-1;;;;;7520:19:20;;7512:68;;;;-1:-1:-1;;;7512:68:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7598:21:20;;7590:68;;;;-1:-1:-1;;;7590:68:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7669:18:20;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7720:32;;;;;;;;;;;;;;;;;7427:332;;;:::o;1409:498:30:-;1820:4;1864:17;1895:7;1409:498;:::o;8551:275:0:-;7685:9;;8659:5;;8666:3;;8671:7;;8680:5;;-1:-1:-1;;;;;7685:9:0;7677:32;7674:171;;7782:9;;:56;;;-1:-1:-1;;;7782:56:0;;-1:-1:-1;;;;;7782:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:9;;;;;:27;;:56;;;;;:9;;:56;;;;;;;:9;;:56;;;5:2:-1;;;;30:1;27;20:12;5:2;7782:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7782:56:0;;;;7674:171;8703:5;;:19;;;:43;;-1:-1:-1;8735:11:0;;-1:-1:-1;;;;;8726:20:0;;;8735:11;;;;;8726:20;8703:43;8695:84;;;;;-1:-1:-1;;;8695:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;8785:36;8801:5;8808:3;8813:7;8785:15;:36::i;:::-;8551:275;;;;;;;:::o;1732:187:18:-;1818:7;1853:12;1845:6;;;;1837:29;;;;-1:-1:-1;;;1837:29:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;1837:29:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1888:5:18;;;1732:187::o;18937:1857:0:-;-1:-1:-1;;;;;19076:17:0;;19068:45;;;;;-1:-1:-1;;;19068:45:0;;;;;;;;;;;;-1:-1:-1;;;19068:45:0;;;;;;;;;;;;;;;19146:1;19127:16;:20;19119:52;;;;;-1:-1:-1;;;19119:52:0;;;;;;;;;;;;-1:-1:-1;;;19119:52:0;;;;;;;;;;;;;;;19230:15;19248:32;19265:14;19248:16;:32::i;:::-;19230:50;;19308:16;19294:10;:30;;19286:57;;;;;-1:-1:-1;;;19286:57:0;;;;;;;;;;;;-1:-1:-1;;;19286:57:0;;;;;;;;;;;;;;;19366:3;-1:-1:-1;;;;;19355:43:0;19359:5;-1:-1:-1;;;;;19355:43:0;;19371:14;19387:10;19355:43;;;;;;;;;;;;;;;;;;;;;;;;19405:59;19424:5;19431:14;19447:9;19458:5;19405:18;:59::i;:::-;19557:5;;19554:1207;;-1:-1:-1;;;;;19634:18:0;;;;;;:13;:18;;;;;:32;;;;;;19794:8;;19779:11;;19656:10;19750:13;:11;:13::i;:::-;:26;:40;:52;19747:860;;19837:5;;19825:29;;;;;;1507:1;19825:29;;;;;;-1:-1:-1;;;;;;;;;;;19825:29:0;;;;;;;;;1507:1;19864:5;:17;19905:15;19891:11;:29;20134:11;;;;;-1:-1:-1;;;;;20134:11:0;-1:-1:-1;20120:26:0;;;:13;:26;;;;;;20172:8;;20158:11;;20192;;20092:121;;20120:26;20158:22;;;;;20092:16;:121::i;:::-;20227:8;;20061:152;;-1:-1:-1;20227:12:0;20224:296;;20279:17;;20298:8;;20261:46;;-1:-1:-1;;;;;20279:17:0;;20261;:46::i;:::-;20348:8;;20322:23;:34;20319:191;;;20409:8;;20382:35;;20319:191;;;-1:-1:-1;20496:1:0;20319:191;20530:68;20552:45;20573:23;20552:16;:14;:16::i;:::-;:20;:45;:20;:45;:::i;:::-;20530:21;:68::i;:::-;19747:860;;19554:1207;;;20680:11;;-1:-1:-1;;;;;20673:18:0;;;20680:11;;;;;20673:18;20670:85;;20709:37;20731:14;20709:21;:37::i;:::-;20767:22;20773:3;20778:10;20767:5;:22::i;:::-;18937:1857;;;;;:::o;1480:1592:6:-;1573:4;1589:10;;;:24;;-1:-1:-1;1603:10:6;;1589:24;1585:117;;;-1:-1:-1;1694:1:6;1687:8;;1585:117;1708:10;1749:5;1740;-1:-1:-1;;1729:16:6;;;;;;:25;1725:158;;-1:-1:-1;1822:13:6;;;1852:4;1822:13;1852:4;1843:13;;;;;;-1:-1:-1;1864:12:6;;-1:-1:-1;1864:12:6;1725:158;1926:5;1951;1966:13;;;1962:70;;;-1:-1:-1;1998:5:6;;-1:-1:-1;2020:5:6;1962:70;2055:4;2046:6;:13;;;;;;2038:21;;1006:9;2069:5;:17;2065:152;;;2173:17;:5;2183:6;2173:17;:9;:17;:::i;:::-;2165:25;-1:-1:-1;2198:12:6;;-1:-1:-1;;;2198:12:6;2065:152;-1:-1:-1;;2327:10:6;;-1:-1:-1;;;;;2327:10:6;2343:27;2386:1;2376:11;;-1:-1:-1;;;2405:10:6;;-1:-1:-1;;;;;2405:10:6;2421:25;2460:1;2452:9;;-1:-1:-1;2452:9:6;2482:6;-1:-1:-1;;2482:6:6;2471:17;;;;;:25;2467:298;;2506:14;;;;;2536:6;2506:14;2536:15;;;;;;-1:-1:-1;1151:13:6;2563:28;;2559:200;;;2611:17;:5;2621:6;2611:17;:9;:17;:::i;:::-;2603:25;-1:-1:-1;;;;2645:8:6;;2671:6;2645:8;2671:6;2663:14;;;;;;-1:-1:-1;2694:11:6;2663:14;2703:1;2694:11;:8;:11;:::i;:::-;2687:18;;2724:4;2715:13;;;;;;;;-1:-1:-1;2738:12:6;;-1:-1:-1;;;;;2738:12:6;2559:200;2908:1;-1:-1:-1;;;;;;;2849:10:6;;2865:27;2898:11;;-1:-1:-1;2898:11:6;2849:10;2898:11;2923:15;;;;;;-1:-1:-1;;;;2951:8:6;;2973:6;2951:8;2973:6;2965:14;;;;;2993:1;2985:9;;-1:-1:-1;2985:9:6;3007:6;2985:9;3007:13;;;;;;-1:-1:-1;3034:15:6;:5;3007:13;3034:15;:9;:15;:::i;:::-;3026:23;1480:1592;-1:-1:-1;;;;;;;;;1480:1592:6:o;2159:459:18:-;2217:7;2458:6;2454:45;;-1:-1:-1;2487:1:18;2480:8;;2454:45;2521:5;;;2525:1;2521;:5;:1;2544:5;;;;;:10;2536:56;;;;-1:-1:-1;;;2536:56:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;834:176;892:7;923:5;;;946:6;;;;938:46;;;;;-1:-1:-1;;;938:46:18;;;;;;;;;;;;;;;;;;;;;;;;;;;281:345:7;326:6;344;340:178;;-1:-1:-1;367:1:7;360:8;;340:178;390:1;385;:6;381:137;;-1:-1:-1;408:1:7;401:8;;381:137;-1:-1:-1;;426:1:7;:13;422:96;;;-1:-1:-1;;;;;;494:17:7;;422:96;-1:-1:-1;534:5:7;543:1;538;534:5;;533:11;561:61;572:1;568;:5;561:61;;;587:1;583:5;;614:1;609;605;601;:5;;;;;;:9;600:15;;;;;;596:19;;561:61;;;281:345;;;;:::o;1274:134:18:-;1332:7;1358:43;1362:1;1365;1358:43;;;;;;;;;;;;;;;;;:3;:43::i;8885:433:0:-;7685:9;;8990:5;;9005:1;;9009:7;;9018;;-1:-1:-1;;;;;7685:9:0;7677:32;7674:171;;7782:9;;:56;;;-1:-1:-1;;;7782:56:0;;-1:-1:-1;;;;;7782:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:9;;;;;:27;;:56;;;;;:9;;:56;;;;;;;:9;;:56;;;5:2:-1;;;;30:1;27;20:12;5:2;7782:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7782:56:0;;;;7674:171;9035:27;9047:5;9054:7;9035:11;:27::i;:::-;9073:7;9069:245;;1507:1;9126:5;;:18;9118:44;;;;;-1:-1:-1;;;9118:44:0;;;;;;;;;;;;-1:-1:-1;;;9118:44:0;;;;;;;;;;;;;;;9251:12;:23;;;;;;9287:20;;;;;;;;-1:-1:-1;;;;;9287:20:0;;;;;;;;;;;;;8885:433;;;;;;;:::o;9809:751::-;9971:8;;-1:-1:-1;;;;;9971:8:0;9960:596;;10036:16;10033:344;;;10131:11;10145:32;:9;10159:17;10145:32;:13;:32;:::i;:::-;10131:46;-1:-1:-1;10190:10:0;;10187:83;;10222:37;10240:10;10252:6;10222:17;:37::i;:::-;10033:344;;;;10335:9;10314:17;:30;10306:62;;;;;-1:-1:-1;;;10306:62:0;;;;;;;;;;;;-1:-1:-1;;;10306:62:0;;;;;;;;;;;;;;;9960:596;;;10440:14;;10432:42;;;;;-1:-1:-1;;;10432:42:0;;;;;;;;;;;;-1:-1:-1;;;10432:42:0;;;;;;;;;;;;;;;10483:8;;:66;;-1:-1:-1;;;;;10483:8:0;10509:5;10524:4;10531:17;10483:66;:25;:66;:::i;27426:644::-;27483:11;;;;;-1:-1:-1;;;;;27483:11:0;27469:10;:25;27461:54;;;;;-1:-1:-1;;;27461:54:0;;;;;;;;;;;;-1:-1:-1;;;27461:54:0;;;;;;;;;;;;;;;27525:5;;27522:544;;27649:5;;27637:32;;;;;;1757:1;27637:32;;;;;;-1:-1:-1;;;;;;;;;;;27637:32:0;;;;;;;;;1757:1;27677:5;:20;27522:544;;;1507:1;27717:5;;:18;27714:352;;;27832:11;;27818;;27807:22;:36;27799:62;;;;;-1:-1:-1;;;27799:62:0;;;;;;;;;;;;-1:-1:-1;;;27799:62:0;;;;;;;;;;;;;;;27906:15;27891:11;;27877;;:25;:44;;27869:66;;;;;-1:-1:-1;;;27869:66:0;;;;;;;;;;;;-1:-1:-1;;;27869:66:0;;;;;;;;;;;;;;;27961:5;;27949:31;;;;;;1631:1;27949:31;;;;;;-1:-1:-1;;;;;;;;;;;27949:31:0;;;;;;;;;1631:1;27988:5;:19;27714:352;;;28036:23;;;-1:-1:-1;;;28036:23:0;;;;;;;;;;;;-1:-1:-1;;;28036:23:0;;;;;;;;;;;;;;27714:352;27426:644::o;24591:834::-;24745:11;;-1:-1:-1;;;;;24736:20:0;;;24745:11;;;;;24736:20;;;:44;;;1631:1;24760:5;;:20;;24736:44;24728:97;;;;-1:-1:-1;;;24728:97:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24862:1;24839:20;:24;24831:57;;;;;-1:-1:-1;;;24831:57:0;;;;;;;;;;;;-1:-1:-1;;;24831:57:0;;;;;;;;;;;;;;;24895:18;24916:34;24934:15;24916:17;:34::i;:::-;24895:55;;24981:20;24964:13;:37;;24956:64;;;;;-1:-1:-1;;;24956:64:0;;;;;;;;;;;;-1:-1:-1;;;24956:64:0;;;;;;;;;;;;;;;25030:5;;:19;;:44;;;1757:1;25053:5;;:21;25030:44;25027:132;;;-1:-1:-1;;;;;25111:20:0;;;;;;:13;:20;;;;;;:41;;25136:15;25111:41;:24;:41;:::i;:::-;-1:-1:-1;;;;;25088:20:0;;;;;;:13;:20;;;;;:64;25027:132;25165:35;25171:5;25178:15;25195:4;25165:5;:35::i;:::-;25206:11;25236:12;;25220:13;:11;:13::i;:::-;:28;25206:42;;25266:11;;25257:6;:20;25254:64;;;25291:11;:20;;;25254:64;25324:37;25342:3;25347:13;25324:17;:37::i;:::-;25384:3;-1:-1:-1;;;;;25372:48:0;25377:5;-1:-1:-1;;;;;25372:48:0;;25389:13;25404:15;25372:48;;;;;;;;;;;;;;;;;;;;;;;;24591:834;;;;;;:::o;13680:1334::-;14009:7;;-1:-1:-1;;;;;14009:7:0;13995:10;:21;13987:46;;;;;-1:-1:-1;;;13987:46:0;;;;;;;;;;;;-1:-1:-1;;;13987:46:0;;;;;;;;;;;;;;;14066:9;:41;;-1:-1:-1;;;;;;14066:41:0;-1:-1:-1;;;;;14066:41:0;;;;;;;;;;14122:22;;14114:50;;;;;-1:-1:-1;;;14114:50:0;;;;;;;;;;;;-1:-1:-1;;;14114:50:0;;;;;;;;;;;;;;;14170:7;:18;;-1:-1:-1;;;;;;14170:18:0;-1:-1:-1;;;;;14170:18:0;;;;;;;;;;14203:27;;14195:55;;;;;-1:-1:-1;;;14195:55:0;;;;;;;;;;;;-1:-1:-1;;;14195:55:0;;;;;;;;;;;;;;;14256:12;:28;;-1:-1:-1;;;;;;14256:28:0;-1:-1:-1;;;;;14256:28:0;;;;;2006:5;14299:35;;;14291:59;;;;;-1:-1:-1;;;14291:59:0;;;;;;;;;;;;-1:-1:-1;;;14291:59:0;;;;;;;;;;;;;;;14356:14;:32;;;14403:18;14395:53;;;;;-1:-1:-1;;;14395:53:0;;;;;;;;;;;;-1:-1:-1;;;14395:53:0;;;;;;;;;;;;;;;14454:13;:30;;;14515:11;;14499:27;;;14491:71;;;;;-1:-1:-1;;;14491:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14568:11;:26;;;14604:11;;-1:-1:-1;;;;;14604:27:0;;;:11;;;;;:27;14601:409;;-1:-1:-1;;;;;14653:26:0;;14645:54;;;;;-1:-1:-1;;;14645:54:0;;;;;;;;;;;;-1:-1:-1;;;14645:54:0;;;;;;;;;;;;;;;14731:11;;14707;;14721:22;;14731:11;;;-1:-1:-1;;;;;14731:11:0;14721:9;:22::i;:::-;14827:11;;-1:-1:-1;;;;;14827:11:0;;;;;;14813:26;;;;:13;:26;;;;;;;14781:27;;;;;;;;14707:36;;-1:-1:-1;14781:59:0;;:27;:59;:31;:59;:::i;:::-;-1:-1:-1;;;;;14751:27:0;;;;;;;:13;:27;;;;;;:89;;;;14862:11;;;;;;;;14848:26;;;;;:30;14889:10;;14886:84;;14927:11;;14917:44;;14927:11;;;-1:-1:-1;;;;;14927:11:0;14940:12;14954:6;14917:9;:44::i;:::-;-1:-1:-1;14977:11:0;:26;;-1:-1:-1;;;;;14977:26:0;;;;-1:-1:-1;;;;;;14977:26:0;;;;;;13680:1334;;;;;;;:::o;4640:2052:6:-;4750:4;4786:5;4777;-1:-1:-1;;4766:16:6;;;;;;:25;4762:151;;4868:38;4878:5;4885;4900;4892;:13;4868:9;:38::i;:::-;4861:45;;;;4762:151;4923:10;;;:24;;-1:-1:-1;4937:10:6;;4923:24;4919:117;;;-1:-1:-1;5028:1:6;5021:8;;4919:117;5081:5;5106;5121:13;;;5117:70;;;-1:-1:-1;5153:5:6;;-1:-1:-1;5175:5:6;5117:70;5193:10;5234:5;5225;-1:-1:-1;;5214:16:6;;;;;;:25;5210:181;;-1:-1:-1;5305:13:6;;;5335:6;5305:13;5335:6;5326:15;;;;;;;5358:6;5349:15;;;;;;;;-1:-1:-1;5372:12:6;;-1:-1:-1;;;5372:12:6;5210:181;5492:5;5517;5532:13;;;5528:70;;;-1:-1:-1;5564:5:6;;-1:-1:-1;5586:5:6;5528:70;5635:9;5656:6;5647;:15;;;;;;;-1:-1:-1;1151:13:6;5672:27;;5668:86;;;5716:31;5726:4;5732:6;5740;5716:9;:31::i;:::-;5709:38;;;;;;;;;;5668:86;-1:-1:-1;;;;;;;;5959:10:6;;;5975:25;;;5945:1;6006:9;;;;5886:10;;;5902:27;5935:11;;6006:9;;5935:11;;;6025:17;;;;;:25;6021:345;;6060:14;;;6091:6;6060:14;6091:15;;;;;;-1:-1:-1;1151:13:6;6118:28;;6114:246;;;6166:17;:5;6176:6;6166:17;:9;:17;:::i;:::-;6158:25;;6202:6;6193:15;;;;;;;;;6230:1;6222:5;:9;:39;;;;;6255:6;6246:5;-1:-1:-1;;6235:16:6;;;;;;:26;;6222:39;6218:134;;;6275:15;;;;6311:6;6275:15;6311:6;6302:15;;;;;;-1:-1:-1;6329:12:6;;-1:-1:-1;;;;;;;6329:12:6;6218:134;-1:-1:-1;;;;;6581:29:6;;-1:-1:-1;;;;;6480:27:6;;6616:14;;6643:44;6616:14;6653:6;6616:14;6653:15;;;;;6670:6;-1:-1:-1;;6643:9:6;:44::i;:::-;6636:51;;;;;;;;;4640:2052;;;;;;;:::o;3487:652::-;3587:4;3640:10;3653:29;3663:5;3670;3677:4;3653:9;:29::i;:::-;3640:42;-1:-1:-1;3693:10:6;3689:112;;3793:1;3786:8;;;;;3689:112;3980:1;1006:9;-1:-1:-1;;3934:9:6;;3949:17;3972:9;3991:16;;-1:-1:-1;;3987:109:6;;;-1:-1:-1;;4074:15:6;;;;;;3987:109;4102:13;;3487:652;-1:-1:-1;;;;3487:652:6:o;10639:293:0:-;10733:11;;10730:198;;10769:8;;-1:-1:-1;;;;;10769:8:0;10758:164;;10810:31;10828:3;10833:7;10810:17;:31::i;:::-;10758:164;;;10878:8;;:35;;-1:-1:-1;;;;;10878:8:0;10900:3;10905:7;10878:35;:21;:35;:::i;11181:1817::-;11528:44;11553:5;11560:7;11569:2;11528:24;:44::i;:::-;11602:1;11587:12;:16;11579:46;;;;;-1:-1:-1;;;11579:46:0;;;;;;;;;;;;-1:-1:-1;;;11579:46:0;;;;;;;;;;;;;;;11654:1;11639:12;:16;11631:46;;;;;-1:-1:-1;;;11631:46:0;;;;;;;;;;;;-1:-1:-1;;;11631:46:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;11691:12:0;:32;11683:64;;;;;-1:-1:-1;;;11683:64:0;;;;;;;;;;;;-1:-1:-1;;;11683:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;11761:12:0;:32;11753:64;;;;;-1:-1:-1;;;11753:64:0;;;;;;;;;;;;-1:-1:-1;;;11753:64:0;;;;;;;;;;;;;;;11823:11;:26;;;11855:11;:26;;;11913:14;;;:50;;-1:-1:-1;;;;;;11931:32:0;;;;11913:50;11905:90;;;;;-1:-1:-1;;;11905:90:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12009:32:0;;;;:50;;-1:-1:-1;12045:14:0;;;12009:50;12001:80;;;;;-1:-1:-1;;;12001:80:0;;;;;;;;;;;;-1:-1:-1;;;12001:80:0;;;;;;;;;;;;;;;12147:21;;;12195:36;12147:21;12218:12;12195:36;:22;:36;:::i;:::-;12174:57;;12263:12;12259:1;:16;12237:38;;;;;;;;;12302:18;12289:9;:31;;12281:63;;;;;-1:-1:-1;;;12281:63:0;;;;;;;;;;;;-1:-1:-1;;;12281:63:0;;;;;;;;;;;;;;;12350:8;:20;;;12376:17;:38;;-1:-1:-1;;;;;;12376:38:0;-1:-1:-1;;;;;12376:38:0;;;;;;;;;;12507:2;;12518:30;;;12515:108;;12588:16;-1:-1:-1;;;;;12573:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12573:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12573:43:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12573:43:0;12562:54;;;-1:-1:-1;12515:108:0;12651:2;:14;;;12644:3;:22;12628:13;:38;12672:11;:24;;-1:-1:-1;;;;;;12672:24:0;12686:10;12672:24;;;;;;;;;;12702:7;:20;;-1:-1:-1;;;;;;12702:20:0;;;;;;;;12728:12;:25;;;;;;;;;;12781:8;:35;;;;;-1:-1:-1;;;;;12781:35:0;;;;;12858:16;;12855:105;;12888:11;:26;;;12928:11;;12922:31;;12928:11;;;-1:-1:-1;;;;;12928:11:0;12888:26;12922:5;:31::i;:::-;12966:27;:25;:27::i;:::-;11181:1817;;;;;;;;;;;:::o;5305:464:20:-;-1:-1:-1;;;;;5402:20:20;;5394:70;;;;-1:-1:-1;;;5394:70:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5482:23:20;;5474:71;;;;-1:-1:-1;;;5474:71:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5576;5598:6;5576:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5576:17:20;;;;;;:9;:17;;;;;;;:71;;:21;:71;:::i;:::-;-1:-1:-1;;;;;5556:17:20;;;;;;;:9;:17;;;;;;:91;;;;5680:20;;;;;;;:32;;5705:6;5680:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;5657:20:20;;;;;;;:9;:20;;;;;;;;;:55;;;;5727:35;;;;;;;5657:20;;5727:35;;;;;;;;;;;;;5305:464;;;:::o;7640:737:1:-;8010:30;;7995:12;;8010:42;;8045:6;8010:42;:34;:42;:::i;:::-;2006:5:0;8058:27:1;;;-1:-1:-1;8101:19:1;:6;8058:27;8101:10;:19::i;:::-;8091:29;;8126:8;8137:27;8149:14;;8137:7;:11;;:27;;;;:::i;:::-;8303:11;;2006:5:0;8170:23:1;;;;-1:-1:-1;8285:45:1;;8303:11;;;-1:-1:-1;;;;;8303:11:1;8316:13;;;8285:17;:45::i;:::-;8354:12;;8336:36;;-1:-1:-1;;;;;8354:12:1;8368:3;8336:17;:36::i;9368:314:0:-;7685:9;;9463:1;;9467:3;;9472:9;;9463:1;;-1:-1:-1;;;;;7685:9:0;7677:32;7674:171;;7782:9;;:56;;;-1:-1:-1;;;7782:56:0;;-1:-1:-1;;;;;7782:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:9;;;;;:27;;:56;;;;;:9;;:56;;;;;;;:9;;:56;;;5:2:-1;;;;30:1;27;20:12;5:2;7782:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7782:56:0;;;;7674:171;9498:27;9510:3;9515:9;9498:11;:27::i;:::-;2198:8;9611:31;9629:12;;9611:13;:11;:13::i;:::-;:17;:31;:17;:31;:::i;:::-;:45;;9603:74;;;;;-1:-1:-1;;;9603:74:0;;;;;;;;;;;;-1:-1:-1;;;9603:74:0;;;;;;;;;;;;;;;9368:314;;;;;;:::o;6660:342:20:-;-1:-1:-1;;;;;6735:21:20;;6727:67;;;;-1:-1:-1;;;6727:67:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6826:68;6849:6;6826:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6826:18:20;;;;;;:9;:18;;;;;;;:68;;:22;:68;:::i;:::-;-1:-1:-1;;;;;6805:18:20;;;;;;:9;:18;;;;;:89;6919:12;;:24;;6936:6;6919:24;:16;:24;:::i;:::-;6904:12;:39;6958:37;;;;;;;;6984:1;;-1:-1:-1;;;;;6958:37:20;;;;;;;;;;;;6660:342;;:::o;2587:365:24:-;2701:6;2676:21;:31;;2668:73;;;;;-1:-1:-1;;;2668:73:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;2825:32;;2807:12;;-1:-1:-1;;;;;2825:14:24;;;2846:6;;2807:12;2825:32;2807:12;2825:32;2846:6;2825:14;:32;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;2806:51:24;;;2875:7;2867:78;;;;-1:-1:-1;;;2867:78:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;842:202:23;968:68;;;-1:-1:-1;;;;;968:68:23;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;968:68:23;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;942:95:23;;961:5;;942:18;:95::i;662:174::-;770:58;;;-1:-1:-1;;;;;770:58:23;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;770:58:23;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;744:85:23;;763:5;;744:18;:85::i;6039:302:20:-;-1:-1:-1;;;;;6114:21:20;;6106:65;;;;;-1:-1:-1;;;6106:65:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;6197:12;;:24;;6214:6;6197:24;:16;:24;:::i;:::-;6182:12;:39;-1:-1:-1;;;;;6252:18:20;;;;;;:9;:18;;;;;;:30;;6275:6;6252:30;:22;:30;:::i;:::-;-1:-1:-1;;;;;6231:18:20;;;;;;:9;:18;;;;;;;;:51;;;;6297:37;;;;;;;6231:18;;;;6297:37;;;;;;;;;;6039:302;;:::o;2666:1095:23:-;3261:27;3269:5;-1:-1:-1;;;;;3261:25:23;;:27::i;:::-;3253:71;;;;;-1:-1:-1;;;3253:71:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;3395:12;3409:23;3444:5;-1:-1:-1;;;;;3436:19:23;3456:4;3436:25;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;3436:25:23;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;3394:67:23;;;;3479:7;3471:52;;;;;-1:-1:-1;;;3471:52:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3538:17;;:21;3534:221;;3678:10;3667:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3667:30:23;3659:85;;;;-1:-1:-1;;;3659:85:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;686:610:24;746:4;1207:20;;1052:66;1246:23;;;;;;:42;;-1:-1:-1;;1273:15:24;;;1238:51;-1:-1:-1;;686:610:24:o;610:7769:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;610:7769:1;;;-1:-1:-1;610:7769:1;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;",
  "source": "pragma solidity 0.5.17;\n\nimport \"./ContinuousOffering.sol\";\n\n/**\n * @title Decentralized Autonomous Trust\n * This contract is the reference implementation provided by Fairmint for a\n * Decentralized Autonomous Trust as described in the continuous\n * organization whitepaper (https://github.com/c-org/whitepaper) and\n * specified here: https://github.com/fairmint/c-org/wiki. Use at your own\n * risk. If you have question or if you're looking for a ready-to-use\n * solution using this contract, you might be interested in Fairmint's\n * offering. Do not hesitate to get in touch with us: https://fairmint.co\n */\ncontract DecentralizedAutonomousTrust is ContinuousOffering {\n  event Close(uint _exitFee);\n  event Pay(address indexed _from, uint _currencyValue);\n  event UpdateConfig(\n    address _whitelistAddress,\n    address indexed _beneficiary,\n    address indexed _control,\n    address indexed _feeCollector,\n    uint _revenueCommitmentBasisPoints,\n    uint _feeBasisPoints,\n    uint _minInvestment,\n    uint _minDuration\n  );\n\n  /// @notice The revenue commitment of the organization. Defines the percentage of the value paid through the contract\n  /// that is automatically funneled and held into the buyback_reserve expressed in basis points.\n  /// Internal since this is n/a to all derivative contracts.\n  function revenueCommitmentBasisPoints() public view returns (uint) {\n    return __revenueCommitmentBasisPoints;\n  }\n\n  /// @notice The investment reserve of the c-org. Defines the percentage of the value invested that is\n  /// automatically funneled and held into the buyback_reserve expressed in basis points.\n  /// Internal since this is n/a to all derivative contracts.\n  function investmentReserveBasisPoints() public view returns (uint) {\n    return __investmentReserveBasisPoints;\n  }\n\n  /// @notice Initialized at `0` and updated when the contract switches from `init` state to `run` state\n  /// with the current timestamp.\n  function runStartedOn() public view returns (uint) {\n    return __startedOn;\n  }\n\n  function initialize(\n    uint _initReserve,\n    address _currencyAddress,\n    uint _initGoal,\n    uint _buySlopeNum,\n    uint _buySlopeDen,\n    uint _investmentReserveBasisPoints,\n    uint _setupFee,\n    address payable _setupFeeRecipient,\n    string memory _name,\n    string memory _symbol\n  ) public\n  {\n    // _initialize will enforce this is only called once\n    super._initialize(\n      _initReserve,\n      _currencyAddress,\n      _initGoal,\n      _buySlopeNum,\n      _buySlopeDen,\n      _setupFee,\n      _setupFeeRecipient,\n      _name,\n      _symbol\n    );\n\n    // Set initGoal, which in turn defines the initial state\n    if(_initGoal == 0)\n    {\n      emit StateChange(state, STATE_RUN);\n      state = STATE_RUN;\n      __startedOn = block.timestamp;\n    }\n    else\n    {\n      // Math: If this value got too large, the DAT would overflow on sell\n      require(_initGoal < MAX_SUPPLY, \"EXCESSIVE_GOAL\");\n      initGoal = _initGoal;\n    }\n\n    // 100% or less\n    require(_investmentReserveBasisPoints <= BASIS_POINTS_DEN, \"INVALID_RESERVE\");\n    __investmentReserveBasisPoints = _investmentReserveBasisPoints;\n  }\n\n  /// Close\n\n  function estimateExitFee(uint _msgValue) public view returns (uint) {\n    uint exitFee;\n\n    if (state == STATE_RUN) {\n      uint reserve = buybackReserve();\n      reserve = reserve.sub(_msgValue);\n\n      // Source: t*(t+b)*(n/d)-r\n      // Implementation: (b n t)/d + (n t^2)/d - r\n\n      uint _totalSupply = totalSupply();\n\n      // Math worst case:\n      // MAX_BEFORE_SQUARE * MAX_BEFORE_SQUARE/2 * MAX_BEFORE_SQUARE\n      exitFee = BigDiv.bigDiv2x1(\n        _totalSupply,\n        burnedSupply * buySlopeNum,\n        buySlopeDen\n      );\n      // Math worst case:\n      // MAX_BEFORE_SQUARE * MAX_BEFORE_SQUARE * MAX_BEFORE_SQUARE\n      exitFee += BigDiv.bigDiv2x1(\n        _totalSupply,\n        buySlopeNum * _totalSupply,\n        buySlopeDen\n      );\n      // Math: this if condition avoids a potential overflow\n      if (exitFee <= reserve) {\n        exitFee = 0;\n      } else {\n        exitFee -= reserve;\n      }\n    }\n\n    return exitFee;\n  }\n\n  /// @notice Called by the beneficiary account to STATE_CLOSE or STATE_CANCEL the c-org,\n  /// preventing any more tokens from being minted.\n  /// @dev Requires an `exitFee` to be paid.  If the currency is ETH, include a little more than\n  /// what appears to be required and any remainder will be returned to your account.  This is\n  /// because another user may have a transaction mined which changes the exitFee required.\n  /// For other `currency` types, the beneficiary account will be billed the exact amount required.\n  function close() public payable {\n    uint exitFee = 0;\n\n    if (state == STATE_RUN) {\n      exitFee = estimateExitFee(msg.value);\n      _collectInvestment(msg.sender, exitFee, msg.value, true);\n    }\n\n    super._close();\n    emit Close(exitFee);\n  }\n\n  /// Pay\n\n  /// @dev Pay the organization on-chain.\n  /// @param _currencyValue How much currency which was paid.\n  function pay(uint _currencyValue) public payable {\n    _collectInvestment(msg.sender, _currencyValue, msg.value, false);\n    require(state == STATE_RUN, \"INVALID_STATE\");\n    require(_currencyValue > 0, \"MISSING_CURRENCY\");\n\n    // Send a portion of the funds to the beneficiary, the rest is added to the buybackReserve\n    // Math: if _currencyValue is < (2^256 - 1) / 10000 this will not overflow\n    uint reserve = _currencyValue.mul(__revenueCommitmentBasisPoints);\n    reserve /= BASIS_POINTS_DEN;\n\n    // Math: this will never underflow since revenueCommitmentBasisPoints is capped to BASIS_POINTS_DEN\n    _transferCurrency(beneficiary, _currencyValue - reserve);\n\n    emit Pay(msg.sender, _currencyValue);\n  }\n\n  /// @notice Pay the organization on-chain without minting any tokens.\n  /// @dev This allows you to add funds directly to the buybackReserve.\n  function() external payable {\n    require(address(currency) == address(0), \"ONLY_FOR_CURRENCY_ETH\");\n  }\n\n  function updateConfig(\n    address _whitelistAddress,\n    address payable _beneficiary,\n    address _control,\n    address payable _feeCollector,\n    uint _feeBasisPoints,\n    uint _revenueCommitmentBasisPoints,\n    uint _minInvestment,\n    uint _minDuration\n  ) public {\n    _updateConfig(\n      _whitelistAddress,\n      _beneficiary,\n      _control,\n      _feeCollector,\n      _feeBasisPoints,\n      _minInvestment,\n      _minDuration\n    );\n\n    require(\n      _revenueCommitmentBasisPoints <= BASIS_POINTS_DEN,\n      \"INVALID_COMMITMENT\"\n    );\n    require(\n      _revenueCommitmentBasisPoints >= __revenueCommitmentBasisPoints,\n      \"COMMITMENT_MAY_NOT_BE_REDUCED\"\n    );\n    __revenueCommitmentBasisPoints = _revenueCommitmentBasisPoints;\n\n    emit UpdateConfig(\n      _whitelistAddress,\n      _beneficiary,\n      _control,\n      _feeCollector,\n      _revenueCommitmentBasisPoints,\n      _feeBasisPoints,\n      _minInvestment,\n      _minDuration\n    );\n  }\n\n  /// @notice A temporary function to set `runStartedOn`, to be used by contracts which were\n  /// already deployed before this feature was introduced.\n  /// @dev This function will be removed once known users have called the function.\n  function initializeRunStartedOn(\n    uint _runStartedOn\n  ) external\n  {\n    require(msg.sender == control, \"CONTROL_ONLY\");\n    require(state == STATE_RUN, \"ONLY_CALL_IN_RUN\");\n    require(__startedOn == 0, \"ONLY_CALL_IF_NOT_AUTO_SET\");\n    require(_runStartedOn <= block.timestamp, \"DATE_MUST_BE_IN_PAST\");\n\n    __startedOn = _runStartedOn;\n  }\n\n  /// @dev Distributes _value currency between the buybackReserve, beneficiary, and feeCollector.\n  function _distributeInvestment(\n    uint _value\n  ) internal\n  {\n    // Rounding favors buybackReserve, then beneficiary, and feeCollector is last priority.\n\n    // Math: if investment value is < (2^256 - 1) / 10000 this will never overflow.\n    // Except maybe with a huge single investment, but they can try again with multiple smaller investments.\n    uint reserve = __investmentReserveBasisPoints.mul(_value);\n    reserve /= BASIS_POINTS_DEN;\n    reserve = _value.sub(reserve);\n    uint fee = reserve.mul(feeBasisPoints);\n    fee /= BASIS_POINTS_DEN;\n\n    // Math: since feeBasisPoints is <= BASIS_POINTS_DEN, this will never underflow.\n    _transferCurrency(beneficiary, reserve - fee);\n    _transferCurrency(feeCollector, fee);\n  }\n}\n",
  "sourcePath": "/home/circleci/repo/contracts/DecentralizedAutonomousTrust.sol",
  "ast": {
    "absolutePath": "/home/circleci/repo/contracts/DecentralizedAutonomousTrust.sol",
    "exportedSymbols": {
      "DecentralizedAutonomousTrust": [
        2242
      ]
    },
    "id": 2243,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1783,
        "literals": [
          "solidity",
          "0.5",
          ".17"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:1"
      },
      {
        "absolutePath": "/home/circleci/repo/contracts/ContinuousOffering.sol",
        "file": "./ContinuousOffering.sol",
        "id": 1784,
        "nodeType": "ImportDirective",
        "scope": 2243,
        "sourceUnit": 1782,
        "src": "25:34:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 1785,
              "name": "ContinuousOffering",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1781,
              "src": "651:18:1",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ContinuousOffering_$1781",
                "typeString": "contract ContinuousOffering"
              }
            },
            "id": 1786,
            "nodeType": "InheritanceSpecifier",
            "src": "651:18:1"
          }
        ],
        "contractDependencies": [
          1781,
          5407,
          6605,
          6672,
          6741,
          7851
        ],
        "contractKind": "contract",
        "documentation": "@title Decentralized Autonomous Trust\nThis contract is the reference implementation provided by Fairmint for a\nDecentralized Autonomous Trust as described in the continuous\norganization whitepaper (https://github.com/c-org/whitepaper) and\nspecified here: https://github.com/fairmint/c-org/wiki. Use at your own\nrisk. If you have question or if you're looking for a ready-to-use\nsolution using this contract, you might be interested in Fairmint's\noffering. Do not hesitate to get in touch with us: https://fairmint.co",
        "fullyImplemented": true,
        "id": 2242,
        "linearizedBaseContracts": [
          2242,
          1781,
          6672,
          6605,
          6741,
          5407,
          7851
        ],
        "name": "DecentralizedAutonomousTrust",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "anonymous": false,
            "documentation": null,
            "id": 1790,
            "name": "Close",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1789,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1788,
                  "indexed": false,
                  "name": "_exitFee",
                  "nodeType": "VariableDeclaration",
                  "scope": 1790,
                  "src": "686:13:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1787,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "686:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "685:15:1"
            },
            "src": "674:27:1"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 1796,
            "name": "Pay",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1795,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1792,
                  "indexed": true,
                  "name": "_from",
                  "nodeType": "VariableDeclaration",
                  "scope": 1796,
                  "src": "714:21:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1791,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "714:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1794,
                  "indexed": false,
                  "name": "_currencyValue",
                  "nodeType": "VariableDeclaration",
                  "scope": 1796,
                  "src": "737:19:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1793,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "737:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "713:44:1"
            },
            "src": "704:54:1"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 1814,
            "name": "UpdateConfig",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1813,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1798,
                  "indexed": false,
                  "name": "_whitelistAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 1814,
                  "src": "785:25:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1797,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "785:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1800,
                  "indexed": true,
                  "name": "_beneficiary",
                  "nodeType": "VariableDeclaration",
                  "scope": 1814,
                  "src": "816:28:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1799,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "816:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1802,
                  "indexed": true,
                  "name": "_control",
                  "nodeType": "VariableDeclaration",
                  "scope": 1814,
                  "src": "850:24:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1801,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "850:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1804,
                  "indexed": true,
                  "name": "_feeCollector",
                  "nodeType": "VariableDeclaration",
                  "scope": 1814,
                  "src": "880:29:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1803,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "880:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1806,
                  "indexed": false,
                  "name": "_revenueCommitmentBasisPoints",
                  "nodeType": "VariableDeclaration",
                  "scope": 1814,
                  "src": "915:34:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1805,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "915:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1808,
                  "indexed": false,
                  "name": "_feeBasisPoints",
                  "nodeType": "VariableDeclaration",
                  "scope": 1814,
                  "src": "955:20:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1807,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "955:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1810,
                  "indexed": false,
                  "name": "_minInvestment",
                  "nodeType": "VariableDeclaration",
                  "scope": 1814,
                  "src": "981:19:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1809,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "981:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1812,
                  "indexed": false,
                  "name": "_minDuration",
                  "nodeType": "VariableDeclaration",
                  "scope": 1814,
                  "src": "1006:17:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1811,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1006:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "779:248:1"
            },
            "src": "761:267:1"
          },
          {
            "body": {
              "id": 1821,
              "nodeType": "Block",
              "src": "1379:48:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1819,
                    "name": "__revenueCommitmentBasisPoints",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 119,
                    "src": "1392:30:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1818,
                  "id": 1820,
                  "nodeType": "Return",
                  "src": "1385:37:1"
                }
              ]
            },
            "documentation": "@notice The revenue commitment of the organization. Defines the percentage of the value paid through the contract\n that is automatically funneled and held into the buyback_reserve expressed in basis points.\n Internal since this is n/a to all derivative contracts.",
            "id": 1822,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "revenueCommitmentBasisPoints",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1815,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1349:2:1"
            },
            "returnParameters": {
              "id": 1818,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1817,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1822,
                  "src": "1373:4:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1816,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1373:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1372:6:1"
            },
            "scope": 2242,
            "src": "1312:115:1",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1829,
              "nodeType": "Block",
              "src": "1754:48:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1827,
                    "name": "__investmentReserveBasisPoints",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 113,
                    "src": "1767:30:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1826,
                  "id": 1828,
                  "nodeType": "Return",
                  "src": "1760:37:1"
                }
              ]
            },
            "documentation": "@notice The investment reserve of the c-org. Defines the percentage of the value invested that is\n automatically funneled and held into the buyback_reserve expressed in basis points.\n Internal since this is n/a to all derivative contracts.",
            "id": 1830,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "investmentReserveBasisPoints",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1823,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1724:2:1"
            },
            "returnParameters": {
              "id": 1826,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1825,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1830,
                  "src": "1748:4:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1824,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1748:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1747:6:1"
            },
            "scope": 2242,
            "src": "1687:115:1",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1837,
              "nodeType": "Block",
              "src": "1996:29:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1835,
                    "name": "__startedOn",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 141,
                    "src": "2009:11:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1834,
                  "id": 1836,
                  "nodeType": "Return",
                  "src": "2002:18:1"
                }
              ]
            },
            "documentation": "@notice Initialized at `0` and updated when the contract switches from `init` state to `run` state\n with the current timestamp.",
            "id": 1838,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "runStartedOn",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1831,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1966:2:1"
            },
            "returnParameters": {
              "id": 1834,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1833,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1838,
                  "src": "1990:4:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1832,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1990:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1989:6:1"
            },
            "scope": 2242,
            "src": "1945:80:1",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1917,
              "nodeType": "Block",
              "src": "2333:817:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1864,
                        "name": "_initReserve",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1840,
                        "src": "2421:12:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1865,
                        "name": "_currencyAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1842,
                        "src": "2441:16:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1866,
                        "name": "_initGoal",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1844,
                        "src": "2465:9:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1867,
                        "name": "_buySlopeNum",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1846,
                        "src": "2482:12:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1868,
                        "name": "_buySlopeDen",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1848,
                        "src": "2502:12:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1869,
                        "name": "_setupFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1852,
                        "src": "2522:9:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1870,
                        "name": "_setupFeeRecipient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1854,
                        "src": "2539:18:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1871,
                        "name": "_name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1856,
                        "src": "2565:5:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1872,
                        "name": "_symbol",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1858,
                        "src": "2578:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1861,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8575,
                        "src": "2396:5:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_DecentralizedAutonomousTrust_$2242",
                          "typeString": "contract super DecentralizedAutonomousTrust"
                        }
                      },
                      "id": 1863,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_initialize",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 637,
                      "src": "2396:17:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_payable_$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (uint256,address,uint256,uint256,uint256,uint256,address payable,string memory,string memory)"
                      }
                    },
                    "id": 1873,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2396:195:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1874,
                  "nodeType": "ExpressionStatement",
                  "src": "2396:195:1"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1877,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1875,
                      "name": "_initGoal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1844,
                      "src": "2662:9:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1876,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2675:1:1",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "2662:14:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 1904,
                    "nodeType": "Block",
                    "src": "2807:167:1",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1896,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 1894,
                                "name": "_initGoal",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1844,
                                "src": "2898:9:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 1895,
                                "name": "MAX_SUPPLY",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 83,
                                "src": "2910:10:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "2898:22:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "4558434553534956455f474f414c",
                              "id": 1897,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2922:16:1",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_fadbdcd16399331587c3a1c5ad9da215d2552e43ffd4a49d8c3d6b2cea6f5c38",
                                "typeString": "literal_string \"EXCESSIVE_GOAL\""
                              },
                              "value": "EXCESSIVE_GOAL"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_fadbdcd16399331587c3a1c5ad9da215d2552e43ffd4a49d8c3d6b2cea6f5c38",
                                "typeString": "literal_string \"EXCESSIVE_GOAL\""
                              }
                            ],
                            "id": 1893,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              8537,
                              8538
                            ],
                            "referencedDeclaration": 8538,
                            "src": "2890:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1898,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2890:49:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1899,
                        "nodeType": "ExpressionStatement",
                        "src": "2890:49:1"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1902,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1900,
                            "name": "initGoal",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 105,
                            "src": "2947:8:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 1901,
                            "name": "_initGoal",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1844,
                            "src": "2958:9:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2947:20:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1903,
                        "nodeType": "ExpressionStatement",
                        "src": "2947:20:1"
                      }
                    ]
                  },
                  "id": 1905,
                  "nodeType": "IfStatement",
                  "src": "2659:315:1",
                  "trueBody": {
                    "id": 1892,
                    "nodeType": "Block",
                    "src": "2682:111:1",
                    "statements": [
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1879,
                              "name": "state",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 121,
                              "src": "2707:5:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1880,
                              "name": "STATE_RUN",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 62,
                              "src": "2714:9:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1878,
                            "name": "StateChange",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 56,
                            "src": "2695:11:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (uint256,uint256)"
                            }
                          },
                          "id": 1881,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2695:29:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1882,
                        "nodeType": "EmitStatement",
                        "src": "2690:34:1"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1885,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1883,
                            "name": "state",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 121,
                            "src": "2732:5:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 1884,
                            "name": "STATE_RUN",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 62,
                            "src": "2740:9:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2732:17:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1886,
                        "nodeType": "ExpressionStatement",
                        "src": "2732:17:1"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1890,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1887,
                            "name": "__startedOn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 141,
                            "src": "2757:11:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1888,
                              "name": "block",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8524,
                              "src": "2771:5:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_block",
                                "typeString": "block"
                              }
                            },
                            "id": 1889,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "timestamp",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "2771:15:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2757:29:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1891,
                        "nodeType": "ExpressionStatement",
                        "src": "2757:29:1"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1909,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1907,
                          "name": "_investmentReserveBasisPoints",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1850,
                          "src": "3008:29:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 1908,
                          "name": "BASIS_POINTS_DEN",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 78,
                          "src": "3041:16:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3008:49:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "494e56414c49445f52455345525645",
                        "id": 1910,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3059:17:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_2b1a8834f63ef9bbb8465c7c2b5c1cab4a18dcd4b7c6fc74f23e08db5494664f",
                          "typeString": "literal_string \"INVALID_RESERVE\""
                        },
                        "value": "INVALID_RESERVE"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_2b1a8834f63ef9bbb8465c7c2b5c1cab4a18dcd4b7c6fc74f23e08db5494664f",
                          "typeString": "literal_string \"INVALID_RESERVE\""
                        }
                      ],
                      "id": 1906,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        8537,
                        8538
                      ],
                      "referencedDeclaration": 8538,
                      "src": "3000:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1911,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3000:77:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1912,
                  "nodeType": "ExpressionStatement",
                  "src": "3000:77:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1915,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1913,
                      "name": "__investmentReserveBasisPoints",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 113,
                      "src": "3083:30:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1914,
                      "name": "_investmentReserveBasisPoints",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1850,
                      "src": "3116:29:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3083:62:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1916,
                  "nodeType": "ExpressionStatement",
                  "src": "3083:62:1"
                }
              ]
            },
            "documentation": null,
            "id": 1918,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1859,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1840,
                  "name": "_initReserve",
                  "nodeType": "VariableDeclaration",
                  "scope": 1918,
                  "src": "2054:17:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1839,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2054:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1842,
                  "name": "_currencyAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 1918,
                  "src": "2077:24:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1841,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2077:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1844,
                  "name": "_initGoal",
                  "nodeType": "VariableDeclaration",
                  "scope": 1918,
                  "src": "2107:14:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1843,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2107:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1846,
                  "name": "_buySlopeNum",
                  "nodeType": "VariableDeclaration",
                  "scope": 1918,
                  "src": "2127:17:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1845,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2127:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1848,
                  "name": "_buySlopeDen",
                  "nodeType": "VariableDeclaration",
                  "scope": 1918,
                  "src": "2150:17:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1847,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2150:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1850,
                  "name": "_investmentReserveBasisPoints",
                  "nodeType": "VariableDeclaration",
                  "scope": 1918,
                  "src": "2173:34:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1849,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2173:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1852,
                  "name": "_setupFee",
                  "nodeType": "VariableDeclaration",
                  "scope": 1918,
                  "src": "2213:14:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1851,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2213:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1854,
                  "name": "_setupFeeRecipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 1918,
                  "src": "2233:34:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 1853,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2233:15:1",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1856,
                  "name": "_name",
                  "nodeType": "VariableDeclaration",
                  "scope": 1918,
                  "src": "2273:19:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1855,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2273:6:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1858,
                  "name": "_symbol",
                  "nodeType": "VariableDeclaration",
                  "scope": 1918,
                  "src": "2298:21:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1857,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2298:6:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2048:275:1"
            },
            "returnParameters": {
              "id": 1860,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2333:0:1"
            },
            "scope": 2242,
            "src": "2029:1121:1",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1988,
              "nodeType": "Block",
              "src": "3235:884:1",
              "statements": [
                {
                  "assignments": [
                    1926
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1926,
                      "name": "exitFee",
                      "nodeType": "VariableDeclaration",
                      "scope": 1988,
                      "src": "3241:12:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1925,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "3241:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1927,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3241:12:1"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1930,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1928,
                      "name": "state",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 121,
                      "src": "3264:5:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 1929,
                      "name": "STATE_RUN",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 62,
                      "src": "3273:9:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3264:18:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1985,
                  "nodeType": "IfStatement",
                  "src": "3260:834:1",
                  "trueBody": {
                    "id": 1984,
                    "nodeType": "Block",
                    "src": "3284:810:1",
                    "statements": [
                      {
                        "assignments": [
                          1932
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1932,
                            "name": "reserve",
                            "nodeType": "VariableDeclaration",
                            "scope": 1984,
                            "src": "3292:12:1",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1931,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "3292:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1935,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 1933,
                            "name": "buybackReserve",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 224,
                            "src": "3307:14:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                              "typeString": "function () view returns (uint256)"
                            }
                          },
                          "id": 1934,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3307:16:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3292:31:1"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1941,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1936,
                            "name": "reserve",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1932,
                            "src": "3331:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1939,
                                "name": "_msgValue",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1920,
                                "src": "3353:9:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 1937,
                                "name": "reserve",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1932,
                                "src": "3341:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1938,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 5925,
                              "src": "3341:11:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 1940,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3341:22:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3331:32:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1942,
                        "nodeType": "ExpressionStatement",
                        "src": "3331:32:1"
                      },
                      {
                        "assignments": [
                          1944
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1944,
                            "name": "_totalSupply",
                            "nodeType": "VariableDeclaration",
                            "scope": 1984,
                            "src": "3457:17:1",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1943,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "3457:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1947,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 1945,
                            "name": "totalSupply",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6228,
                            "src": "3477:11:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                              "typeString": "function () view returns (uint256)"
                            }
                          },
                          "id": 1946,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3477:13:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3457:33:1"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1957,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1948,
                            "name": "exitFee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1926,
                            "src": "3594:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1951,
                                "name": "_totalSupply",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1944,
                                "src": "3630:12:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1954,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 1952,
                                  "name": "burnedSupply",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 87,
                                  "src": "3652:12:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "*",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 1953,
                                  "name": "buySlopeNum",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 93,
                                  "src": "3667:11:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "3652:26:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 1955,
                                "name": "buySlopeDen",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 95,
                                "src": "3688:11:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 1949,
                                "name": "BigDiv",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4982,
                                "src": "3604:6:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_BigDiv_$4982_$",
                                  "typeString": "type(library BigDiv)"
                                }
                              },
                              "id": 1950,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "bigDiv2x1",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4688,
                              "src": "3604:16:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 1956,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3604:103:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3594:113:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1958,
                        "nodeType": "ExpressionStatement",
                        "src": "3594:113:1"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1968,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1959,
                            "name": "exitFee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1926,
                            "src": "3808:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1962,
                                "name": "_totalSupply",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1944,
                                "src": "3845:12:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1965,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 1963,
                                  "name": "buySlopeNum",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 93,
                                  "src": "3867:11:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "*",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 1964,
                                  "name": "_totalSupply",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1944,
                                  "src": "3881:12:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "3867:26:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 1966,
                                "name": "buySlopeDen",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 95,
                                "src": "3903:11:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 1960,
                                "name": "BigDiv",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4982,
                                "src": "3819:6:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_BigDiv_$4982_$",
                                  "typeString": "type(library BigDiv)"
                                }
                              },
                              "id": 1961,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "bigDiv2x1",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4688,
                              "src": "3819:16:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 1967,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3819:103:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3808:114:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1969,
                        "nodeType": "ExpressionStatement",
                        "src": "3808:114:1"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1972,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1970,
                            "name": "exitFee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1926,
                            "src": "3995:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 1971,
                            "name": "reserve",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1932,
                            "src": "4006:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3995:18:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 1982,
                          "nodeType": "Block",
                          "src": "4051:37:1",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 1980,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 1978,
                                  "name": "exitFee",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1926,
                                  "src": "4061:7:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "-=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 1979,
                                  "name": "reserve",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1932,
                                  "src": "4072:7:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "4061:18:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1981,
                              "nodeType": "ExpressionStatement",
                              "src": "4061:18:1"
                            }
                          ]
                        },
                        "id": 1983,
                        "nodeType": "IfStatement",
                        "src": "3991:97:1",
                        "trueBody": {
                          "id": 1977,
                          "nodeType": "Block",
                          "src": "4015:30:1",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 1975,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 1973,
                                  "name": "exitFee",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1926,
                                  "src": "4025:7:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 1974,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "4035:1:1",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "4025:11:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1976,
                              "nodeType": "ExpressionStatement",
                              "src": "4025:11:1"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1986,
                    "name": "exitFee",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1926,
                    "src": "4107:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1924,
                  "id": 1987,
                  "nodeType": "Return",
                  "src": "4100:14:1"
                }
              ]
            },
            "documentation": "Close",
            "id": 1989,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "estimateExitFee",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1921,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1920,
                  "name": "_msgValue",
                  "nodeType": "VariableDeclaration",
                  "scope": 1989,
                  "src": "3192:14:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1919,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "3192:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3191:16:1"
            },
            "returnParameters": {
              "id": 1924,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1923,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1989,
                  "src": "3229:4:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1922,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "3229:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3228:6:1"
            },
            "scope": 2242,
            "src": "3167:952:1",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2026,
              "nodeType": "Block",
              "src": "4681:218:1",
              "statements": [
                {
                  "assignments": [
                    1993
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1993,
                      "name": "exitFee",
                      "nodeType": "VariableDeclaration",
                      "scope": 2026,
                      "src": "4687:12:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1992,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "4687:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1995,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 1994,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "4702:1:1",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4687:16:1"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1998,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1996,
                      "name": "state",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 121,
                      "src": "4714:5:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 1997,
                      "name": "STATE_RUN",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 62,
                      "src": "4723:9:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4714:18:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2016,
                  "nodeType": "IfStatement",
                  "src": "4710:139:1",
                  "trueBody": {
                    "id": 2015,
                    "nodeType": "Block",
                    "src": "4734:115:1",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2004,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1999,
                            "name": "exitFee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1993,
                            "src": "4742:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 2001,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8534,
                                  "src": "4768:3:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 2002,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "value",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "4768:9:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 2000,
                              "name": "estimateExitFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1989,
                              "src": "4752:15:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256) view returns (uint256)"
                              }
                            },
                            "id": 2003,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4752:26:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4742:36:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2005,
                        "nodeType": "ExpressionStatement",
                        "src": "4742:36:1"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2007,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8534,
                                "src": "4805:3:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 2008,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "4805:10:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 2009,
                              "name": "exitFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1993,
                              "src": "4817:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2010,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8534,
                                "src": "4826:3:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 2011,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "value",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "4826:9:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "74727565",
                              "id": 2012,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4837:4:1",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "true"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 2006,
                            "name": "_collectInvestment",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 408,
                            "src": "4786:18:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_payable_$_t_uint256_$_t_uint256_$_t_bool_$returns$__$",
                              "typeString": "function (address payable,uint256,uint256,bool)"
                            }
                          },
                          "id": 2013,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4786:56:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2014,
                        "nodeType": "ExpressionStatement",
                        "src": "4786:56:1"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2017,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8575,
                        "src": "4855:5:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_DecentralizedAutonomousTrust_$2242",
                          "typeString": "contract super DecentralizedAutonomousTrust"
                        }
                      },
                      "id": 2019,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_close",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1694,
                      "src": "4855:12:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 2020,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4855:14:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2021,
                  "nodeType": "ExpressionStatement",
                  "src": "4855:14:1"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2023,
                        "name": "exitFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1993,
                        "src": "4886:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2022,
                      "name": "Close",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1790,
                      "src": "4880:5:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 2024,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4880:14:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2025,
                  "nodeType": "EmitStatement",
                  "src": "4875:19:1"
                }
              ]
            },
            "documentation": "@notice Called by the beneficiary account to STATE_CLOSE or STATE_CANCEL the c-org,\n preventing any more tokens from being minted.\n @dev Requires an `exitFee` to be paid.  If the currency is ETH, include a little more than\n what appears to be required and any remainder will be returned to your account.  This is\n because another user may have a transaction mined which changes the exitFee required.\n For other `currency` types, the beneficiary account will be billed the exact amount required.",
            "id": 2027,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "close",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1990,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4663:2:1"
            },
            "returnParameters": {
              "id": 1991,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4681:0:1"
            },
            "scope": 2242,
            "src": "4649:250:1",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2079,
              "nodeType": "Block",
              "src": "5067:667:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2033,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8534,
                          "src": "5092:3:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 2034,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "5092:10:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2035,
                        "name": "_currencyValue",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2029,
                        "src": "5104:14:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2036,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8534,
                          "src": "5120:3:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 2037,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "value",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "5120:9:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "66616c7365",
                        "id": 2038,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5131:5:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "false"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 2032,
                      "name": "_collectInvestment",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 408,
                      "src": "5073:18:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_payable_$_t_uint256_$_t_uint256_$_t_bool_$returns$__$",
                        "typeString": "function (address payable,uint256,uint256,bool)"
                      }
                    },
                    "id": 2039,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5073:64:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2040,
                  "nodeType": "ExpressionStatement",
                  "src": "5073:64:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2044,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2042,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 121,
                          "src": "5151:5:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2043,
                          "name": "STATE_RUN",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 62,
                          "src": "5160:9:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "5151:18:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "494e56414c49445f5354415445",
                        "id": 2045,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5171:15:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_1845915154e87be01f9e40567b467167f5c099525ea93cbcf8299418a19a1cd6",
                          "typeString": "literal_string \"INVALID_STATE\""
                        },
                        "value": "INVALID_STATE"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_1845915154e87be01f9e40567b467167f5c099525ea93cbcf8299418a19a1cd6",
                          "typeString": "literal_string \"INVALID_STATE\""
                        }
                      ],
                      "id": 2041,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        8537,
                        8538
                      ],
                      "referencedDeclaration": 8538,
                      "src": "5143:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2046,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5143:44:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2047,
                  "nodeType": "ExpressionStatement",
                  "src": "5143:44:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2051,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2049,
                          "name": "_currencyValue",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2029,
                          "src": "5201:14:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 2050,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5218:1:1",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "5201:18:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4d495353494e475f43555252454e4359",
                        "id": 2052,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5221:18:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8fbb109edafcb6d1dc735992e2d9a8fc6bc9c101e2bf4fe7ff1d71e161fa0291",
                          "typeString": "literal_string \"MISSING_CURRENCY\""
                        },
                        "value": "MISSING_CURRENCY"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8fbb109edafcb6d1dc735992e2d9a8fc6bc9c101e2bf4fe7ff1d71e161fa0291",
                          "typeString": "literal_string \"MISSING_CURRENCY\""
                        }
                      ],
                      "id": 2048,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        8537,
                        8538
                      ],
                      "referencedDeclaration": 8538,
                      "src": "5193:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2053,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5193:47:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2054,
                  "nodeType": "ExpressionStatement",
                  "src": "5193:47:1"
                },
                {
                  "assignments": [
                    2056
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2056,
                      "name": "reserve",
                      "nodeType": "VariableDeclaration",
                      "scope": 2079,
                      "src": "5421:12:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2055,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "5421:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2061,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2059,
                        "name": "__revenueCommitmentBasisPoints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 119,
                        "src": "5455:30:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2057,
                        "name": "_currencyValue",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2029,
                        "src": "5436:14:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 2058,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mul",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5986,
                      "src": "5436:18:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 2060,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5436:50:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5421:65:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2064,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2062,
                      "name": "reserve",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2056,
                      "src": "5492:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "/=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2063,
                      "name": "BASIS_POINTS_DEN",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 78,
                      "src": "5503:16:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5492:27:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2065,
                  "nodeType": "ExpressionStatement",
                  "src": "5492:27:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2067,
                        "name": "beneficiary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 91,
                        "src": "5648:11:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2070,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2068,
                          "name": "_currencyValue",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2029,
                          "src": "5661:14:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "-",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2069,
                          "name": "reserve",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2056,
                          "src": "5678:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "5661:24:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2066,
                      "name": "_transferCurrency",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 445,
                      "src": "5630:17:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_payable_$_t_uint256_$returns$__$",
                        "typeString": "function (address payable,uint256)"
                      }
                    },
                    "id": 2071,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5630:56:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2072,
                  "nodeType": "ExpressionStatement",
                  "src": "5630:56:1"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2074,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8534,
                          "src": "5702:3:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 2075,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "5702:10:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2076,
                        "name": "_currencyValue",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2029,
                        "src": "5714:14:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2073,
                      "name": "Pay",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1796,
                      "src": "5698:3:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 2077,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5698:31:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2078,
                  "nodeType": "EmitStatement",
                  "src": "5693:36:1"
                }
              ]
            },
            "documentation": "Pay\n @dev Pay the organization on-chain.\n @param _currencyValue How much currency which was paid.",
            "id": 2080,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "pay",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2030,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2029,
                  "name": "_currencyValue",
                  "nodeType": "VariableDeclaration",
                  "scope": 2080,
                  "src": "5031:19:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2028,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "5031:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5030:21:1"
            },
            "returnParameters": {
              "id": 2031,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5067:0:1"
            },
            "scope": 2242,
            "src": "5018:716:1",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2094,
              "nodeType": "Block",
              "src": "5910:76:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 2090,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2085,
                              "name": "currency",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 99,
                              "src": "5932:8:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$6741",
                                "typeString": "contract IERC20"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IERC20_$6741",
                                "typeString": "contract IERC20"
                              }
                            ],
                            "id": 2084,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "5924:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 2086,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5924:17:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 2088,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5953:1:1",
                              "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": 2087,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "5945:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 2089,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5945:10:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "5924:31:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4f4e4c595f464f525f43555252454e43595f455448",
                        "id": 2091,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5957:23:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_010d51eecc98323ff18a307f31b5d36137a4e44ee7e2ab9ae944fb09e1c069e3",
                          "typeString": "literal_string \"ONLY_FOR_CURRENCY_ETH\""
                        },
                        "value": "ONLY_FOR_CURRENCY_ETH"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_010d51eecc98323ff18a307f31b5d36137a4e44ee7e2ab9ae944fb09e1c069e3",
                          "typeString": "literal_string \"ONLY_FOR_CURRENCY_ETH\""
                        }
                      ],
                      "id": 2083,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        8537,
                        8538
                      ],
                      "referencedDeclaration": 8538,
                      "src": "5916:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2092,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5916:65:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2093,
                  "nodeType": "ExpressionStatement",
                  "src": "5916:65:1"
                }
              ]
            },
            "documentation": "@notice Pay the organization on-chain without minting any tokens.\n @dev This allows you to add funds directly to the buybackReserve.",
            "id": 2095,
            "implemented": true,
            "kind": "fallback",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2081,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5890:2:1"
            },
            "returnParameters": {
              "id": 2082,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5910:0:1"
            },
            "scope": 2242,
            "src": "5882:104:1",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2153,
              "nodeType": "Block",
              "src": "6259:693:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2115,
                        "name": "_whitelistAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2097,
                        "src": "6286:17:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2116,
                        "name": "_beneficiary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2099,
                        "src": "6311:12:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2117,
                        "name": "_control",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2101,
                        "src": "6331:8:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2118,
                        "name": "_feeCollector",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2103,
                        "src": "6347:13:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2119,
                        "name": "_feeBasisPoints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2105,
                        "src": "6368:15:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2120,
                        "name": "_minInvestment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2109,
                        "src": "6391:14:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2121,
                        "name": "_minDuration",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2111,
                        "src": "6413:12:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2114,
                      "name": "_updateConfig",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 816,
                      "src": "6265:13:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_payable_$_t_address_$_t_address_payable_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address payable,address,address payable,uint256,uint256,uint256)"
                      }
                    },
                    "id": 2122,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6265:166:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2123,
                  "nodeType": "ExpressionStatement",
                  "src": "6265:166:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2127,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2125,
                          "name": "_revenueCommitmentBasisPoints",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2107,
                          "src": "6453:29:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2126,
                          "name": "BASIS_POINTS_DEN",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 78,
                          "src": "6486:16:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "6453:49:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "494e56414c49445f434f4d4d49544d454e54",
                        "id": 2128,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6510:20:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5caa510e2372cee15287cb658bfa22ece0974032b28ffa99859002b29fdabfe9",
                          "typeString": "literal_string \"INVALID_COMMITMENT\""
                        },
                        "value": "INVALID_COMMITMENT"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_5caa510e2372cee15287cb658bfa22ece0974032b28ffa99859002b29fdabfe9",
                          "typeString": "literal_string \"INVALID_COMMITMENT\""
                        }
                      ],
                      "id": 2124,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        8537,
                        8538
                      ],
                      "referencedDeclaration": 8538,
                      "src": "6438:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2129,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6438:98:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2130,
                  "nodeType": "ExpressionStatement",
                  "src": "6438:98:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2134,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2132,
                          "name": "_revenueCommitmentBasisPoints",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2107,
                          "src": "6557:29:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2133,
                          "name": "__revenueCommitmentBasisPoints",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 119,
                          "src": "6590:30:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "6557:63:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "434f4d4d49544d454e545f4d41595f4e4f545f42455f52454455434544",
                        "id": 2135,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6628:31:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_36143dfd8314511477b2866dc6e750ef7672258a9c0ca86a225bbcf136ae3ee3",
                          "typeString": "literal_string \"COMMITMENT_MAY_NOT_BE_REDUCED\""
                        },
                        "value": "COMMITMENT_MAY_NOT_BE_REDUCED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_36143dfd8314511477b2866dc6e750ef7672258a9c0ca86a225bbcf136ae3ee3",
                          "typeString": "literal_string \"COMMITMENT_MAY_NOT_BE_REDUCED\""
                        }
                      ],
                      "id": 2131,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        8537,
                        8538
                      ],
                      "referencedDeclaration": 8538,
                      "src": "6542:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2136,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6542:123:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2137,
                  "nodeType": "ExpressionStatement",
                  "src": "6542:123:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2140,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2138,
                      "name": "__revenueCommitmentBasisPoints",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 119,
                      "src": "6671:30:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2139,
                      "name": "_revenueCommitmentBasisPoints",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2107,
                      "src": "6704:29:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6671:62:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2141,
                  "nodeType": "ExpressionStatement",
                  "src": "6671:62:1"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2143,
                        "name": "_whitelistAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2097,
                        "src": "6765:17:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2144,
                        "name": "_beneficiary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2099,
                        "src": "6790:12:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2145,
                        "name": "_control",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2101,
                        "src": "6810:8:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2146,
                        "name": "_feeCollector",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2103,
                        "src": "6826:13:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2147,
                        "name": "_revenueCommitmentBasisPoints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2107,
                        "src": "6847:29:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2148,
                        "name": "_feeBasisPoints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2105,
                        "src": "6884:15:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2149,
                        "name": "_minInvestment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2109,
                        "src": "6907:14:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2150,
                        "name": "_minDuration",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2111,
                        "src": "6929:12:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2142,
                      "name": "UpdateConfig",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1814,
                      "src": "6745:12:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,address,uint256,uint256,uint256,uint256)"
                      }
                    },
                    "id": 2151,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6745:202:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2152,
                  "nodeType": "EmitStatement",
                  "src": "6740:207:1"
                }
              ]
            },
            "documentation": null,
            "id": 2154,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "updateConfig",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2112,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2097,
                  "name": "_whitelistAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 2154,
                  "src": "6017:25:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2096,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6017:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2099,
                  "name": "_beneficiary",
                  "nodeType": "VariableDeclaration",
                  "scope": 2154,
                  "src": "6048:28:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 2098,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6048:15:1",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2101,
                  "name": "_control",
                  "nodeType": "VariableDeclaration",
                  "scope": 2154,
                  "src": "6082:16:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2100,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6082:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2103,
                  "name": "_feeCollector",
                  "nodeType": "VariableDeclaration",
                  "scope": 2154,
                  "src": "6104:29:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 2102,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6104:15:1",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2105,
                  "name": "_feeBasisPoints",
                  "nodeType": "VariableDeclaration",
                  "scope": 2154,
                  "src": "6139:20:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2104,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "6139:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2107,
                  "name": "_revenueCommitmentBasisPoints",
                  "nodeType": "VariableDeclaration",
                  "scope": 2154,
                  "src": "6165:34:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2106,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "6165:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2109,
                  "name": "_minInvestment",
                  "nodeType": "VariableDeclaration",
                  "scope": 2154,
                  "src": "6205:19:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2108,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "6205:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2111,
                  "name": "_minDuration",
                  "nodeType": "VariableDeclaration",
                  "scope": 2154,
                  "src": "6230:17:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2110,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "6230:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6011:240:1"
            },
            "returnParameters": {
              "id": 2113,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6259:0:1"
            },
            "scope": 2242,
            "src": "5990:962:1",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2193,
              "nodeType": "Block",
              "src": "7263:275:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 2163,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2160,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8534,
                            "src": "7277:3:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 2161,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "7277:10:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2162,
                          "name": "control",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 97,
                          "src": "7291:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "7277:21:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "434f4e54524f4c5f4f4e4c59",
                        "id": 2164,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7300:14:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a5f743ceb9a4650c03941305116700927f7465bb2425a74fb5197fdef689c993",
                          "typeString": "literal_string \"CONTROL_ONLY\""
                        },
                        "value": "CONTROL_ONLY"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a5f743ceb9a4650c03941305116700927f7465bb2425a74fb5197fdef689c993",
                          "typeString": "literal_string \"CONTROL_ONLY\""
                        }
                      ],
                      "id": 2159,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        8537,
                        8538
                      ],
                      "referencedDeclaration": 8538,
                      "src": "7269:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2165,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7269:46:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2166,
                  "nodeType": "ExpressionStatement",
                  "src": "7269:46:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2170,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2168,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 121,
                          "src": "7329:5:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2169,
                          "name": "STATE_RUN",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 62,
                          "src": "7338:9:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "7329:18:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4f4e4c595f43414c4c5f494e5f52554e",
                        "id": 2171,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7349:18:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e0aefbfa8e3ac44bb8f6206c1f8f00bd6cb1293ffdc99906f35a4702bed81d4e",
                          "typeString": "literal_string \"ONLY_CALL_IN_RUN\""
                        },
                        "value": "ONLY_CALL_IN_RUN"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_e0aefbfa8e3ac44bb8f6206c1f8f00bd6cb1293ffdc99906f35a4702bed81d4e",
                          "typeString": "literal_string \"ONLY_CALL_IN_RUN\""
                        }
                      ],
                      "id": 2167,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        8537,
                        8538
                      ],
                      "referencedDeclaration": 8538,
                      "src": "7321:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2172,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7321:47:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2173,
                  "nodeType": "ExpressionStatement",
                  "src": "7321:47:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2177,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2175,
                          "name": "__startedOn",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 141,
                          "src": "7382:11:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 2176,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7397:1:1",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "7382:16:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4f4e4c595f43414c4c5f49465f4e4f545f4155544f5f534554",
                        "id": 2178,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7400:27:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_30e5eb088784bd0f384b97a6b1afa28986e6116115e699c9416453e8f16a3d98",
                          "typeString": "literal_string \"ONLY_CALL_IF_NOT_AUTO_SET\""
                        },
                        "value": "ONLY_CALL_IF_NOT_AUTO_SET"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_30e5eb088784bd0f384b97a6b1afa28986e6116115e699c9416453e8f16a3d98",
                          "typeString": "literal_string \"ONLY_CALL_IF_NOT_AUTO_SET\""
                        }
                      ],
                      "id": 2174,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        8537,
                        8538
                      ],
                      "referencedDeclaration": 8538,
                      "src": "7374:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2179,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7374:54:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2180,
                  "nodeType": "ExpressionStatement",
                  "src": "7374:54:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2185,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2182,
                          "name": "_runStartedOn",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2156,
                          "src": "7442:13:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2183,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8524,
                            "src": "7459:5:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 2184,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "timestamp",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "7459:15:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "7442:32:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "444154455f4d5553545f42455f494e5f50415354",
                        "id": 2186,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7476:22:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_70f76ca974b84153c422cf4dc74bcd0857711b2434ff058c0a9b2e33a5bd01ae",
                          "typeString": "literal_string \"DATE_MUST_BE_IN_PAST\""
                        },
                        "value": "DATE_MUST_BE_IN_PAST"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_70f76ca974b84153c422cf4dc74bcd0857711b2434ff058c0a9b2e33a5bd01ae",
                          "typeString": "literal_string \"DATE_MUST_BE_IN_PAST\""
                        }
                      ],
                      "id": 2181,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        8537,
                        8538
                      ],
                      "referencedDeclaration": 8538,
                      "src": "7434:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2187,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7434:65:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2188,
                  "nodeType": "ExpressionStatement",
                  "src": "7434:65:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2191,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2189,
                      "name": "__startedOn",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 141,
                      "src": "7506:11:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2190,
                      "name": "_runStartedOn",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2156,
                      "src": "7520:13:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7506:27:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2192,
                  "nodeType": "ExpressionStatement",
                  "src": "7506:27:1"
                }
              ]
            },
            "documentation": "@notice A temporary function to set `runStartedOn`, to be used by contracts which were\n already deployed before this feature was introduced.\n @dev This function will be removed once known users have called the function.",
            "id": 2194,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "initializeRunStartedOn",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2157,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2156,
                  "name": "_runStartedOn",
                  "nodeType": "VariableDeclaration",
                  "scope": 2194,
                  "src": "7229:18:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2155,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "7229:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7223:28:1"
            },
            "returnParameters": {
              "id": 2158,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7263:0:1"
            },
            "scope": 2242,
            "src": "7192:346:1",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2240,
              "nodeType": "Block",
              "src": "7703:674:1",
              "statements": [
                {
                  "assignments": [
                    2200
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2200,
                      "name": "reserve",
                      "nodeType": "VariableDeclaration",
                      "scope": 2240,
                      "src": "7995:12:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2199,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "7995:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2205,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2203,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2196,
                        "src": "8045:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2201,
                        "name": "__investmentReserveBasisPoints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 113,
                        "src": "8010:30:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 2202,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mul",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5986,
                      "src": "8010:34:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 2204,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8010:42:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7995:57:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2208,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2206,
                      "name": "reserve",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2200,
                      "src": "8058:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "/=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2207,
                      "name": "BASIS_POINTS_DEN",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 78,
                      "src": "8069:16:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8058:27:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2209,
                  "nodeType": "ExpressionStatement",
                  "src": "8058:27:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2215,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2210,
                      "name": "reserve",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2200,
                      "src": "8091:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 2213,
                          "name": "reserve",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2200,
                          "src": "8112:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 2211,
                          "name": "_value",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2196,
                          "src": "8101:6:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2212,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5925,
                        "src": "8101:10:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 2214,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8101:19:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8091:29:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2216,
                  "nodeType": "ExpressionStatement",
                  "src": "8091:29:1"
                },
                {
                  "assignments": [
                    2218
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2218,
                      "name": "fee",
                      "nodeType": "VariableDeclaration",
                      "scope": 2240,
                      "src": "8126:8:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2217,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "8126:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2223,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2221,
                        "name": "feeBasisPoints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 103,
                        "src": "8149:14:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2219,
                        "name": "reserve",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2200,
                        "src": "8137:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 2220,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mul",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5986,
                      "src": "8137:11:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 2222,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8137:27:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8126:38:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2226,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2224,
                      "name": "fee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2218,
                      "src": "8170:3:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "/=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2225,
                      "name": "BASIS_POINTS_DEN",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 78,
                      "src": "8177:16:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8170:23:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2227,
                  "nodeType": "ExpressionStatement",
                  "src": "8170:23:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2229,
                        "name": "beneficiary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 91,
                        "src": "8303:11:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2232,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2230,
                          "name": "reserve",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2200,
                          "src": "8316:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "-",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2231,
                          "name": "fee",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2218,
                          "src": "8326:3:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "8316:13:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2228,
                      "name": "_transferCurrency",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 445,
                      "src": "8285:17:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_payable_$_t_uint256_$returns$__$",
                        "typeString": "function (address payable,uint256)"
                      }
                    },
                    "id": 2233,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8285:45:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2234,
                  "nodeType": "ExpressionStatement",
                  "src": "8285:45:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2236,
                        "name": "feeCollector",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 101,
                        "src": "8354:12:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2237,
                        "name": "fee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2218,
                        "src": "8368:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2235,
                      "name": "_transferCurrency",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 445,
                      "src": "8336:17:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_payable_$_t_uint256_$returns$__$",
                        "typeString": "function (address payable,uint256)"
                      }
                    },
                    "id": 2238,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8336:36:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2239,
                  "nodeType": "ExpressionStatement",
                  "src": "8336:36:1"
                }
              ]
            },
            "documentation": "@dev Distributes _value currency between the buybackReserve, beneficiary, and feeCollector.",
            "id": 2241,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_distributeInvestment",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2197,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2196,
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 2241,
                  "src": "7676:11:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2195,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "7676:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7670:21:1"
            },
            "returnParameters": {
              "id": 2198,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7703:0:1"
            },
            "scope": 2242,
            "src": "7640:737:1",
            "stateMutability": "nonpayable",
            "superFunction": 863,
            "visibility": "internal"
          }
        ],
        "scope": 2243,
        "src": "610:7769:1"
      }
    ],
    "src": "0:8380:1"
  },
  "legacyAST": {
    "absolutePath": "/home/circleci/repo/contracts/DecentralizedAutonomousTrust.sol",
    "exportedSymbols": {
      "DecentralizedAutonomousTrust": [
        2242
      ]
    },
    "id": 2243,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1783,
        "literals": [
          "solidity",
          "0.5",
          ".17"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:1"
      },
      {
        "absolutePath": "/home/circleci/repo/contracts/ContinuousOffering.sol",
        "file": "./ContinuousOffering.sol",
        "id": 1784,
        "nodeType": "ImportDirective",
        "scope": 2243,
        "sourceUnit": 1782,
        "src": "25:34:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 1785,
              "name": "ContinuousOffering",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1781,
              "src": "651:18:1",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ContinuousOffering_$1781",
                "typeString": "contract ContinuousOffering"
              }
            },
            "id": 1786,
            "nodeType": "InheritanceSpecifier",
            "src": "651:18:1"
          }
        ],
        "contractDependencies": [
          1781,
          5407,
          6605,
          6672,
          6741,
          7851
        ],
        "contractKind": "contract",
        "documentation": "@title Decentralized Autonomous Trust\nThis contract is the reference implementation provided by Fairmint for a\nDecentralized Autonomous Trust as described in the continuous\norganization whitepaper (https://github.com/c-org/whitepaper) and\nspecified here: https://github.com/fairmint/c-org/wiki. Use at your own\nrisk. If you have question or if you're looking for a ready-to-use\nsolution using this contract, you might be interested in Fairmint's\noffering. Do not hesitate to get in touch with us: https://fairmint.co",
        "fullyImplemented": true,
        "id": 2242,
        "linearizedBaseContracts": [
          2242,
          1781,
          6672,
          6605,
          6741,
          5407,
          7851
        ],
        "name": "DecentralizedAutonomousTrust",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "anonymous": false,
            "documentation": null,
            "id": 1790,
            "name": "Close",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1789,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1788,
                  "indexed": false,
                  "name": "_exitFee",
                  "nodeType": "VariableDeclaration",
                  "scope": 1790,
                  "src": "686:13:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1787,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "686:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "685:15:1"
            },
            "src": "674:27:1"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 1796,
            "name": "Pay",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1795,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1792,
                  "indexed": true,
                  "name": "_from",
                  "nodeType": "VariableDeclaration",
                  "scope": 1796,
                  "src": "714:21:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1791,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "714:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1794,
                  "indexed": false,
                  "name": "_currencyValue",
                  "nodeType": "VariableDeclaration",
                  "scope": 1796,
                  "src": "737:19:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1793,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "737:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "713:44:1"
            },
            "src": "704:54:1"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 1814,
            "name": "UpdateConfig",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1813,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1798,
                  "indexed": false,
                  "name": "_whitelistAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 1814,
                  "src": "785:25:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1797,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "785:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1800,
                  "indexed": true,
                  "name": "_beneficiary",
                  "nodeType": "VariableDeclaration",
                  "scope": 1814,
                  "src": "816:28:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1799,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "816:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1802,
                  "indexed": true,
                  "name": "_control",
                  "nodeType": "VariableDeclaration",
                  "scope": 1814,
                  "src": "850:24:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1801,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "850:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1804,
                  "indexed": true,
                  "name": "_feeCollector",
                  "nodeType": "VariableDeclaration",
                  "scope": 1814,
                  "src": "880:29:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1803,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "880:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1806,
                  "indexed": false,
                  "name": "_revenueCommitmentBasisPoints",
                  "nodeType": "VariableDeclaration",
                  "scope": 1814,
                  "src": "915:34:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1805,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "915:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1808,
                  "indexed": false,
                  "name": "_feeBasisPoints",
                  "nodeType": "VariableDeclaration",
                  "scope": 1814,
                  "src": "955:20:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1807,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "955:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1810,
                  "indexed": false,
                  "name": "_minInvestment",
                  "nodeType": "VariableDeclaration",
                  "scope": 1814,
                  "src": "981:19:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1809,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "981:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1812,
                  "indexed": false,
                  "name": "_minDuration",
                  "nodeType": "VariableDeclaration",
                  "scope": 1814,
                  "src": "1006:17:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1811,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1006:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "779:248:1"
            },
            "src": "761:267:1"
          },
          {
            "body": {
              "id": 1821,
              "nodeType": "Block",
              "src": "1379:48:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1819,
                    "name": "__revenueCommitmentBasisPoints",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 119,
                    "src": "1392:30:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1818,
                  "id": 1820,
                  "nodeType": "Return",
                  "src": "1385:37:1"
                }
              ]
            },
            "documentation": "@notice The revenue commitment of the organization. Defines the percentage of the value paid through the contract\n that is automatically funneled and held into the buyback_reserve expressed in basis points.\n Internal since this is n/a to all derivative contracts.",
            "id": 1822,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "revenueCommitmentBasisPoints",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1815,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1349:2:1"
            },
            "returnParameters": {
              "id": 1818,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1817,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1822,
                  "src": "1373:4:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1816,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1373:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1372:6:1"
            },
            "scope": 2242,
            "src": "1312:115:1",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1829,
              "nodeType": "Block",
              "src": "1754:48:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1827,
                    "name": "__investmentReserveBasisPoints",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 113,
                    "src": "1767:30:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1826,
                  "id": 1828,
                  "nodeType": "Return",
                  "src": "1760:37:1"
                }
              ]
            },
            "documentation": "@notice The investment reserve of the c-org. Defines the percentage of the value invested that is\n automatically funneled and held into the buyback_reserve expressed in basis points.\n Internal since this is n/a to all derivative contracts.",
            "id": 1830,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "investmentReserveBasisPoints",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1823,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1724:2:1"
            },
            "returnParameters": {
              "id": 1826,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1825,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1830,
                  "src": "1748:4:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1824,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1748:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1747:6:1"
            },
            "scope": 2242,
            "src": "1687:115:1",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1837,
              "nodeType": "Block",
              "src": "1996:29:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1835,
                    "name": "__startedOn",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 141,
                    "src": "2009:11:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1834,
                  "id": 1836,
                  "nodeType": "Return",
                  "src": "2002:18:1"
                }
              ]
            },
            "documentation": "@notice Initialized at `0` and updated when the contract switches from `init` state to `run` state\n with the current timestamp.",
            "id": 1838,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "runStartedOn",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1831,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1966:2:1"
            },
            "returnParameters": {
              "id": 1834,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1833,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1838,
                  "src": "1990:4:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1832,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1990:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1989:6:1"
            },
            "scope": 2242,
            "src": "1945:80:1",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1917,
              "nodeType": "Block",
              "src": "2333:817:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1864,
                        "name": "_initReserve",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1840,
                        "src": "2421:12:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1865,
                        "name": "_currencyAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1842,
                        "src": "2441:16:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1866,
                        "name": "_initGoal",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1844,
                        "src": "2465:9:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1867,
                        "name": "_buySlopeNum",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1846,
                        "src": "2482:12:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1868,
                        "name": "_buySlopeDen",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1848,
                        "src": "2502:12:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1869,
                        "name": "_setupFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1852,
                        "src": "2522:9:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1870,
                        "name": "_setupFeeRecipient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1854,
                        "src": "2539:18:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1871,
                        "name": "_name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1856,
                        "src": "2565:5:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1872,
                        "name": "_symbol",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1858,
                        "src": "2578:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1861,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8575,
                        "src": "2396:5:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_DecentralizedAutonomousTrust_$2242",
                          "typeString": "contract super DecentralizedAutonomousTrust"
                        }
                      },
                      "id": 1863,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_initialize",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 637,
                      "src": "2396:17:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_payable_$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (uint256,address,uint256,uint256,uint256,uint256,address payable,string memory,string memory)"
                      }
                    },
                    "id": 1873,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2396:195:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1874,
                  "nodeType": "ExpressionStatement",
                  "src": "2396:195:1"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1877,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1875,
                      "name": "_initGoal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1844,
                      "src": "2662:9:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1876,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2675:1:1",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "2662:14:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 1904,
                    "nodeType": "Block",
                    "src": "2807:167:1",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1896,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 1894,
                                "name": "_initGoal",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1844,
                                "src": "2898:9:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 1895,
                                "name": "MAX_SUPPLY",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 83,
                                "src": "2910:10:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "2898:22:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "4558434553534956455f474f414c",
                              "id": 1897,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2922:16:1",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_fadbdcd16399331587c3a1c5ad9da215d2552e43ffd4a49d8c3d6b2cea6f5c38",
                                "typeString": "literal_string \"EXCESSIVE_GOAL\""
                              },
                              "value": "EXCESSIVE_GOAL"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_fadbdcd16399331587c3a1c5ad9da215d2552e43ffd4a49d8c3d6b2cea6f5c38",
                                "typeString": "literal_string \"EXCESSIVE_GOAL\""
                              }
                            ],
                            "id": 1893,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              8537,
                              8538
                            ],
                            "referencedDeclaration": 8538,
                            "src": "2890:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1898,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2890:49:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1899,
                        "nodeType": "ExpressionStatement",
                        "src": "2890:49:1"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1902,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1900,
                            "name": "initGoal",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 105,
                            "src": "2947:8:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 1901,
                            "name": "_initGoal",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1844,
                            "src": "2958:9:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2947:20:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1903,
                        "nodeType": "ExpressionStatement",
                        "src": "2947:20:1"
                      }
                    ]
                  },
                  "id": 1905,
                  "nodeType": "IfStatement",
                  "src": "2659:315:1",
                  "trueBody": {
                    "id": 1892,
                    "nodeType": "Block",
                    "src": "2682:111:1",
                    "statements": [
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1879,
                              "name": "state",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 121,
                              "src": "2707:5:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1880,
                              "name": "STATE_RUN",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 62,
                              "src": "2714:9:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1878,
                            "name": "StateChange",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 56,
                            "src": "2695:11:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (uint256,uint256)"
                            }
                          },
                          "id": 1881,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2695:29:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1882,
                        "nodeType": "EmitStatement",
                        "src": "2690:34:1"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1885,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1883,
                            "name": "state",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 121,
                            "src": "2732:5:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 1884,
                            "name": "STATE_RUN",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 62,
                            "src": "2740:9:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2732:17:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1886,
                        "nodeType": "ExpressionStatement",
                        "src": "2732:17:1"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1890,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1887,
                            "name": "__startedOn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 141,
                            "src": "2757:11:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1888,
                              "name": "block",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8524,
                              "src": "2771:5:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_block",
                                "typeString": "block"
                              }
                            },
                            "id": 1889,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "timestamp",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "2771:15:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2757:29:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1891,
                        "nodeType": "ExpressionStatement",
                        "src": "2757:29:1"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1909,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1907,
                          "name": "_investmentReserveBasisPoints",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1850,
                          "src": "3008:29:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 1908,
                          "name": "BASIS_POINTS_DEN",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 78,
                          "src": "3041:16:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3008:49:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "494e56414c49445f52455345525645",
                        "id": 1910,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3059:17:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_2b1a8834f63ef9bbb8465c7c2b5c1cab4a18dcd4b7c6fc74f23e08db5494664f",
                          "typeString": "literal_string \"INVALID_RESERVE\""
                        },
                        "value": "INVALID_RESERVE"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_2b1a8834f63ef9bbb8465c7c2b5c1cab4a18dcd4b7c6fc74f23e08db5494664f",
                          "typeString": "literal_string \"INVALID_RESERVE\""
                        }
                      ],
                      "id": 1906,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        8537,
                        8538
                      ],
                      "referencedDeclaration": 8538,
                      "src": "3000:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1911,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3000:77:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1912,
                  "nodeType": "ExpressionStatement",
                  "src": "3000:77:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1915,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1913,
                      "name": "__investmentReserveBasisPoints",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 113,
                      "src": "3083:30:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1914,
                      "name": "_investmentReserveBasisPoints",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1850,
                      "src": "3116:29:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3083:62:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1916,
                  "nodeType": "ExpressionStatement",
                  "src": "3083:62:1"
                }
              ]
            },
            "documentation": null,
            "id": 1918,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1859,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1840,
                  "name": "_initReserve",
                  "nodeType": "VariableDeclaration",
                  "scope": 1918,
                  "src": "2054:17:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1839,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2054:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1842,
                  "name": "_currencyAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 1918,
                  "src": "2077:24:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1841,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2077:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1844,
                  "name": "_initGoal",
                  "nodeType": "VariableDeclaration",
                  "scope": 1918,
                  "src": "2107:14:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1843,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2107:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1846,
                  "name": "_buySlopeNum",
                  "nodeType": "VariableDeclaration",
                  "scope": 1918,
                  "src": "2127:17:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1845,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2127:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1848,
                  "name": "_buySlopeDen",
                  "nodeType": "VariableDeclaration",
                  "scope": 1918,
                  "src": "2150:17:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1847,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2150:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1850,
                  "name": "_investmentReserveBasisPoints",
                  "nodeType": "VariableDeclaration",
                  "scope": 1918,
                  "src": "2173:34:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1849,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2173:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1852,
                  "name": "_setupFee",
                  "nodeType": "VariableDeclaration",
                  "scope": 1918,
                  "src": "2213:14:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1851,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2213:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1854,
                  "name": "_setupFeeRecipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 1918,
                  "src": "2233:34:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 1853,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2233:15:1",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1856,
                  "name": "_name",
                  "nodeType": "VariableDeclaration",
                  "scope": 1918,
                  "src": "2273:19:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1855,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2273:6:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1858,
                  "name": "_symbol",
                  "nodeType": "VariableDeclaration",
                  "scope": 1918,
                  "src": "2298:21:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1857,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2298:6:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2048:275:1"
            },
            "returnParameters": {
              "id": 1860,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2333:0:1"
            },
            "scope": 2242,
            "src": "2029:1121:1",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1988,
              "nodeType": "Block",
              "src": "3235:884:1",
              "statements": [
                {
                  "assignments": [
                    1926
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1926,
                      "name": "exitFee",
                      "nodeType": "VariableDeclaration",
                      "scope": 1988,
                      "src": "3241:12:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1925,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "3241:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1927,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3241:12:1"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1930,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1928,
                      "name": "state",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 121,
                      "src": "3264:5:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 1929,
                      "name": "STATE_RUN",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 62,
                      "src": "3273:9:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3264:18:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1985,
                  "nodeType": "IfStatement",
                  "src": "3260:834:1",
                  "trueBody": {
                    "id": 1984,
                    "nodeType": "Block",
                    "src": "3284:810:1",
                    "statements": [
                      {
                        "assignments": [
                          1932
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1932,
                            "name": "reserve",
                            "nodeType": "VariableDeclaration",
                            "scope": 1984,
                            "src": "3292:12:1",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1931,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "3292:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1935,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 1933,
                            "name": "buybackReserve",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 224,
                            "src": "3307:14:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                              "typeString": "function () view returns (uint256)"
                            }
                          },
                          "id": 1934,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3307:16:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3292:31:1"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1941,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1936,
                            "name": "reserve",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1932,
                            "src": "3331:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1939,
                                "name": "_msgValue",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1920,
                                "src": "3353:9:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 1937,
                                "name": "reserve",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1932,
                                "src": "3341:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1938,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 5925,
                              "src": "3341:11:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 1940,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3341:22:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3331:32:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1942,
                        "nodeType": "ExpressionStatement",
                        "src": "3331:32:1"
                      },
                      {
                        "assignments": [
                          1944
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1944,
                            "name": "_totalSupply",
                            "nodeType": "VariableDeclaration",
                            "scope": 1984,
                            "src": "3457:17:1",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1943,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "3457:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1947,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 1945,
                            "name": "totalSupply",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6228,
                            "src": "3477:11:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                              "typeString": "function () view returns (uint256)"
                            }
                          },
                          "id": 1946,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3477:13:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3457:33:1"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1957,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1948,
                            "name": "exitFee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1926,
                            "src": "3594:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1951,
                                "name": "_totalSupply",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1944,
                                "src": "3630:12:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1954,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 1952,
                                  "name": "burnedSupply",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 87,
                                  "src": "3652:12:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "*",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 1953,
                                  "name": "buySlopeNum",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 93,
                                  "src": "3667:11:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "3652:26:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 1955,
                                "name": "buySlopeDen",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 95,
                                "src": "3688:11:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 1949,
                                "name": "BigDiv",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4982,
                                "src": "3604:6:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_BigDiv_$4982_$",
                                  "typeString": "type(library BigDiv)"
                                }
                              },
                              "id": 1950,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "bigDiv2x1",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4688,
                              "src": "3604:16:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 1956,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3604:103:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3594:113:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1958,
                        "nodeType": "ExpressionStatement",
                        "src": "3594:113:1"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1968,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1959,
                            "name": "exitFee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1926,
                            "src": "3808:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1962,
                                "name": "_totalSupply",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1944,
                                "src": "3845:12:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1965,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 1963,
                                  "name": "buySlopeNum",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 93,
                                  "src": "3867:11:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "*",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 1964,
                                  "name": "_totalSupply",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1944,
                                  "src": "3881:12:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "3867:26:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 1966,
                                "name": "buySlopeDen",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 95,
                                "src": "3903:11:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 1960,
                                "name": "BigDiv",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4982,
                                "src": "3819:6:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_BigDiv_$4982_$",
                                  "typeString": "type(library BigDiv)"
                                }
                              },
                              "id": 1961,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "bigDiv2x1",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4688,
                              "src": "3819:16:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 1967,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3819:103:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3808:114:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1969,
                        "nodeType": "ExpressionStatement",
                        "src": "3808:114:1"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1972,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1970,
                            "name": "exitFee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1926,
                            "src": "3995:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 1971,
                            "name": "reserve",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1932,
                            "src": "4006:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3995:18:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 1982,
                          "nodeType": "Block",
                          "src": "4051:37:1",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 1980,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 1978,
                                  "name": "exitFee",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1926,
                                  "src": "4061:7:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "-=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 1979,
                                  "name": "reserve",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1932,
                                  "src": "4072:7:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "4061:18:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1981,
                              "nodeType": "ExpressionStatement",
                              "src": "4061:18:1"
                            }
                          ]
                        },
                        "id": 1983,
                        "nodeType": "IfStatement",
                        "src": "3991:97:1",
                        "trueBody": {
                          "id": 1977,
                          "nodeType": "Block",
                          "src": "4015:30:1",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 1975,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 1973,
                                  "name": "exitFee",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1926,
                                  "src": "4025:7:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 1974,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "4035:1:1",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "4025:11:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1976,
                              "nodeType": "ExpressionStatement",
                              "src": "4025:11:1"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1986,
                    "name": "exitFee",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1926,
                    "src": "4107:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1924,
                  "id": 1987,
                  "nodeType": "Return",
                  "src": "4100:14:1"
                }
              ]
            },
            "documentation": "Close",
            "id": 1989,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "estimateExitFee",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1921,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1920,
                  "name": "_msgValue",
                  "nodeType": "VariableDeclaration",
                  "scope": 1989,
                  "src": "3192:14:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1919,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "3192:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3191:16:1"
            },
            "returnParameters": {
              "id": 1924,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1923,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1989,
                  "src": "3229:4:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1922,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "3229:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3228:6:1"
            },
            "scope": 2242,
            "src": "3167:952:1",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2026,
              "nodeType": "Block",
              "src": "4681:218:1",
              "statements": [
                {
                  "assignments": [
                    1993
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1993,
                      "name": "exitFee",
                      "nodeType": "VariableDeclaration",
                      "scope": 2026,
                      "src": "4687:12:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1992,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "4687:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1995,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 1994,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "4702:1:1",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4687:16:1"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1998,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1996,
                      "name": "state",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 121,
                      "src": "4714:5:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 1997,
                      "name": "STATE_RUN",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 62,
                      "src": "4723:9:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4714:18:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2016,
                  "nodeType": "IfStatement",
                  "src": "4710:139:1",
                  "trueBody": {
                    "id": 2015,
                    "nodeType": "Block",
                    "src": "4734:115:1",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2004,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1999,
                            "name": "exitFee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1993,
                            "src": "4742:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 2001,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8534,
                                  "src": "4768:3:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 2002,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "value",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "4768:9:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 2000,
                              "name": "estimateExitFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1989,
                              "src": "4752:15:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256) view returns (uint256)"
                              }
                            },
                            "id": 2003,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4752:26:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4742:36:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2005,
                        "nodeType": "ExpressionStatement",
                        "src": "4742:36:1"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2007,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8534,
                                "src": "4805:3:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 2008,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "4805:10:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 2009,
                              "name": "exitFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1993,
                              "src": "4817:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2010,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8534,
                                "src": "4826:3:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 2011,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "value",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "4826:9:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "74727565",
                              "id": 2012,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4837:4:1",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "true"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 2006,
                            "name": "_collectInvestment",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 408,
                            "src": "4786:18:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_payable_$_t_uint256_$_t_uint256_$_t_bool_$returns$__$",
                              "typeString": "function (address payable,uint256,uint256,bool)"
                            }
                          },
                          "id": 2013,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4786:56:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2014,
                        "nodeType": "ExpressionStatement",
                        "src": "4786:56:1"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2017,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8575,
                        "src": "4855:5:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_DecentralizedAutonomousTrust_$2242",
                          "typeString": "contract super DecentralizedAutonomousTrust"
                        }
                      },
                      "id": 2019,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_close",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1694,
                      "src": "4855:12:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 2020,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4855:14:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2021,
                  "nodeType": "ExpressionStatement",
                  "src": "4855:14:1"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2023,
                        "name": "exitFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1993,
                        "src": "4886:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2022,
                      "name": "Close",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1790,
                      "src": "4880:5:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 2024,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4880:14:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2025,
                  "nodeType": "EmitStatement",
                  "src": "4875:19:1"
                }
              ]
            },
            "documentation": "@notice Called by the beneficiary account to STATE_CLOSE or STATE_CANCEL the c-org,\n preventing any more tokens from being minted.\n @dev Requires an `exitFee` to be paid.  If the currency is ETH, include a little more than\n what appears to be required and any remainder will be returned to your account.  This is\n because another user may have a transaction mined which changes the exitFee required.\n For other `currency` types, the beneficiary account will be billed the exact amount required.",
            "id": 2027,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "close",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1990,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4663:2:1"
            },
            "returnParameters": {
              "id": 1991,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4681:0:1"
            },
            "scope": 2242,
            "src": "4649:250:1",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2079,
              "nodeType": "Block",
              "src": "5067:667:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2033,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8534,
                          "src": "5092:3:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 2034,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "5092:10:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2035,
                        "name": "_currencyValue",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2029,
                        "src": "5104:14:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2036,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8534,
                          "src": "5120:3:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 2037,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "value",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "5120:9:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "66616c7365",
                        "id": 2038,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5131:5:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "false"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 2032,
                      "name": "_collectInvestment",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 408,
                      "src": "5073:18:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_payable_$_t_uint256_$_t_uint256_$_t_bool_$returns$__$",
                        "typeString": "function (address payable,uint256,uint256,bool)"
                      }
                    },
                    "id": 2039,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5073:64:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2040,
                  "nodeType": "ExpressionStatement",
                  "src": "5073:64:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2044,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2042,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 121,
                          "src": "5151:5:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2043,
                          "name": "STATE_RUN",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 62,
                          "src": "5160:9:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "5151:18:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "494e56414c49445f5354415445",
                        "id": 2045,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5171:15:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_1845915154e87be01f9e40567b467167f5c099525ea93cbcf8299418a19a1cd6",
                          "typeString": "literal_string \"INVALID_STATE\""
                        },
                        "value": "INVALID_STATE"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_1845915154e87be01f9e40567b467167f5c099525ea93cbcf8299418a19a1cd6",
                          "typeString": "literal_string \"INVALID_STATE\""
                        }
                      ],
                      "id": 2041,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        8537,
                        8538
                      ],
                      "referencedDeclaration": 8538,
                      "src": "5143:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2046,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5143:44:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2047,
                  "nodeType": "ExpressionStatement",
                  "src": "5143:44:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2051,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2049,
                          "name": "_currencyValue",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2029,
                          "src": "5201:14:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 2050,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5218:1:1",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "5201:18:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4d495353494e475f43555252454e4359",
                        "id": 2052,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5221:18:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8fbb109edafcb6d1dc735992e2d9a8fc6bc9c101e2bf4fe7ff1d71e161fa0291",
                          "typeString": "literal_string \"MISSING_CURRENCY\""
                        },
                        "value": "MISSING_CURRENCY"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8fbb109edafcb6d1dc735992e2d9a8fc6bc9c101e2bf4fe7ff1d71e161fa0291",
                          "typeString": "literal_string \"MISSING_CURRENCY\""
                        }
                      ],
                      "id": 2048,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        8537,
                        8538
                      ],
                      "referencedDeclaration": 8538,
                      "src": "5193:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2053,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5193:47:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2054,
                  "nodeType": "ExpressionStatement",
                  "src": "5193:47:1"
                },
                {
                  "assignments": [
                    2056
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2056,
                      "name": "reserve",
                      "nodeType": "VariableDeclaration",
                      "scope": 2079,
                      "src": "5421:12:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2055,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "5421:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2061,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2059,
                        "name": "__revenueCommitmentBasisPoints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 119,
                        "src": "5455:30:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2057,
                        "name": "_currencyValue",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2029,
                        "src": "5436:14:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 2058,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mul",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5986,
                      "src": "5436:18:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 2060,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5436:50:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5421:65:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2064,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2062,
                      "name": "reserve",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2056,
                      "src": "5492:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "/=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2063,
                      "name": "BASIS_POINTS_DEN",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 78,
                      "src": "5503:16:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5492:27:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2065,
                  "nodeType": "ExpressionStatement",
                  "src": "5492:27:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2067,
                        "name": "beneficiary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 91,
                        "src": "5648:11:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2070,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2068,
                          "name": "_currencyValue",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2029,
                          "src": "5661:14:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "-",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2069,
                          "name": "reserve",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2056,
                          "src": "5678:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "5661:24:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2066,
                      "name": "_transferCurrency",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 445,
                      "src": "5630:17:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_payable_$_t_uint256_$returns$__$",
                        "typeString": "function (address payable,uint256)"
                      }
                    },
                    "id": 2071,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5630:56:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2072,
                  "nodeType": "ExpressionStatement",
                  "src": "5630:56:1"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2074,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8534,
                          "src": "5702:3:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 2075,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "5702:10:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2076,
                        "name": "_currencyValue",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2029,
                        "src": "5714:14:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2073,
                      "name": "Pay",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1796,
                      "src": "5698:3:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 2077,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5698:31:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2078,
                  "nodeType": "EmitStatement",
                  "src": "5693:36:1"
                }
              ]
            },
            "documentation": "Pay\n @dev Pay the organization on-chain.\n @param _currencyValue How much currency which was paid.",
            "id": 2080,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "pay",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2030,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2029,
                  "name": "_currencyValue",
                  "nodeType": "VariableDeclaration",
                  "scope": 2080,
                  "src": "5031:19:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2028,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "5031:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5030:21:1"
            },
            "returnParameters": {
              "id": 2031,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5067:0:1"
            },
            "scope": 2242,
            "src": "5018:716:1",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2094,
              "nodeType": "Block",
              "src": "5910:76:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 2090,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2085,
                              "name": "currency",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 99,
                              "src": "5932:8:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$6741",
                                "typeString": "contract IERC20"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IERC20_$6741",
                                "typeString": "contract IERC20"
                              }
                            ],
                            "id": 2084,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "5924:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 2086,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5924:17:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 2088,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5953:1:1",
                              "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": 2087,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "5945:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 2089,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5945:10:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "5924:31:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4f4e4c595f464f525f43555252454e43595f455448",
                        "id": 2091,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5957:23:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_010d51eecc98323ff18a307f31b5d36137a4e44ee7e2ab9ae944fb09e1c069e3",
                          "typeString": "literal_string \"ONLY_FOR_CURRENCY_ETH\""
                        },
                        "value": "ONLY_FOR_CURRENCY_ETH"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_010d51eecc98323ff18a307f31b5d36137a4e44ee7e2ab9ae944fb09e1c069e3",
                          "typeString": "literal_string \"ONLY_FOR_CURRENCY_ETH\""
                        }
                      ],
                      "id": 2083,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        8537,
                        8538
                      ],
                      "referencedDeclaration": 8538,
                      "src": "5916:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2092,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5916:65:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2093,
                  "nodeType": "ExpressionStatement",
                  "src": "5916:65:1"
                }
              ]
            },
            "documentation": "@notice Pay the organization on-chain without minting any tokens.\n @dev This allows you to add funds directly to the buybackReserve.",
            "id": 2095,
            "implemented": true,
            "kind": "fallback",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2081,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5890:2:1"
            },
            "returnParameters": {
              "id": 2082,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5910:0:1"
            },
            "scope": 2242,
            "src": "5882:104:1",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2153,
              "nodeType": "Block",
              "src": "6259:693:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2115,
                        "name": "_whitelistAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2097,
                        "src": "6286:17:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2116,
                        "name": "_beneficiary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2099,
                        "src": "6311:12:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2117,
                        "name": "_control",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2101,
                        "src": "6331:8:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2118,
                        "name": "_feeCollector",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2103,
                        "src": "6347:13:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2119,
                        "name": "_feeBasisPoints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2105,
                        "src": "6368:15:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2120,
                        "name": "_minInvestment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2109,
                        "src": "6391:14:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2121,
                        "name": "_minDuration",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2111,
                        "src": "6413:12:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2114,
                      "name": "_updateConfig",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 816,
                      "src": "6265:13:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_payable_$_t_address_$_t_address_payable_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address payable,address,address payable,uint256,uint256,uint256)"
                      }
                    },
                    "id": 2122,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6265:166:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2123,
                  "nodeType": "ExpressionStatement",
                  "src": "6265:166:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2127,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2125,
                          "name": "_revenueCommitmentBasisPoints",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2107,
                          "src": "6453:29:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2126,
                          "name": "BASIS_POINTS_DEN",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 78,
                          "src": "6486:16:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "6453:49:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "494e56414c49445f434f4d4d49544d454e54",
                        "id": 2128,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6510:20:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5caa510e2372cee15287cb658bfa22ece0974032b28ffa99859002b29fdabfe9",
                          "typeString": "literal_string \"INVALID_COMMITMENT\""
                        },
                        "value": "INVALID_COMMITMENT"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_5caa510e2372cee15287cb658bfa22ece0974032b28ffa99859002b29fdabfe9",
                          "typeString": "literal_string \"INVALID_COMMITMENT\""
                        }
                      ],
                      "id": 2124,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        8537,
                        8538
                      ],
                      "referencedDeclaration": 8538,
                      "src": "6438:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2129,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6438:98:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2130,
                  "nodeType": "ExpressionStatement",
                  "src": "6438:98:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2134,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2132,
                          "name": "_revenueCommitmentBasisPoints",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2107,
                          "src": "6557:29:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2133,
                          "name": "__revenueCommitmentBasisPoints",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 119,
                          "src": "6590:30:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "6557:63:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "434f4d4d49544d454e545f4d41595f4e4f545f42455f52454455434544",
                        "id": 2135,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6628:31:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_36143dfd8314511477b2866dc6e750ef7672258a9c0ca86a225bbcf136ae3ee3",
                          "typeString": "literal_string \"COMMITMENT_MAY_NOT_BE_REDUCED\""
                        },
                        "value": "COMMITMENT_MAY_NOT_BE_REDUCED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_36143dfd8314511477b2866dc6e750ef7672258a9c0ca86a225bbcf136ae3ee3",
                          "typeString": "literal_string \"COMMITMENT_MAY_NOT_BE_REDUCED\""
                        }
                      ],
                      "id": 2131,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        8537,
                        8538
                      ],
                      "referencedDeclaration": 8538,
                      "src": "6542:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2136,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6542:123:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2137,
                  "nodeType": "ExpressionStatement",
                  "src": "6542:123:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2140,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2138,
                      "name": "__revenueCommitmentBasisPoints",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 119,
                      "src": "6671:30:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2139,
                      "name": "_revenueCommitmentBasisPoints",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2107,
                      "src": "6704:29:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6671:62:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2141,
                  "nodeType": "ExpressionStatement",
                  "src": "6671:62:1"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2143,
                        "name": "_whitelistAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2097,
                        "src": "6765:17:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2144,
                        "name": "_beneficiary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2099,
                        "src": "6790:12:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2145,
                        "name": "_control",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2101,
                        "src": "6810:8:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2146,
                        "name": "_feeCollector",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2103,
                        "src": "6826:13:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2147,
                        "name": "_revenueCommitmentBasisPoints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2107,
                        "src": "6847:29:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2148,
                        "name": "_feeBasisPoints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2105,
                        "src": "6884:15:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2149,
                        "name": "_minInvestment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2109,
                        "src": "6907:14:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2150,
                        "name": "_minDuration",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2111,
                        "src": "6929:12:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2142,
                      "name": "UpdateConfig",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1814,
                      "src": "6745:12:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,address,uint256,uint256,uint256,uint256)"
                      }
                    },
                    "id": 2151,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6745:202:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2152,
                  "nodeType": "EmitStatement",
                  "src": "6740:207:1"
                }
              ]
            },
            "documentation": null,
            "id": 2154,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "updateConfig",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2112,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2097,
                  "name": "_whitelistAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 2154,
                  "src": "6017:25:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2096,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6017:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2099,
                  "name": "_beneficiary",
                  "nodeType": "VariableDeclaration",
                  "scope": 2154,
                  "src": "6048:28:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 2098,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6048:15:1",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2101,
                  "name": "_control",
                  "nodeType": "VariableDeclaration",
                  "scope": 2154,
                  "src": "6082:16:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2100,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6082:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2103,
                  "name": "_feeCollector",
                  "nodeType": "VariableDeclaration",
                  "scope": 2154,
                  "src": "6104:29:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 2102,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6104:15:1",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2105,
                  "name": "_feeBasisPoints",
                  "nodeType": "VariableDeclaration",
                  "scope": 2154,
                  "src": "6139:20:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2104,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "6139:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2107,
                  "name": "_revenueCommitmentBasisPoints",
                  "nodeType": "VariableDeclaration",
                  "scope": 2154,
                  "src": "6165:34:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2106,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "6165:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2109,
                  "name": "_minInvestment",
                  "nodeType": "VariableDeclaration",
                  "scope": 2154,
                  "src": "6205:19:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2108,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "6205:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2111,
                  "name": "_minDuration",
                  "nodeType": "VariableDeclaration",
                  "scope": 2154,
                  "src": "6230:17:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2110,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "6230:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6011:240:1"
            },
            "returnParameters": {
              "id": 2113,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6259:0:1"
            },
            "scope": 2242,
            "src": "5990:962:1",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2193,
              "nodeType": "Block",
              "src": "7263:275:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 2163,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2160,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8534,
                            "src": "7277:3:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 2161,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "7277:10:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2162,
                          "name": "control",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 97,
                          "src": "7291:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "7277:21:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "434f4e54524f4c5f4f4e4c59",
                        "id": 2164,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7300:14:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a5f743ceb9a4650c03941305116700927f7465bb2425a74fb5197fdef689c993",
                          "typeString": "literal_string \"CONTROL_ONLY\""
                        },
                        "value": "CONTROL_ONLY"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a5f743ceb9a4650c03941305116700927f7465bb2425a74fb5197fdef689c993",
                          "typeString": "literal_string \"CONTROL_ONLY\""
                        }
                      ],
                      "id": 2159,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        8537,
                        8538
                      ],
                      "referencedDeclaration": 8538,
                      "src": "7269:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2165,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7269:46:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2166,
                  "nodeType": "ExpressionStatement",
                  "src": "7269:46:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2170,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2168,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 121,
                          "src": "7329:5:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2169,
                          "name": "STATE_RUN",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 62,
                          "src": "7338:9:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "7329:18:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4f4e4c595f43414c4c5f494e5f52554e",
                        "id": 2171,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7349:18:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e0aefbfa8e3ac44bb8f6206c1f8f00bd6cb1293ffdc99906f35a4702bed81d4e",
                          "typeString": "literal_string \"ONLY_CALL_IN_RUN\""
                        },
                        "value": "ONLY_CALL_IN_RUN"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_e0aefbfa8e3ac44bb8f6206c1f8f00bd6cb1293ffdc99906f35a4702bed81d4e",
                          "typeString": "literal_string \"ONLY_CALL_IN_RUN\""
                        }
                      ],
                      "id": 2167,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        8537,
                        8538
                      ],
                      "referencedDeclaration": 8538,
                      "src": "7321:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2172,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7321:47:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2173,
                  "nodeType": "ExpressionStatement",
                  "src": "7321:47:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2177,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2175,
                          "name": "__startedOn",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 141,
                          "src": "7382:11:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 2176,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7397:1:1",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "7382:16:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4f4e4c595f43414c4c5f49465f4e4f545f4155544f5f534554",
                        "id": 2178,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7400:27:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_30e5eb088784bd0f384b97a6b1afa28986e6116115e699c9416453e8f16a3d98",
                          "typeString": "literal_string \"ONLY_CALL_IF_NOT_AUTO_SET\""
                        },
                        "value": "ONLY_CALL_IF_NOT_AUTO_SET"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_30e5eb088784bd0f384b97a6b1afa28986e6116115e699c9416453e8f16a3d98",
                          "typeString": "literal_string \"ONLY_CALL_IF_NOT_AUTO_SET\""
                        }
                      ],
                      "id": 2174,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        8537,
                        8538
                      ],
                      "referencedDeclaration": 8538,
                      "src": "7374:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2179,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7374:54:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2180,
                  "nodeType": "ExpressionStatement",
                  "src": "7374:54:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2185,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2182,
                          "name": "_runStartedOn",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2156,
                          "src": "7442:13:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2183,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8524,
                            "src": "7459:5:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 2184,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "timestamp",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "7459:15:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "7442:32:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "444154455f4d5553545f42455f494e5f50415354",
                        "id": 2186,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7476:22:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_70f76ca974b84153c422cf4dc74bcd0857711b2434ff058c0a9b2e33a5bd01ae",
                          "typeString": "literal_string \"DATE_MUST_BE_IN_PAST\""
                        },
                        "value": "DATE_MUST_BE_IN_PAST"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_70f76ca974b84153c422cf4dc74bcd0857711b2434ff058c0a9b2e33a5bd01ae",
                          "typeString": "literal_string \"DATE_MUST_BE_IN_PAST\""
                        }
                      ],
                      "id": 2181,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        8537,
                        8538
                      ],
                      "referencedDeclaration": 8538,
                      "src": "7434:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2187,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7434:65:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2188,
                  "nodeType": "ExpressionStatement",
                  "src": "7434:65:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2191,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2189,
                      "name": "__startedOn",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 141,
                      "src": "7506:11:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2190,
                      "name": "_runStartedOn",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2156,
                      "src": "7520:13:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7506:27:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2192,
                  "nodeType": "ExpressionStatement",
                  "src": "7506:27:1"
                }
              ]
            },
            "documentation": "@notice A temporary function to set `runStartedOn`, to be used by contracts which were\n already deployed before this feature was introduced.\n @dev This function will be removed once known users have called the function.",
            "id": 2194,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "initializeRunStartedOn",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2157,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2156,
                  "name": "_runStartedOn",
                  "nodeType": "VariableDeclaration",
                  "scope": 2194,
                  "src": "7229:18:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2155,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "7229:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7223:28:1"
            },
            "returnParameters": {
              "id": 2158,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7263:0:1"
            },
            "scope": 2242,
            "src": "7192:346:1",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2240,
              "nodeType": "Block",
              "src": "7703:674:1",
              "statements": [
                {
                  "assignments": [
                    2200
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2200,
                      "name": "reserve",
                      "nodeType": "VariableDeclaration",
                      "scope": 2240,
                      "src": "7995:12:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2199,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "7995:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2205,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2203,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2196,
                        "src": "8045:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2201,
                        "name": "__investmentReserveBasisPoints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 113,
                        "src": "8010:30:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 2202,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mul",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5986,
                      "src": "8010:34:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 2204,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8010:42:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7995:57:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2208,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2206,
                      "name": "reserve",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2200,
                      "src": "8058:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "/=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2207,
                      "name": "BASIS_POINTS_DEN",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 78,
                      "src": "8069:16:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8058:27:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2209,
                  "nodeType": "ExpressionStatement",
                  "src": "8058:27:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2215,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2210,
                      "name": "reserve",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2200,
                      "src": "8091:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 2213,
                          "name": "reserve",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2200,
                          "src": "8112:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 2211,
                          "name": "_value",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2196,
                          "src": "8101:6:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2212,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5925,
                        "src": "8101:10:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 2214,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8101:19:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8091:29:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2216,
                  "nodeType": "ExpressionStatement",
                  "src": "8091:29:1"
                },
                {
                  "assignments": [
                    2218
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2218,
                      "name": "fee",
                      "nodeType": "VariableDeclaration",
                      "scope": 2240,
                      "src": "8126:8:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2217,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "8126:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2223,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2221,
                        "name": "feeBasisPoints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 103,
                        "src": "8149:14:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2219,
                        "name": "reserve",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2200,
                        "src": "8137:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 2220,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mul",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5986,
                      "src": "8137:11:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 2222,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8137:27:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8126:38:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2226,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2224,
                      "name": "fee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2218,
                      "src": "8170:3:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "/=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2225,
                      "name": "BASIS_POINTS_DEN",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 78,
                      "src": "8177:16:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8170:23:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2227,
                  "nodeType": "ExpressionStatement",
                  "src": "8170:23:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2229,
                        "name": "beneficiary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 91,
                        "src": "8303:11:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2232,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2230,
                          "name": "reserve",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2200,
                          "src": "8316:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "-",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2231,
                          "name": "fee",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2218,
                          "src": "8326:3:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "8316:13:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2228,
                      "name": "_transferCurrency",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 445,
                      "src": "8285:17:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_payable_$_t_uint256_$returns$__$",
                        "typeString": "function (address payable,uint256)"
                      }
                    },
                    "id": 2233,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8285:45:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2234,
                  "nodeType": "ExpressionStatement",
                  "src": "8285:45:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2236,
                        "name": "feeCollector",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 101,
                        "src": "8354:12:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2237,
                        "name": "fee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2218,
                        "src": "8368:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2235,
                      "name": "_transferCurrency",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 445,
                      "src": "8336:17:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_payable_$_t_uint256_$returns$__$",
                        "typeString": "function (address payable,uint256)"
                      }
                    },
                    "id": 2238,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8336:36:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2239,
                  "nodeType": "ExpressionStatement",
                  "src": "8336:36:1"
                }
              ]
            },
            "documentation": "@dev Distributes _value currency between the buybackReserve, beneficiary, and feeCollector.",
            "id": 2241,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_distributeInvestment",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2197,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2196,
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 2241,
                  "src": "7676:11:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2195,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "7676:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7670:21:1"
            },
            "returnParameters": {
              "id": 2198,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7703:0:1"
            },
            "scope": 2242,
            "src": "7640:737:1",
            "stateMutability": "nonpayable",
            "superFunction": 863,
            "visibility": "internal"
          }
        ],
        "scope": 2243,
        "src": "610:7769:1"
      }
    ],
    "src": "0:8380:1"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.17+commit.d19bba13.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.3.0",
  "updatedAt": "2020-12-11T05:03:09.316Z",
  "devdoc": {
    "methods": {
      "allowance(address,address)": {
        "details": "See {IERC20-allowance}."
      },
      "approve(address,uint256)": {
        "details": "See {IERC20-approve}.     * Requirements:     * - `spender` cannot be the zero address."
      },
      "balanceOf(address)": {
        "details": "See {IERC20-balanceOf}."
      },
      "burn(uint256)": {
        "details": "Note that this is not the same as a `sell` via the DAT."
      },
      "buy(address,uint256,uint256)": {
        "details": "_minTokensBought is necessary as the price will change if some elses transaction mines after yours was submitted.",
        "params": {
          "_currencyValue": "How much currency to spend in order to buy FAIR.",
          "_minTokensBought": "Buy at least this many FAIR tokens or the transaction reverts.",
          "_to": "The account to receive the FAIR tokens from this purchase."
        }
      },
      "close()": {
        "details": "Requires an `exitFee` to be paid.  If the currency is ETH, include a little more than what appears to be required and any remainder will be returned to your account.  This is because another user may have a transaction mined which changes the exitFee required. For other `currency` types, the beneficiary account will be billed the exact amount required."
      },
      "decimals()": {
        "details": "Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5,05` (`505 / 10 ** 2`).     * Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei.     * NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."
      },
      "decreaseAllowance(address,uint256)": {
        "details": "Atomically decreases the allowance granted to `spender` by the caller.     * This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}.     * Emits an {Approval} event indicating the updated allowance.     * Requirements:     * - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`."
      },
      "estimateBuyValue(uint256)": {
        "params": {
          "_currencyValue": "How much currency to spend in order to buy FAIR."
        }
      },
      "increaseAllowance(address,uint256)": {
        "details": "Atomically increases the allowance granted to `spender` by the caller.     * This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}.     * Emits an {Approval} event indicating the updated allowance.     * Requirements:     * - `spender` cannot be the zero address."
      },
      "initialize(string,string,uint8)": {
        "details": "Sets the values for `name`, `symbol`, and `decimals`. All three of these values are immutable: they can only be set once during construction."
      },
      "initializeDomainSeparator()": {
        "details": "This is separate from `initialize` to allow upgraded contracts to update the version There is no harm in calling this multiple times / no permissions required"
      },
      "initializeRunStartedOn(uint256)": {
        "details": "This function will be removed once known users have called the function."
      },
      "name()": {
        "details": "Returns the name of the token."
      },
      "pay(uint256)": {
        "details": "Pay the organization on-chain.",
        "params": {
          "_currencyValue": "How much currency which was paid."
        }
      },
      "sell(address,uint256,uint256)": {
        "details": "_minCurrencyReturned is necessary as the price will change if some elses transaction mines after yours was submitted.",
        "params": {
          "_minCurrencyReturned": "Get at least this many currency tokens or the transaction reverts.",
          "_quantityToSell": "How many FAIR tokens to sell for currency value.",
          "_to": "The account to receive the currency from this sale."
        }
      },
      "symbol()": {
        "details": "Returns the symbol of the token, usually a shorter version of the name."
      },
      "totalSupply()": {
        "details": "See {IERC20-totalSupply}."
      },
      "transfer(address,uint256)": {
        "details": "See {IERC20-transfer}.     * Requirements:     * - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`."
      },
      "transferFrom(address,address,uint256)": {
        "details": "See {IERC20-transferFrom}.     * Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20};     * Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `amount`. - the caller must have allowance for `sender`'s tokens of at least `amount`."
      }
    },
    "title": "Decentralized Autonomous Trust This contract is the reference implementation provided by Fairmint for a Decentralized Autonomous Trust as described in the continuous organization whitepaper (https://github.com/c-org/whitepaper) and specified here: https://github.com/fairmint/c-org/wiki. Use at your own risk. If you have question or if you're looking for a ready-to-use solution using this contract, you might be interested in Fairmint's offering. Do not hesitate to get in touch with us: https://fairmint.co"
  },
  "userdoc": {
    "methods": {
      "burn(uint256)": {
        "notice": "Burn the amount of tokens from the address msg.sender if authorized."
      },
      "burnFrom(address,uint256)": {
        "notice": "Burn the amount of tokens from the given address if approved."
      },
      "buy(address,uint256,uint256)": {
        "notice": "Purchase FAIR tokens with the given amount of currency."
      },
      "buybackReserve()": {
        "notice": "The total amount of currency value currently locked in the contract and available to sellers."
      },
      "close()": {
        "notice": "Called by the beneficiary account to STATE_CLOSE or STATE_CANCEL the c-org, preventing any more tokens from being minted."
      },
      "estimateBuyValue(uint256)": {
        "notice": "Calculate how many FAIR tokens you would buy with the given amount of currency if `buy` was called now."
      },
      "estimateExitFee(uint256)": {
        "notice": "Close"
      },
      "estimateSellValue(uint256)": {
        "notice": "Sell"
      },
      "initializeDomainSeparator()": {
        "notice": "Used to initialize the domain separator used in meta-transactions"
      },
      "initializeRunStartedOn(uint256)": {
        "notice": "A temporary function to set `runStartedOn`, to be used by contracts which were already deployed before this feature was introduced."
      },
      "investmentReserveBasisPoints()": {
        "notice": "The investment reserve of the c-org. Defines the percentage of the value invested that is automatically funneled and held into the buyback_reserve expressed in basis points. Internal since this is n/a to all derivative contracts."
      },
      "pay(uint256)": {
        "notice": "Pay"
      },
      "permitBuy(address,address,uint256,uint256,uint256,uint8,bytes32,bytes32)": {
        "notice": "Allow users to sign a message authorizing a buy"
      },
      "permitSell(address,address,uint256,uint256,uint256,uint8,bytes32,bytes32)": {
        "notice": "Allow users to sign a message authorizing a sell"
      },
      "revenueCommitmentBasisPoints()": {
        "notice": "The revenue commitment of the organization. Defines the percentage of the value paid through the contract that is automatically funneled and held into the buyback_reserve expressed in basis points. Internal since this is n/a to all derivative contracts."
      },
      "runStartedOn()": {
        "notice": "Initialized at `0` and updated when the contract switches from `init` state to `run` state with the current timestamp."
      },
      "sell(address,uint256,uint256)": {
        "notice": "Sell FAIR tokens for at least the given amount of currency."
      }
    }
  }
}