{
  "contractName": "Presale",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_tokenAddress",
          "type": "address"
        },
        {
          "internalType": "address payable",
          "name": "_presaleReceiver",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_endingTime",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "presaleAmountOverdemand",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "presaleEndingTimeInvalid",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "presaleMaximumPresaleAmountInvalid",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "presaleMimumumUSDPurchaseInvalid",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "presaleNativeTokenPaymentNotSufficient",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "presaleNonZeroAddressInvalid",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "presaleRoundClosed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "presaleStartingTimeInvalid",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "presaleTokenNotAvailable",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "presaleUSDPriceInvalid",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "presaleUSDPurchaseNotSufficient",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "endingTime",
          "type": "uint256"
        }
      ],
      "name": "PresaleEndingTimeUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "tokenAddress",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "tokenAvailability",
          "type": "bool"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "aggregatorAddress",
          "type": "address"
        }
      ],
      "name": "PresalePaymentTokenUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "receiverAddress",
          "type": "address"
        }
      ],
      "name": "PresaleReceiverUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "presaleRound",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "startingTime",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "usdPrice",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "minimumUSDPurchase",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "maximumPresaleAmount",
          "type": "uint256"
        }
      ],
      "name": "PresaleRoundUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "tokenAddress",
          "type": "address"
        }
      ],
      "name": "PresaleTokenUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "paymentTokenAddress",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "paymentTokenamount",
          "type": "uint256"
        }
      ],
      "name": "TokenPresold",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "endingTime",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "presaleAmountByRoundMapping",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "presaleDetailsMapping",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "startingTime",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "usdPrice",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "minimumUSDPurchase",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "maximumPresaleAmount",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "presalePaymentTokenMapping",
      "outputs": [
        {
          "internalType": "bool",
          "name": "available",
          "type": "bool"
        },
        {
          "internalType": "address",
          "name": "aggregatorAddress",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "presaleReceiver",
      "outputs": [
        {
          "internalType": "address payable",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "tokenAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "totalPresaleRound",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getTotalPresaleRound",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_presaleRound",
          "type": "uint256"
        }
      ],
      "name": "getPresaleAmountByRound",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "getTotalPresaleAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "getCurrentPresaleRound",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "getCurrentPresaleDetails",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_paymentTokenAddress",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "presaleTokens",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function",
      "payable": true
    },
    {
      "inputs": [
        {
          "internalType": "address payable",
          "name": "_newPresaleReceiver",
          "type": "address"
        }
      ],
      "name": "setPresaleReceiver",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_newTokenAddress",
          "type": "address"
        }
      ],
      "name": "setPresaleTokenAddress",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_tokenAddress",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "_tokenAvailability",
          "type": "bool"
        },
        {
          "internalType": "address",
          "name": "_aggregatorAddress",
          "type": "address"
        }
      ],
      "name": "setPresalePaymentToken",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_newEndingTime",
          "type": "uint256"
        }
      ],
      "name": "setEndingTime",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_presaleRound",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_startingTime",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_usdPrice",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_minimumUSDPurchase",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_maximumPresaleAmount",
          "type": "uint256"
        }
      ],
      "name": "setPresaleRound",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.d7f03943\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_tokenAddress\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"_presaleReceiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_endingTime\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"presaleAmountOverdemand\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"presaleEndingTimeInvalid\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"presaleMaximumPresaleAmountInvalid\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"presaleMimumumUSDPurchaseInvalid\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"presaleNativeTokenPaymentNotSufficient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"presaleNonZeroAddressInvalid\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"presaleRoundClosed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"presaleStartingTimeInvalid\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"presaleTokenNotAvailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"presaleUSDPriceInvalid\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"presaleUSDPurchaseNotSufficient\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endingTime\",\"type\":\"uint256\"}],\"name\":\"PresaleEndingTimeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"tokenAvailability\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"aggregatorAddress\",\"type\":\"address\"}],\"name\":\"PresalePaymentTokenUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiverAddress\",\"type\":\"address\"}],\"name\":\"PresaleReceiverUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"presaleRound\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startingTime\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"usdPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"minimumUSDPurchase\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"maximumPresaleAmount\",\"type\":\"uint256\"}],\"name\":\"PresaleRoundUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"PresaleTokenUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"paymentTokenAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"paymentTokenamount\",\"type\":\"uint256\"}],\"name\":\"TokenPresold\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"endingTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentPresaleDetails\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentPresaleRound\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_presaleRound\",\"type\":\"uint256\"}],\"name\":\"getPresaleAmountByRound\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalPresaleAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalPresaleRound\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"presaleAmountByRoundMapping\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"presaleDetailsMapping\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"startingTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"usdPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minimumUSDPurchase\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumPresaleAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"presalePaymentTokenMapping\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"available\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"aggregatorAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"presaleReceiver\",\"outputs\":[{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_paymentTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"presaleTokens\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newEndingTime\",\"type\":\"uint256\"}],\"name\":\"setEndingTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_tokenAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_tokenAvailability\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"_aggregatorAddress\",\"type\":\"address\"}],\"name\":\"setPresalePaymentToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"_newPresaleReceiver\",\"type\":\"address\"}],\"name\":\"setPresaleReceiver\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_presaleRound\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_startingTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_usdPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_minimumUSDPurchase\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_maximumPresaleAmount\",\"type\":\"uint256\"}],\"name\":\"setPresaleRound\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newTokenAddress\",\"type\":\"address\"}],\"name\":\"setPresaleTokenAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalPresaleRound\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getCurrentPresaleDetails()\":{\"details\":\"Getting the Current Presale Details, including:\",\"returns\":{\"_0\":\"Starting Time\",\"_1\":\"USD Price\",\"_2\":\"Minimum USD Purchase\",\"_3\":\"Maximum Presale Amount\"}},\"getCurrentPresaleRound()\":{\"details\":\"Get Current Presale Round\"},\"getPresaleAmountByRound(uint256)\":{\"details\":\"Get presale total amount By presale round\",\"params\":{\"_presaleRound\":\"- The presale round chosen\"}},\"getTotalPresaleAmount()\":{\"details\":\"Get total amount of presale from all rounds\"},\"getTotalPresaleRound()\":{\"details\":\"Get total amount of presale round\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"presaleTokens(address,uint256)\":{\"details\":\"Execute the Presale of ALPS Token in exchange of other token\",\"params\":{\"_amount\":\"- Amount denominated in the `paymentTokenAddress` being paid\",\"_paymentTokenAddress\":\"- Address of the token use to pay (address 0 is for native token)\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"setEndingTime(uint256)\":{\"details\":\"Set new Ending time\",\"params\":{\"_newEndingTime\":\"- New Ending Timestamp\"}},\"setPresalePaymentToken(address,bool,address)\":{\"details\":\"Set Presale Payment Token Info\",\"params\":{\"_aggregatorAddress\":\"- Chainlink's Aggregator Address to determine the USD price (for `presaleTokens`)\",\"_tokenAddress\":\"- Token Address use to purchase Presale\",\"_tokenAvailability\":\"- Indication whether Token Address can be used for Presale\"}},\"setPresaleReceiver(address)\":{\"details\":\"Set new Presale Receiver Address\",\"params\":{\"_newPresaleReceiver\":\"- Address that'll receive the presale payment token\"}},\"setPresaleRound(uint256,uint256,uint256,uint256,uint256)\":{\"details\":\"Creating/Updating a presale round information\",\"params\":{\"_maximumPresaleAmount\":\"- The maximum amount of token available for a presale round\",\"_minimumUSDPurchase\":\"- The minimum USD amount to purchase the token\",\"_presaleRound\":\"- The presale round chosen\",\"_startingTime\":\"- The starting Presale time\",\"_usdPrice\":\"- The USD Price of the Token in certain Presale Round\"}},\"setPresaleTokenAddress(address)\":{\"details\":\"Set new Presale Token Address\",\"params\":{\"_newTokenAddress\":\"- Address of token that'll be presaled\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/presale/Presale.sol\":\"Presale\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol\":{\"keccak256\":\"0xf2b6c9adb3552254df1445b73563cf014434ff5e78663e9b961b6c059506ceb5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c1f59e0c7334c22fb54288728fc32546bdc9c8133d6db0d60223e3c28f52120\",\"dweb:/ipfs/QmeuxawUVBhMWQJXaEhhnubCTc4Jwn5wYK8gbhq6NjrpfG\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0x24e0364e503a9bbde94c715d26573a76f14cd2a202d45f96f52134ab806b67b9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e12cbaa7378fd9b62280e4e1d164bedcb4399ce238f5f98fc0eefb7e50577981\",\"dweb:/ipfs/QmXRoFGUgfsaRkoPT5bxNMtSayKTQ8GZATLPXf69HcRA51\"]},\"@openzeppelin/contracts/security/ReentrancyGuard.sol\":{\"keccak256\":\"0x0e9621f60b2faabe65549f7ed0f24e8853a45c1b7990d47e8160e523683f3935\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://287a2f8d5814dd0f05f22b740f18ca8321acc21c9bd03a6cb2203ea626e2f3f2\",\"dweb:/ipfs/QmZRQv9iuwU817VuqkA2WweiaibKii69x9QxYBBEfbNEud\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xbbc8ac883ac3c0078ce5ad3e288fbb3ffcc8a30c3a98c0fda0114d64fc44fca2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87a7a5d2f6f63f84598af02b8c50ca2df2631cb8ba2453e8d95fcb17e4be9824\",\"dweb:/ipfs/QmR76hqtAcRqoFj33tmNjcWTLrgNsAaakYwnKZ8zoJtKei\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"@openzeppelin/contracts/utils/Counters.sol\":{\"keccak256\":\"0xf0018c2440fbe238dd3a8732fa8e17a0f9dce84d31451dc8a32f6d62b349c9f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://59e1c62884d55b70f3ae5432b44bb3166ad71ae3acd19c57ab6ddc3c87c325ee\",\"dweb:/ipfs/QmezuXg5GK5oeA4F91EZhozBFekhq5TD966bHPH18cCqhu\"]},\"@openzeppelin/contracts/utils/math/SafeMath.sol\":{\"keccak256\":\"0xa2f576be637946f767aa56601c26d717f48a0aff44f82e46f13807eea1009a21\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://973868f808e88e21a1a0a01d4839314515ee337ad096286c88e41b74dcc11fc2\",\"dweb:/ipfs/QmfYuZxRfx2J2xdk4EXN7jKg4bUYEMTaYk9BAw9Bqn4o2Y\"]},\"project:/contracts/libraries/PriceConverter.sol\":{\"keccak256\":\"0x1c7379e2f032a302a999b9f49bd5b0d79bc5d260aeae8d8e173dfdcae2bebbb8\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://c8968f30c2b173c3fa28a669fe95d09721ffad661b7632d36de73a286e06d124\",\"dweb:/ipfs/QmXCh1gfzimGC3WLPLyUSsdy7UWGNKt6Fsc7f45sRyYRJe\"]},\"project:/contracts/presale/Presale.sol\":{\"keccak256\":\"0xab5e687ad5a80364bdb1e057b1603c77f5c3c4fdbc1f73fefe4d8c0435707b17\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://40145e0b98e04321b451ee133deba4ddca1a819b42885c17b4dd1587945eea07\",\"dweb:/ipfs/QmVmSziDW8WFcKbspdtF1qtcFeqUjJ9igUfAGRqAXd71E6\"]},\"project:/contracts/token/interfaces/IERC20Custom.sol\":{\"keccak256\":\"0x6f50952568dc5b577661f6d1730b39cfa7628a39390103c89190afdfc565d1f4\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://480386fcd5b5e3456e80150bf5444f1b2b067746be0245f287b78fc03e81133a\",\"dweb:/ipfs/QmWBfMsjQPEKj7jav96428j8Ss4AUVtkj69nsVsPZb8E1S\"]}},\"version\":1}",
  "bytecode": "0x60806040523480156200001157600080fd5b50604051620015b9380380620015b98339810160408190526200003491620000e5565b6200003f336200007c565b60018055600380546001600160a01b039485166001600160a01b03199182161790915560048054939094169216919091179091556005556200012d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114620000e257600080fd5b50565b600080600060608486031215620000fb57600080fd5b83516200010881620000cc565b60208501519093506200011b81620000cc565b80925050604084015190509250925092565b61147c806200013d6000396000f3fe60806040526004361061012a5760003560e01c80638da5cb5b116100ab578063c829d1db1161006f578063c829d1db14610385578063d958e001146103a5578063ec2b3523146103d2578063efca9049146103e7578063f2fde38b146103fa578063feda925b1461041a57600080fd5b80638da5cb5b1461029d5780638e7d41b7146102cf578063962de5c01461032e5780639d76ea5814610345578063c14364151461036557600080fd5b80633c0c134d116100f25780633c0c134d146101d05780636c47a6c3146101f0578063715018a614610206578063736e38ef1461021b5780637b4d35851461023b57600080fd5b80630aca575a1461012f5780631c63f0ed146101575780633473bf301461016c578063392f911b1461018e578063398dcd26146101bb575b600080fd5b34801561013b57600080fd5b5061014461043a565b6040519081526020015b60405180910390f35b34801561016357600080fd5b5061014461047c565b34801561017857600080fd5b5061018c610187366004610fd1565b6104d1565b005b34801561019a57600080fd5b506101446101a9366004610fd1565b60076020526000908152604090205481565b3480156101c757600080fd5b50610144610561565b3480156101dc57600080fd5b5061018c6101eb366004610fff565b610571565b3480156101fc57600080fd5b5061014460055481565b34801561021257600080fd5b5061018c610618565b34801561022757600080fd5b5061018c61023636600461102a565b61064e565b34801561024757600080fd5b5061027d610256366004610fd1565b60066020526000908152604090208054600182015460028301546003909301549192909184565b60408051948552602085019390935291830152606082015260800161014e565b3480156102a957600080fd5b506000546001600160a01b03165b6040516001600160a01b03909116815260200161014e565b3480156102db57600080fd5b5061030f6102ea366004610fff565b60086020526000908152604090205460ff81169061010090046001600160a01b031682565b6040805192151583526001600160a01b0390911660208301520161014e565b34801561033a57600080fd5b506002546101449081565b34801561035157600080fd5b506003546102b7906001600160a01b031681565b34801561037157600080fd5b506004546102b7906001600160a01b031681565b34801561039157600080fd5b5061018c6103a0366004611075565b61072b565b3480156103b157600080fd5b506101446103c0366004610fd1565b60009081526007602052604090205490565b3480156103de57600080fd5b5061027d6108d5565b61018c6103f53660046110b0565b610914565b34801561040657600080fd5b5061018c610415366004610fff565b610dda565b34801561042657600080fd5b5061018c610435366004610fff565b610e75565b600080805b6002548110156104765760008181526007602052604090205461046290836110f2565b91508061046e8161110a565b91505061043f565b50919050565b600080600161048a60025490565b6104949190611125565b90505b80156104c95760008181526006602052604090205442106104b757919050565b806104c18161113c565b915050610497565b506000905090565b6000546001600160a01b031633146105045760405162461bcd60e51b81526004016104fb90611153565b60405180910390fd5b42811015610525576040516393d901df60e01b815260040160405180910390fd5b60058190556040518181527f5e50721573a3d3c427f04e866bbc258f046cad12af9fe4a334736b200773d677906020015b60405180910390a150565b600061056c60025490565b905090565b6000546001600160a01b0316331461059b5760405162461bcd60e51b81526004016104fb90611153565b806001600160a01b0381166105c35760405163120d99cb60e11b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0384169081179091556040519081527fee1a99df2103f0b252dbc99d29264423a2ff1bb9c2f60dc19903e2ce82989b8b9060200160405180910390a15050565b6000546001600160a01b031633146106425760405162461bcd60e51b81526004016104fb90611153565b61064c6000610eed565b565b6000546001600160a01b031633146106785760405162461bcd60e51b81526004016104fb90611153565b806001600160a01b0381166106a05760405163120d99cb60e11b815260040160405180910390fd5b6001600160a01b0384811660008181526008602090815260409182902080546001600160a81b031916881515610100600160a81b0319811691909117610100968916968702179091558251938452908301528101919091527f0808e27b4009f59d9d966410b0eead8697b72a10434291d723d6200ab3f343e59060600160405180910390a150505050565b6000546001600160a01b031633146107555760405162461bcd60e51b81526004016104fb90611153565b60008581526006602052604090208054600182015460028301546003909301549192909183158015610785575082155b801561078f575081155b8015610799575080155b156107ac576107ac600280546001019055565b8715806107e2575088158015906107e25750600660006107cd60018c611125565b81526020019081526020016000206000015488105b1561080057604051633863ce1d60e01b815260040160405180910390fd5b8661081e576040516329198c7f60e11b815260040160405180910390fd5b8561083c57604051630746844f60e31b815260040160405180910390fd5b8461085a57604051639f2bfa4160e01b815260040160405180910390fd5b6000898152600660209081526040918290208a8155600181018a90556002810189905560030187905581518a81529081018990529081018790526060810186905289907f5460f1c76402b41ef0b7902b6b577fd351a2a6bc531d4a246d8be68dde775a2b9060800160405180910390a2505050505050505050565b60008060008060006108e561047c565b600090815260066020526040902080546001820154600283015460039093015491989097509195509350915050565b600260015414156109675760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016104fb565b600260015560008080806109796108d5565b93509350935093508342108061099157506005544210155b156109af576040516304d61c6f60e41b815260040160405180910390fd5b6001600160a01b03861660009081526008602052604090205460ff166109e8576040516303003c8560e21b815260040160405180910390fd5b6003546001600160a01b03878116600090815260086020526040808220548151633fabe5a360e21b815291519484169461010090910490931692839163feaf968c9160048083019260a09291908290030181865afa158015610a4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7291906111a7565b5050509150506000610b50610b4a83856001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610abf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae391906111f7565b876001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4591906111f7565b610f3d565b8a610fb0565b905085610b608260126000610f3d565b1015610b7f5760405163196d4a1d60e01b815260040160405180910390fd5b6000610b8b8289610fc5565b905060076000610b9961047c565b81526020019081526020016000205486610bb39190611125565b811115610bd3576040516317b1337360e31b815260040160405180910390fd5b8060076000610be061047c565b81526020019081526020016000206000828254610bfd91906110f2565b90915550506001600160a01b038b16610c9e5789341015610c315760405163854a356160e01b815260040160405180910390fd5b6004546040516001600160a01b03909116908b156108fc02908c906000818181858888f19350505050158015610c6b573d6000803e3d6000fd5b5060405133904780156108fc02916000818181858888f19350505050158015610c98573d6000803e3d6000fd5b50610d23565b600480546040516323b872dd60e01b815233928101929092526001600160a01b039081166024830152604482018c90528c91908216906323b872dd906064016020604051808303816000875af1158015610cfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d20919061121a565b50505b6040516340c10f1960e01b8152336004820152602481018290526001600160a01b038616906340c10f1990604401600060405180830381600087803b158015610d6b57600080fd5b505af1158015610d7f573d6000803e3d6000fd5b505060408051848152602081018e90526001600160a01b038f1693503392507f69902df1d9bae4b2a08b9e9d689906299b4b15ac10fbbf560d019b5c73fd35d6910160405180910390a3505060018055505050505050505050565b6000546001600160a01b03163314610e045760405162461bcd60e51b81526004016104fb90611153565b6001600160a01b038116610e695760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104fb565b610e7281610eed565b50565b6000546001600160a01b03163314610e9f5760405162461bcd60e51b81526004016104fb90611153565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527fb3df4b02428d73d6993c686e78b4a35e95f5be7d084aaee9277115379dc4ca9390602001610556565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008160ff168360ff161015610f7657610f578383611237565b610f659060ff16600a61133e565b610f6f908561134a565b9050610fa9565b8160ff168360ff161115610fa657610f8e8284611237565b610f9c9060ff16600a61133e565b610f6f90856113e5565b50825b9392505050565b6000610fbc8284611413565b90505b92915050565b6000610fbc8284611432565b600060208284031215610fe357600080fd5b5035919050565b6001600160a01b0381168114610e7257600080fd5b60006020828403121561101157600080fd5b8135610fa981610fea565b8015158114610e7257600080fd5b60008060006060848603121561103f57600080fd5b833561104a81610fea565b9250602084013561105a8161101c565b9150604084013561106a81610fea565b809150509250925092565b600080600080600060a0868803121561108d57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600080604083850312156110c357600080fd5b82356110ce81610fea565b946020939093013593505050565b634e487b7160e01b600052601160045260246000fd5b60008219821115611105576111056110dc565b500190565b600060001982141561111e5761111e6110dc565b5060010190565b600082821015611137576111376110dc565b500390565b60008161114b5761114b6110dc565b506000190190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b805169ffffffffffffffffffff811681146111a257600080fd5b919050565b600080600080600060a086880312156111bf57600080fd5b6111c886611188565b94506020860151935060408601519250606086015191506111eb60808701611188565b90509295509295909350565b60006020828403121561120957600080fd5b815160ff81168114610fa957600080fd5b60006020828403121561122c57600080fd5b8151610fa98161101c565b600060ff821660ff841680821015611251576112516110dc565b90039392505050565b600181815b8085111561129557816000190482111561127b5761127b6110dc565b8085161561128857918102915b93841c939080029061125f565b509250929050565b6000826112ac57506001610fbf565b816112b957506000610fbf565b81600181146112cf57600281146112d9576112f5565b6001915050610fbf565b60ff8411156112ea576112ea6110dc565b50506001821b610fbf565b5060208310610133831016604e8410600b8410161715611318575081810a610fbf565b611322838361125a565b8060001904821115611336576113366110dc565b029392505050565b6000610fbc838361129d565b60006001600160ff1b0381841382841380821686840486111615611370576113706110dc565b600160ff1b600087128281168783058912161561138f5761138f6110dc565b600087129250878205871284841616156113ab576113ab6110dc565b878505871281841616156113c1576113c16110dc565b505050929093029392505050565b634e487b7160e01b600052601260045260246000fd5b6000826113f4576113f46113cf565b600160ff1b82146000198414161561140e5761140e6110dc565b500590565b600081600019048311821515161561142d5761142d6110dc565b500290565b600082611441576114416113cf565b50049056fea2646970667358221220ee7b83225dfd0f5e8caa87f3dba5ef1ef4353c58e1b64acb9f8ab2725bbe66b464736f6c634300080b0033",
  "deployedBytecode": "0x60806040526004361061012a5760003560e01c80638da5cb5b116100ab578063c829d1db1161006f578063c829d1db14610385578063d958e001146103a5578063ec2b3523146103d2578063efca9049146103e7578063f2fde38b146103fa578063feda925b1461041a57600080fd5b80638da5cb5b1461029d5780638e7d41b7146102cf578063962de5c01461032e5780639d76ea5814610345578063c14364151461036557600080fd5b80633c0c134d116100f25780633c0c134d146101d05780636c47a6c3146101f0578063715018a614610206578063736e38ef1461021b5780637b4d35851461023b57600080fd5b80630aca575a1461012f5780631c63f0ed146101575780633473bf301461016c578063392f911b1461018e578063398dcd26146101bb575b600080fd5b34801561013b57600080fd5b5061014461043a565b6040519081526020015b60405180910390f35b34801561016357600080fd5b5061014461047c565b34801561017857600080fd5b5061018c610187366004610fd1565b6104d1565b005b34801561019a57600080fd5b506101446101a9366004610fd1565b60076020526000908152604090205481565b3480156101c757600080fd5b50610144610561565b3480156101dc57600080fd5b5061018c6101eb366004610fff565b610571565b3480156101fc57600080fd5b5061014460055481565b34801561021257600080fd5b5061018c610618565b34801561022757600080fd5b5061018c61023636600461102a565b61064e565b34801561024757600080fd5b5061027d610256366004610fd1565b60066020526000908152604090208054600182015460028301546003909301549192909184565b60408051948552602085019390935291830152606082015260800161014e565b3480156102a957600080fd5b506000546001600160a01b03165b6040516001600160a01b03909116815260200161014e565b3480156102db57600080fd5b5061030f6102ea366004610fff565b60086020526000908152604090205460ff81169061010090046001600160a01b031682565b6040805192151583526001600160a01b0390911660208301520161014e565b34801561033a57600080fd5b506002546101449081565b34801561035157600080fd5b506003546102b7906001600160a01b031681565b34801561037157600080fd5b506004546102b7906001600160a01b031681565b34801561039157600080fd5b5061018c6103a0366004611075565b61072b565b3480156103b157600080fd5b506101446103c0366004610fd1565b60009081526007602052604090205490565b3480156103de57600080fd5b5061027d6108d5565b61018c6103f53660046110b0565b610914565b34801561040657600080fd5b5061018c610415366004610fff565b610dda565b34801561042657600080fd5b5061018c610435366004610fff565b610e75565b600080805b6002548110156104765760008181526007602052604090205461046290836110f2565b91508061046e8161110a565b91505061043f565b50919050565b600080600161048a60025490565b6104949190611125565b90505b80156104c95760008181526006602052604090205442106104b757919050565b806104c18161113c565b915050610497565b506000905090565b6000546001600160a01b031633146105045760405162461bcd60e51b81526004016104fb90611153565b60405180910390fd5b42811015610525576040516393d901df60e01b815260040160405180910390fd5b60058190556040518181527f5e50721573a3d3c427f04e866bbc258f046cad12af9fe4a334736b200773d677906020015b60405180910390a150565b600061056c60025490565b905090565b6000546001600160a01b0316331461059b5760405162461bcd60e51b81526004016104fb90611153565b806001600160a01b0381166105c35760405163120d99cb60e11b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0384169081179091556040519081527fee1a99df2103f0b252dbc99d29264423a2ff1bb9c2f60dc19903e2ce82989b8b9060200160405180910390a15050565b6000546001600160a01b031633146106425760405162461bcd60e51b81526004016104fb90611153565b61064c6000610eed565b565b6000546001600160a01b031633146106785760405162461bcd60e51b81526004016104fb90611153565b806001600160a01b0381166106a05760405163120d99cb60e11b815260040160405180910390fd5b6001600160a01b0384811660008181526008602090815260409182902080546001600160a81b031916881515610100600160a81b0319811691909117610100968916968702179091558251938452908301528101919091527f0808e27b4009f59d9d966410b0eead8697b72a10434291d723d6200ab3f343e59060600160405180910390a150505050565b6000546001600160a01b031633146107555760405162461bcd60e51b81526004016104fb90611153565b60008581526006602052604090208054600182015460028301546003909301549192909183158015610785575082155b801561078f575081155b8015610799575080155b156107ac576107ac600280546001019055565b8715806107e2575088158015906107e25750600660006107cd60018c611125565b81526020019081526020016000206000015488105b1561080057604051633863ce1d60e01b815260040160405180910390fd5b8661081e576040516329198c7f60e11b815260040160405180910390fd5b8561083c57604051630746844f60e31b815260040160405180910390fd5b8461085a57604051639f2bfa4160e01b815260040160405180910390fd5b6000898152600660209081526040918290208a8155600181018a90556002810189905560030187905581518a81529081018990529081018790526060810186905289907f5460f1c76402b41ef0b7902b6b577fd351a2a6bc531d4a246d8be68dde775a2b9060800160405180910390a2505050505050505050565b60008060008060006108e561047c565b600090815260066020526040902080546001820154600283015460039093015491989097509195509350915050565b600260015414156109675760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016104fb565b600260015560008080806109796108d5565b93509350935093508342108061099157506005544210155b156109af576040516304d61c6f60e41b815260040160405180910390fd5b6001600160a01b03861660009081526008602052604090205460ff166109e8576040516303003c8560e21b815260040160405180910390fd5b6003546001600160a01b03878116600090815260086020526040808220548151633fabe5a360e21b815291519484169461010090910490931692839163feaf968c9160048083019260a09291908290030181865afa158015610a4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7291906111a7565b5050509150506000610b50610b4a83856001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610abf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae391906111f7565b876001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4591906111f7565b610f3d565b8a610fb0565b905085610b608260126000610f3d565b1015610b7f5760405163196d4a1d60e01b815260040160405180910390fd5b6000610b8b8289610fc5565b905060076000610b9961047c565b81526020019081526020016000205486610bb39190611125565b811115610bd3576040516317b1337360e31b815260040160405180910390fd5b8060076000610be061047c565b81526020019081526020016000206000828254610bfd91906110f2565b90915550506001600160a01b038b16610c9e5789341015610c315760405163854a356160e01b815260040160405180910390fd5b6004546040516001600160a01b03909116908b156108fc02908c906000818181858888f19350505050158015610c6b573d6000803e3d6000fd5b5060405133904780156108fc02916000818181858888f19350505050158015610c98573d6000803e3d6000fd5b50610d23565b600480546040516323b872dd60e01b815233928101929092526001600160a01b039081166024830152604482018c90528c91908216906323b872dd906064016020604051808303816000875af1158015610cfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d20919061121a565b50505b6040516340c10f1960e01b8152336004820152602481018290526001600160a01b038616906340c10f1990604401600060405180830381600087803b158015610d6b57600080fd5b505af1158015610d7f573d6000803e3d6000fd5b505060408051848152602081018e90526001600160a01b038f1693503392507f69902df1d9bae4b2a08b9e9d689906299b4b15ac10fbbf560d019b5c73fd35d6910160405180910390a3505060018055505050505050505050565b6000546001600160a01b03163314610e045760405162461bcd60e51b81526004016104fb90611153565b6001600160a01b038116610e695760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104fb565b610e7281610eed565b50565b6000546001600160a01b03163314610e9f5760405162461bcd60e51b81526004016104fb90611153565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527fb3df4b02428d73d6993c686e78b4a35e95f5be7d084aaee9277115379dc4ca9390602001610556565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008160ff168360ff161015610f7657610f578383611237565b610f659060ff16600a61133e565b610f6f908561134a565b9050610fa9565b8160ff168360ff161115610fa657610f8e8284611237565b610f9c9060ff16600a61133e565b610f6f90856113e5565b50825b9392505050565b6000610fbc8284611413565b90505b92915050565b6000610fbc8284611432565b600060208284031215610fe357600080fd5b5035919050565b6001600160a01b0381168114610e7257600080fd5b60006020828403121561101157600080fd5b8135610fa981610fea565b8015158114610e7257600080fd5b60008060006060848603121561103f57600080fd5b833561104a81610fea565b9250602084013561105a8161101c565b9150604084013561106a81610fea565b809150509250925092565b600080600080600060a0868803121561108d57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600080604083850312156110c357600080fd5b82356110ce81610fea565b946020939093013593505050565b634e487b7160e01b600052601160045260246000fd5b60008219821115611105576111056110dc565b500190565b600060001982141561111e5761111e6110dc565b5060010190565b600082821015611137576111376110dc565b500390565b60008161114b5761114b6110dc565b506000190190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b805169ffffffffffffffffffff811681146111a257600080fd5b919050565b600080600080600060a086880312156111bf57600080fd5b6111c886611188565b94506020860151935060408601519250606086015191506111eb60808701611188565b90509295509295909350565b60006020828403121561120957600080fd5b815160ff81168114610fa957600080fd5b60006020828403121561122c57600080fd5b8151610fa98161101c565b600060ff821660ff841680821015611251576112516110dc565b90039392505050565b600181815b8085111561129557816000190482111561127b5761127b6110dc565b8085161561128857918102915b93841c939080029061125f565b509250929050565b6000826112ac57506001610fbf565b816112b957506000610fbf565b81600181146112cf57600281146112d9576112f5565b6001915050610fbf565b60ff8411156112ea576112ea6110dc565b50506001821b610fbf565b5060208310610133831016604e8410600b8410161715611318575081810a610fbf565b611322838361125a565b8060001904821115611336576113366110dc565b029392505050565b6000610fbc838361129d565b60006001600160ff1b0381841382841380821686840486111615611370576113706110dc565b600160ff1b600087128281168783058912161561138f5761138f6110dc565b600087129250878205871284841616156113ab576113ab6110dc565b878505871281841616156113c1576113c16110dc565b505050929093029392505050565b634e487b7160e01b600052601260045260246000fd5b6000826113f4576113f46113cf565b600160ff1b82146000198414161561140e5761140e6110dc565b500590565b600081600019048311821515161561142d5761142d6110dc565b500290565b600082611441576114416113cf565b50049056fea2646970667358221220ee7b83225dfd0f5e8caa87f3dba5ef1ef4353c58e1b64acb9f8ab2725bbe66b464736f6c634300080b0033",
  "immutableReferences": {},
  "generatedSources": [
    {
      "ast": {
        "nodeType": "YulBlock",
        "src": "0:606:56",
        "statements": [
          {
            "nodeType": "YulBlock",
            "src": "6:3:56",
            "statements": []
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "59:86:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "123:16:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "132:1:56",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "135:1:56",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "125:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "125:12:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "125:12:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "82:5:56"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "93:5:56"
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "108:3:56",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "113:1:56",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "104:3:56"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "104:11:56"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "117:1:56",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "100:3:56"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "100:19:56"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "89:3:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "89:31:56"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "79:2:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "79:42:56"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "72:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "72:50:56"
                  },
                  "nodeType": "YulIf",
                  "src": "69:70:56"
                }
              ]
            },
            "name": "validator_revert_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "48:5:56",
                "type": ""
              }
            ],
            "src": "14:131:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "273:331:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "319:16:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "328:1:56",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "331:1:56",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "321:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "321:12:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "321:12:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "294:7:56"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "303:9:56"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "290:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "290:23:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "315:2:56",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "286:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "286:32:56"
                  },
                  "nodeType": "YulIf",
                  "src": "283:52:56"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "344:29:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "363:9:56"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "357:5:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "357:16:56"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "348:5:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "407:5:56"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "382:24:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "382:31:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "382:31:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "422:15:56",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "432:5:56"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "422:6:56"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "446:40:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "471:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "482:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "467:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "467:18:56"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "461:5:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "461:25:56"
                  },
                  "variables": [
                    {
                      "name": "value_1",
                      "nodeType": "YulTypedName",
                      "src": "450:7:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value_1",
                        "nodeType": "YulIdentifier",
                        "src": "520:7:56"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "495:24:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "495:33:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "495:33:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "537:17:56",
                  "value": {
                    "name": "value_1",
                    "nodeType": "YulIdentifier",
                    "src": "547:7:56"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "537:6:56"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "563:35:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "583:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "594:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "579:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "579:18:56"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "573:5:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "573:25:56"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "563:6:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_address_payablet_uint256_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "223:9:56",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "234:7:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "246:6:56",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "254:6:56",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "262:6:56",
                "type": ""
              }
            ],
            "src": "150:454:56"
          }
        ]
      },
      "contents": "{\n    { }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_address_payablet_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := mload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := mload(add(headStart, 64))\n    }\n}",
      "id": 56,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "deployedGeneratedSources": [
    {
      "ast": {
        "nodeType": "YulBlock",
        "src": "0:10853:56",
        "statements": [
          {
            "nodeType": "YulBlock",
            "src": "6:3:56",
            "statements": []
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "115:76:56",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "125:26:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "137:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "148:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "133:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "133:18:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "125:4:56"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "167:9:56"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "178:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "160:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "160:25:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "160:25:56"
                }
              ]
            },
            "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "84:9:56",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "95:6:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "106:4:56",
                "type": ""
              }
            ],
            "src": "14:177:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "266:110:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "312:16:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "321:1:56",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "324:1:56",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "314:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "314:12:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "314:12:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "287:7:56"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "296:9:56"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "283:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "283:23:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "308:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "279:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "279:32:56"
                  },
                  "nodeType": "YulIf",
                  "src": "276:52:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "337:33:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "360:9:56"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "347:12:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "347:23:56"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "337:6:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "232:9:56",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "243:7:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "255:6:56",
                "type": ""
              }
            ],
            "src": "196:180:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "426:86:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "490:16:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "499:1:56",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "502:1:56",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "492:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "492:12:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "492:12:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "449:5:56"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "460:5:56"
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "475:3:56",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "480:1:56",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "471:3:56"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "471:11:56"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "484:1:56",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "467:3:56"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "467:19:56"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "456:3:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "456:31:56"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "446:2:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "446:42:56"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "439:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "439:50:56"
                  },
                  "nodeType": "YulIf",
                  "src": "436:70:56"
                }
              ]
            },
            "name": "validator_revert_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "415:5:56",
                "type": ""
              }
            ],
            "src": "381:131:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "587:177:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "633:16:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "642:1:56",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "645:1:56",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "635:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "635:12:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "635:12:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "608:7:56"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "617:9:56"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "604:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "604:23:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "629:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "600:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "600:32:56"
                  },
                  "nodeType": "YulIf",
                  "src": "597:52:56"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "658:36:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "684:9:56"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "671:12:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "671:23:56"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "662:5:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "728:5:56"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "703:24:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "703:31:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "703:31:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "743:15:56",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "753:5:56"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "743:6:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "553:9:56",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "564:7:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "576:6:56",
                "type": ""
              }
            ],
            "src": "517:247:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "811:76:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "865:16:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "874:1:56",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "877:1:56",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "867:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "867:12:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "867:12:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "834:5:56"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "855:5:56"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "848:6:56"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "848:13:56"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "841:6:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "841:21:56"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "831:2:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "831:32:56"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "824:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "824:40:56"
                  },
                  "nodeType": "YulIf",
                  "src": "821:60:56"
                }
              ]
            },
            "name": "validator_revert_bool",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "800:5:56",
                "type": ""
              }
            ],
            "src": "769:118:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "993:422:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1039:16:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1048:1:56",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1051:1:56",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1041:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1041:12:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1041:12:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "1014:7:56"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1023:9:56"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "1010:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1010:23:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1035:2:56",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "1006:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1006:32:56"
                  },
                  "nodeType": "YulIf",
                  "src": "1003:52:56"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1064:36:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1090:9:56"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "1077:12:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1077:23:56"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "1068:5:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "1134:5:56"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "1109:24:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1109:31:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1109:31:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1149:15:56",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "1159:5:56"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "1149:6:56"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1173:47:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1205:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1216:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1201:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1201:18:56"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "1188:12:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1188:32:56"
                  },
                  "variables": [
                    {
                      "name": "value_1",
                      "nodeType": "YulTypedName",
                      "src": "1177:7:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value_1",
                        "nodeType": "YulIdentifier",
                        "src": "1251:7:56"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_bool",
                      "nodeType": "YulIdentifier",
                      "src": "1229:21:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1229:30:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1229:30:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1268:17:56",
                  "value": {
                    "name": "value_1",
                    "nodeType": "YulIdentifier",
                    "src": "1278:7:56"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "1268:6:56"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1294:47:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1326:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1337:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1322:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1322:18:56"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "1309:12:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1309:32:56"
                  },
                  "variables": [
                    {
                      "name": "value_2",
                      "nodeType": "YulTypedName",
                      "src": "1298:7:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value_2",
                        "nodeType": "YulIdentifier",
                        "src": "1375:7:56"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "1350:24:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1350:33:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1350:33:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1392:17:56",
                  "value": {
                    "name": "value_2",
                    "nodeType": "YulIdentifier",
                    "src": "1402:7:56"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "1392:6:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_boolt_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "943:9:56",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "954:7:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "966:6:56",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "974:6:56",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "982:6:56",
                "type": ""
              }
            ],
            "src": "892:523:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1605:206:56",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "1615:27:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1627:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1638:3:56",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1623:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1623:19:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "1615:4:56"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1658:9:56"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "1669:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1651:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1651:25:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1651:25:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1696:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1707:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1692:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1692:18:56"
                      },
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "1712:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1685:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1685:34:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1685:34:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1739:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1750:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1735:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1735:18:56"
                      },
                      {
                        "name": "value2",
                        "nodeType": "YulIdentifier",
                        "src": "1755:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1728:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1728:34:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1728:34:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1782:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1793:2:56",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1778:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1778:18:56"
                      },
                      {
                        "name": "value3",
                        "nodeType": "YulIdentifier",
                        "src": "1798:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1771:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1771:34:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1771:34:56"
                }
              ]
            },
            "name": "abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1550:9:56",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "1561:6:56",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "1569:6:56",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "1577:6:56",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "1585:6:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "1596:4:56",
                "type": ""
              }
            ],
            "src": "1420:391:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1917:102:56",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "1927:26:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1939:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1950:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1935:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1935:18:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "1927:4:56"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1969:9:56"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "1984:6:56"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2000:3:56",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2005:1:56",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "1996:3:56"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1996:11:56"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "2009:1:56",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "1992:3:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1992:19:56"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "1980:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1980:32:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1962:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1962:51:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1962:51:56"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1886:9:56",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "1897:6:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "1908:4:56",
                "type": ""
              }
            ],
            "src": "1816:203:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2147:161:56",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "2157:26:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2169:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2180:2:56",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "2165:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2165:18:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "2157:4:56"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2199:9:56"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "value0",
                                "nodeType": "YulIdentifier",
                                "src": "2224:6:56"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "2217:6:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2217:14:56"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nodeType": "YulIdentifier",
                          "src": "2210:6:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2210:22:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2192:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2192:41:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2192:41:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2253:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2264:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2249:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2249:18:56"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "2273:6:56"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2289:3:56",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2294:1:56",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "2285:3:56"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2285:11:56"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "2298:1:56",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "2281:3:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2281:19:56"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "2269:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2269:32:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2242:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2242:60:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2242:60:56"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bool_t_address__to_t_bool_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2108:9:56",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "2119:6:56",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "2127:6:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "2138:4:56",
                "type": ""
              }
            ],
            "src": "2024:284:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2430:102:56",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "2440:26:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2452:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2463:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "2448:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2448:18:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "2440:4:56"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2482:9:56"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "2497:6:56"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2513:3:56",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2518:1:56",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "2509:3:56"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2509:11:56"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "2522:1:56",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "2505:3:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2505:19:56"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "2493:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2493:32:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2475:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2475:51:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2475:51:56"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_payable__to_t_address_payable__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2399:9:56",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "2410:6:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "2421:4:56",
                "type": ""
              }
            ],
            "src": "2313:219:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2675:316:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "2722:16:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2731:1:56",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2734:1:56",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "2724:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2724:12:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2724:12:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "2696:7:56"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2705:9:56"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "2692:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2692:23:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2717:3:56",
                        "type": "",
                        "value": "160"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "2688:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2688:33:56"
                  },
                  "nodeType": "YulIf",
                  "src": "2685:53:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2747:33:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2770:9:56"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "2757:12:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2757:23:56"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "2747:6:56"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2789:42:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2816:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2827:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2812:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2812:18:56"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "2799:12:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2799:32:56"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "2789:6:56"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2840:42:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2867:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2878:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2863:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2863:18:56"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "2850:12:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2850:32:56"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "2840:6:56"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2891:42:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2918:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2929:2:56",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2914:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2914:18:56"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "2901:12:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2901:32:56"
                  },
                  "variableNames": [
                    {
                      "name": "value3",
                      "nodeType": "YulIdentifier",
                      "src": "2891:6:56"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2942:43:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2969:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2980:3:56",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2965:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2965:19:56"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "2952:12:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2952:33:56"
                  },
                  "variableNames": [
                    {
                      "name": "value4",
                      "nodeType": "YulIdentifier",
                      "src": "2942:6:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2609:9:56",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "2620:7:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "2632:6:56",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "2640:6:56",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "2648:6:56",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "2656:6:56",
                "type": ""
              },
              {
                "name": "value4",
                "nodeType": "YulTypedName",
                "src": "2664:6:56",
                "type": ""
              }
            ],
            "src": "2537:454:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3083:228:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3129:16:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3138:1:56",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3141:1:56",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "3131:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3131:12:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3131:12:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "3104:7:56"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3113:9:56"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "3100:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3100:23:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3125:2:56",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "3096:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3096:32:56"
                  },
                  "nodeType": "YulIf",
                  "src": "3093:52:56"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3154:36:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3180:9:56"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "3167:12:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3167:23:56"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "3158:5:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "3224:5:56"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "3199:24:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3199:31:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3199:31:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3239:15:56",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "3249:5:56"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "3239:6:56"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3263:42:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3290:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3301:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3286:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3286:18:56"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "3273:12:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3273:32:56"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "3263:6:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3041:9:56",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "3052:7:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "3064:6:56",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "3072:6:56",
                "type": ""
              }
            ],
            "src": "2996:315:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3394:177:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3440:16:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3449:1:56",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3452:1:56",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "3442:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3442:12:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3442:12:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "3415:7:56"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3424:9:56"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "3411:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3411:23:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3436:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "3407:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3407:32:56"
                  },
                  "nodeType": "YulIf",
                  "src": "3404:52:56"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3465:36:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3491:9:56"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "3478:12:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3478:23:56"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "3469:5:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "3535:5:56"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "3510:24:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3510:31:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3510:31:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3550:15:56",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "3560:5:56"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "3550:6:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_address_payable",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3360:9:56",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "3371:7:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "3383:6:56",
                "type": ""
              }
            ],
            "src": "3316:255:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3608:95:56",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3625:1:56",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3632:3:56",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3637:10:56",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "3628:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3628:20:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3618:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3618:31:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3618:31:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3665:1:56",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3668:4:56",
                        "type": "",
                        "value": "0x11"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3658:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3658:15:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3658:15:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3689:1:56",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3692:4:56",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "3682:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3682:15:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3682:15:56"
                }
              ]
            },
            "name": "panic_error_0x11",
            "nodeType": "YulFunctionDefinition",
            "src": "3576:127:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3756:80:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3783:22:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "3785:16:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3785:18:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3785:18:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "3772:1:56"
                      },
                      {
                        "arguments": [
                          {
                            "name": "y",
                            "nodeType": "YulIdentifier",
                            "src": "3779:1:56"
                          }
                        ],
                        "functionName": {
                          "name": "not",
                          "nodeType": "YulIdentifier",
                          "src": "3775:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3775:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "3769:2:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3769:13:56"
                  },
                  "nodeType": "YulIf",
                  "src": "3766:39:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3814:16:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "3825:1:56"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "3828:1:56"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "3821:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3821:9:56"
                  },
                  "variableNames": [
                    {
                      "name": "sum",
                      "nodeType": "YulIdentifier",
                      "src": "3814:3:56"
                    }
                  ]
                }
              ]
            },
            "name": "checked_add_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nodeType": "YulTypedName",
                "src": "3739:1:56",
                "type": ""
              },
              {
                "name": "y",
                "nodeType": "YulTypedName",
                "src": "3742:1:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "sum",
                "nodeType": "YulTypedName",
                "src": "3748:3:56",
                "type": ""
              }
            ],
            "src": "3708:128:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3888:88:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3919:22:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "3921:16:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3921:18:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3921:18:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "3904:5:56"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3915:1:56",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "not",
                          "nodeType": "YulIdentifier",
                          "src": "3911:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3911:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "eq",
                      "nodeType": "YulIdentifier",
                      "src": "3901:2:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3901:17:56"
                  },
                  "nodeType": "YulIf",
                  "src": "3898:43:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3950:20:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "3961:5:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3968:1:56",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "3957:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3957:13:56"
                  },
                  "variableNames": [
                    {
                      "name": "ret",
                      "nodeType": "YulIdentifier",
                      "src": "3950:3:56"
                    }
                  ]
                }
              ]
            },
            "name": "increment_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "3870:5:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "ret",
                "nodeType": "YulTypedName",
                "src": "3880:3:56",
                "type": ""
              }
            ],
            "src": "3841:135:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4030:76:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4052:22:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "4054:16:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4054:18:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4054:18:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "4046:1:56"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "4049:1:56"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "4043:2:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4043:8:56"
                  },
                  "nodeType": "YulIf",
                  "src": "4040:34:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4083:17:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "4095:1:56"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "4098:1:56"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "4091:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4091:9:56"
                  },
                  "variableNames": [
                    {
                      "name": "diff",
                      "nodeType": "YulIdentifier",
                      "src": "4083:4:56"
                    }
                  ]
                }
              ]
            },
            "name": "checked_sub_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nodeType": "YulTypedName",
                "src": "4012:1:56",
                "type": ""
              },
              {
                "name": "y",
                "nodeType": "YulTypedName",
                "src": "4015:1:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "diff",
                "nodeType": "YulTypedName",
                "src": "4021:4:56",
                "type": ""
              }
            ],
            "src": "3981:125:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4158:89:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4185:22:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "4187:16:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4187:18:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4187:18:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "4178:5:56"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "4171:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4171:13:56"
                  },
                  "nodeType": "YulIf",
                  "src": "4168:39:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4216:25:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "4227:5:56"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4238:1:56",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "not",
                          "nodeType": "YulIdentifier",
                          "src": "4234:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4234:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "4223:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4223:18:56"
                  },
                  "variableNames": [
                    {
                      "name": "ret",
                      "nodeType": "YulIdentifier",
                      "src": "4216:3:56"
                    }
                  ]
                }
              ]
            },
            "name": "decrement_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "4140:5:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "ret",
                "nodeType": "YulTypedName",
                "src": "4150:3:56",
                "type": ""
              }
            ],
            "src": "4111:136:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4426:182:56",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "4443:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4454:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "4436:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4436:21:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4436:21:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4477:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4488:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4473:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4473:18:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4493:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "4466:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4466:30:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4466:30:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4516:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4527:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4512:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4512:18:56"
                      },
                      {
                        "hexValue": "4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "4532:34:56",
                        "type": "",
                        "value": "Ownable: caller is not the owner"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "4505:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4505:62:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4505:62:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4576:26:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "4588:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4599:2:56",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "4584:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4584:18:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "4576:4:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "4403:9:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "4417:4:56",
                "type": ""
              }
            ],
            "src": "4252:356:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4764:234:56",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "4774:26:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "4786:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4797:2:56",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "4782:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4782:18:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "4774:4:56"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "4809:29:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4827:3:56",
                            "type": "",
                            "value": "160"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4832:1:56",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "4823:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4823:11:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4836:1:56",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "4819:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4819:19:56"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "4813:2:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "4854:9:56"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "4869:6:56"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "4877:2:56"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "4865:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4865:15:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "4847:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4847:34:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4847:34:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4901:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4912:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4897:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4897:18:56"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "value1",
                                "nodeType": "YulIdentifier",
                                "src": "4931:6:56"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "4924:6:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "4924:14:56"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nodeType": "YulIdentifier",
                          "src": "4917:6:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4917:22:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "4890:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4890:50:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4890:50:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4960:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4971:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4956:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4956:18:56"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value2",
                            "nodeType": "YulIdentifier",
                            "src": "4980:6:56"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "4988:2:56"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "4976:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4976:15:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "4949:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4949:43:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4949:43:56"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_t_bool_t_address__to_t_address_t_bool_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "4717:9:56",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "4728:6:56",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "4736:6:56",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "4744:6:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "4755:4:56",
                "type": ""
              }
            ],
            "src": "4613:385:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5177:181:56",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5194:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5205:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5187:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5187:21:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5187:21:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5228:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5239:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5224:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5224:18:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5244:2:56",
                        "type": "",
                        "value": "31"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5217:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5217:30:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5217:30:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5267:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5278:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5263:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5263:18:56"
                      },
                      {
                        "hexValue": "5265656e7472616e637947756172643a207265656e7472616e742063616c6c",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "5283:33:56",
                        "type": "",
                        "value": "ReentrancyGuard: reentrant call"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5256:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5256:61:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5256:61:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5326:26:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5338:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5349:2:56",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "5334:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5334:18:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "5326:4:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "5154:9:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "5168:4:56",
                "type": ""
              }
            ],
            "src": "5003:355:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5422:120:56",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "5432:22:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "5447:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "5441:5:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5441:13:56"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nodeType": "YulIdentifier",
                      "src": "5432:5:56"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "5520:16:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5529:1:56",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5532:1:56",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "5522:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5522:12:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "5522:12:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "5476:5:56"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "5487:5:56"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "5494:22:56",
                                "type": "",
                                "value": "0xffffffffffffffffffff"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "5483:3:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "5483:34:56"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "5473:2:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5473:45:56"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "5466:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5466:53:56"
                  },
                  "nodeType": "YulIf",
                  "src": "5463:73:56"
                }
              ]
            },
            "name": "abi_decode_uint80_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "5401:6:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "5412:5:56",
                "type": ""
              }
            ],
            "src": "5363:179:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5693:327:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "5740:16:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5749:1:56",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5752:1:56",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "5742:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5742:12:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "5742:12:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "5714:7:56"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5723:9:56"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "5710:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5710:23:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5735:3:56",
                        "type": "",
                        "value": "160"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "5706:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5706:33:56"
                  },
                  "nodeType": "YulIf",
                  "src": "5703:53:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5765:49:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5804:9:56"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_uint80_fromMemory",
                      "nodeType": "YulIdentifier",
                      "src": "5775:28:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5775:39:56"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "5765:6:56"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5823:35:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5843:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5854:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5839:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5839:18:56"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "5833:5:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5833:25:56"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "5823:6:56"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5867:35:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5887:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5898:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5883:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5883:18:56"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "5877:5:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5877:25:56"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "5867:6:56"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5911:35:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5931:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5942:2:56",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5927:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5927:18:56"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "5921:5:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5921:25:56"
                  },
                  "variableNames": [
                    {
                      "name": "value3",
                      "nodeType": "YulIdentifier",
                      "src": "5911:6:56"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5955:59:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5998:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6009:3:56",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5994:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5994:19:56"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_uint80_fromMemory",
                      "nodeType": "YulIdentifier",
                      "src": "5965:28:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5965:49:56"
                  },
                  "variableNames": [
                    {
                      "name": "value4",
                      "nodeType": "YulIdentifier",
                      "src": "5955:6:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_uint80t_int256t_uint256t_uint256t_uint80_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "5627:9:56",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "5638:7:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "5650:6:56",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "5658:6:56",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "5666:6:56",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "5674:6:56",
                "type": ""
              },
              {
                "name": "value4",
                "nodeType": "YulTypedName",
                "src": "5682:6:56",
                "type": ""
              }
            ],
            "src": "5547:473:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6104:194:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "6150:16:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6159:1:56",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6162:1:56",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "6152:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6152:12:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "6152:12:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "6125:7:56"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6134:9:56"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "6121:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6121:23:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6146:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "6117:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6117:32:56"
                  },
                  "nodeType": "YulIf",
                  "src": "6114:52:56"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6175:29:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6194:9:56"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "6188:5:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6188:16:56"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "6179:5:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "6252:16:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6261:1:56",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6264:1:56",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "6254:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6254:12:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "6254:12:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "6226:5:56"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "6237:5:56"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "6244:4:56",
                                "type": "",
                                "value": "0xff"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "6233:3:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "6233:16:56"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "6223:2:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6223:27:56"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "6216:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6216:35:56"
                  },
                  "nodeType": "YulIf",
                  "src": "6213:55:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6277:15:56",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "6287:5:56"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "6277:6:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_uint8_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "6070:9:56",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "6081:7:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "6093:6:56",
                "type": ""
              }
            ],
            "src": "6025:273:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6468:218:56",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "6478:26:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6490:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6501:2:56",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "6486:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6486:18:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "6478:4:56"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6513:29:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6531:3:56",
                            "type": "",
                            "value": "160"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6536:1:56",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "6527:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6527:11:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6540:1:56",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "6523:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6523:19:56"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "6517:2:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6558:9:56"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "6573:6:56"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "6581:2:56"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "6569:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6569:15:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6551:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6551:34:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6551:34:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6605:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6616:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6601:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6601:18:56"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "6625:6:56"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "6633:2:56"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "6621:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6621:15:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6594:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6594:43:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6594:43:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6657:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6668:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6653:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6653:18:56"
                      },
                      {
                        "name": "value2",
                        "nodeType": "YulIdentifier",
                        "src": "6673:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6646:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6646:34:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6646:34:56"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_t_address_payable_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "6421:9:56",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "6432:6:56",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "6440:6:56",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "6448:6:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "6459:4:56",
                "type": ""
              }
            ],
            "src": "6303:383:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6769:167:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "6815:16:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6824:1:56",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6827:1:56",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "6817:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6817:12:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "6817:12:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "6790:7:56"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6799:9:56"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "6786:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6786:23:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6811:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "6782:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6782:32:56"
                  },
                  "nodeType": "YulIf",
                  "src": "6779:52:56"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6840:29:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6859:9:56"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "6853:5:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6853:16:56"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "6844:5:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "6900:5:56"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_bool",
                      "nodeType": "YulIdentifier",
                      "src": "6878:21:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6878:28:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6878:28:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6915:15:56",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "6925:5:56"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "6915:6:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bool_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "6735:9:56",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "6746:7:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "6758:6:56",
                "type": ""
              }
            ],
            "src": "6691:245:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7070:145:56",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "7080:26:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "7092:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7103:2:56",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "7088:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7088:18:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "7080:4:56"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "7122:9:56"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "7137:6:56"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7153:3:56",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7158:1:56",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "7149:3:56"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7149:11:56"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "7162:1:56",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "7145:3:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "7145:19:56"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "7133:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7133:32:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7115:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7115:51:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7115:51:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7186:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7197:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7182:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7182:18:56"
                      },
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "7202:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7175:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7175:34:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7175:34:56"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "7031:9:56",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "7042:6:56",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "7050:6:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "7061:4:56",
                "type": ""
              }
            ],
            "src": "6941:274:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7349:119:56",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "7359:26:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "7371:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7382:2:56",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "7367:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7367:18:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "7359:4:56"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "7401:9:56"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "7412:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7394:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7394:25:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7394:25:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7439:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7450:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7435:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7435:18:56"
                      },
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "7455:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7428:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7428:34:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7428:34:56"
                }
              ]
            },
            "name": "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "7310:9:56",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "7321:6:56",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "7329:6:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "7340:4:56",
                "type": ""
              }
            ],
            "src": "7220:248:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7647:228:56",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "7664:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7675:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7657:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7657:21:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7657:21:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7698:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7709:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7694:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7694:18:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7714:2:56",
                        "type": "",
                        "value": "38"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7687:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7687:30:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7687:30:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7737:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7748:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7733:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7733:18:56"
                      },
                      {
                        "hexValue": "4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "7753:34:56",
                        "type": "",
                        "value": "Ownable: new owner is the zero a"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7726:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7726:62:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7726:62:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7808:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7819:2:56",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7804:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7804:18:56"
                      },
                      {
                        "hexValue": "646472657373",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "7824:8:56",
                        "type": "",
                        "value": "ddress"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7797:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7797:36:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7797:36:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7842:27:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "7854:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7865:3:56",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "7850:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7850:19:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "7842:4:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "7624:9:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "7638:4:56",
                "type": ""
              }
            ],
            "src": "7473:402:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7989:102:56",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "7999:26:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "8011:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8022:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "8007:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8007:18:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "7999:4:56"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "8041:9:56"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "8056:6:56"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8072:3:56",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8077:1:56",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "8068:3:56"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8068:11:56"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "8081:1:56",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "8064:3:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "8064:19:56"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "8052:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8052:32:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8034:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8034:51:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8034:51:56"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_payable__to_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "7958:9:56",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "7969:6:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "7980:4:56",
                "type": ""
              }
            ],
            "src": "7880:211:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "8143:148:56",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "8153:23:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "8168:1:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8171:4:56",
                        "type": "",
                        "value": "0xff"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "8164:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8164:12:56"
                  },
                  "variables": [
                    {
                      "name": "x_1",
                      "nodeType": "YulTypedName",
                      "src": "8157:3:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "8185:23:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "8200:1:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8203:4:56",
                        "type": "",
                        "value": "0xff"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "8196:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8196:12:56"
                  },
                  "variables": [
                    {
                      "name": "y_1",
                      "nodeType": "YulTypedName",
                      "src": "8189:3:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "8233:22:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "8235:16:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8235:18:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "8235:18:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "x_1",
                        "nodeType": "YulIdentifier",
                        "src": "8223:3:56"
                      },
                      {
                        "name": "y_1",
                        "nodeType": "YulIdentifier",
                        "src": "8228:3:56"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "8220:2:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8220:12:56"
                  },
                  "nodeType": "YulIf",
                  "src": "8217:38:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8264:21:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "x_1",
                        "nodeType": "YulIdentifier",
                        "src": "8276:3:56"
                      },
                      {
                        "name": "y_1",
                        "nodeType": "YulIdentifier",
                        "src": "8281:3:56"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "8272:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8272:13:56"
                  },
                  "variableNames": [
                    {
                      "name": "diff",
                      "nodeType": "YulIdentifier",
                      "src": "8264:4:56"
                    }
                  ]
                }
              ]
            },
            "name": "checked_sub_t_uint8",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nodeType": "YulTypedName",
                "src": "8125:1:56",
                "type": ""
              },
              {
                "name": "y",
                "nodeType": "YulTypedName",
                "src": "8128:1:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "diff",
                "nodeType": "YulTypedName",
                "src": "8134:4:56",
                "type": ""
              }
            ],
            "src": "8096:195:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "8360:358:56",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "8370:16:56",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "8385:1:56",
                    "type": "",
                    "value": "1"
                  },
                  "variables": [
                    {
                      "name": "power_1",
                      "nodeType": "YulTypedName",
                      "src": "8374:7:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8395:16:56",
                  "value": {
                    "name": "power_1",
                    "nodeType": "YulIdentifier",
                    "src": "8404:7:56"
                  },
                  "variableNames": [
                    {
                      "name": "power",
                      "nodeType": "YulIdentifier",
                      "src": "8395:5:56"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8420:13:56",
                  "value": {
                    "name": "_base",
                    "nodeType": "YulIdentifier",
                    "src": "8428:5:56"
                  },
                  "variableNames": [
                    {
                      "name": "base",
                      "nodeType": "YulIdentifier",
                      "src": "8420:4:56"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "8484:228:56",
                    "statements": [
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8529:22:56",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [],
                                "functionName": {
                                  "name": "panic_error_0x11",
                                  "nodeType": "YulIdentifier",
                                  "src": "8531:16:56"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8531:18:56"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8531:18:56"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "base",
                              "nodeType": "YulIdentifier",
                              "src": "8504:4:56"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "8518:1:56",
                                      "type": "",
                                      "value": "0"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "not",
                                    "nodeType": "YulIdentifier",
                                    "src": "8514:3:56"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "8514:6:56"
                                },
                                {
                                  "name": "base",
                                  "nodeType": "YulIdentifier",
                                  "src": "8522:4:56"
                                }
                              ],
                              "functionName": {
                                "name": "div",
                                "nodeType": "YulIdentifier",
                                "src": "8510:3:56"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "8510:17:56"
                            }
                          ],
                          "functionName": {
                            "name": "gt",
                            "nodeType": "YulIdentifier",
                            "src": "8501:2:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8501:27:56"
                        },
                        "nodeType": "YulIf",
                        "src": "8498:53:56"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8590:29:56",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "8592:25:56",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "power",
                                    "nodeType": "YulIdentifier",
                                    "src": "8605:5:56"
                                  },
                                  {
                                    "name": "base",
                                    "nodeType": "YulIdentifier",
                                    "src": "8612:4:56"
                                  }
                                ],
                                "functionName": {
                                  "name": "mul",
                                  "nodeType": "YulIdentifier",
                                  "src": "8601:3:56"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8601:16:56"
                              },
                              "variableNames": [
                                {
                                  "name": "power",
                                  "nodeType": "YulIdentifier",
                                  "src": "8592:5:56"
                                }
                              ]
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "exponent",
                              "nodeType": "YulIdentifier",
                              "src": "8571:8:56"
                            },
                            {
                              "name": "power_1",
                              "nodeType": "YulIdentifier",
                              "src": "8581:7:56"
                            }
                          ],
                          "functionName": {
                            "name": "and",
                            "nodeType": "YulIdentifier",
                            "src": "8567:3:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8567:22:56"
                        },
                        "nodeType": "YulIf",
                        "src": "8564:55:56"
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "8632:23:56",
                        "value": {
                          "arguments": [
                            {
                              "name": "base",
                              "nodeType": "YulIdentifier",
                              "src": "8644:4:56"
                            },
                            {
                              "name": "base",
                              "nodeType": "YulIdentifier",
                              "src": "8650:4:56"
                            }
                          ],
                          "functionName": {
                            "name": "mul",
                            "nodeType": "YulIdentifier",
                            "src": "8640:3:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8640:15:56"
                        },
                        "variableNames": [
                          {
                            "name": "base",
                            "nodeType": "YulIdentifier",
                            "src": "8632:4:56"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "8668:34:56",
                        "value": {
                          "arguments": [
                            {
                              "name": "power_1",
                              "nodeType": "YulIdentifier",
                              "src": "8684:7:56"
                            },
                            {
                              "name": "exponent",
                              "nodeType": "YulIdentifier",
                              "src": "8693:8:56"
                            }
                          ],
                          "functionName": {
                            "name": "shr",
                            "nodeType": "YulIdentifier",
                            "src": "8680:3:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8680:22:56"
                        },
                        "variableNames": [
                          {
                            "name": "exponent",
                            "nodeType": "YulIdentifier",
                            "src": "8668:8:56"
                          }
                        ]
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "exponent",
                        "nodeType": "YulIdentifier",
                        "src": "8453:8:56"
                      },
                      {
                        "name": "power_1",
                        "nodeType": "YulIdentifier",
                        "src": "8463:7:56"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "8450:2:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8450:21:56"
                  },
                  "nodeType": "YulForLoop",
                  "post": {
                    "nodeType": "YulBlock",
                    "src": "8472:3:56",
                    "statements": []
                  },
                  "pre": {
                    "nodeType": "YulBlock",
                    "src": "8446:3:56",
                    "statements": []
                  },
                  "src": "8442:270:56"
                }
              ]
            },
            "name": "checked_exp_helper",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "_base",
                "nodeType": "YulTypedName",
                "src": "8324:5:56",
                "type": ""
              },
              {
                "name": "exponent",
                "nodeType": "YulTypedName",
                "src": "8331:8:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "power",
                "nodeType": "YulTypedName",
                "src": "8344:5:56",
                "type": ""
              },
              {
                "name": "base",
                "nodeType": "YulTypedName",
                "src": "8351:4:56",
                "type": ""
              }
            ],
            "src": "8296:422:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "8782:747:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "8820:52:56",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "8834:10:56",
                        "value": {
                          "kind": "number",
                          "nodeType": "YulLiteral",
                          "src": "8843:1:56",
                          "type": "",
                          "value": "1"
                        },
                        "variableNames": [
                          {
                            "name": "power",
                            "nodeType": "YulIdentifier",
                            "src": "8834:5:56"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulLeave",
                        "src": "8857:5:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "exponent",
                        "nodeType": "YulIdentifier",
                        "src": "8802:8:56"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "8795:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8795:16:56"
                  },
                  "nodeType": "YulIf",
                  "src": "8792:80:56"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "8905:52:56",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "8919:10:56",
                        "value": {
                          "kind": "number",
                          "nodeType": "YulLiteral",
                          "src": "8928:1:56",
                          "type": "",
                          "value": "0"
                        },
                        "variableNames": [
                          {
                            "name": "power",
                            "nodeType": "YulIdentifier",
                            "src": "8919:5:56"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulLeave",
                        "src": "8942:5:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "base",
                        "nodeType": "YulIdentifier",
                        "src": "8891:4:56"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "8884:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8884:12:56"
                  },
                  "nodeType": "YulIf",
                  "src": "8881:76:56"
                },
                {
                  "cases": [
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "8993:52:56",
                        "statements": [
                          {
                            "nodeType": "YulAssignment",
                            "src": "9007:10:56",
                            "value": {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "9016:1:56",
                              "type": "",
                              "value": "1"
                            },
                            "variableNames": [
                              {
                                "name": "power",
                                "nodeType": "YulIdentifier",
                                "src": "9007:5:56"
                              }
                            ]
                          },
                          {
                            "nodeType": "YulLeave",
                            "src": "9030:5:56"
                          }
                        ]
                      },
                      "nodeType": "YulCase",
                      "src": "8986:59:56",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8991:1:56",
                        "type": "",
                        "value": "1"
                      }
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "9061:123:56",
                        "statements": [
                          {
                            "body": {
                              "nodeType": "YulBlock",
                              "src": "9096:22:56",
                              "statements": [
                                {
                                  "expression": {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "panic_error_0x11",
                                      "nodeType": "YulIdentifier",
                                      "src": "9098:16:56"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9098:18:56"
                                  },
                                  "nodeType": "YulExpressionStatement",
                                  "src": "9098:18:56"
                                }
                              ]
                            },
                            "condition": {
                              "arguments": [
                                {
                                  "name": "exponent",
                                  "nodeType": "YulIdentifier",
                                  "src": "9081:8:56"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "9091:3:56",
                                  "type": "",
                                  "value": "255"
                                }
                              ],
                              "functionName": {
                                "name": "gt",
                                "nodeType": "YulIdentifier",
                                "src": "9078:2:56"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "9078:17:56"
                            },
                            "nodeType": "YulIf",
                            "src": "9075:43:56"
                          },
                          {
                            "nodeType": "YulAssignment",
                            "src": "9131:25:56",
                            "value": {
                              "arguments": [
                                {
                                  "name": "exponent",
                                  "nodeType": "YulIdentifier",
                                  "src": "9144:8:56"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "9154:1:56",
                                  "type": "",
                                  "value": "1"
                                }
                              ],
                              "functionName": {
                                "name": "shl",
                                "nodeType": "YulIdentifier",
                                "src": "9140:3:56"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "9140:16:56"
                            },
                            "variableNames": [
                              {
                                "name": "power",
                                "nodeType": "YulIdentifier",
                                "src": "9131:5:56"
                              }
                            ]
                          },
                          {
                            "nodeType": "YulLeave",
                            "src": "9169:5:56"
                          }
                        ]
                      },
                      "nodeType": "YulCase",
                      "src": "9054:130:56",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9059:1:56",
                        "type": "",
                        "value": "2"
                      }
                    }
                  ],
                  "expression": {
                    "name": "base",
                    "nodeType": "YulIdentifier",
                    "src": "8973:4:56"
                  },
                  "nodeType": "YulSwitch",
                  "src": "8966:218:56"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "9282:70:56",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "9296:28:56",
                        "value": {
                          "arguments": [
                            {
                              "name": "base",
                              "nodeType": "YulIdentifier",
                              "src": "9309:4:56"
                            },
                            {
                              "name": "exponent",
                              "nodeType": "YulIdentifier",
                              "src": "9315:8:56"
                            }
                          ],
                          "functionName": {
                            "name": "exp",
                            "nodeType": "YulIdentifier",
                            "src": "9305:3:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9305:19:56"
                        },
                        "variableNames": [
                          {
                            "name": "power",
                            "nodeType": "YulIdentifier",
                            "src": "9296:5:56"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulLeave",
                        "src": "9337:5:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "base",
                                "nodeType": "YulIdentifier",
                                "src": "9206:4:56"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "9212:2:56",
                                "type": "",
                                "value": "11"
                              }
                            ],
                            "functionName": {
                              "name": "lt",
                              "nodeType": "YulIdentifier",
                              "src": "9203:2:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "9203:12:56"
                          },
                          {
                            "arguments": [
                              {
                                "name": "exponent",
                                "nodeType": "YulIdentifier",
                                "src": "9220:8:56"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "9230:2:56",
                                "type": "",
                                "value": "78"
                              }
                            ],
                            "functionName": {
                              "name": "lt",
                              "nodeType": "YulIdentifier",
                              "src": "9217:2:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "9217:16:56"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "9199:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9199:35:56"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "base",
                                "nodeType": "YulIdentifier",
                                "src": "9243:4:56"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "9249:3:56",
                                "type": "",
                                "value": "307"
                              }
                            ],
                            "functionName": {
                              "name": "lt",
                              "nodeType": "YulIdentifier",
                              "src": "9240:2:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "9240:13:56"
                          },
                          {
                            "arguments": [
                              {
                                "name": "exponent",
                                "nodeType": "YulIdentifier",
                                "src": "9258:8:56"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "9268:2:56",
                                "type": "",
                                "value": "32"
                              }
                            ],
                            "functionName": {
                              "name": "lt",
                              "nodeType": "YulIdentifier",
                              "src": "9255:2:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "9255:16:56"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "9236:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9236:36:56"
                      }
                    ],
                    "functionName": {
                      "name": "or",
                      "nodeType": "YulIdentifier",
                      "src": "9196:2:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9196:77:56"
                  },
                  "nodeType": "YulIf",
                  "src": "9193:159:56"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "9361:57:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "base",
                        "nodeType": "YulIdentifier",
                        "src": "9403:4:56"
                      },
                      {
                        "name": "exponent",
                        "nodeType": "YulIdentifier",
                        "src": "9409:8:56"
                      }
                    ],
                    "functionName": {
                      "name": "checked_exp_helper",
                      "nodeType": "YulIdentifier",
                      "src": "9384:18:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9384:34:56"
                  },
                  "variables": [
                    {
                      "name": "power_1",
                      "nodeType": "YulTypedName",
                      "src": "9365:7:56",
                      "type": ""
                    },
                    {
                      "name": "base_1",
                      "nodeType": "YulTypedName",
                      "src": "9374:6:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "9463:22:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "9465:16:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9465:18:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "9465:18:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "power_1",
                        "nodeType": "YulIdentifier",
                        "src": "9433:7:56"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "9450:1:56",
                                "type": "",
                                "value": "0"
                              }
                            ],
                            "functionName": {
                              "name": "not",
                              "nodeType": "YulIdentifier",
                              "src": "9446:3:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "9446:6:56"
                          },
                          {
                            "name": "base_1",
                            "nodeType": "YulIdentifier",
                            "src": "9454:6:56"
                          }
                        ],
                        "functionName": {
                          "name": "div",
                          "nodeType": "YulIdentifier",
                          "src": "9442:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9442:19:56"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "9430:2:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9430:32:56"
                  },
                  "nodeType": "YulIf",
                  "src": "9427:58:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "9494:29:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "power_1",
                        "nodeType": "YulIdentifier",
                        "src": "9507:7:56"
                      },
                      {
                        "name": "base_1",
                        "nodeType": "YulIdentifier",
                        "src": "9516:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "mul",
                      "nodeType": "YulIdentifier",
                      "src": "9503:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9503:20:56"
                  },
                  "variableNames": [
                    {
                      "name": "power",
                      "nodeType": "YulIdentifier",
                      "src": "9494:5:56"
                    }
                  ]
                }
              ]
            },
            "name": "checked_exp_unsigned",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "base",
                "nodeType": "YulTypedName",
                "src": "8753:4:56",
                "type": ""
              },
              {
                "name": "exponent",
                "nodeType": "YulTypedName",
                "src": "8759:8:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "power",
                "nodeType": "YulTypedName",
                "src": "8772:5:56",
                "type": ""
              }
            ],
            "src": "8723:806:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "9604:61:56",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "9614:45:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "base",
                        "nodeType": "YulIdentifier",
                        "src": "9644:4:56"
                      },
                      {
                        "name": "exponent",
                        "nodeType": "YulIdentifier",
                        "src": "9650:8:56"
                      }
                    ],
                    "functionName": {
                      "name": "checked_exp_unsigned",
                      "nodeType": "YulIdentifier",
                      "src": "9623:20:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9623:36:56"
                  },
                  "variableNames": [
                    {
                      "name": "power",
                      "nodeType": "YulIdentifier",
                      "src": "9614:5:56"
                    }
                  ]
                }
              ]
            },
            "name": "checked_exp_t_uint256_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "base",
                "nodeType": "YulTypedName",
                "src": "9575:4:56",
                "type": ""
              },
              {
                "name": "exponent",
                "nodeType": "YulTypedName",
                "src": "9581:8:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "power",
                "nodeType": "YulTypedName",
                "src": "9594:5:56",
                "type": ""
              }
            ],
            "src": "9534:131:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "9721:502:56",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "9731:29:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9749:3:56",
                            "type": "",
                            "value": "255"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9754:1:56",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "9745:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9745:11:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9758:1:56",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "9741:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9741:19:56"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "9735:2:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "9769:19:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "9783:1:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9786:1:56",
                        "type": "",
                        "value": "0"
                      }
                    ],
                    "functionName": {
                      "name": "sgt",
                      "nodeType": "YulIdentifier",
                      "src": "9779:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9779:9:56"
                  },
                  "variables": [
                    {
                      "name": "_2",
                      "nodeType": "YulTypedName",
                      "src": "9773:2:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "9797:19:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "9811:1:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9814:1:56",
                        "type": "",
                        "value": "0"
                      }
                    ],
                    "functionName": {
                      "name": "sgt",
                      "nodeType": "YulIdentifier",
                      "src": "9807:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9807:9:56"
                  },
                  "variables": [
                    {
                      "name": "_3",
                      "nodeType": "YulTypedName",
                      "src": "9801:2:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "9864:22:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "9866:16:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9866:18:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "9866:18:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "_3",
                            "nodeType": "YulIdentifier",
                            "src": "9836:2:56"
                          },
                          {
                            "name": "_2",
                            "nodeType": "YulIdentifier",
                            "src": "9840:2:56"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "9832:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9832:11:56"
                      },
                      {
                        "arguments": [
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "9848:1:56"
                          },
                          {
                            "arguments": [
                              {
                                "name": "_1",
                                "nodeType": "YulIdentifier",
                                "src": "9855:2:56"
                              },
                              {
                                "name": "y",
                                "nodeType": "YulIdentifier",
                                "src": "9859:1:56"
                              }
                            ],
                            "functionName": {
                              "name": "div",
                              "nodeType": "YulIdentifier",
                              "src": "9851:3:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "9851:10:56"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "9845:2:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9845:17:56"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "9828:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9828:35:56"
                  },
                  "nodeType": "YulIf",
                  "src": "9825:61:56"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "9895:21:56",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9909:3:56",
                        "type": "",
                        "value": "255"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9914:1:56",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "shl",
                      "nodeType": "YulIdentifier",
                      "src": "9905:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9905:11:56"
                  },
                  "variables": [
                    {
                      "name": "_4",
                      "nodeType": "YulTypedName",
                      "src": "9899:2:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "9925:19:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "9939:1:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9942:1:56",
                        "type": "",
                        "value": "0"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "9935:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9935:9:56"
                  },
                  "variables": [
                    {
                      "name": "_5",
                      "nodeType": "YulTypedName",
                      "src": "9929:2:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "9994:22:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "9996:16:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9996:18:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "9996:18:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "_3",
                            "nodeType": "YulIdentifier",
                            "src": "9964:2:56"
                          },
                          {
                            "name": "_5",
                            "nodeType": "YulIdentifier",
                            "src": "9968:2:56"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "9960:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9960:11:56"
                      },
                      {
                        "arguments": [
                          {
                            "name": "y",
                            "nodeType": "YulIdentifier",
                            "src": "9977:1:56"
                          },
                          {
                            "arguments": [
                              {
                                "name": "_4",
                                "nodeType": "YulIdentifier",
                                "src": "9985:2:56"
                              },
                              {
                                "name": "x",
                                "nodeType": "YulIdentifier",
                                "src": "9989:1:56"
                              }
                            ],
                            "functionName": {
                              "name": "sdiv",
                              "nodeType": "YulIdentifier",
                              "src": "9980:4:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "9980:11:56"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "9973:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9973:19:56"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "9956:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9956:37:56"
                  },
                  "nodeType": "YulIf",
                  "src": "9953:63:56"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "10025:19:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "10039:1:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10042:1:56",
                        "type": "",
                        "value": "0"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "10035:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10035:9:56"
                  },
                  "variables": [
                    {
                      "name": "_6",
                      "nodeType": "YulTypedName",
                      "src": "10029:2:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "10094:22:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "10096:16:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "10096:18:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "10096:18:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "_6",
                            "nodeType": "YulIdentifier",
                            "src": "10064:2:56"
                          },
                          {
                            "name": "_2",
                            "nodeType": "YulIdentifier",
                            "src": "10068:2:56"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "10060:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10060:11:56"
                      },
                      {
                        "arguments": [
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "10077:1:56"
                          },
                          {
                            "arguments": [
                              {
                                "name": "_4",
                                "nodeType": "YulIdentifier",
                                "src": "10085:2:56"
                              },
                              {
                                "name": "y",
                                "nodeType": "YulIdentifier",
                                "src": "10089:1:56"
                              }
                            ],
                            "functionName": {
                              "name": "sdiv",
                              "nodeType": "YulIdentifier",
                              "src": "10080:4:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "10080:11:56"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "10073:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10073:19:56"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "10056:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10056:37:56"
                  },
                  "nodeType": "YulIf",
                  "src": "10053:63:56"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "10166:22:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "10168:16:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "10168:18:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "10168:18:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "_6",
                            "nodeType": "YulIdentifier",
                            "src": "10136:2:56"
                          },
                          {
                            "name": "_5",
                            "nodeType": "YulIdentifier",
                            "src": "10140:2:56"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "10132:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10132:11:56"
                      },
                      {
                        "arguments": [
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "10149:1:56"
                          },
                          {
                            "arguments": [
                              {
                                "name": "_1",
                                "nodeType": "YulIdentifier",
                                "src": "10157:2:56"
                              },
                              {
                                "name": "y",
                                "nodeType": "YulIdentifier",
                                "src": "10161:1:56"
                              }
                            ],
                            "functionName": {
                              "name": "sdiv",
                              "nodeType": "YulIdentifier",
                              "src": "10152:4:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "10152:11:56"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "10145:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10145:19:56"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "10128:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10128:37:56"
                  },
                  "nodeType": "YulIf",
                  "src": "10125:63:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "10197:20:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "10212:1:56"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "10215:1:56"
                      }
                    ],
                    "functionName": {
                      "name": "mul",
                      "nodeType": "YulIdentifier",
                      "src": "10208:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10208:9:56"
                  },
                  "variableNames": [
                    {
                      "name": "product",
                      "nodeType": "YulIdentifier",
                      "src": "10197:7:56"
                    }
                  ]
                }
              ]
            },
            "name": "checked_mul_t_int256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nodeType": "YulTypedName",
                "src": "9700:1:56",
                "type": ""
              },
              {
                "name": "y",
                "nodeType": "YulTypedName",
                "src": "9703:1:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "product",
                "nodeType": "YulTypedName",
                "src": "9709:7:56",
                "type": ""
              }
            ],
            "src": "9670:553:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "10260:95:56",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10277:1:56",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10284:3:56",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10289:10:56",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "10280:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10280:20:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10270:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10270:31:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10270:31:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10317:1:56",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10320:4:56",
                        "type": "",
                        "value": "0x12"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10310:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10310:15:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10310:15:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10341:1:56",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10344:4:56",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "10334:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10334:15:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10334:15:56"
                }
              ]
            },
            "name": "panic_error_0x12",
            "nodeType": "YulFunctionDefinition",
            "src": "10228:127:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "10405:148:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "10428:22:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x12",
                            "nodeType": "YulIdentifier",
                            "src": "10430:16:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "10430:18:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "10430:18:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "10425:1:56"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "10418:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10418:9:56"
                  },
                  "nodeType": "YulIf",
                  "src": "10415:35:56"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "10501:22:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "10503:16:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "10503:18:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "10503:18:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "10469:1:56"
                          },
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "10476:3:56",
                                "type": "",
                                "value": "255"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "10481:1:56",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "shl",
                              "nodeType": "YulIdentifier",
                              "src": "10472:3:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "10472:11:56"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "10466:2:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10466:18:56"
                      },
                      {
                        "arguments": [
                          {
                            "name": "y",
                            "nodeType": "YulIdentifier",
                            "src": "10489:1:56"
                          },
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "10496:1:56",
                                "type": "",
                                "value": "0"
                              }
                            ],
                            "functionName": {
                              "name": "not",
                              "nodeType": "YulIdentifier",
                              "src": "10492:3:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "10492:6:56"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "10486:2:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10486:13:56"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "10462:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10462:38:56"
                  },
                  "nodeType": "YulIf",
                  "src": "10459:64:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "10532:15:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "10542:1:56"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "10545:1:56"
                      }
                    ],
                    "functionName": {
                      "name": "sdiv",
                      "nodeType": "YulIdentifier",
                      "src": "10537:4:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10537:10:56"
                  },
                  "variableNames": [
                    {
                      "name": "r",
                      "nodeType": "YulIdentifier",
                      "src": "10532:1:56"
                    }
                  ]
                }
              ]
            },
            "name": "checked_div_t_int256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nodeType": "YulTypedName",
                "src": "10390:1:56",
                "type": ""
              },
              {
                "name": "y",
                "nodeType": "YulTypedName",
                "src": "10393:1:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "r",
                "nodeType": "YulTypedName",
                "src": "10399:1:56",
                "type": ""
              }
            ],
            "src": "10360:193:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "10610:116:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "10669:22:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "10671:16:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "10671:18:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "10671:18:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "x",
                                "nodeType": "YulIdentifier",
                                "src": "10641:1:56"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "10634:6:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "10634:9:56"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nodeType": "YulIdentifier",
                          "src": "10627:6:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10627:17:56"
                      },
                      {
                        "arguments": [
                          {
                            "name": "y",
                            "nodeType": "YulIdentifier",
                            "src": "10649:1:56"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10660:1:56",
                                    "type": "",
                                    "value": "0"
                                  }
                                ],
                                "functionName": {
                                  "name": "not",
                                  "nodeType": "YulIdentifier",
                                  "src": "10656:3:56"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10656:6:56"
                              },
                              {
                                "name": "x",
                                "nodeType": "YulIdentifier",
                                "src": "10664:1:56"
                              }
                            ],
                            "functionName": {
                              "name": "div",
                              "nodeType": "YulIdentifier",
                              "src": "10652:3:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "10652:14:56"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "10646:2:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10646:21:56"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "10623:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10623:45:56"
                  },
                  "nodeType": "YulIf",
                  "src": "10620:71:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "10700:20:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "10715:1:56"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "10718:1:56"
                      }
                    ],
                    "functionName": {
                      "name": "mul",
                      "nodeType": "YulIdentifier",
                      "src": "10711:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10711:9:56"
                  },
                  "variableNames": [
                    {
                      "name": "product",
                      "nodeType": "YulIdentifier",
                      "src": "10700:7:56"
                    }
                  ]
                }
              ]
            },
            "name": "checked_mul_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nodeType": "YulTypedName",
                "src": "10589:1:56",
                "type": ""
              },
              {
                "name": "y",
                "nodeType": "YulTypedName",
                "src": "10592:1:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "product",
                "nodeType": "YulTypedName",
                "src": "10598:7:56",
                "type": ""
              }
            ],
            "src": "10558:168:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "10777:74:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "10800:22:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x12",
                            "nodeType": "YulIdentifier",
                            "src": "10802:16:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "10802:18:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "10802:18:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "10797:1:56"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "10790:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10790:9:56"
                  },
                  "nodeType": "YulIf",
                  "src": "10787:35:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "10831:14:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "10840:1:56"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "10843:1:56"
                      }
                    ],
                    "functionName": {
                      "name": "div",
                      "nodeType": "YulIdentifier",
                      "src": "10836:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10836:9:56"
                  },
                  "variableNames": [
                    {
                      "name": "r",
                      "nodeType": "YulIdentifier",
                      "src": "10831:1:56"
                    }
                  ]
                }
              ]
            },
            "name": "checked_div_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nodeType": "YulTypedName",
                "src": "10762:1:56",
                "type": ""
              },
              {
                "name": "y",
                "nodeType": "YulTypedName",
                "src": "10765:1:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "r",
                "nodeType": "YulTypedName",
                "src": "10771:1:56",
                "type": ""
              }
            ],
            "src": "10731:120:56"
          }
        ]
      },
      "contents": "{\n    { }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function validator_revert_bool(value)\n    {\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_boolt_address(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_bool(value_1)\n        value1 := value_1\n        let value_2 := calldataload(add(headStart, 64))\n        validator_revert_address(value_2)\n        value2 := value_2\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_bool_t_address__to_t_bool_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, iszero(iszero(value0)))\n        mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_address_payable__to_t_address_payable__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        value4 := calldataload(add(headStart, 128))\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_address_payable(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, not(0)) { panic_error_0x11() }\n        ret := add(value, 1)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function decrement_t_uint256(value) -> ret\n    {\n        if iszero(value) { panic_error_0x11() }\n        ret := add(value, not(0))\n    }\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address_t_bool_t_address__to_t_address_t_bool_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), iszero(iszero(value1)))\n        mstore(add(headStart, 64), and(value2, _1))\n    }\n    function abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"ReentrancyGuard: reentrant call\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_uint80_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_uint80t_int256t_uint256t_uint256t_uint80_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        value0 := abi_decode_uint80_fromMemory(headStart)\n        value1 := mload(add(headStart, 32))\n        value2 := mload(add(headStart, 64))\n        value3 := mload(add(headStart, 96))\n        value4 := abi_decode_uint80_fromMemory(add(headStart, 128))\n    }\n    function abi_decode_tuple_t_uint8_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_address_t_address_payable_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_bool(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_address_payable__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function checked_sub_t_uint8(x, y) -> diff\n    {\n        let x_1 := and(x, 0xff)\n        let y_1 := and(y, 0xff)\n        if lt(x_1, y_1) { panic_error_0x11() }\n        diff := sub(x_1, y_1)\n    }\n    function checked_exp_helper(_base, exponent) -> power, base\n    {\n        let power_1 := 1\n        power := power_1\n        base := _base\n        for { } gt(exponent, power_1) { }\n        {\n            if gt(base, div(not(0), base)) { panic_error_0x11() }\n            if and(exponent, power_1) { power := mul(power, base) }\n            base := mul(base, base)\n            exponent := shr(power_1, exponent)\n        }\n    }\n    function checked_exp_unsigned(base, exponent) -> power\n    {\n        if iszero(exponent)\n        {\n            power := 1\n            leave\n        }\n        if iszero(base)\n        {\n            power := 0\n            leave\n        }\n        switch base\n        case 1 {\n            power := 1\n            leave\n        }\n        case 2 {\n            if gt(exponent, 255) { panic_error_0x11() }\n            power := shl(exponent, 1)\n            leave\n        }\n        if or(and(lt(base, 11), lt(exponent, 78)), and(lt(base, 307), lt(exponent, 32)))\n        {\n            power := exp(base, exponent)\n            leave\n        }\n        let power_1, base_1 := checked_exp_helper(base, exponent)\n        if gt(power_1, div(not(0), base_1)) { panic_error_0x11() }\n        power := mul(power_1, base_1)\n    }\n    function checked_exp_t_uint256_t_uint256(base, exponent) -> power\n    {\n        power := checked_exp_unsigned(base, exponent)\n    }\n    function checked_mul_t_int256(x, y) -> product\n    {\n        let _1 := sub(shl(255, 1), 1)\n        let _2 := sgt(y, 0)\n        let _3 := sgt(x, 0)\n        if and(and(_3, _2), gt(x, div(_1, y))) { panic_error_0x11() }\n        let _4 := shl(255, 1)\n        let _5 := slt(y, 0)\n        if and(and(_3, _5), slt(y, sdiv(_4, x))) { panic_error_0x11() }\n        let _6 := slt(x, 0)\n        if and(and(_6, _2), slt(x, sdiv(_4, y))) { panic_error_0x11() }\n        if and(and(_6, _5), slt(x, sdiv(_1, y))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function panic_error_0x12()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n    function checked_div_t_int256(x, y) -> r\n    {\n        if iszero(y) { panic_error_0x12() }\n        if and(eq(x, shl(255, 1)), eq(y, not(0))) { panic_error_0x11() }\n        r := sdiv(x, y)\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        if and(iszero(iszero(x)), gt(y, div(not(0), x))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y) { panic_error_0x12() }\n        r := div(x, y)\n    }\n}",
      "id": 56,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "sourceMap": "515:12287:46:-:0;;;2614:243;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;921:32:3;719:10:27;921:18:3;:32::i;:::-;1701:1:6;1806:22;;2744:12:46;:28;;-1:-1:-1;;;;;2744:28:46;;;-1:-1:-1;;;;;;2744:28:46;;;;;;;2782:15;:34;;;;;;;;;;;;;;;2826:10;:24;515:12287;;2270:187:3;2343:16;2362:6;;-1:-1:-1;;;;;2378:17:3;;;-1:-1:-1;;;;;;2378:17:3;;;;;;2410:40;;2362:6;;;;;;;2410:40;;2343:16;2410:40;2333:124;2270:187;:::o;14:131:56:-;-1:-1:-1;;;;;89:31:56;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:454::-;246:6;254;262;315:2;303:9;294:7;290:23;286:32;283:52;;;331:1;328;321:12;283:52;363:9;357:16;382:31;407:5;382:31;:::i;:::-;482:2;467:18;;461:25;432:5;;-1:-1:-1;495:33:56;461:25;495:33;:::i;:::-;547:7;537:17;;;594:2;583:9;579:18;573:25;563:35;;150:454;;;;;:::o;:::-;515:12287:46;;;;;;",
  "deployedSourceMap": "515:12287:46:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3427:362;;;;;;;;;;;;;:::i;:::-;;;160:25:56;;;148:2;133:18;3427:362:46;;;;;;;;3849:435;;;;;;;;;;;;;:::i;9985:245::-;;;;;;;;;;-1:-1:-1;9985:245:46;;;;;:::i;:::-;;:::i;:::-;;1854:62;;;;;;;;;;-1:-1:-1;1854:62:46;;;;;:::i;:::-;;;;;;;;;;;;;;2925:113;;;;;;;;;;;;;:::i;8756:241::-;;;;;;;;;;-1:-1:-1;8756:241:46;;;;;:::i;:::-;;:::i;1706:25::-;;;;;;;;;;;;;;;;1668:101:3;;;;;;;;;;;;;:::i;9337:542:46:-;;;;;;;;;;-1:-1:-1;9337:542:46;;;;;:::i;:::-;;:::i;1788:60::-;;;;;;;;;;-1:-1:-1;1788:60:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1651:25:56;;;1707:2;1692:18;;1685:34;;;;1735:18;;;1728:34;1793:2;1778:18;;1771:34;1638:3;1623:19;1788:60:46;1420:391:56;1036:85:3;;;;;;;;;;-1:-1:-1;1082:7:3;1108:6;-1:-1:-1;;;;;1108:6:3;1036:85;;;-1:-1:-1;;;;;1980:32:56;;;1962:51;;1950:2;1935:18;1036:85:3;1816:203:56;1922:85:46;;;;;;;;;;-1:-1:-1;1922:85:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1922:85:46;;;;;;;2217:14:56;;2210:22;2192:41;;-1:-1:-1;;;;;2269:32:56;;;2264:2;2249:18;;2242:60;2165:18;1922:85:46;2024:284:56;1582:41:46;;;;;;;;;;-1:-1:-1;1582:41:46;;;;;;1629:27;;;;;;;;;;-1:-1:-1;1629:27:46;;;;-1:-1:-1;;;;;1629:27:46;;;1662:38;;;;;;;;;;-1:-1:-1;1662:38:46;;;;-1:-1:-1;;;;;1662:38:46;;;10676:2124;;;;;;;;;;-1:-1:-1;10676:2124:46;;;;;:::i;:::-;;:::i;3169:180::-;;;;;;;;;;-1:-1:-1;3169:180:46;;;;;:::i;:::-;3270:7;3300:42;;;:27;:42;;;;;;;3169:180;4494:563;;;;;;;;;;;;;:::i;5336:2918::-;;;;;;:::i;:::-;;:::i;1918:198:3:-;;;;;;;;;;-1:-1:-1;1918:198:3;;;;;:::i;:::-;;:::i;8407:215:46:-;;;;;;;;;;-1:-1:-1;8407:215:46;;;;;:::i;:::-;;:::i;3427:362::-;3481:7;;;3534:219;3605:17;918:14:28;3590:12:46;:42;3534:219;;;3701:41;;;;:27;:41;;;;;;3685:57;;;;:::i;:::-;;-1:-1:-1;3646:14:46;;;;:::i;:::-;;;;3534:219;;;-1:-1:-1;3770:12:46;3427:362;-1:-1:-1;3427:362:46:o;3849:435::-;3904:7;3941:20;3994:1;3964:27;:17;918:14:28;;827:112;3964:27:46;:31;;;;:::i;:::-;3941:54;;3923:336;4009:16;;3923:336;;4099:35;;;;:21;:35;;;;;:48;4167:15;-1:-1:-1;4078:171:46;;4222:12;3849:435;-1:-1:-1;3849:435:46:o;4078:171::-;4039:14;;;;:::i;:::-;;;;3923:336;;;;4276:1;4269:8;;3849:435;:::o;9985:245::-;1082:7:3;1108:6;-1:-1:-1;;;;;1108:6:3;719:10:27;1248:23:3;1240:68;;;;-1:-1:-1;;;1240:68:3;;;;;;;:::i;:::-;;;;;;;;;10080:15:46::1;10063:14;:32;10059:71;;;10104:26;;-1:-1:-1::0;;;10104:26:46::1;;;;;;;;;;;10059:71;10140:10;:27:::0;;;10183:40:::1;::::0;160:25:56;;;10183:40:46::1;::::0;148:2:56;133:18;10183:40:46::1;;;;;;;;9985:245:::0;:::o;2925:113::-;2978:7;3004:27;:17;918:14:28;;827:112;3004:27:46;2997:34;;2925:113;:::o;8756:241::-;1082:7:3;1108:6;-1:-1:-1;;;;;1108:6:3;719:10:27;1248:23:3;1240:68;;;;-1:-1:-1;;;1240:68:3;;;;;;;:::i;:::-;8874:16:46;-1:-1:-1;;;;;2529:22:46;::::1;2525:65;;2560:30;;-1:-1:-1::0;;;2560:30:46::1;;;;;;;;;;;2525:65;8906:12:::2;:31:::0;;-1:-1:-1;;;;;;8906:31:46::2;-1:-1:-1::0;;;;;8906:31:46;::::2;::::0;;::::2;::::0;;;8953:37:::2;::::0;1962:51:56;;;8953:37:46::2;::::0;1950:2:56;1935:18;8953:37:46::2;;;;;;;1318:1:3::1;8756:241:46::0;:::o;1668:101:3:-;1082:7;1108:6;-1:-1:-1;;;;;1108:6:3;719:10:27;1248:23:3;1240:68;;;;-1:-1:-1;;;1240:68:3;;;;;;;:::i;:::-;1732:30:::1;1759:1;1732:18;:30::i;:::-;1668:101::o:0;9337:542:46:-;1082:7:3;1108:6;-1:-1:-1;;;;;1108:6:3;719:10:27;1248:23:3;1240:68;;;;-1:-1:-1;;;1240:68:3;;;;;;;:::i;:::-;9511:18:46;-1:-1:-1;;;;;2529:22:46;::::1;2525:65;;2560:30;;-1:-1:-1::0;;;2560:30:46::1;;;;;;;;;;;2525:65;-1:-1:-1::0;;;;;9541:41:46;;::::2;;::::0;;;:26:::2;:41;::::0;;;;;;;;:85;;-1:-1:-1;;;;;;9636:93:46;9541:85;::::2;;-1:-1:-1::0;;;;;;9636:93:46;;;;;;9541:85:::2;9636:93:::0;;::::2;::::0;;::::2;;::::0;;;9745:127;;4847:34:56;;;4897:18;;;4890:50;4956:18;;4949:43;;;;9745:127:46::2;::::0;4797:2:56;4782:18;9745:127:46::2;;;;;;;1318:1:3::1;9337:542:46::0;;;:::o;10676:2124::-;1082:7:3;1108:6;-1:-1:-1;;;;;1108:6:3;719:10:27;1248:23:3;1240:68;;;;-1:-1:-1;;;1240:68:3;;;;;;;:::i;:::-;10899:27:46::1;10929:36:::0;;;:21:::1;:36;::::0;;;;:62;;11027:45:::1;::::0;::::1;::::0;11118:68:::1;::::0;::::1;::::0;11234:79:::1;::::0;;::::1;::::0;10929:62;;11027:45;;11414:24;;:60;::::1;;;-1:-1:-1::0;11454:20:46;;11414:60:::1;:106;;;;-1:-1:-1::0;11490:30:46;;11414:106:::1;:154;;;;-1:-1:-1::0;11536:32:46;;11414:154:::1;11397:211;;;11579:29;:17;1032:19:28::0;;1050:1;1032:19;;;945:123;11579:29:46::1;11756:18:::0;;;:159:::1;;-1:-1:-1::0;11791:18:46;;;::::1;::::0;:123:::1;;-1:-1:-1::0;11861:21:46::1;:40;11883:17;11899:1;11883:13:::0;:17:::1;:::i;:::-;11861:40;;;;;;;;;;;:53;;;11829:13;:85;11791:123;11739:222;;;11933:28;;-1:-1:-1::0;;;11933:28:46::1;;;;;;;;;;;11739:222;12031:14:::0;12027:51:::1;;12054:24;;-1:-1:-1::0;;;12054:24:46::1;;;;;;;;;;;12027:51;12092:24:::0;12088:71:::1;;12125:34;;-1:-1:-1::0;;;12125:34:46::1;;;;;;;;;;;12088:71;12173:26:::0;12169:87:::1;;12220:36;;-1:-1:-1::0;;;12220:36:46::1;;;;;;;;;;;12169:87;12267:36;::::0;;;:21:::1;:36;::::0;;;;;;;;:65;;;12342:45:::1;::::0;::::1;:57:::0;;;12409:68:::1;::::0;::::1;:90:::0;;;12509:70:::1;;:94:::0;;;12619:174;;1651:25:56;;;1692:18;;;1685:34;;;1735:18;;;1728:34;;;1793:2;1778:18;;1771:34;;;12267:36:46;;12619:174:::1;::::0;1638:3:56;1623:19;12619:174:46::1;;;;;;;10889:1911;;;;10676:2124:::0;;;;;:::o;4494:563::-;4588:7;4609;4630;4651;4683:27;4713:24;:22;:24::i;:::-;4768:42;;;;:21;:42;;;;;:55;;4837:51;;;;4902:61;;;;4977:63;;;;;4768:55;;4837:51;;-1:-1:-1;4902:61:46;;-1:-1:-1;4977:63:46;-1:-1:-1;4494:563:46;-1:-1:-1;;4494:563:46:o;5336:2918::-;1744:1:6;2325:7;;:19;;2317:63;;;;-1:-1:-1;;;2317:63:6;;5205:2:56;2317:63:6;;;5187:21:56;5244:2;5224:18;;;5217:30;5283:33;5263:18;;;5256:61;5334:18;;2317:63:6;5003:355:56;2317:63:6;1744:1;2455:7;:18;5486:34:46::1;::::0;;;5684:26:::1;:24;:26::i;:::-;5472:238;;;;;;;;5813:26;5795:15;:44;:89;;;;5874:10;;5855:15;:29;;5795:89;5778:144;;;5902:20;;-1:-1:-1::0;;;5902:20:46::1;;;;;;;;;;;5778:144;-1:-1:-1::0;;;;;5978:48:46;::::1;;::::0;;;:26:::1;:48;::::0;;;;:58;::::1;;5973:110;;6057:26;;-1:-1:-1::0;;;6057:26:46::1;;;;;;;;;;;5973:110;6183:12;::::0;-1:-1:-1;;;;;6275:48:46;;::::1;6149:18;6275:48:::0;;;:26:::1;:48;::::0;;;;;:66;6386:27;;-1:-1:-1;;;6386:27:46;;;;6183:12;;::::1;::::0;::::1;6275:66:::0;;::::1;::::0;;::::1;::::0;;;6386:25:::1;::::0;:27:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;6275:66;6386:27:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6361:52;;;;;;6423:24;6450:246;6501:150;6548:5;6575:9;-1:-1:-1::0;;;;;6575:18:46::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6617:5;-1:-1:-1::0;;;;;6617:14:46::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6501:25;:150::i;:::-;6679:7;6450:12;:246::i;:::-;6423:273;;6824:32;6749:58;6782:16;6801:2;6805:1;6749:25;:58::i;:::-;6724:132;6707:200;;;6874:33;;-1:-1:-1::0;;;6874:33:46::1;;;;;;;;;;;6707:200;6918:21;6942:85;6968:16;6998:19;6942:12;:85::i;:::-;6918:109;;7136:27;:53;7164:24;:22;:24::i;:::-;7136:53;;;;;;;;;;;;7083:34;:106;;;;:::i;:::-;7055:13;:134;7038:194;;;7207:25;;-1:-1:-1::0;;;7207:25:46::1;;;;;;;;;;;7038:194;7300:13;7243:27;:53;7271:24;:22;:24::i;:::-;7243:53;;;;;;;;;;;;:70;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;7400:34:46;::::1;7396:618;;7466:7;7454:9;:19;7450:396;;;7500:40;;-1:-1:-1::0;;;7500:40:46::1;;;;;;;;;;;7450:396;7579:15;::::0;:33:::1;::::0;-1:-1:-1;;;;;7579:15:46;;::::1;::::0;:33;::::1;;;::::0;7604:7;;7579:15:::1;:33:::0;:15;:33;7604:7;7579:15;:33;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;7780:51:46::1;::::0;7788:10:::1;::::0;7809:21:::1;7780:51:::0;::::1;;;::::0;::::1;::::0;;;7809:21;7788:10;7780:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;7396:618;;;7978:15;::::0;;7940:63:::1;::::0;-1:-1:-1;;;7940:63:46;;7966:10:::1;7940:63:::0;;::::1;6551:34:56::0;;;;-1:-1:-1;;;;;7978:15:46;;::::1;6601:18:56::0;;;6594:43;6653:18;;;6646:34;;;7905:20:46;;7940:25;;::::1;::::0;::::1;::::0;6486:18:56;;7940:63:46::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7862:152;7396:618;8067:37;::::0;-1:-1:-1;;;8067:37:46;;8078:10:::1;8067:37;::::0;::::1;7115:51:56::0;7182:18;;;7175:34;;;-1:-1:-1;;;;;8067:10:46;::::1;::::0;::::1;::::0;7088:18:56;;8067:37:46::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;8119:128:46::1;::::0;;7394:25:56;;;7450:2;7435:18;;7428:34;;;-1:-1:-1;;;;;8119:128:46;::::1;::::0;-1:-1:-1;8145:10:46::1;::::0;-1:-1:-1;8119:128:46::1;::::0;7367:18:56;8119:128:46::1;;;;;;;-1:-1:-1::0;;1701:1:6;2628:22;;-1:-1:-1;;;;;;;;;5336:2918:46:o;1918:198:3:-;1082:7;1108:6;-1:-1:-1;;;;;1108:6:3;719:10:27;1248:23:3;1240:68;;;;-1:-1:-1;;;1240:68:3;;;;;;;:::i;:::-;-1:-1:-1;;;;;2006:22:3;::::1;1998:73;;;::::0;-1:-1:-1;;;1998:73:3;;7675:2:56;1998:73:3::1;::::0;::::1;7657:21:56::0;7714:2;7694:18;;;7687:30;7753:34;7733:18;;;7726:62;-1:-1:-1;;;7804:18:56;;;7797:36;7850:19;;1998:73:3::1;7473:402:56::0;1998:73:3::1;2081:28;2100:8;2081:18;:28::i;:::-;1918:198:::0;:::o;8407:215:46:-;1082:7:3;1108:6;-1:-1:-1;;;;;1108:6:3;719:10:27;1248:23:3;1240:68;;;;-1:-1:-1;;;1240:68:3;;;;;;;:::i;:::-;8519:15:46::1;:37:::0;;-1:-1:-1;;;;;;8519:37:46::1;-1:-1:-1::0;;;;;8519:37:46;::::1;::::0;;::::1;::::0;;;8572:43:::1;::::0;1962:51:56;;;8572:43:46::1;::::0;1950:2:56;1935:18;8572:43:46::1;1816:203:56::0;2270:187:3;2343:16;2362:6;;-1:-1:-1;;;;;2378:17:3;;;-1:-1:-1;;;;;;2378:17:3;;;;;;2410:40;;2362:6;;;;;;;2410:40;;2343:16;2410:40;2333:124;2270:187;:::o;1027:420:45:-;1154:6;1193:9;1176:26;;:14;:26;;;1172:246;;;1253:26;1265:14;1253:9;:26;:::i;:::-;1241:39;;1245:35;;1241:2;:39;:::i;:::-;1225:56;;:6;:56;:::i;:::-;1218:63;;;;1172:246;1319:9;1302:26;;:14;:26;;;1298:120;;;1379:26;1396:9;1379:14;:26;:::i;:::-;1367:39;;1371:35;;1367:2;:39;:::i;:::-;1351:56;;:6;:56;:::i;1298:120::-;-1:-1:-1;1434:6:45;1027:420;;;;;;:::o;3451:96:37:-;3509:7;3535:5;3539:1;3535;:5;:::i;:::-;3528:12;;3451:96;;;;;:::o;3836:::-;3894:7;3920:5;3924:1;3920;:5;:::i;196:180:56:-;255:6;308:2;296:9;287:7;283:23;279:32;276:52;;;324:1;321;314:12;276:52;-1:-1:-1;347:23:56;;196:180;-1:-1:-1;196:180:56:o;381:131::-;-1:-1:-1;;;;;456:31:56;;446:42;;436:70;;502:1;499;492:12;517:247;576:6;629:2;617:9;608:7;604:23;600:32;597:52;;;645:1;642;635:12;597:52;684:9;671:23;703:31;728:5;703:31;:::i;769:118::-;855:5;848:13;841:21;834:5;831:32;821:60;;877:1;874;867:12;892:523;966:6;974;982;1035:2;1023:9;1014:7;1010:23;1006:32;1003:52;;;1051:1;1048;1041:12;1003:52;1090:9;1077:23;1109:31;1134:5;1109:31;:::i;:::-;1159:5;-1:-1:-1;1216:2:56;1201:18;;1188:32;1229:30;1188:32;1229:30;:::i;:::-;1278:7;-1:-1:-1;1337:2:56;1322:18;;1309:32;1350:33;1309:32;1350:33;:::i;:::-;1402:7;1392:17;;;892:523;;;;;:::o;2537:454::-;2632:6;2640;2648;2656;2664;2717:3;2705:9;2696:7;2692:23;2688:33;2685:53;;;2734:1;2731;2724:12;2685:53;-1:-1:-1;;2757:23:56;;;2827:2;2812:18;;2799:32;;-1:-1:-1;2878:2:56;2863:18;;2850:32;;2929:2;2914:18;;2901:32;;-1:-1:-1;2980:3:56;2965:19;2952:33;;-1:-1:-1;2537:454:56;-1:-1:-1;2537:454:56:o;2996:315::-;3064:6;3072;3125:2;3113:9;3104:7;3100:23;3096:32;3093:52;;;3141:1;3138;3131:12;3093:52;3180:9;3167:23;3199:31;3224:5;3199:31;:::i;:::-;3249:5;3301:2;3286:18;;;;3273:32;;-1:-1:-1;;;2996:315:56:o;3576:127::-;3637:10;3632:3;3628:20;3625:1;3618:31;3668:4;3665:1;3658:15;3692:4;3689:1;3682:15;3708:128;3748:3;3779:1;3775:6;3772:1;3769:13;3766:39;;;3785:18;;:::i;:::-;-1:-1:-1;3821:9:56;;3708:128::o;3841:135::-;3880:3;-1:-1:-1;;3901:17:56;;3898:43;;;3921:18;;:::i;:::-;-1:-1:-1;3968:1:56;3957:13;;3841:135::o;3981:125::-;4021:4;4049:1;4046;4043:8;4040:34;;;4054:18;;:::i;:::-;-1:-1:-1;4091:9:56;;3981:125::o;4111:136::-;4150:3;4178:5;4168:39;;4187:18;;:::i;:::-;-1:-1:-1;;;4223:18:56;;4111:136::o;4252:356::-;4454:2;4436:21;;;4473:18;;;4466:30;4532:34;4527:2;4512:18;;4505:62;4599:2;4584:18;;4252:356::o;5363:179::-;5441:13;;5494:22;5483:34;;5473:45;;5463:73;;5532:1;5529;5522:12;5463:73;5363:179;;;:::o;5547:473::-;5650:6;5658;5666;5674;5682;5735:3;5723:9;5714:7;5710:23;5706:33;5703:53;;;5752:1;5749;5742:12;5703:53;5775:39;5804:9;5775:39;:::i;:::-;5765:49;;5854:2;5843:9;5839:18;5833:25;5823:35;;5898:2;5887:9;5883:18;5877:25;5867:35;;5942:2;5931:9;5927:18;5921:25;5911:35;;5965:49;6009:3;5998:9;5994:19;5965:49;:::i;:::-;5955:59;;5547:473;;;;;;;;:::o;6025:273::-;6093:6;6146:2;6134:9;6125:7;6121:23;6117:32;6114:52;;;6162:1;6159;6152:12;6114:52;6194:9;6188:16;6244:4;6237:5;6233:16;6226:5;6223:27;6213:55;;6264:1;6261;6254:12;6691:245;6758:6;6811:2;6799:9;6790:7;6786:23;6782:32;6779:52;;;6827:1;6824;6817:12;6779:52;6859:9;6853:16;6878:28;6900:5;6878:28;:::i;8096:195::-;8134:4;8171;8168:1;8164:12;8203:4;8200:1;8196:12;8228:3;8223;8220:12;8217:38;;;8235:18;;:::i;:::-;8272:13;;;8096:195;-1:-1:-1;;;8096:195:56:o;8296:422::-;8385:1;8428:5;8385:1;8442:270;8463:7;8453:8;8450:21;8442:270;;;8522:4;8518:1;8514:6;8510:17;8504:4;8501:27;8498:53;;;8531:18;;:::i;:::-;8581:7;8571:8;8567:22;8564:55;;;8601:16;;;;8564:55;8680:22;;;;8640:15;;;;8442:270;;;8446:3;8296:422;;;;;:::o;8723:806::-;8772:5;8802:8;8792:80;;-1:-1:-1;8843:1:56;8857:5;;8792:80;8891:4;8881:76;;-1:-1:-1;8928:1:56;8942:5;;8881:76;8973:4;8991:1;8986:59;;;;9059:1;9054:130;;;;8966:218;;8986:59;9016:1;9007:10;;9030:5;;;9054:130;9091:3;9081:8;9078:17;9075:43;;;9098:18;;:::i;:::-;-1:-1:-1;;9154:1:56;9140:16;;9169:5;;8966:218;;9268:2;9258:8;9255:16;9249:3;9243:4;9240:13;9236:36;9230:2;9220:8;9217:16;9212:2;9206:4;9203:12;9199:35;9196:77;9193:159;;;-1:-1:-1;9305:19:56;;;9337:5;;9193:159;9384:34;9409:8;9403:4;9384:34;:::i;:::-;9454:6;9450:1;9446:6;9442:19;9433:7;9430:32;9427:58;;;9465:18;;:::i;:::-;9503:20;;8723:806;-1:-1:-1;;;8723:806:56:o;9534:131::-;9594:5;9623:36;9650:8;9644:4;9623:36;:::i;9670:553::-;9709:7;-1:-1:-1;;;;;9779:9:56;;;9807;;;9832:11;;;9851:10;;;9845:17;;9828:35;9825:61;;;9866:18;;:::i;:::-;-1:-1:-1;;;9942:1:56;9935:9;;9960:11;;;9980;;;9973:19;;9956:37;9953:63;;;9996:18;;:::i;:::-;10042:1;10039;10035:9;10025:19;;10089:1;10085:2;10080:11;10077:1;10073:19;10068:2;10064;10060:11;10056:37;10053:63;;;10096:18;;:::i;:::-;10161:1;10157:2;10152:11;10149:1;10145:19;10140:2;10136;10132:11;10128:37;10125:63;;;10168:18;;:::i;:::-;-1:-1:-1;;;10208:9:56;;;;;9670:553;-1:-1:-1;;;9670:553:56:o;10228:127::-;10289:10;10284:3;10280:20;10277:1;10270:31;10320:4;10317:1;10310:15;10344:4;10341:1;10334:15;10360:193;10399:1;10425;10415:35;;10430:18;;:::i;:::-;-1:-1:-1;;;10466:18:56;;-1:-1:-1;;10486:13:56;;10462:38;10459:64;;;10503:18;;:::i;:::-;-1:-1:-1;10537:10:56;;10360:193::o;10558:168::-;10598:7;10664:1;10660;10656:6;10652:14;10649:1;10646:21;10641:1;10634:9;10627:17;10623:45;10620:71;;;10671:18;;:::i;:::-;-1:-1:-1;10711:9:56;;10558:168::o;10731:120::-;10771:1;10797;10787:35;;10802:18;;:::i;:::-;-1:-1:-1;10836:9:56;;10731:120::o",
  "source": "// SPDX-License-Identifier: AGPL-3.0\n\npragma solidity ^0.8.11;\n\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\nimport \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport \"@openzeppelin/contracts/utils/Counters.sol\";\nimport \"@openzeppelin/contracts/utils/math/SafeMath.sol\";\nimport \"@openzeppelin/contracts/security/ReentrancyGuard.sol\";\nimport \"@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol\";\nimport \"../libraries/PriceConverter.sol\";\nimport \"../token/interfaces/IERC20Custom.sol\";\n\ncontract Presale is Ownable, ReentrancyGuard {\n    using Counters for Counters.Counter;\n    using SafeMath for uint256;\n\n    struct PresaleData {\n        uint256 startingTime;\n        uint256 usdPrice;\n        uint256 minimumUSDPurchase;\n        uint256 maximumPresaleAmount;\n    }\n    struct PresalePaymentTokenData {\n        bool available;\n        address aggregatorAddress;\n    }\n\n    event TokenPresold(\n        address indexed to,\n        address indexed paymentTokenAddress,\n        uint256 amount,\n        uint256 paymentTokenamount\n    );\n    event PresaleRoundUpdated(\n        uint256 indexed presaleRound,\n        uint256 startingTime,\n        uint256 usdPrice,\n        uint256 minimumUSDPurchase,\n        uint256 maximumPresaleAmount\n    );\n    event PresaleReceiverUpdated(address receiverAddress);\n    event PresalePaymentTokenUpdated(\n        address tokenAddress,\n        bool tokenAvailability,\n        address aggregatorAddress\n    );\n    event PresaleTokenUpdated(address tokenAddress);\n    event PresaleEndingTimeUpdated(uint256 endingTime);\n\n    Counters.Counter public totalPresaleRound;\n    address public tokenAddress;\n    address payable public presaleReceiver;\n    uint256 public endingTime;\n\n    // Mapping `presaleRound` to its data details\n    mapping(uint256 => PresaleData) public presaleDetailsMapping;\n    mapping(uint256 => uint256) public presaleAmountByRoundMapping;\n    mapping(address => PresalePaymentTokenData)\n        public presalePaymentTokenMapping;\n\n    error presaleRoundClosed();\n    error presaleTokenNotAvailable();\n    error presaleNativeTokenPaymentNotSufficient();\n    error presaleStartingTimeInvalid();\n    error presaleUSDPriceInvalid();\n    error presaleMimumumUSDPurchaseInvalid();\n    error presaleMaximumPresaleAmountInvalid();\n    error presaleUSDPurchaseNotSufficient();\n    error presaleAmountOverdemand();\n    error presaleNonZeroAddressInvalid();\n    error presaleEndingTimeInvalid();\n\n    modifier onlyNonZeroAddress(address _address) {\n        if (_address == address(0)) revert presaleNonZeroAddressInvalid();\n        _;\n    }\n\n    constructor(\n        address _tokenAddress,\n        address payable _presaleReceiver,\n        uint256 _endingTime\n    ) {\n        tokenAddress = _tokenAddress;\n        presaleReceiver = _presaleReceiver;\n        endingTime = _endingTime;\n    }\n\n    /**\n     * @dev Get total amount of presale round\n     */\n    function getTotalPresaleRound() public view returns (uint256) {\n        return totalPresaleRound.current();\n    }\n\n    /**\n     * @dev Get presale total amount By presale round\n     * @param _presaleRound - The presale round chosen\n     */\n    function getPresaleAmountByRound(uint256 _presaleRound)\n        public\n        view\n        returns (uint256)\n    {\n        return presaleAmountByRoundMapping[_presaleRound];\n    }\n\n    /**\n     * @dev Get total amount of presale from all rounds\n     */\n    function getTotalPresaleAmount() public view returns (uint256) {\n        uint256 totalPresale = 0;\n        for (\n            uint256 presaleRound = 0;\n            presaleRound < totalPresaleRound.current();\n            presaleRound++\n        ) {\n            totalPresale += presaleAmountByRoundMapping[presaleRound];\n        }\n\n        return totalPresale;\n    }\n\n    /**\n     * @dev Get Current Presale Round\n     */\n    function getCurrentPresaleRound() public view returns (uint256) {\n        for (\n            uint256 presaleRound = totalPresaleRound.current() - 1;\n            presaleRound > 0;\n            presaleRound--\n        ) {\n            if (\n                presaleDetailsMapping[presaleRound].startingTime <=\n                block.timestamp\n            ) {\n                return presaleRound;\n            }\n        }\n\n        return 0;\n    }\n\n    /**\n     * @dev Getting the Current Presale Details, including:\n     * @return Starting Time\n     * @return USD Price\n     * @return Minimum USD Purchase\n     * @return Maximum Presale Amount\n     */\n    function getCurrentPresaleDetails()\n        public\n        view\n        returns (\n            uint256,\n            uint256,\n            uint256,\n            uint256\n        )\n    {\n        uint256 currentPresaleRound = getCurrentPresaleRound();\n        return (\n            presaleDetailsMapping[currentPresaleRound].startingTime,\n            presaleDetailsMapping[currentPresaleRound].usdPrice,\n            presaleDetailsMapping[currentPresaleRound].minimumUSDPurchase,\n            presaleDetailsMapping[currentPresaleRound].maximumPresaleAmount\n        );\n    }\n\n    /**\n     * @dev Execute the Presale of ALPS Token in exchange of other token\n     * @param _paymentTokenAddress - Address of the token use to pay (address 0 is for native token)\n     * @param _amount - Amount denominated in the `paymentTokenAddress` being paid\n     */\n    function presaleTokens(address _paymentTokenAddress, uint256 _amount)\n        public\n        payable\n        nonReentrant\n    {\n        (\n            uint256 currentPresaleStartingTime,\n            uint256 currentPresalePrice,\n            uint256 currentPresaleMinimumUSDPurchase,\n            uint256 currentPresaleMaximumPresaleAmount\n        ) = getCurrentPresaleDetails();\n\n        // Check whether the presale round is still open\n        if (\n            block.timestamp < currentPresaleStartingTime ||\n            block.timestamp >= endingTime\n        ) revert presaleRoundClosed();\n\n        // Check whether token is valid\n        if (!presalePaymentTokenMapping[_paymentTokenAddress].available)\n            revert presaleTokenNotAvailable();\n\n        // Convert the token with Chainlink Price Feed\n        IERC20Custom token = IERC20Custom(tokenAddress);\n        AggregatorV3Interface priceFeed = AggregatorV3Interface(\n            presalePaymentTokenMapping[_paymentTokenAddress].aggregatorAddress\n        );\n        (, int256 price, , , ) = priceFeed.latestRoundData();\n        uint256 presaleUSDAmount = SafeMath.mul(\n            uint256(\n                PriceConverter.scalePrice(\n                    price,\n                    priceFeed.decimals(),\n                    token.decimals()\n                )\n            ),\n            _amount\n        );\n\n        if (\n            uint256(\n                PriceConverter.scalePrice(int256(presaleUSDAmount), 18, 0)\n            ) < currentPresaleMinimumUSDPurchase\n        ) revert presaleUSDPurchaseNotSufficient();\n\n        uint256 presaleAmount = SafeMath.div(\n            presaleUSDAmount,\n            currentPresalePrice\n        );\n\n        if (\n            presaleAmount >\n            currentPresaleMaximumPresaleAmount -\n                presaleAmountByRoundMapping[getCurrentPresaleRound()]\n        ) revert presaleAmountOverdemand();\n\n        presaleAmountByRoundMapping[getCurrentPresaleRound()] += presaleAmount;\n\n        // Receive the payment token and transfer it to another address\n        if (_paymentTokenAddress == address(0)) {\n            if (msg.value < _amount) {\n                revert presaleNativeTokenPaymentNotSufficient();\n            } else {\n                presaleReceiver.transfer(_amount);\n\n                // in case you deployed the contract with more ether than required,\n                // transfer the remaining ether back to yourself\n                payable(msg.sender).transfer(address(this).balance);\n            }\n        } else {\n            IERC20 paymentToken = IERC20(_paymentTokenAddress);\n            paymentToken.transferFrom(msg.sender, presaleReceiver, _amount);\n        }\n\n        // Send ALPS token to `msg.sender`\n        token.mint(msg.sender, presaleAmount);\n        emit TokenPresold(\n            msg.sender,\n            _paymentTokenAddress,\n            presaleAmount,\n            _amount\n        );\n    }\n\n    /**\n     * @dev Set new Presale Receiver Address\n     * @param _newPresaleReceiver - Address that'll receive the presale payment token\n     */\n    function setPresaleReceiver(address payable _newPresaleReceiver)\n        public\n        onlyOwner\n    {\n        presaleReceiver = _newPresaleReceiver;\n\n        emit PresaleReceiverUpdated(_newPresaleReceiver);\n    }\n\n    /**\n     * @dev Set new Presale Token Address\n     * @param _newTokenAddress - Address of token that'll be presaled\n     */\n    function setPresaleTokenAddress(address _newTokenAddress)\n        public\n        onlyOwner\n        onlyNonZeroAddress(_newTokenAddress)\n    {\n        tokenAddress = _newTokenAddress;\n\n        emit PresaleTokenUpdated(_newTokenAddress);\n    }\n\n    /**\n     * @dev Set Presale Payment Token Info\n     * @param _tokenAddress - Token Address use to purchase Presale\n     * @param _tokenAvailability - Indication whether Token Address can be used for Presale\n     * @param _aggregatorAddress - Chainlink's Aggregator Address to determine the USD price (for `presaleTokens`)\n     */\n    function setPresalePaymentToken(\n        address _tokenAddress,\n        bool _tokenAvailability,\n        address _aggregatorAddress\n    ) public onlyOwner onlyNonZeroAddress(_aggregatorAddress) {\n        presalePaymentTokenMapping[_tokenAddress]\n            .available = _tokenAvailability;\n        presalePaymentTokenMapping[_tokenAddress]\n            .aggregatorAddress = _aggregatorAddress;\n\n        emit PresalePaymentTokenUpdated(\n            _tokenAddress,\n            _tokenAvailability,\n            _aggregatorAddress\n        );\n    }\n\n    /**\n     * @dev Set new Ending time\n     * @param _newEndingTime - New Ending Timestamp\n     */\n    function setEndingTime(uint256 _newEndingTime) public onlyOwner {\n        if (_newEndingTime < block.timestamp) revert presaleEndingTimeInvalid();\n        endingTime = _newEndingTime;\n\n        emit PresaleEndingTimeUpdated(_newEndingTime);\n    }\n\n    /**\n     * @dev Creating/Updating a presale round information\n     * @param _presaleRound - The presale round chosen\n     * @param _startingTime - The starting Presale time\n     * @param _usdPrice - The USD Price of the Token in certain Presale Round\n     * @param _minimumUSDPurchase - The minimum USD amount to purchase the token\n     * @param _maximumPresaleAmount - The maximum amount of token available for a presale round\n     */\n    function setPresaleRound(\n        uint256 _presaleRound,\n        uint256 _startingTime,\n        uint256 _usdPrice,\n        uint256 _minimumUSDPurchase,\n        uint256 _maximumPresaleAmount\n    ) public onlyOwner {\n        uint256 presaleStartingTime = presaleDetailsMapping[_presaleRound]\n            .startingTime;\n        uint256 presaleUSDPrice = presaleDetailsMapping[_presaleRound].usdPrice;\n        uint256 presaleMinimumUSDPurchase = presaleDetailsMapping[_presaleRound]\n            .minimumUSDPurchase;\n        uint256 presaleMaximumPresaleAmount = presaleDetailsMapping[\n            _presaleRound\n        ].maximumPresaleAmount;\n\n        // Increment the total round counter when new presale is created\n        if (\n            presaleStartingTime == 0 &&\n            presaleUSDPrice == 0 &&\n            presaleMinimumUSDPurchase == 0 &&\n            presaleMaximumPresaleAmount == 0\n        ) totalPresaleRound.increment();\n\n        // Starting time has to be:\n        // - larger than zero\n        // - larger than previous round starting time\n        if (\n            _startingTime == 0 ||\n            (_presaleRound != 0 &&\n                _startingTime <\n                presaleDetailsMapping[_presaleRound - 1].startingTime)\n        ) revert presaleStartingTimeInvalid();\n\n        // These values given must be larger than zero\n        if (_usdPrice == 0) revert presaleUSDPriceInvalid();\n        if (_minimumUSDPurchase == 0) revert presaleMimumumUSDPurchaseInvalid();\n        if (_maximumPresaleAmount == 0)\n            revert presaleMaximumPresaleAmountInvalid();\n\n        presaleDetailsMapping[_presaleRound].startingTime = _startingTime;\n        presaleDetailsMapping[_presaleRound].usdPrice = _usdPrice;\n        presaleDetailsMapping[_presaleRound]\n            .minimumUSDPurchase = _minimumUSDPurchase;\n        presaleDetailsMapping[_presaleRound]\n            .maximumPresaleAmount = _maximumPresaleAmount;\n\n        emit PresaleRoundUpdated(\n            _presaleRound,\n            _startingTime,\n            _usdPrice,\n            _minimumUSDPurchase,\n            _maximumPresaleAmount\n        );\n    }\n}\n",
  "sourcePath": "/Users/yosephks/Documents/GitHub/alpsfinance-smart-contracts/contracts/presale/Presale.sol",
  "ast": {
    "absolutePath": "project:/contracts/presale/Presale.sol",
    "exportedSymbols": {
      "AggregatorV3Interface": [
        45
      ],
      "Context": [
        5297
      ],
      "Counters": [
        5371
      ],
      "IERC20": [
        2884
      ],
      "IERC20Custom": [
        9652
      ],
      "Ownable": [
        532
      ],
      "Presale": [
        8365
      ],
      "PriceConverter": [
        7631
      ],
      "ReentrancyGuard": [
        742
      ],
      "SafeMath": [
        7057
      ]
    },
    "id": 8366,
    "license": "AGPL-3.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 7633,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "38:24:46"
      },
      {
        "absolutePath": "@openzeppelin/contracts/access/Ownable.sol",
        "file": "@openzeppelin/contracts/access/Ownable.sol",
        "id": 7634,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 8366,
        "sourceUnit": 533,
        "src": "64:52:46",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
        "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
        "id": 7635,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 8366,
        "sourceUnit": 2885,
        "src": "117:56:46",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/utils/Counters.sol",
        "file": "@openzeppelin/contracts/utils/Counters.sol",
        "id": 7636,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 8366,
        "sourceUnit": 5372,
        "src": "174:52:46",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/utils/math/SafeMath.sol",
        "file": "@openzeppelin/contracts/utils/math/SafeMath.sol",
        "id": 7637,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 8366,
        "sourceUnit": 7058,
        "src": "227:57:46",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/security/ReentrancyGuard.sol",
        "file": "@openzeppelin/contracts/security/ReentrancyGuard.sol",
        "id": 7638,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 8366,
        "sourceUnit": 743,
        "src": "285:62:46",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol",
        "file": "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol",
        "id": 7639,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 8366,
        "sourceUnit": 46,
        "src": "348:76:46",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/libraries/PriceConverter.sol",
        "file": "../libraries/PriceConverter.sol",
        "id": 7640,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 8366,
        "sourceUnit": 7632,
        "src": "425:41:46",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/token/interfaces/IERC20Custom.sol",
        "file": "../token/interfaces/IERC20Custom.sol",
        "id": 7641,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 8366,
        "sourceUnit": 9653,
        "src": "467:46:46",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 7642,
              "name": "Ownable",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 532,
              "src": "535:7:46"
            },
            "id": 7643,
            "nodeType": "InheritanceSpecifier",
            "src": "535:7:46"
          },
          {
            "baseName": {
              "id": 7644,
              "name": "ReentrancyGuard",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 742,
              "src": "544:15:46"
            },
            "id": 7645,
            "nodeType": "InheritanceSpecifier",
            "src": "544:15:46"
          }
        ],
        "canonicalName": "Presale",
        "contractDependencies": [],
        "contractKind": "contract",
        "fullyImplemented": true,
        "id": 8365,
        "linearizedBaseContracts": [
          8365,
          742,
          532,
          5297
        ],
        "name": "Presale",
        "nameLocation": "524:7:46",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 7649,
            "libraryName": {
              "id": 7646,
              "name": "Counters",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 5371,
              "src": "572:8:46"
            },
            "nodeType": "UsingForDirective",
            "src": "566:36:46",
            "typeName": {
              "id": 7648,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 7647,
                "name": "Counters.Counter",
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 5303,
                "src": "585:16:46"
              },
              "referencedDeclaration": 5303,
              "src": "585:16:46",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Counter_$5303_storage_ptr",
                "typeString": "struct Counters.Counter"
              }
            }
          },
          {
            "id": 7652,
            "libraryName": {
              "id": 7650,
              "name": "SafeMath",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 7057,
              "src": "613:8:46"
            },
            "nodeType": "UsingForDirective",
            "src": "607:27:46",
            "typeName": {
              "id": 7651,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "626:7:46",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "canonicalName": "Presale.PresaleData",
            "id": 7661,
            "members": [
              {
                "constant": false,
                "id": 7654,
                "mutability": "mutable",
                "name": "startingTime",
                "nameLocation": "677:12:46",
                "nodeType": "VariableDeclaration",
                "scope": 7661,
                "src": "669:20:46",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 7653,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "669:7:46",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 7656,
                "mutability": "mutable",
                "name": "usdPrice",
                "nameLocation": "707:8:46",
                "nodeType": "VariableDeclaration",
                "scope": 7661,
                "src": "699:16:46",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 7655,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "699:7:46",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 7658,
                "mutability": "mutable",
                "name": "minimumUSDPurchase",
                "nameLocation": "733:18:46",
                "nodeType": "VariableDeclaration",
                "scope": 7661,
                "src": "725:26:46",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 7657,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "725:7:46",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 7660,
                "mutability": "mutable",
                "name": "maximumPresaleAmount",
                "nameLocation": "769:20:46",
                "nodeType": "VariableDeclaration",
                "scope": 7661,
                "src": "761:28:46",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 7659,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "761:7:46",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "PresaleData",
            "nameLocation": "647:11:46",
            "nodeType": "StructDefinition",
            "scope": 8365,
            "src": "640:156:46",
            "visibility": "public"
          },
          {
            "canonicalName": "Presale.PresalePaymentTokenData",
            "id": 7666,
            "members": [
              {
                "constant": false,
                "id": 7663,
                "mutability": "mutable",
                "name": "available",
                "nameLocation": "847:9:46",
                "nodeType": "VariableDeclaration",
                "scope": 7666,
                "src": "842:14:46",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 7662,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "842:4:46",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 7665,
                "mutability": "mutable",
                "name": "aggregatorAddress",
                "nameLocation": "874:17:46",
                "nodeType": "VariableDeclaration",
                "scope": 7666,
                "src": "866:25:46",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 7664,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "866:7:46",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "PresalePaymentTokenData",
            "nameLocation": "808:23:46",
            "nodeType": "StructDefinition",
            "scope": 8365,
            "src": "801:97:46",
            "visibility": "public"
          },
          {
            "anonymous": false,
            "id": 7676,
            "name": "TokenPresold",
            "nameLocation": "910:12:46",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7675,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7668,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "948:2:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 7676,
                  "src": "932:18:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7667,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "932:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7670,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "paymentTokenAddress",
                  "nameLocation": "976:19:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 7676,
                  "src": "960:35:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7669,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "960:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7672,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "1013:6:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 7676,
                  "src": "1005:14:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7671,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1005:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7674,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "paymentTokenamount",
                  "nameLocation": "1037:18:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 7676,
                  "src": "1029:26:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7673,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1029:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "922:139:46"
            },
            "src": "904:158:46"
          },
          {
            "anonymous": false,
            "id": 7688,
            "name": "PresaleRoundUpdated",
            "nameLocation": "1073:19:46",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7687,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7678,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "presaleRound",
                  "nameLocation": "1118:12:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 7688,
                  "src": "1102:28:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7677,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1102:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7680,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "startingTime",
                  "nameLocation": "1148:12:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 7688,
                  "src": "1140:20:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7679,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1140:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7682,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "usdPrice",
                  "nameLocation": "1178:8:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 7688,
                  "src": "1170:16:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7681,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1170:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7684,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "minimumUSDPurchase",
                  "nameLocation": "1204:18:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 7688,
                  "src": "1196:26:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7683,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1196:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7686,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "maximumPresaleAmount",
                  "nameLocation": "1240:20:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 7688,
                  "src": "1232:28:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7685,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1232:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1092:174:46"
            },
            "src": "1067:200:46"
          },
          {
            "anonymous": false,
            "id": 7692,
            "name": "PresaleReceiverUpdated",
            "nameLocation": "1278:22:46",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7691,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7690,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "receiverAddress",
                  "nameLocation": "1309:15:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 7692,
                  "src": "1301:23:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7689,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1301:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1300:25:46"
            },
            "src": "1272:54:46"
          },
          {
            "anonymous": false,
            "id": 7700,
            "name": "PresalePaymentTokenUpdated",
            "nameLocation": "1337:26:46",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7699,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7694,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "tokenAddress",
                  "nameLocation": "1381:12:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 7700,
                  "src": "1373:20:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7693,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1373:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7696,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "tokenAvailability",
                  "nameLocation": "1408:17:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 7700,
                  "src": "1403:22:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7695,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1403:4:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7698,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "aggregatorAddress",
                  "nameLocation": "1443:17:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 7700,
                  "src": "1435:25:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7697,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1435:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1363:103:46"
            },
            "src": "1331:136:46"
          },
          {
            "anonymous": false,
            "id": 7704,
            "name": "PresaleTokenUpdated",
            "nameLocation": "1478:19:46",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7703,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7702,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "tokenAddress",
                  "nameLocation": "1506:12:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 7704,
                  "src": "1498:20:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7701,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1498:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1497:22:46"
            },
            "src": "1472:48:46"
          },
          {
            "anonymous": false,
            "id": 7708,
            "name": "PresaleEndingTimeUpdated",
            "nameLocation": "1531:24:46",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7707,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7706,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "endingTime",
                  "nameLocation": "1564:10:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 7708,
                  "src": "1556:18:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7705,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1556:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1555:20:46"
            },
            "src": "1525:51:46"
          },
          {
            "constant": false,
            "functionSelector": "962de5c0",
            "id": 7711,
            "mutability": "mutable",
            "name": "totalPresaleRound",
            "nameLocation": "1606:17:46",
            "nodeType": "VariableDeclaration",
            "scope": 8365,
            "src": "1582:41:46",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Counter_$5303_storage",
              "typeString": "struct Counters.Counter"
            },
            "typeName": {
              "id": 7710,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 7709,
                "name": "Counters.Counter",
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 5303,
                "src": "1582:16:46"
              },
              "referencedDeclaration": 5303,
              "src": "1582:16:46",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Counter_$5303_storage_ptr",
                "typeString": "struct Counters.Counter"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "9d76ea58",
            "id": 7713,
            "mutability": "mutable",
            "name": "tokenAddress",
            "nameLocation": "1644:12:46",
            "nodeType": "VariableDeclaration",
            "scope": 8365,
            "src": "1629:27:46",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 7712,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1629:7:46",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "c1436415",
            "id": 7715,
            "mutability": "mutable",
            "name": "presaleReceiver",
            "nameLocation": "1685:15:46",
            "nodeType": "VariableDeclaration",
            "scope": 8365,
            "src": "1662:38:46",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address_payable",
              "typeString": "address payable"
            },
            "typeName": {
              "id": 7714,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1662:15:46",
              "stateMutability": "payable",
              "typeDescriptions": {
                "typeIdentifier": "t_address_payable",
                "typeString": "address payable"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "6c47a6c3",
            "id": 7717,
            "mutability": "mutable",
            "name": "endingTime",
            "nameLocation": "1721:10:46",
            "nodeType": "VariableDeclaration",
            "scope": 8365,
            "src": "1706:25:46",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 7716,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1706:7:46",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "7b4d3585",
            "id": 7722,
            "mutability": "mutable",
            "name": "presaleDetailsMapping",
            "nameLocation": "1827:21:46",
            "nodeType": "VariableDeclaration",
            "scope": 8365,
            "src": "1788:60:46",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$7661_storage_$",
              "typeString": "mapping(uint256 => struct Presale.PresaleData)"
            },
            "typeName": {
              "id": 7721,
              "keyType": {
                "id": 7718,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1796:7:46",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "1788:31:46",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$7661_storage_$",
                "typeString": "mapping(uint256 => struct Presale.PresaleData)"
              },
              "valueType": {
                "id": 7720,
                "nodeType": "UserDefinedTypeName",
                "pathNode": {
                  "id": 7719,
                  "name": "PresaleData",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 7661,
                  "src": "1807:11:46"
                },
                "referencedDeclaration": 7661,
                "src": "1807:11:46",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_PresaleData_$7661_storage_ptr",
                  "typeString": "struct Presale.PresaleData"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "392f911b",
            "id": 7726,
            "mutability": "mutable",
            "name": "presaleAmountByRoundMapping",
            "nameLocation": "1889:27:46",
            "nodeType": "VariableDeclaration",
            "scope": 8365,
            "src": "1854:62:46",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
              "typeString": "mapping(uint256 => uint256)"
            },
            "typeName": {
              "id": 7725,
              "keyType": {
                "id": 7723,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1862:7:46",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "1854:27:46",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                "typeString": "mapping(uint256 => uint256)"
              },
              "valueType": {
                "id": 7724,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1873:7:46",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "8e7d41b7",
            "id": 7731,
            "mutability": "mutable",
            "name": "presalePaymentTokenMapping",
            "nameLocation": "1981:26:46",
            "nodeType": "VariableDeclaration",
            "scope": 8365,
            "src": "1922:85:46",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_PresalePaymentTokenData_$7666_storage_$",
              "typeString": "mapping(address => struct Presale.PresalePaymentTokenData)"
            },
            "typeName": {
              "id": 7730,
              "keyType": {
                "id": 7727,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1930:7:46",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1922:43:46",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_PresalePaymentTokenData_$7666_storage_$",
                "typeString": "mapping(address => struct Presale.PresalePaymentTokenData)"
              },
              "valueType": {
                "id": 7729,
                "nodeType": "UserDefinedTypeName",
                "pathNode": {
                  "id": 7728,
                  "name": "PresalePaymentTokenData",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 7666,
                  "src": "1941:23:46"
                },
                "referencedDeclaration": 7666,
                "src": "1941:23:46",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_PresalePaymentTokenData_$7666_storage_ptr",
                  "typeString": "struct Presale.PresalePaymentTokenData"
                }
              }
            },
            "visibility": "public"
          },
          {
            "id": 7733,
            "name": "presaleRoundClosed",
            "nameLocation": "2020:18:46",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 7732,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2038:2:46"
            },
            "src": "2014:27:46"
          },
          {
            "id": 7735,
            "name": "presaleTokenNotAvailable",
            "nameLocation": "2052:24:46",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 7734,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2076:2:46"
            },
            "src": "2046:33:46"
          },
          {
            "id": 7737,
            "name": "presaleNativeTokenPaymentNotSufficient",
            "nameLocation": "2090:38:46",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 7736,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2128:2:46"
            },
            "src": "2084:47:46"
          },
          {
            "id": 7739,
            "name": "presaleStartingTimeInvalid",
            "nameLocation": "2142:26:46",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 7738,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2168:2:46"
            },
            "src": "2136:35:46"
          },
          {
            "id": 7741,
            "name": "presaleUSDPriceInvalid",
            "nameLocation": "2182:22:46",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 7740,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2204:2:46"
            },
            "src": "2176:31:46"
          },
          {
            "id": 7743,
            "name": "presaleMimumumUSDPurchaseInvalid",
            "nameLocation": "2218:32:46",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 7742,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2250:2:46"
            },
            "src": "2212:41:46"
          },
          {
            "id": 7745,
            "name": "presaleMaximumPresaleAmountInvalid",
            "nameLocation": "2264:34:46",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 7744,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2298:2:46"
            },
            "src": "2258:43:46"
          },
          {
            "id": 7747,
            "name": "presaleUSDPurchaseNotSufficient",
            "nameLocation": "2312:31:46",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 7746,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2343:2:46"
            },
            "src": "2306:40:46"
          },
          {
            "id": 7749,
            "name": "presaleAmountOverdemand",
            "nameLocation": "2357:23:46",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 7748,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2380:2:46"
            },
            "src": "2351:32:46"
          },
          {
            "id": 7751,
            "name": "presaleNonZeroAddressInvalid",
            "nameLocation": "2394:28:46",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 7750,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2422:2:46"
            },
            "src": "2388:37:46"
          },
          {
            "id": 7753,
            "name": "presaleEndingTimeInvalid",
            "nameLocation": "2436:24:46",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 7752,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2460:2:46"
            },
            "src": "2430:33:46"
          },
          {
            "body": {
              "id": 7768,
              "nodeType": "Block",
              "src": "2515:93:46",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 7762,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 7757,
                      "name": "_address",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7755,
                      "src": "2529:8:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 7760,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2549:1:46",
                          "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": 7759,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "2541:7:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 7758,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2541:7:46",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 7761,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2541:10:46",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2529:22:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 7766,
                  "nodeType": "IfStatement",
                  "src": "2525:65:46",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 7763,
                        "name": "presaleNonZeroAddressInvalid",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7751,
                        "src": "2560:28:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 7764,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2560:30:46",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 7765,
                    "nodeType": "RevertStatement",
                    "src": "2553:37:46"
                  }
                },
                {
                  "id": 7767,
                  "nodeType": "PlaceholderStatement",
                  "src": "2600:1:46"
                }
              ]
            },
            "id": 7769,
            "name": "onlyNonZeroAddress",
            "nameLocation": "2478:18:46",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 7756,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7755,
                  "mutability": "mutable",
                  "name": "_address",
                  "nameLocation": "2505:8:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 7769,
                  "src": "2497:16:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7754,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2497:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2496:18:46"
            },
            "src": "2469:139:46",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7790,
              "nodeType": "Block",
              "src": "2734:123:46",
              "statements": [
                {
                  "expression": {
                    "id": 7780,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 7778,
                      "name": "tokenAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7713,
                      "src": "2744:12:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 7779,
                      "name": "_tokenAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7771,
                      "src": "2759:13:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2744:28:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 7781,
                  "nodeType": "ExpressionStatement",
                  "src": "2744:28:46"
                },
                {
                  "expression": {
                    "id": 7784,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 7782,
                      "name": "presaleReceiver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7715,
                      "src": "2782:15:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 7783,
                      "name": "_presaleReceiver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7773,
                      "src": "2800:16:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "2782:34:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "id": 7785,
                  "nodeType": "ExpressionStatement",
                  "src": "2782:34:46"
                },
                {
                  "expression": {
                    "id": 7788,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 7786,
                      "name": "endingTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7717,
                      "src": "2826:10:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 7787,
                      "name": "_endingTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7775,
                      "src": "2839:11:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2826:24:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7789,
                  "nodeType": "ExpressionStatement",
                  "src": "2826:24:46"
                }
              ]
            },
            "id": 7791,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7776,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7771,
                  "mutability": "mutable",
                  "name": "_tokenAddress",
                  "nameLocation": "2643:13:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 7791,
                  "src": "2635:21:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7770,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2635:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7773,
                  "mutability": "mutable",
                  "name": "_presaleReceiver",
                  "nameLocation": "2682:16:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 7791,
                  "src": "2666:32:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 7772,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2666:15:46",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7775,
                  "mutability": "mutable",
                  "name": "_endingTime",
                  "nameLocation": "2716:11:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 7791,
                  "src": "2708:19:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7774,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2708:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2625:108:46"
            },
            "returnParameters": {
              "id": 7777,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2734:0:46"
            },
            "scope": 8365,
            "src": "2614:243:46",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7801,
              "nodeType": "Block",
              "src": "2987:51:46",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 7797,
                        "name": "totalPresaleRound",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7711,
                        "src": "3004:17:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Counter_$5303_storage",
                          "typeString": "struct Counters.Counter storage ref"
                        }
                      },
                      "id": 7798,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "current",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5315,
                      "src": "3004:25:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Counter_$5303_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Counter_$5303_storage_ptr_$",
                        "typeString": "function (struct Counters.Counter storage pointer) view returns (uint256)"
                      }
                    },
                    "id": 7799,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3004:27:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 7796,
                  "id": 7800,
                  "nodeType": "Return",
                  "src": "2997:34:46"
                }
              ]
            },
            "documentation": {
              "id": 7792,
              "nodeType": "StructuredDocumentation",
              "src": "2863:57:46",
              "text": " @dev Get total amount of presale round"
            },
            "functionSelector": "398dcd26",
            "id": 7802,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getTotalPresaleRound",
            "nameLocation": "2934:20:46",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7793,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2954:2:46"
            },
            "returnParameters": {
              "id": 7796,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7795,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 7802,
                  "src": "2978:7:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7794,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2978:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2977:9:46"
            },
            "scope": 8365,
            "src": "2925:113:46",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7814,
              "nodeType": "Block",
              "src": "3283:66:46",
              "statements": [
                {
                  "expression": {
                    "baseExpression": {
                      "id": 7810,
                      "name": "presaleAmountByRoundMapping",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7726,
                      "src": "3300:27:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                        "typeString": "mapping(uint256 => uint256)"
                      }
                    },
                    "id": 7812,
                    "indexExpression": {
                      "id": 7811,
                      "name": "_presaleRound",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7805,
                      "src": "3328:13:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "3300:42:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 7809,
                  "id": 7813,
                  "nodeType": "Return",
                  "src": "3293:49:46"
                }
              ]
            },
            "documentation": {
              "id": 7803,
              "nodeType": "StructuredDocumentation",
              "src": "3044:120:46",
              "text": " @dev Get presale total amount By presale round\n @param _presaleRound - The presale round chosen"
            },
            "functionSelector": "d958e001",
            "id": 7815,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getPresaleAmountByRound",
            "nameLocation": "3178:23:46",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7806,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7805,
                  "mutability": "mutable",
                  "name": "_presaleRound",
                  "nameLocation": "3210:13:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 7815,
                  "src": "3202:21:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7804,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3202:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3201:23:46"
            },
            "returnParameters": {
              "id": 7809,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7808,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 7815,
                  "src": "3270:7:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7807,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3270:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3269:9:46"
            },
            "scope": 8365,
            "src": "3169:180:46",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7847,
              "nodeType": "Block",
              "src": "3490:299:46",
              "statements": [
                {
                  "assignments": [
                    7822
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7822,
                      "mutability": "mutable",
                      "name": "totalPresale",
                      "nameLocation": "3508:12:46",
                      "nodeType": "VariableDeclaration",
                      "scope": 7847,
                      "src": "3500:20:46",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7821,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3500:7:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 7824,
                  "initialValue": {
                    "hexValue": "30",
                    "id": 7823,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3523:1:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3500:24:46"
                },
                {
                  "body": {
                    "id": 7843,
                    "nodeType": "Block",
                    "src": "3671:82:46",
                    "statements": [
                      {
                        "expression": {
                          "id": 7841,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 7837,
                            "name": "totalPresale",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7822,
                            "src": "3685:12:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "baseExpression": {
                              "id": 7838,
                              "name": "presaleAmountByRoundMapping",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7726,
                              "src": "3701:27:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                "typeString": "mapping(uint256 => uint256)"
                              }
                            },
                            "id": 7840,
                            "indexExpression": {
                              "id": 7839,
                              "name": "presaleRound",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7826,
                              "src": "3729:12:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "3701:41:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3685:57:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7842,
                        "nodeType": "ExpressionStatement",
                        "src": "3685:57:46"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7833,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 7829,
                      "name": "presaleRound",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7826,
                      "src": "3590:12:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 7830,
                          "name": "totalPresaleRound",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7711,
                          "src": "3605:17:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Counter_$5303_storage",
                            "typeString": "struct Counters.Counter storage ref"
                          }
                        },
                        "id": 7831,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "current",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5315,
                        "src": "3605:25:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_Counter_$5303_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Counter_$5303_storage_ptr_$",
                          "typeString": "function (struct Counters.Counter storage pointer) view returns (uint256)"
                        }
                      },
                      "id": 7832,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3605:27:46",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3590:42:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 7844,
                  "initializationExpression": {
                    "assignments": [
                      7826
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 7826,
                        "mutability": "mutable",
                        "name": "presaleRound",
                        "nameLocation": "3560:12:46",
                        "nodeType": "VariableDeclaration",
                        "scope": 7844,
                        "src": "3552:20:46",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7825,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3552:7:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 7828,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 7827,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3575:1:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "3552:24:46"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 7835,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "3646:14:46",
                      "subExpression": {
                        "id": 7834,
                        "name": "presaleRound",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7826,
                        "src": "3646:12:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 7836,
                    "nodeType": "ExpressionStatement",
                    "src": "3646:14:46"
                  },
                  "nodeType": "ForStatement",
                  "src": "3534:219:46"
                },
                {
                  "expression": {
                    "id": 7845,
                    "name": "totalPresale",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7822,
                    "src": "3770:12:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 7820,
                  "id": 7846,
                  "nodeType": "Return",
                  "src": "3763:19:46"
                }
              ]
            },
            "documentation": {
              "id": 7816,
              "nodeType": "StructuredDocumentation",
              "src": "3355:67:46",
              "text": " @dev Get total amount of presale from all rounds"
            },
            "functionSelector": "0aca575a",
            "id": 7848,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getTotalPresaleAmount",
            "nameLocation": "3436:21:46",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7817,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3457:2:46"
            },
            "returnParameters": {
              "id": 7820,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7819,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 7848,
                  "src": "3481:7:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7818,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3481:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3480:9:46"
            },
            "scope": 8365,
            "src": "3427:362:46",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7883,
              "nodeType": "Block",
              "src": "3913:371:46",
              "statements": [
                {
                  "body": {
                    "id": 7879,
                    "nodeType": "Block",
                    "src": "4064:195:46",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7874,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "baseExpression": {
                                "id": 7868,
                                "name": "presaleDetailsMapping",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7722,
                                "src": "4099:21:46",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$7661_storage_$",
                                  "typeString": "mapping(uint256 => struct Presale.PresaleData storage ref)"
                                }
                              },
                              "id": 7870,
                              "indexExpression": {
                                "id": 7869,
                                "name": "presaleRound",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7855,
                                "src": "4121:12:46",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "4099:35:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_PresaleData_$7661_storage",
                                "typeString": "struct Presale.PresaleData storage ref"
                              }
                            },
                            "id": 7871,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "startingTime",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7654,
                            "src": "4099:48:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "expression": {
                              "id": 7872,
                              "name": "block",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4294967292,
                              "src": "4167:5:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_block",
                                "typeString": "block"
                              }
                            },
                            "id": 7873,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "timestamp",
                            "nodeType": "MemberAccess",
                            "src": "4167:15:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4099:83:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7878,
                        "nodeType": "IfStatement",
                        "src": "4078:171:46",
                        "trueBody": {
                          "id": 7877,
                          "nodeType": "Block",
                          "src": "4197:52:46",
                          "statements": [
                            {
                              "expression": {
                                "id": 7875,
                                "name": "presaleRound",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7855,
                                "src": "4222:12:46",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "functionReturnParameters": 7853,
                              "id": 7876,
                              "nodeType": "Return",
                              "src": "4215:19:46"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7864,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 7862,
                      "name": "presaleRound",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7855,
                      "src": "4009:12:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 7863,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4024:1:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "4009:16:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 7880,
                  "initializationExpression": {
                    "assignments": [
                      7855
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 7855,
                        "mutability": "mutable",
                        "name": "presaleRound",
                        "nameLocation": "3949:12:46",
                        "nodeType": "VariableDeclaration",
                        "scope": 7880,
                        "src": "3941:20:46",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7854,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3941:7:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 7861,
                    "initialValue": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 7860,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 7856,
                            "name": "totalPresaleRound",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7711,
                            "src": "3964:17:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Counter_$5303_storage",
                              "typeString": "struct Counters.Counter storage ref"
                            }
                          },
                          "id": 7857,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "current",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 5315,
                          "src": "3964:25:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_struct$_Counter_$5303_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Counter_$5303_storage_ptr_$",
                            "typeString": "function (struct Counters.Counter storage pointer) view returns (uint256)"
                          }
                        },
                        "id": 7858,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3964:27:46",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "hexValue": "31",
                        "id": 7859,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3994:1:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "3964:31:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "3941:54:46"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 7866,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "--",
                      "prefix": false,
                      "src": "4039:14:46",
                      "subExpression": {
                        "id": 7865,
                        "name": "presaleRound",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7855,
                        "src": "4039:12:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 7867,
                    "nodeType": "ExpressionStatement",
                    "src": "4039:14:46"
                  },
                  "nodeType": "ForStatement",
                  "src": "3923:336:46"
                },
                {
                  "expression": {
                    "hexValue": "30",
                    "id": 7881,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "4276:1:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "functionReturnParameters": 7853,
                  "id": 7882,
                  "nodeType": "Return",
                  "src": "4269:8:46"
                }
              ]
            },
            "documentation": {
              "id": 7849,
              "nodeType": "StructuredDocumentation",
              "src": "3795:49:46",
              "text": " @dev Get Current Presale Round"
            },
            "functionSelector": "1c63f0ed",
            "id": 7884,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getCurrentPresaleRound",
            "nameLocation": "3858:22:46",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7850,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3880:2:46"
            },
            "returnParameters": {
              "id": 7853,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7852,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 7884,
                  "src": "3904:7:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7851,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3904:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3903:9:46"
            },
            "scope": 8365,
            "src": "3849:435:46",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7919,
              "nodeType": "Block",
              "src": "4673:384:46",
              "statements": [
                {
                  "assignments": [
                    7897
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7897,
                      "mutability": "mutable",
                      "name": "currentPresaleRound",
                      "nameLocation": "4691:19:46",
                      "nodeType": "VariableDeclaration",
                      "scope": 7919,
                      "src": "4683:27:46",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7896,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4683:7:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 7900,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 7898,
                      "name": "getCurrentPresaleRound",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7884,
                      "src": "4713:22:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                        "typeString": "function () view returns (uint256)"
                      }
                    },
                    "id": 7899,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4713:24:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4683:54:46"
                },
                {
                  "expression": {
                    "components": [
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 7901,
                            "name": "presaleDetailsMapping",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7722,
                            "src": "4768:21:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$7661_storage_$",
                              "typeString": "mapping(uint256 => struct Presale.PresaleData storage ref)"
                            }
                          },
                          "id": 7903,
                          "indexExpression": {
                            "id": 7902,
                            "name": "currentPresaleRound",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7897,
                            "src": "4790:19:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4768:42:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_PresaleData_$7661_storage",
                            "typeString": "struct Presale.PresaleData storage ref"
                          }
                        },
                        "id": 7904,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "startingTime",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7654,
                        "src": "4768:55:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 7905,
                            "name": "presaleDetailsMapping",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7722,
                            "src": "4837:21:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$7661_storage_$",
                              "typeString": "mapping(uint256 => struct Presale.PresaleData storage ref)"
                            }
                          },
                          "id": 7907,
                          "indexExpression": {
                            "id": 7906,
                            "name": "currentPresaleRound",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7897,
                            "src": "4859:19:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4837:42:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_PresaleData_$7661_storage",
                            "typeString": "struct Presale.PresaleData storage ref"
                          }
                        },
                        "id": 7908,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "usdPrice",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7656,
                        "src": "4837:51:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 7909,
                            "name": "presaleDetailsMapping",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7722,
                            "src": "4902:21:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$7661_storage_$",
                              "typeString": "mapping(uint256 => struct Presale.PresaleData storage ref)"
                            }
                          },
                          "id": 7911,
                          "indexExpression": {
                            "id": 7910,
                            "name": "currentPresaleRound",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7897,
                            "src": "4924:19:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4902:42:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_PresaleData_$7661_storage",
                            "typeString": "struct Presale.PresaleData storage ref"
                          }
                        },
                        "id": 7912,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "minimumUSDPurchase",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7658,
                        "src": "4902:61:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 7913,
                            "name": "presaleDetailsMapping",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7722,
                            "src": "4977:21:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$7661_storage_$",
                              "typeString": "mapping(uint256 => struct Presale.PresaleData storage ref)"
                            }
                          },
                          "id": 7915,
                          "indexExpression": {
                            "id": 7914,
                            "name": "currentPresaleRound",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7897,
                            "src": "4999:19:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4977:42:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_PresaleData_$7661_storage",
                            "typeString": "struct Presale.PresaleData storage ref"
                          }
                        },
                        "id": 7916,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "maximumPresaleAmount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7660,
                        "src": "4977:63:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 7917,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "4754:296:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256,uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 7895,
                  "id": 7918,
                  "nodeType": "Return",
                  "src": "4747:303:46"
                }
              ]
            },
            "documentation": {
              "id": 7885,
              "nodeType": "StructuredDocumentation",
              "src": "4290:199:46",
              "text": " @dev Getting the Current Presale Details, including:\n @return Starting Time\n @return USD Price\n @return Minimum USD Purchase\n @return Maximum Presale Amount"
            },
            "functionSelector": "ec2b3523",
            "id": 7920,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getCurrentPresaleDetails",
            "nameLocation": "4503:24:46",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7886,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4527:2:46"
            },
            "returnParameters": {
              "id": 7895,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7888,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 7920,
                  "src": "4588:7:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7887,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4588:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7890,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 7920,
                  "src": "4609:7:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7889,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4609:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7892,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 7920,
                  "src": "4630:7:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7891,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4630:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7894,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 7920,
                  "src": "4651:7:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7893,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4651:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4574:94:46"
            },
            "scope": 8365,
            "src": "4494:563:46",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8121,
              "nodeType": "Block",
              "src": "5462:2792:46",
              "statements": [
                {
                  "assignments": [
                    7931,
                    7933,
                    7935,
                    7937
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7931,
                      "mutability": "mutable",
                      "name": "currentPresaleStartingTime",
                      "nameLocation": "5494:26:46",
                      "nodeType": "VariableDeclaration",
                      "scope": 8121,
                      "src": "5486:34:46",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7930,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5486:7:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 7933,
                      "mutability": "mutable",
                      "name": "currentPresalePrice",
                      "nameLocation": "5542:19:46",
                      "nodeType": "VariableDeclaration",
                      "scope": 8121,
                      "src": "5534:27:46",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7932,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5534:7:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 7935,
                      "mutability": "mutable",
                      "name": "currentPresaleMinimumUSDPurchase",
                      "nameLocation": "5583:32:46",
                      "nodeType": "VariableDeclaration",
                      "scope": 8121,
                      "src": "5575:40:46",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7934,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5575:7:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 7937,
                      "mutability": "mutable",
                      "name": "currentPresaleMaximumPresaleAmount",
                      "nameLocation": "5637:34:46",
                      "nodeType": "VariableDeclaration",
                      "scope": 8121,
                      "src": "5629:42:46",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7936,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5629:7:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 7940,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 7938,
                      "name": "getCurrentPresaleDetails",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7920,
                      "src": "5684:24:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$",
                        "typeString": "function () view returns (uint256,uint256,uint256,uint256)"
                      }
                    },
                    "id": 7939,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5684:26:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256,uint256,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5472:238:46"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 7949,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 7944,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 7941,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967292,
                          "src": "5795:5:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 7942,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "timestamp",
                        "nodeType": "MemberAccess",
                        "src": "5795:15:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "id": 7943,
                        "name": "currentPresaleStartingTime",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7931,
                        "src": "5813:26:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "5795:44:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 7948,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 7945,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967292,
                          "src": "5855:5:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 7946,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "timestamp",
                        "nodeType": "MemberAccess",
                        "src": "5855:15:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">=",
                      "rightExpression": {
                        "id": 7947,
                        "name": "endingTime",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7717,
                        "src": "5874:10:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "5855:29:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "5795:89:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 7953,
                  "nodeType": "IfStatement",
                  "src": "5778:144:46",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 7950,
                        "name": "presaleRoundClosed",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7733,
                        "src": "5902:18:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 7951,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5902:20:46",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 7952,
                    "nodeType": "RevertStatement",
                    "src": "5895:27:46"
                  }
                },
                {
                  "condition": {
                    "id": 7958,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "5977:59:46",
                    "subExpression": {
                      "expression": {
                        "baseExpression": {
                          "id": 7954,
                          "name": "presalePaymentTokenMapping",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7731,
                          "src": "5978:26:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_PresalePaymentTokenData_$7666_storage_$",
                            "typeString": "mapping(address => struct Presale.PresalePaymentTokenData storage ref)"
                          }
                        },
                        "id": 7956,
                        "indexExpression": {
                          "id": 7955,
                          "name": "_paymentTokenAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7923,
                          "src": "6005:20:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "5978:48:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_PresalePaymentTokenData_$7666_storage",
                          "typeString": "struct Presale.PresalePaymentTokenData storage ref"
                        }
                      },
                      "id": 7957,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "available",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7663,
                      "src": "5978:58:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 7962,
                  "nodeType": "IfStatement",
                  "src": "5973:110:46",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 7959,
                        "name": "presaleTokenNotAvailable",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7735,
                        "src": "6057:24:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 7960,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6057:26:46",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 7961,
                    "nodeType": "RevertStatement",
                    "src": "6050:33:46"
                  }
                },
                {
                  "assignments": [
                    7965
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7965,
                      "mutability": "mutable",
                      "name": "token",
                      "nameLocation": "6162:5:46",
                      "nodeType": "VariableDeclaration",
                      "scope": 8121,
                      "src": "6149:18:46",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Custom_$9652",
                        "typeString": "contract IERC20Custom"
                      },
                      "typeName": {
                        "id": 7964,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 7963,
                          "name": "IERC20Custom",
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 9652,
                          "src": "6149:12:46"
                        },
                        "referencedDeclaration": 9652,
                        "src": "6149:12:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Custom_$9652",
                          "typeString": "contract IERC20Custom"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 7969,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 7967,
                        "name": "tokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7713,
                        "src": "6183:12:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 7966,
                      "name": "IERC20Custom",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9652,
                      "src": "6170:12:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IERC20Custom_$9652_$",
                        "typeString": "type(contract IERC20Custom)"
                      }
                    },
                    "id": 7968,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6170:26:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Custom_$9652",
                      "typeString": "contract IERC20Custom"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6149:47:46"
                },
                {
                  "assignments": [
                    7972
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7972,
                      "mutability": "mutable",
                      "name": "priceFeed",
                      "nameLocation": "6228:9:46",
                      "nodeType": "VariableDeclaration",
                      "scope": 8121,
                      "src": "6206:31:46",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_AggregatorV3Interface_$45",
                        "typeString": "contract AggregatorV3Interface"
                      },
                      "typeName": {
                        "id": 7971,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 7970,
                          "name": "AggregatorV3Interface",
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 45,
                          "src": "6206:21:46"
                        },
                        "referencedDeclaration": 45,
                        "src": "6206:21:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_AggregatorV3Interface_$45",
                          "typeString": "contract AggregatorV3Interface"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 7979,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 7974,
                            "name": "presalePaymentTokenMapping",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7731,
                            "src": "6275:26:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_PresalePaymentTokenData_$7666_storage_$",
                              "typeString": "mapping(address => struct Presale.PresalePaymentTokenData storage ref)"
                            }
                          },
                          "id": 7976,
                          "indexExpression": {
                            "id": 7975,
                            "name": "_paymentTokenAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7923,
                            "src": "6302:20:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "6275:48:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_PresalePaymentTokenData_$7666_storage",
                            "typeString": "struct Presale.PresalePaymentTokenData storage ref"
                          }
                        },
                        "id": 7977,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "aggregatorAddress",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7665,
                        "src": "6275:66:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 7973,
                      "name": "AggregatorV3Interface",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45,
                      "src": "6240:21:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_AggregatorV3Interface_$45_$",
                        "typeString": "type(contract AggregatorV3Interface)"
                      }
                    },
                    "id": 7978,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6240:111:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_AggregatorV3Interface_$45",
                      "typeString": "contract AggregatorV3Interface"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6206:145:46"
                },
                {
                  "assignments": [
                    null,
                    7981,
                    null,
                    null,
                    null
                  ],
                  "declarations": [
                    null,
                    {
                      "constant": false,
                      "id": 7981,
                      "mutability": "mutable",
                      "name": "price",
                      "nameLocation": "6371:5:46",
                      "nodeType": "VariableDeclaration",
                      "scope": 8121,
                      "src": "6364:12:46",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      },
                      "typeName": {
                        "id": 7980,
                        "name": "int256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6364:6:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      },
                      "visibility": "internal"
                    },
                    null,
                    null,
                    null
                  ],
                  "id": 7985,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 7982,
                        "name": "priceFeed",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7972,
                        "src": "6386:9:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_AggregatorV3Interface_$45",
                          "typeString": "contract AggregatorV3Interface"
                        }
                      },
                      "id": 7983,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "latestRoundData",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 44,
                      "src": "6386:25:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint80_$_t_int256_$_t_uint256_$_t_uint256_$_t_uint80_$",
                        "typeString": "function () view external returns (uint80,int256,uint256,uint256,uint80)"
                      }
                    },
                    "id": 7984,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6386:27:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint80_$_t_int256_$_t_uint256_$_t_uint256_$_t_uint80_$",
                      "typeString": "tuple(uint80,int256,uint256,uint256,uint80)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6361:52:46"
                },
                {
                  "assignments": [
                    7987
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7987,
                      "mutability": "mutable",
                      "name": "presaleUSDAmount",
                      "nameLocation": "6431:16:46",
                      "nodeType": "VariableDeclaration",
                      "scope": 8121,
                      "src": "6423:24:46",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7986,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6423:7:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8005,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "id": 7994,
                                "name": "price",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7981,
                                "src": "6548:5:46",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "id": 7995,
                                    "name": "priceFeed",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7972,
                                    "src": "6575:9:46",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_AggregatorV3Interface_$45",
                                      "typeString": "contract AggregatorV3Interface"
                                    }
                                  },
                                  "id": 7996,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "decimals",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 6,
                                  "src": "6575:18:46",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_uint8_$",
                                    "typeString": "function () view external returns (uint8)"
                                  }
                                },
                                "id": 7997,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6575:20:46",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "id": 7998,
                                    "name": "token",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7965,
                                    "src": "6617:5:46",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IERC20Custom_$9652",
                                      "typeString": "contract IERC20Custom"
                                    }
                                  },
                                  "id": 7999,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "decimals",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 9606,
                                  "src": "6617:14:46",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_uint8_$",
                                    "typeString": "function () view external returns (uint8)"
                                  }
                                },
                                "id": 8000,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6617:16:46",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                },
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                },
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              ],
                              "expression": {
                                "id": 7992,
                                "name": "PriceConverter",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7631,
                                "src": "6501:14:46",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_PriceConverter_$7631_$",
                                  "typeString": "type(library PriceConverter)"
                                }
                              },
                              "id": 7993,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "scalePrice",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7630,
                              "src": "6501:25:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_int256_$_t_uint8_$_t_uint8_$returns$_t_int256_$",
                                "typeString": "function (int256,uint8,uint8) pure returns (int256)"
                              }
                            },
                            "id": 8001,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6501:150:46",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          ],
                          "id": 7991,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "6476:7:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": {
                            "id": 7990,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "6476:7:46",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 8002,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6476:189:46",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 8003,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7925,
                        "src": "6679:7:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 7988,
                        "name": "SafeMath",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7057,
                        "src": "6450:8:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_SafeMath_$7057_$",
                          "typeString": "type(library SafeMath)"
                        }
                      },
                      "id": 7989,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mul",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6951,
                      "src": "6450:12:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 8004,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6450:246:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6423:273:46"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8019,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 8012,
                                  "name": "presaleUSDAmount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7987,
                                  "src": "6782:16:46",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 8011,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "6775:6:46",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_int256_$",
                                  "typeString": "type(int256)"
                                },
                                "typeName": {
                                  "id": 8010,
                                  "name": "int256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "6775:6:46",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 8013,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6775:24:46",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            {
                              "hexValue": "3138",
                              "id": 8014,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6801:2:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_18_by_1",
                                "typeString": "int_const 18"
                              },
                              "value": "18"
                            },
                            {
                              "hexValue": "30",
                              "id": 8015,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6805:1:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              },
                              {
                                "typeIdentifier": "t_rational_18_by_1",
                                "typeString": "int_const 18"
                              },
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "expression": {
                              "id": 8008,
                              "name": "PriceConverter",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7631,
                              "src": "6749:14:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_PriceConverter_$7631_$",
                                "typeString": "type(library PriceConverter)"
                              }
                            },
                            "id": 8009,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "scalePrice",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7630,
                            "src": "6749:25:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_int256_$_t_uint8_$_t_uint8_$returns$_t_int256_$",
                              "typeString": "function (int256,uint8,uint8) pure returns (int256)"
                            }
                          },
                          "id": 8016,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6749:58:46",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        ],
                        "id": 8007,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "6724:7:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": {
                          "id": 8006,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6724:7:46",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 8017,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6724:97:46",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "id": 8018,
                      "name": "currentPresaleMinimumUSDPurchase",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7935,
                      "src": "6824:32:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6724:132:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8023,
                  "nodeType": "IfStatement",
                  "src": "6707:200:46",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 8020,
                        "name": "presaleUSDPurchaseNotSufficient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7747,
                        "src": "6874:31:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 8021,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6874:33:46",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 8022,
                    "nodeType": "RevertStatement",
                    "src": "6867:40:46"
                  }
                },
                {
                  "assignments": [
                    8025
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8025,
                      "mutability": "mutable",
                      "name": "presaleAmount",
                      "nameLocation": "6926:13:46",
                      "nodeType": "VariableDeclaration",
                      "scope": 8121,
                      "src": "6918:21:46",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8024,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6918:7:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8031,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 8028,
                        "name": "presaleUSDAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7987,
                        "src": "6968:16:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 8029,
                        "name": "currentPresalePrice",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7933,
                        "src": "6998:19:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 8026,
                        "name": "SafeMath",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7057,
                        "src": "6942:8:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_SafeMath_$7057_$",
                          "typeString": "type(library SafeMath)"
                        }
                      },
                      "id": 8027,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6966,
                      "src": "6942:12:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 8030,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6942:85:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6918:109:46"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8039,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 8032,
                      "name": "presaleAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8025,
                      "src": "7055:13:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8038,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 8033,
                        "name": "currentPresaleMaximumPresaleAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7937,
                        "src": "7083:34:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "baseExpression": {
                          "id": 8034,
                          "name": "presaleAmountByRoundMapping",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7726,
                          "src": "7136:27:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                            "typeString": "mapping(uint256 => uint256)"
                          }
                        },
                        "id": 8037,
                        "indexExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 8035,
                            "name": "getCurrentPresaleRound",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7884,
                            "src": "7164:22:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                              "typeString": "function () view returns (uint256)"
                            }
                          },
                          "id": 8036,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7164:24:46",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "7136:53:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "7083:106:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7055:134:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8043,
                  "nodeType": "IfStatement",
                  "src": "7038:194:46",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 8040,
                        "name": "presaleAmountOverdemand",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7749,
                        "src": "7207:23:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 8041,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7207:25:46",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 8042,
                    "nodeType": "RevertStatement",
                    "src": "7200:32:46"
                  }
                },
                {
                  "expression": {
                    "id": 8049,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 8044,
                        "name": "presaleAmountByRoundMapping",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7726,
                        "src": "7243:27:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                          "typeString": "mapping(uint256 => uint256)"
                        }
                      },
                      "id": 8047,
                      "indexExpression": {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 8045,
                          "name": "getCurrentPresaleRound",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7884,
                          "src": "7271:22:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                            "typeString": "function () view returns (uint256)"
                          }
                        },
                        "id": 8046,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7271:24:46",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7243:53:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "id": 8048,
                      "name": "presaleAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8025,
                      "src": "7300:13:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7243:70:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8050,
                  "nodeType": "ExpressionStatement",
                  "src": "7243:70:46"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 8056,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 8051,
                      "name": "_paymentTokenAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7923,
                      "src": "7400:20:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 8054,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7432:1:46",
                          "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": 8053,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "7424:7:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 8052,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7424:7:46",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 8055,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7424:10:46",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "7400:34:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 8103,
                    "nodeType": "Block",
                    "src": "7862:152:46",
                    "statements": [
                      {
                        "assignments": [
                          8089
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 8089,
                            "mutability": "mutable",
                            "name": "paymentToken",
                            "nameLocation": "7883:12:46",
                            "nodeType": "VariableDeclaration",
                            "scope": 8103,
                            "src": "7876:19:46",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20_$2884",
                              "typeString": "contract IERC20"
                            },
                            "typeName": {
                              "id": 8088,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 8087,
                                "name": "IERC20",
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 2884,
                                "src": "7876:6:46"
                              },
                              "referencedDeclaration": 2884,
                              "src": "7876:6:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$2884",
                                "typeString": "contract IERC20"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 8093,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 8091,
                              "name": "_paymentTokenAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7923,
                              "src": "7905:20:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 8090,
                            "name": "IERC20",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2884,
                            "src": "7898:6:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IERC20_$2884_$",
                              "typeString": "type(contract IERC20)"
                            }
                          },
                          "id": 8092,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7898:28:46",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$2884",
                            "typeString": "contract IERC20"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7876:50:46"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 8097,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4294967281,
                                "src": "7966:3:46",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 8098,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "7966:10:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 8099,
                              "name": "presaleReceiver",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7715,
                              "src": "7978:15:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "id": 8100,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7925,
                              "src": "7995:7:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 8094,
                              "name": "paymentToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8089,
                              "src": "7940:12:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$2884",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 8096,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transferFrom",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2865,
                            "src": "7940:25:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,address,uint256) external returns (bool)"
                            }
                          },
                          "id": 8101,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7940:63:46",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8102,
                        "nodeType": "ExpressionStatement",
                        "src": "7940:63:46"
                      }
                    ]
                  },
                  "id": 8104,
                  "nodeType": "IfStatement",
                  "src": "7396:618:46",
                  "trueBody": {
                    "id": 8086,
                    "nodeType": "Block",
                    "src": "7436:420:46",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8060,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 8057,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4294967281,
                              "src": "7454:3:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 8058,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "value",
                            "nodeType": "MemberAccess",
                            "src": "7454:9:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "id": 8059,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7925,
                            "src": "7466:7:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7454:19:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 8084,
                          "nodeType": "Block",
                          "src": "7561:285:46",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 8068,
                                    "name": "_amount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7925,
                                    "src": "7604:7:46",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 8065,
                                    "name": "presaleReceiver",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7715,
                                    "src": "7579:15:46",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  },
                                  "id": 8067,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "transfer",
                                  "nodeType": "MemberAccess",
                                  "src": "7579:24:46",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256)"
                                  }
                                },
                                "id": 8069,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7579:33:46",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8070,
                              "nodeType": "ExpressionStatement",
                              "src": "7579:33:46"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "id": 8079,
                                          "name": "this",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4294967268,
                                          "src": "7817:4:46",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_Presale_$8365",
                                            "typeString": "contract Presale"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_contract$_Presale_$8365",
                                            "typeString": "contract Presale"
                                          }
                                        ],
                                        "id": 8078,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "7809:7:46",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_address_$",
                                          "typeString": "type(address)"
                                        },
                                        "typeName": {
                                          "id": 8077,
                                          "name": "address",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "7809:7:46",
                                          "typeDescriptions": {}
                                        }
                                      },
                                      "id": 8080,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "7809:13:46",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "id": 8081,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "balance",
                                    "nodeType": "MemberAccess",
                                    "src": "7809:21:46",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "arguments": [
                                      {
                                        "expression": {
                                          "id": 8073,
                                          "name": "msg",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4294967281,
                                          "src": "7788:3:46",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_magic_message",
                                            "typeString": "msg"
                                          }
                                        },
                                        "id": 8074,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "sender",
                                        "nodeType": "MemberAccess",
                                        "src": "7788:10:46",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 8072,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "7780:8:46",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_payable_$",
                                        "typeString": "type(address payable)"
                                      },
                                      "typeName": {
                                        "id": 8071,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7780:8:46",
                                        "stateMutability": "payable",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 8075,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "7780:19:46",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  },
                                  "id": 8076,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "transfer",
                                  "nodeType": "MemberAccess",
                                  "src": "7780:28:46",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256)"
                                  }
                                },
                                "id": 8082,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7780:51:46",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8083,
                              "nodeType": "ExpressionStatement",
                              "src": "7780:51:46"
                            }
                          ]
                        },
                        "id": 8085,
                        "nodeType": "IfStatement",
                        "src": "7450:396:46",
                        "trueBody": {
                          "id": 8064,
                          "nodeType": "Block",
                          "src": "7475:80:46",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 8061,
                                  "name": "presaleNativeTokenPaymentNotSufficient",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7737,
                                  "src": "7500:38:46",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                    "typeString": "function () pure"
                                  }
                                },
                                "id": 8062,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7500:40:46",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8063,
                              "nodeType": "RevertStatement",
                              "src": "7493:47:46"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 8108,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "8078:3:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8109,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "8078:10:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 8110,
                        "name": "presaleAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8025,
                        "src": "8090:13:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 8105,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7965,
                        "src": "8067:5:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Custom_$9652",
                          "typeString": "contract IERC20Custom"
                        }
                      },
                      "id": 8107,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9639,
                      "src": "8067:10:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 8111,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8067:37:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8112,
                  "nodeType": "ExpressionStatement",
                  "src": "8067:37:46"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 8114,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "8145:3:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8115,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "8145:10:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 8116,
                        "name": "_paymentTokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7923,
                        "src": "8169:20:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 8117,
                        "name": "presaleAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8025,
                        "src": "8203:13:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 8118,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7925,
                        "src": "8230:7:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8113,
                      "name": "TokenPresold",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7676,
                      "src": "8119:12:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256,uint256)"
                      }
                    },
                    "id": 8119,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8119:128:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8120,
                  "nodeType": "EmitStatement",
                  "src": "8114:133:46"
                }
              ]
            },
            "documentation": {
              "id": 7921,
              "nodeType": "StructuredDocumentation",
              "src": "5063:268:46",
              "text": " @dev Execute the Presale of ALPS Token in exchange of other token\n @param _paymentTokenAddress - Address of the token use to pay (address 0 is for native token)\n @param _amount - Amount denominated in the `paymentTokenAddress` being paid"
            },
            "functionSelector": "efca9049",
            "id": 8122,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 7928,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 7927,
                  "name": "nonReentrant",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 741,
                  "src": "5445:12:46"
                },
                "nodeType": "ModifierInvocation",
                "src": "5445:12:46"
              }
            ],
            "name": "presaleTokens",
            "nameLocation": "5345:13:46",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7926,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7923,
                  "mutability": "mutable",
                  "name": "_paymentTokenAddress",
                  "nameLocation": "5367:20:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 8122,
                  "src": "5359:28:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7922,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5359:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7925,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nameLocation": "5397:7:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 8122,
                  "src": "5389:15:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7924,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5389:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5358:47:46"
            },
            "returnParameters": {
              "id": 7929,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5462:0:46"
            },
            "scope": 8365,
            "src": "5336:2918:46",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8138,
              "nodeType": "Block",
              "src": "8509:113:46",
              "statements": [
                {
                  "expression": {
                    "id": 8132,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 8130,
                      "name": "presaleReceiver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7715,
                      "src": "8519:15:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8131,
                      "name": "_newPresaleReceiver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8125,
                      "src": "8537:19:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "8519:37:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "id": 8133,
                  "nodeType": "ExpressionStatement",
                  "src": "8519:37:46"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 8135,
                        "name": "_newPresaleReceiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8125,
                        "src": "8595:19:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 8134,
                      "name": "PresaleReceiverUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7692,
                      "src": "8572:22:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 8136,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8572:43:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8137,
                  "nodeType": "EmitStatement",
                  "src": "8567:48:46"
                }
              ]
            },
            "documentation": {
              "id": 8123,
              "nodeType": "StructuredDocumentation",
              "src": "8260:142:46",
              "text": " @dev Set new Presale Receiver Address\n @param _newPresaleReceiver - Address that'll receive the presale payment token"
            },
            "functionSelector": "feda925b",
            "id": 8139,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8128,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8127,
                  "name": "onlyOwner",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 474,
                  "src": "8495:9:46"
                },
                "nodeType": "ModifierInvocation",
                "src": "8495:9:46"
              }
            ],
            "name": "setPresaleReceiver",
            "nameLocation": "8416:18:46",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8126,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8125,
                  "mutability": "mutable",
                  "name": "_newPresaleReceiver",
                  "nameLocation": "8451:19:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 8139,
                  "src": "8435:35:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 8124,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8435:15:46",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8434:37:46"
            },
            "returnParameters": {
              "id": 8129,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8509:0:46"
            },
            "scope": 8365,
            "src": "8407:215:46",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8158,
              "nodeType": "Block",
              "src": "8896:101:46",
              "statements": [
                {
                  "expression": {
                    "id": 8152,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 8150,
                      "name": "tokenAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7713,
                      "src": "8906:12:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8151,
                      "name": "_newTokenAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8142,
                      "src": "8921:16:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "8906:31:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 8153,
                  "nodeType": "ExpressionStatement",
                  "src": "8906:31:46"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 8155,
                        "name": "_newTokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8142,
                        "src": "8973:16:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8154,
                      "name": "PresaleTokenUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7704,
                      "src": "8953:19:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 8156,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8953:37:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8157,
                  "nodeType": "EmitStatement",
                  "src": "8948:42:46"
                }
              ]
            },
            "documentation": {
              "id": 8140,
              "nodeType": "StructuredDocumentation",
              "src": "8628:123:46",
              "text": " @dev Set new Presale Token Address\n @param _newTokenAddress - Address of token that'll be presaled"
            },
            "functionSelector": "3c0c134d",
            "id": 8159,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8145,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8144,
                  "name": "onlyOwner",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 474,
                  "src": "8837:9:46"
                },
                "nodeType": "ModifierInvocation",
                "src": "8837:9:46"
              },
              {
                "arguments": [
                  {
                    "id": 8147,
                    "name": "_newTokenAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8142,
                    "src": "8874:16:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 8148,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8146,
                  "name": "onlyNonZeroAddress",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 7769,
                  "src": "8855:18:46"
                },
                "nodeType": "ModifierInvocation",
                "src": "8855:36:46"
              }
            ],
            "name": "setPresaleTokenAddress",
            "nameLocation": "8765:22:46",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8143,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8142,
                  "mutability": "mutable",
                  "name": "_newTokenAddress",
                  "nameLocation": "8796:16:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 8159,
                  "src": "8788:24:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8141,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8788:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8787:26:46"
            },
            "returnParameters": {
              "id": 8149,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8896:0:46"
            },
            "scope": 8365,
            "src": "8756:241:46",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8194,
              "nodeType": "Block",
              "src": "9531:348:46",
              "statements": [
                {
                  "expression": {
                    "id": 8179,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 8174,
                          "name": "presalePaymentTokenMapping",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7731,
                          "src": "9541:26:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_PresalePaymentTokenData_$7666_storage_$",
                            "typeString": "mapping(address => struct Presale.PresalePaymentTokenData storage ref)"
                          }
                        },
                        "id": 8176,
                        "indexExpression": {
                          "id": 8175,
                          "name": "_tokenAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8162,
                          "src": "9568:13:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "9541:41:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_PresalePaymentTokenData_$7666_storage",
                          "typeString": "struct Presale.PresalePaymentTokenData storage ref"
                        }
                      },
                      "id": 8177,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "available",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7663,
                      "src": "9541:64:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8178,
                      "name": "_tokenAvailability",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8164,
                      "src": "9608:18:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "9541:85:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8180,
                  "nodeType": "ExpressionStatement",
                  "src": "9541:85:46"
                },
                {
                  "expression": {
                    "id": 8186,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 8181,
                          "name": "presalePaymentTokenMapping",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7731,
                          "src": "9636:26:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_PresalePaymentTokenData_$7666_storage_$",
                            "typeString": "mapping(address => struct Presale.PresalePaymentTokenData storage ref)"
                          }
                        },
                        "id": 8183,
                        "indexExpression": {
                          "id": 8182,
                          "name": "_tokenAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8162,
                          "src": "9663:13:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "9636:41:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_PresalePaymentTokenData_$7666_storage",
                          "typeString": "struct Presale.PresalePaymentTokenData storage ref"
                        }
                      },
                      "id": 8184,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "aggregatorAddress",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7665,
                      "src": "9636:72:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8185,
                      "name": "_aggregatorAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8166,
                      "src": "9711:18:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "9636:93:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 8187,
                  "nodeType": "ExpressionStatement",
                  "src": "9636:93:46"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 8189,
                        "name": "_tokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8162,
                        "src": "9785:13:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 8190,
                        "name": "_tokenAvailability",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8164,
                        "src": "9812:18:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "id": 8191,
                        "name": "_aggregatorAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8166,
                        "src": "9844:18:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8188,
                      "name": "PresalePaymentTokenUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7700,
                      "src": "9745:26:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bool_$_t_address_$returns$__$",
                        "typeString": "function (address,bool,address)"
                      }
                    },
                    "id": 8192,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9745:127:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8193,
                  "nodeType": "EmitStatement",
                  "src": "9740:132:46"
                }
              ]
            },
            "documentation": {
              "id": 8160,
              "nodeType": "StructuredDocumentation",
              "src": "9003:329:46",
              "text": " @dev Set Presale Payment Token Info\n @param _tokenAddress - Token Address use to purchase Presale\n @param _tokenAvailability - Indication whether Token Address can be used for Presale\n @param _aggregatorAddress - Chainlink's Aggregator Address to determine the USD price (for `presaleTokens`)"
            },
            "functionSelector": "736e38ef",
            "id": 8195,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8169,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8168,
                  "name": "onlyOwner",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 474,
                  "src": "9482:9:46"
                },
                "nodeType": "ModifierInvocation",
                "src": "9482:9:46"
              },
              {
                "arguments": [
                  {
                    "id": 8171,
                    "name": "_aggregatorAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8166,
                    "src": "9511:18:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 8172,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8170,
                  "name": "onlyNonZeroAddress",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 7769,
                  "src": "9492:18:46"
                },
                "nodeType": "ModifierInvocation",
                "src": "9492:38:46"
              }
            ],
            "name": "setPresalePaymentToken",
            "nameLocation": "9346:22:46",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8167,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8162,
                  "mutability": "mutable",
                  "name": "_tokenAddress",
                  "nameLocation": "9386:13:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 8195,
                  "src": "9378:21:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8161,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9378:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8164,
                  "mutability": "mutable",
                  "name": "_tokenAvailability",
                  "nameLocation": "9414:18:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 8195,
                  "src": "9409:23:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8163,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "9409:4:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8166,
                  "mutability": "mutable",
                  "name": "_aggregatorAddress",
                  "nameLocation": "9450:18:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 8195,
                  "src": "9442:26:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8165,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9442:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9368:106:46"
            },
            "returnParameters": {
              "id": 8173,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9531:0:46"
            },
            "scope": 8365,
            "src": "9337:542:46",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8219,
              "nodeType": "Block",
              "src": "10049:181:46",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8206,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 8203,
                      "name": "_newEndingTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8198,
                      "src": "10063:14:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 8204,
                        "name": "block",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967292,
                        "src": "10080:5:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_block",
                          "typeString": "block"
                        }
                      },
                      "id": 8205,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "timestamp",
                      "nodeType": "MemberAccess",
                      "src": "10080:15:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10063:32:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8210,
                  "nodeType": "IfStatement",
                  "src": "10059:71:46",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 8207,
                        "name": "presaleEndingTimeInvalid",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7753,
                        "src": "10104:24:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 8208,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10104:26:46",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 8209,
                    "nodeType": "RevertStatement",
                    "src": "10097:33:46"
                  }
                },
                {
                  "expression": {
                    "id": 8213,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 8211,
                      "name": "endingTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7717,
                      "src": "10140:10:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8212,
                      "name": "_newEndingTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8198,
                      "src": "10153:14:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10140:27:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8214,
                  "nodeType": "ExpressionStatement",
                  "src": "10140:27:46"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 8216,
                        "name": "_newEndingTime",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8198,
                        "src": "10208:14:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8215,
                      "name": "PresaleEndingTimeUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7708,
                      "src": "10183:24:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 8217,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10183:40:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8218,
                  "nodeType": "EmitStatement",
                  "src": "10178:45:46"
                }
              ]
            },
            "documentation": {
              "id": 8196,
              "nodeType": "StructuredDocumentation",
              "src": "9885:95:46",
              "text": " @dev Set new Ending time\n @param _newEndingTime - New Ending Timestamp"
            },
            "functionSelector": "3473bf30",
            "id": 8220,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8201,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8200,
                  "name": "onlyOwner",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 474,
                  "src": "10039:9:46"
                },
                "nodeType": "ModifierInvocation",
                "src": "10039:9:46"
              }
            ],
            "name": "setEndingTime",
            "nameLocation": "9994:13:46",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8199,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8198,
                  "mutability": "mutable",
                  "name": "_newEndingTime",
                  "nameLocation": "10016:14:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 8220,
                  "src": "10008:22:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8197,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10008:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10007:24:46"
            },
            "returnParameters": {
              "id": 8202,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10049:0:46"
            },
            "scope": 8365,
            "src": "9985:245:46",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8363,
              "nodeType": "Block",
              "src": "10889:1911:46",
              "statements": [
                {
                  "assignments": [
                    8237
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8237,
                      "mutability": "mutable",
                      "name": "presaleStartingTime",
                      "nameLocation": "10907:19:46",
                      "nodeType": "VariableDeclaration",
                      "scope": 8363,
                      "src": "10899:27:46",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8236,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "10899:7:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8242,
                  "initialValue": {
                    "expression": {
                      "baseExpression": {
                        "id": 8238,
                        "name": "presaleDetailsMapping",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7722,
                        "src": "10929:21:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$7661_storage_$",
                          "typeString": "mapping(uint256 => struct Presale.PresaleData storage ref)"
                        }
                      },
                      "id": 8240,
                      "indexExpression": {
                        "id": 8239,
                        "name": "_presaleRound",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8223,
                        "src": "10951:13:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "10929:36:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_PresaleData_$7661_storage",
                        "typeString": "struct Presale.PresaleData storage ref"
                      }
                    },
                    "id": 8241,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "startingTime",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 7654,
                    "src": "10929:62:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10899:92:46"
                },
                {
                  "assignments": [
                    8244
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8244,
                      "mutability": "mutable",
                      "name": "presaleUSDPrice",
                      "nameLocation": "11009:15:46",
                      "nodeType": "VariableDeclaration",
                      "scope": 8363,
                      "src": "11001:23:46",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8243,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "11001:7:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8249,
                  "initialValue": {
                    "expression": {
                      "baseExpression": {
                        "id": 8245,
                        "name": "presaleDetailsMapping",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7722,
                        "src": "11027:21:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$7661_storage_$",
                          "typeString": "mapping(uint256 => struct Presale.PresaleData storage ref)"
                        }
                      },
                      "id": 8247,
                      "indexExpression": {
                        "id": 8246,
                        "name": "_presaleRound",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8223,
                        "src": "11049:13:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "11027:36:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_PresaleData_$7661_storage",
                        "typeString": "struct Presale.PresaleData storage ref"
                      }
                    },
                    "id": 8248,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "usdPrice",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 7656,
                    "src": "11027:45:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11001:71:46"
                },
                {
                  "assignments": [
                    8251
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8251,
                      "mutability": "mutable",
                      "name": "presaleMinimumUSDPurchase",
                      "nameLocation": "11090:25:46",
                      "nodeType": "VariableDeclaration",
                      "scope": 8363,
                      "src": "11082:33:46",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8250,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "11082:7:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8256,
                  "initialValue": {
                    "expression": {
                      "baseExpression": {
                        "id": 8252,
                        "name": "presaleDetailsMapping",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7722,
                        "src": "11118:21:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$7661_storage_$",
                          "typeString": "mapping(uint256 => struct Presale.PresaleData storage ref)"
                        }
                      },
                      "id": 8254,
                      "indexExpression": {
                        "id": 8253,
                        "name": "_presaleRound",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8223,
                        "src": "11140:13:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "11118:36:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_PresaleData_$7661_storage",
                        "typeString": "struct Presale.PresaleData storage ref"
                      }
                    },
                    "id": 8255,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "minimumUSDPurchase",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 7658,
                    "src": "11118:68:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11082:104:46"
                },
                {
                  "assignments": [
                    8258
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8258,
                      "mutability": "mutable",
                      "name": "presaleMaximumPresaleAmount",
                      "nameLocation": "11204:27:46",
                      "nodeType": "VariableDeclaration",
                      "scope": 8363,
                      "src": "11196:35:46",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8257,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "11196:7:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8263,
                  "initialValue": {
                    "expression": {
                      "baseExpression": {
                        "id": 8259,
                        "name": "presaleDetailsMapping",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7722,
                        "src": "11234:21:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$7661_storage_$",
                          "typeString": "mapping(uint256 => struct Presale.PresaleData storage ref)"
                        }
                      },
                      "id": 8261,
                      "indexExpression": {
                        "id": 8260,
                        "name": "_presaleRound",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8223,
                        "src": "11269:13:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "11234:58:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_PresaleData_$7661_storage",
                        "typeString": "struct Presale.PresaleData storage ref"
                      }
                    },
                    "id": 8262,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "maximumPresaleAmount",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 7660,
                    "src": "11234:79:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11196:117:46"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 8278,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "id": 8274,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 8270,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8266,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8264,
                            "name": "presaleStartingTime",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8237,
                            "src": "11414:19:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 8265,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "11437:1:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "11414:24:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8269,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8267,
                            "name": "presaleUSDPrice",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8244,
                            "src": "11454:15:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 8268,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "11473:1:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "11454:20:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "11414:60:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&&",
                      "rightExpression": {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8273,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 8271,
                          "name": "presaleMinimumUSDPurchase",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8251,
                          "src": "11490:25:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 8272,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11519:1:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "11490:30:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "src": "11414:106:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8277,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 8275,
                        "name": "presaleMaximumPresaleAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8258,
                        "src": "11536:27:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 8276,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11567:1:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "11536:32:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "11414:154:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8284,
                  "nodeType": "IfStatement",
                  "src": "11397:211:46",
                  "trueBody": {
                    "expression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 8279,
                          "name": "totalPresaleRound",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7711,
                          "src": "11579:17:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Counter_$5303_storage",
                            "typeString": "struct Counters.Counter storage ref"
                          }
                        },
                        "id": 8281,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "increment",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5329,
                        "src": "11579:27:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Counter_$5303_storage_ptr_$returns$__$bound_to$_t_struct$_Counter_$5303_storage_ptr_$",
                          "typeString": "function (struct Counters.Counter storage pointer)"
                        }
                      },
                      "id": 8282,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11579:29:46",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 8283,
                    "nodeType": "ExpressionStatement",
                    "src": "11579:29:46"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 8301,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8287,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 8285,
                        "name": "_startingTime",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8225,
                        "src": "11756:13:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 8286,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11773:1:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "11756:18:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 8299,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 8290,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 8288,
                              "name": "_presaleRound",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8223,
                              "src": "11791:13:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "!=",
                            "rightExpression": {
                              "hexValue": "30",
                              "id": 8289,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11808:1:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "11791:18:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 8298,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 8291,
                              "name": "_startingTime",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8225,
                              "src": "11829:13:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<",
                            "rightExpression": {
                              "expression": {
                                "baseExpression": {
                                  "id": 8292,
                                  "name": "presaleDetailsMapping",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7722,
                                  "src": "11861:21:46",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$7661_storage_$",
                                    "typeString": "mapping(uint256 => struct Presale.PresaleData storage ref)"
                                  }
                                },
                                "id": 8296,
                                "indexExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 8295,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 8293,
                                    "name": "_presaleRound",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8223,
                                    "src": "11883:13:46",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "hexValue": "31",
                                    "id": 8294,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "11899:1:46",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "src": "11883:17:46",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "11861:40:46",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_PresaleData_$7661_storage",
                                  "typeString": "struct Presale.PresaleData storage ref"
                                }
                              },
                              "id": 8297,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "startingTime",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7654,
                              "src": "11861:53:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "11829:85:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "11791:123:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 8300,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "11790:125:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "11756:159:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8305,
                  "nodeType": "IfStatement",
                  "src": "11739:222:46",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 8302,
                        "name": "presaleStartingTimeInvalid",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7739,
                        "src": "11933:26:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 8303,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11933:28:46",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 8304,
                    "nodeType": "RevertStatement",
                    "src": "11926:35:46"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8308,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 8306,
                      "name": "_usdPrice",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8227,
                      "src": "12031:9:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 8307,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "12044:1:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "12031:14:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8312,
                  "nodeType": "IfStatement",
                  "src": "12027:51:46",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 8309,
                        "name": "presaleUSDPriceInvalid",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7741,
                        "src": "12054:22:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 8310,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "12054:24:46",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 8311,
                    "nodeType": "RevertStatement",
                    "src": "12047:31:46"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8315,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 8313,
                      "name": "_minimumUSDPurchase",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8229,
                      "src": "12092:19:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 8314,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "12115:1:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "12092:24:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8319,
                  "nodeType": "IfStatement",
                  "src": "12088:71:46",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 8316,
                        "name": "presaleMimumumUSDPurchaseInvalid",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7743,
                        "src": "12125:32:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 8317,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "12125:34:46",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 8318,
                    "nodeType": "RevertStatement",
                    "src": "12118:41:46"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8322,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 8320,
                      "name": "_maximumPresaleAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8231,
                      "src": "12173:21:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 8321,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "12198:1:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "12173:26:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8326,
                  "nodeType": "IfStatement",
                  "src": "12169:87:46",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 8323,
                        "name": "presaleMaximumPresaleAmountInvalid",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7745,
                        "src": "12220:34:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 8324,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "12220:36:46",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 8325,
                    "nodeType": "RevertStatement",
                    "src": "12213:43:46"
                  }
                },
                {
                  "expression": {
                    "id": 8332,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 8327,
                          "name": "presaleDetailsMapping",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7722,
                          "src": "12267:21:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$7661_storage_$",
                            "typeString": "mapping(uint256 => struct Presale.PresaleData storage ref)"
                          }
                        },
                        "id": 8329,
                        "indexExpression": {
                          "id": 8328,
                          "name": "_presaleRound",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8223,
                          "src": "12289:13:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "12267:36:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_PresaleData_$7661_storage",
                          "typeString": "struct Presale.PresaleData storage ref"
                        }
                      },
                      "id": 8330,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "startingTime",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7654,
                      "src": "12267:49:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8331,
                      "name": "_startingTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8225,
                      "src": "12319:13:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12267:65:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8333,
                  "nodeType": "ExpressionStatement",
                  "src": "12267:65:46"
                },
                {
                  "expression": {
                    "id": 8339,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 8334,
                          "name": "presaleDetailsMapping",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7722,
                          "src": "12342:21:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$7661_storage_$",
                            "typeString": "mapping(uint256 => struct Presale.PresaleData storage ref)"
                          }
                        },
                        "id": 8336,
                        "indexExpression": {
                          "id": 8335,
                          "name": "_presaleRound",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8223,
                          "src": "12364:13:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "12342:36:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_PresaleData_$7661_storage",
                          "typeString": "struct Presale.PresaleData storage ref"
                        }
                      },
                      "id": 8337,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "usdPrice",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7656,
                      "src": "12342:45:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8338,
                      "name": "_usdPrice",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8227,
                      "src": "12390:9:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12342:57:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8340,
                  "nodeType": "ExpressionStatement",
                  "src": "12342:57:46"
                },
                {
                  "expression": {
                    "id": 8346,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 8341,
                          "name": "presaleDetailsMapping",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7722,
                          "src": "12409:21:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$7661_storage_$",
                            "typeString": "mapping(uint256 => struct Presale.PresaleData storage ref)"
                          }
                        },
                        "id": 8343,
                        "indexExpression": {
                          "id": 8342,
                          "name": "_presaleRound",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8223,
                          "src": "12431:13:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "12409:36:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_PresaleData_$7661_storage",
                          "typeString": "struct Presale.PresaleData storage ref"
                        }
                      },
                      "id": 8344,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "minimumUSDPurchase",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7658,
                      "src": "12409:68:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8345,
                      "name": "_minimumUSDPurchase",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8229,
                      "src": "12480:19:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12409:90:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8347,
                  "nodeType": "ExpressionStatement",
                  "src": "12409:90:46"
                },
                {
                  "expression": {
                    "id": 8353,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 8348,
                          "name": "presaleDetailsMapping",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7722,
                          "src": "12509:21:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$7661_storage_$",
                            "typeString": "mapping(uint256 => struct Presale.PresaleData storage ref)"
                          }
                        },
                        "id": 8350,
                        "indexExpression": {
                          "id": 8349,
                          "name": "_presaleRound",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8223,
                          "src": "12531:13:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "12509:36:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_PresaleData_$7661_storage",
                          "typeString": "struct Presale.PresaleData storage ref"
                        }
                      },
                      "id": 8351,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "maximumPresaleAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7660,
                      "src": "12509:70:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8352,
                      "name": "_maximumPresaleAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8231,
                      "src": "12582:21:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12509:94:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8354,
                  "nodeType": "ExpressionStatement",
                  "src": "12509:94:46"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 8356,
                        "name": "_presaleRound",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8223,
                        "src": "12652:13:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 8357,
                        "name": "_startingTime",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8225,
                        "src": "12679:13:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 8358,
                        "name": "_usdPrice",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8227,
                        "src": "12706:9:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 8359,
                        "name": "_minimumUSDPurchase",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8229,
                        "src": "12729:19:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 8360,
                        "name": "_maximumPresaleAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8231,
                        "src": "12762:21:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8355,
                      "name": "PresaleRoundUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7688,
                      "src": "12619:19:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256,uint256,uint256,uint256)"
                      }
                    },
                    "id": 8361,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12619:174:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8362,
                  "nodeType": "EmitStatement",
                  "src": "12614:179:46"
                }
              ]
            },
            "documentation": {
              "id": 8221,
              "nodeType": "StructuredDocumentation",
              "src": "10236:435:46",
              "text": " @dev Creating/Updating a presale round information\n @param _presaleRound - The presale round chosen\n @param _startingTime - The starting Presale time\n @param _usdPrice - The USD Price of the Token in certain Presale Round\n @param _minimumUSDPurchase - The minimum USD amount to purchase the token\n @param _maximumPresaleAmount - The maximum amount of token available for a presale round"
            },
            "functionSelector": "c829d1db",
            "id": 8364,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8234,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8233,
                  "name": "onlyOwner",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 474,
                  "src": "10879:9:46"
                },
                "nodeType": "ModifierInvocation",
                "src": "10879:9:46"
              }
            ],
            "name": "setPresaleRound",
            "nameLocation": "10685:15:46",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8232,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8223,
                  "mutability": "mutable",
                  "name": "_presaleRound",
                  "nameLocation": "10718:13:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 8364,
                  "src": "10710:21:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8222,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10710:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8225,
                  "mutability": "mutable",
                  "name": "_startingTime",
                  "nameLocation": "10749:13:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 8364,
                  "src": "10741:21:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8224,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10741:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8227,
                  "mutability": "mutable",
                  "name": "_usdPrice",
                  "nameLocation": "10780:9:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 8364,
                  "src": "10772:17:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8226,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10772:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8229,
                  "mutability": "mutable",
                  "name": "_minimumUSDPurchase",
                  "nameLocation": "10807:19:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 8364,
                  "src": "10799:27:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8228,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10799:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8231,
                  "mutability": "mutable",
                  "name": "_maximumPresaleAmount",
                  "nameLocation": "10844:21:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 8364,
                  "src": "10836:29:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8230,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10836:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10700:171:46"
            },
            "returnParameters": {
              "id": 8235,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10889:0:46"
            },
            "scope": 8365,
            "src": "10676:2124:46",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 8366,
        "src": "515:12287:46",
        "usedErrors": [
          7733,
          7735,
          7737,
          7739,
          7741,
          7743,
          7745,
          7747,
          7749,
          7751,
          7753
        ]
      }
    ],
    "src": "38:12765:46"
  },
  "legacyAST": {
    "absolutePath": "project:/contracts/presale/Presale.sol",
    "exportedSymbols": {
      "AggregatorV3Interface": [
        45
      ],
      "Context": [
        5297
      ],
      "Counters": [
        5371
      ],
      "IERC20": [
        2884
      ],
      "IERC20Custom": [
        9652
      ],
      "Ownable": [
        532
      ],
      "Presale": [
        8365
      ],
      "PriceConverter": [
        7631
      ],
      "ReentrancyGuard": [
        742
      ],
      "SafeMath": [
        7057
      ]
    },
    "id": 8366,
    "license": "AGPL-3.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 7633,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "38:24:46"
      },
      {
        "absolutePath": "@openzeppelin/contracts/access/Ownable.sol",
        "file": "@openzeppelin/contracts/access/Ownable.sol",
        "id": 7634,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 8366,
        "sourceUnit": 533,
        "src": "64:52:46",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
        "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
        "id": 7635,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 8366,
        "sourceUnit": 2885,
        "src": "117:56:46",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/utils/Counters.sol",
        "file": "@openzeppelin/contracts/utils/Counters.sol",
        "id": 7636,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 8366,
        "sourceUnit": 5372,
        "src": "174:52:46",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/utils/math/SafeMath.sol",
        "file": "@openzeppelin/contracts/utils/math/SafeMath.sol",
        "id": 7637,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 8366,
        "sourceUnit": 7058,
        "src": "227:57:46",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/security/ReentrancyGuard.sol",
        "file": "@openzeppelin/contracts/security/ReentrancyGuard.sol",
        "id": 7638,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 8366,
        "sourceUnit": 743,
        "src": "285:62:46",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol",
        "file": "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol",
        "id": 7639,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 8366,
        "sourceUnit": 46,
        "src": "348:76:46",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/libraries/PriceConverter.sol",
        "file": "../libraries/PriceConverter.sol",
        "id": 7640,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 8366,
        "sourceUnit": 7632,
        "src": "425:41:46",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/token/interfaces/IERC20Custom.sol",
        "file": "../token/interfaces/IERC20Custom.sol",
        "id": 7641,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 8366,
        "sourceUnit": 9653,
        "src": "467:46:46",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 7642,
              "name": "Ownable",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 532,
              "src": "535:7:46"
            },
            "id": 7643,
            "nodeType": "InheritanceSpecifier",
            "src": "535:7:46"
          },
          {
            "baseName": {
              "id": 7644,
              "name": "ReentrancyGuard",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 742,
              "src": "544:15:46"
            },
            "id": 7645,
            "nodeType": "InheritanceSpecifier",
            "src": "544:15:46"
          }
        ],
        "canonicalName": "Presale",
        "contractDependencies": [],
        "contractKind": "contract",
        "fullyImplemented": true,
        "id": 8365,
        "linearizedBaseContracts": [
          8365,
          742,
          532,
          5297
        ],
        "name": "Presale",
        "nameLocation": "524:7:46",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 7649,
            "libraryName": {
              "id": 7646,
              "name": "Counters",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 5371,
              "src": "572:8:46"
            },
            "nodeType": "UsingForDirective",
            "src": "566:36:46",
            "typeName": {
              "id": 7648,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 7647,
                "name": "Counters.Counter",
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 5303,
                "src": "585:16:46"
              },
              "referencedDeclaration": 5303,
              "src": "585:16:46",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Counter_$5303_storage_ptr",
                "typeString": "struct Counters.Counter"
              }
            }
          },
          {
            "id": 7652,
            "libraryName": {
              "id": 7650,
              "name": "SafeMath",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 7057,
              "src": "613:8:46"
            },
            "nodeType": "UsingForDirective",
            "src": "607:27:46",
            "typeName": {
              "id": 7651,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "626:7:46",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "canonicalName": "Presale.PresaleData",
            "id": 7661,
            "members": [
              {
                "constant": false,
                "id": 7654,
                "mutability": "mutable",
                "name": "startingTime",
                "nameLocation": "677:12:46",
                "nodeType": "VariableDeclaration",
                "scope": 7661,
                "src": "669:20:46",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 7653,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "669:7:46",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 7656,
                "mutability": "mutable",
                "name": "usdPrice",
                "nameLocation": "707:8:46",
                "nodeType": "VariableDeclaration",
                "scope": 7661,
                "src": "699:16:46",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 7655,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "699:7:46",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 7658,
                "mutability": "mutable",
                "name": "minimumUSDPurchase",
                "nameLocation": "733:18:46",
                "nodeType": "VariableDeclaration",
                "scope": 7661,
                "src": "725:26:46",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 7657,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "725:7:46",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 7660,
                "mutability": "mutable",
                "name": "maximumPresaleAmount",
                "nameLocation": "769:20:46",
                "nodeType": "VariableDeclaration",
                "scope": 7661,
                "src": "761:28:46",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 7659,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "761:7:46",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "PresaleData",
            "nameLocation": "647:11:46",
            "nodeType": "StructDefinition",
            "scope": 8365,
            "src": "640:156:46",
            "visibility": "public"
          },
          {
            "canonicalName": "Presale.PresalePaymentTokenData",
            "id": 7666,
            "members": [
              {
                "constant": false,
                "id": 7663,
                "mutability": "mutable",
                "name": "available",
                "nameLocation": "847:9:46",
                "nodeType": "VariableDeclaration",
                "scope": 7666,
                "src": "842:14:46",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 7662,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "842:4:46",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 7665,
                "mutability": "mutable",
                "name": "aggregatorAddress",
                "nameLocation": "874:17:46",
                "nodeType": "VariableDeclaration",
                "scope": 7666,
                "src": "866:25:46",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 7664,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "866:7:46",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "PresalePaymentTokenData",
            "nameLocation": "808:23:46",
            "nodeType": "StructDefinition",
            "scope": 8365,
            "src": "801:97:46",
            "visibility": "public"
          },
          {
            "anonymous": false,
            "id": 7676,
            "name": "TokenPresold",
            "nameLocation": "910:12:46",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7675,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7668,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "948:2:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 7676,
                  "src": "932:18:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7667,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "932:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7670,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "paymentTokenAddress",
                  "nameLocation": "976:19:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 7676,
                  "src": "960:35:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7669,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "960:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7672,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "1013:6:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 7676,
                  "src": "1005:14:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7671,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1005:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7674,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "paymentTokenamount",
                  "nameLocation": "1037:18:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 7676,
                  "src": "1029:26:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7673,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1029:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "922:139:46"
            },
            "src": "904:158:46"
          },
          {
            "anonymous": false,
            "id": 7688,
            "name": "PresaleRoundUpdated",
            "nameLocation": "1073:19:46",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7687,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7678,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "presaleRound",
                  "nameLocation": "1118:12:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 7688,
                  "src": "1102:28:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7677,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1102:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7680,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "startingTime",
                  "nameLocation": "1148:12:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 7688,
                  "src": "1140:20:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7679,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1140:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7682,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "usdPrice",
                  "nameLocation": "1178:8:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 7688,
                  "src": "1170:16:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7681,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1170:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7684,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "minimumUSDPurchase",
                  "nameLocation": "1204:18:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 7688,
                  "src": "1196:26:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7683,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1196:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7686,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "maximumPresaleAmount",
                  "nameLocation": "1240:20:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 7688,
                  "src": "1232:28:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7685,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1232:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1092:174:46"
            },
            "src": "1067:200:46"
          },
          {
            "anonymous": false,
            "id": 7692,
            "name": "PresaleReceiverUpdated",
            "nameLocation": "1278:22:46",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7691,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7690,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "receiverAddress",
                  "nameLocation": "1309:15:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 7692,
                  "src": "1301:23:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7689,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1301:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1300:25:46"
            },
            "src": "1272:54:46"
          },
          {
            "anonymous": false,
            "id": 7700,
            "name": "PresalePaymentTokenUpdated",
            "nameLocation": "1337:26:46",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7699,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7694,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "tokenAddress",
                  "nameLocation": "1381:12:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 7700,
                  "src": "1373:20:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7693,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1373:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7696,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "tokenAvailability",
                  "nameLocation": "1408:17:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 7700,
                  "src": "1403:22:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7695,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1403:4:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7698,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "aggregatorAddress",
                  "nameLocation": "1443:17:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 7700,
                  "src": "1435:25:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7697,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1435:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1363:103:46"
            },
            "src": "1331:136:46"
          },
          {
            "anonymous": false,
            "id": 7704,
            "name": "PresaleTokenUpdated",
            "nameLocation": "1478:19:46",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7703,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7702,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "tokenAddress",
                  "nameLocation": "1506:12:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 7704,
                  "src": "1498:20:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7701,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1498:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1497:22:46"
            },
            "src": "1472:48:46"
          },
          {
            "anonymous": false,
            "id": 7708,
            "name": "PresaleEndingTimeUpdated",
            "nameLocation": "1531:24:46",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7707,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7706,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "endingTime",
                  "nameLocation": "1564:10:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 7708,
                  "src": "1556:18:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7705,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1556:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1555:20:46"
            },
            "src": "1525:51:46"
          },
          {
            "constant": false,
            "functionSelector": "962de5c0",
            "id": 7711,
            "mutability": "mutable",
            "name": "totalPresaleRound",
            "nameLocation": "1606:17:46",
            "nodeType": "VariableDeclaration",
            "scope": 8365,
            "src": "1582:41:46",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Counter_$5303_storage",
              "typeString": "struct Counters.Counter"
            },
            "typeName": {
              "id": 7710,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 7709,
                "name": "Counters.Counter",
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 5303,
                "src": "1582:16:46"
              },
              "referencedDeclaration": 5303,
              "src": "1582:16:46",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Counter_$5303_storage_ptr",
                "typeString": "struct Counters.Counter"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "9d76ea58",
            "id": 7713,
            "mutability": "mutable",
            "name": "tokenAddress",
            "nameLocation": "1644:12:46",
            "nodeType": "VariableDeclaration",
            "scope": 8365,
            "src": "1629:27:46",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 7712,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1629:7:46",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "c1436415",
            "id": 7715,
            "mutability": "mutable",
            "name": "presaleReceiver",
            "nameLocation": "1685:15:46",
            "nodeType": "VariableDeclaration",
            "scope": 8365,
            "src": "1662:38:46",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address_payable",
              "typeString": "address payable"
            },
            "typeName": {
              "id": 7714,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1662:15:46",
              "stateMutability": "payable",
              "typeDescriptions": {
                "typeIdentifier": "t_address_payable",
                "typeString": "address payable"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "6c47a6c3",
            "id": 7717,
            "mutability": "mutable",
            "name": "endingTime",
            "nameLocation": "1721:10:46",
            "nodeType": "VariableDeclaration",
            "scope": 8365,
            "src": "1706:25:46",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 7716,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1706:7:46",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "7b4d3585",
            "id": 7722,
            "mutability": "mutable",
            "name": "presaleDetailsMapping",
            "nameLocation": "1827:21:46",
            "nodeType": "VariableDeclaration",
            "scope": 8365,
            "src": "1788:60:46",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$7661_storage_$",
              "typeString": "mapping(uint256 => struct Presale.PresaleData)"
            },
            "typeName": {
              "id": 7721,
              "keyType": {
                "id": 7718,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1796:7:46",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "1788:31:46",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$7661_storage_$",
                "typeString": "mapping(uint256 => struct Presale.PresaleData)"
              },
              "valueType": {
                "id": 7720,
                "nodeType": "UserDefinedTypeName",
                "pathNode": {
                  "id": 7719,
                  "name": "PresaleData",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 7661,
                  "src": "1807:11:46"
                },
                "referencedDeclaration": 7661,
                "src": "1807:11:46",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_PresaleData_$7661_storage_ptr",
                  "typeString": "struct Presale.PresaleData"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "392f911b",
            "id": 7726,
            "mutability": "mutable",
            "name": "presaleAmountByRoundMapping",
            "nameLocation": "1889:27:46",
            "nodeType": "VariableDeclaration",
            "scope": 8365,
            "src": "1854:62:46",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
              "typeString": "mapping(uint256 => uint256)"
            },
            "typeName": {
              "id": 7725,
              "keyType": {
                "id": 7723,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1862:7:46",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "1854:27:46",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                "typeString": "mapping(uint256 => uint256)"
              },
              "valueType": {
                "id": 7724,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1873:7:46",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "8e7d41b7",
            "id": 7731,
            "mutability": "mutable",
            "name": "presalePaymentTokenMapping",
            "nameLocation": "1981:26:46",
            "nodeType": "VariableDeclaration",
            "scope": 8365,
            "src": "1922:85:46",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_PresalePaymentTokenData_$7666_storage_$",
              "typeString": "mapping(address => struct Presale.PresalePaymentTokenData)"
            },
            "typeName": {
              "id": 7730,
              "keyType": {
                "id": 7727,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1930:7:46",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1922:43:46",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_PresalePaymentTokenData_$7666_storage_$",
                "typeString": "mapping(address => struct Presale.PresalePaymentTokenData)"
              },
              "valueType": {
                "id": 7729,
                "nodeType": "UserDefinedTypeName",
                "pathNode": {
                  "id": 7728,
                  "name": "PresalePaymentTokenData",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 7666,
                  "src": "1941:23:46"
                },
                "referencedDeclaration": 7666,
                "src": "1941:23:46",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_PresalePaymentTokenData_$7666_storage_ptr",
                  "typeString": "struct Presale.PresalePaymentTokenData"
                }
              }
            },
            "visibility": "public"
          },
          {
            "id": 7733,
            "name": "presaleRoundClosed",
            "nameLocation": "2020:18:46",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 7732,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2038:2:46"
            },
            "src": "2014:27:46"
          },
          {
            "id": 7735,
            "name": "presaleTokenNotAvailable",
            "nameLocation": "2052:24:46",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 7734,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2076:2:46"
            },
            "src": "2046:33:46"
          },
          {
            "id": 7737,
            "name": "presaleNativeTokenPaymentNotSufficient",
            "nameLocation": "2090:38:46",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 7736,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2128:2:46"
            },
            "src": "2084:47:46"
          },
          {
            "id": 7739,
            "name": "presaleStartingTimeInvalid",
            "nameLocation": "2142:26:46",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 7738,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2168:2:46"
            },
            "src": "2136:35:46"
          },
          {
            "id": 7741,
            "name": "presaleUSDPriceInvalid",
            "nameLocation": "2182:22:46",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 7740,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2204:2:46"
            },
            "src": "2176:31:46"
          },
          {
            "id": 7743,
            "name": "presaleMimumumUSDPurchaseInvalid",
            "nameLocation": "2218:32:46",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 7742,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2250:2:46"
            },
            "src": "2212:41:46"
          },
          {
            "id": 7745,
            "name": "presaleMaximumPresaleAmountInvalid",
            "nameLocation": "2264:34:46",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 7744,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2298:2:46"
            },
            "src": "2258:43:46"
          },
          {
            "id": 7747,
            "name": "presaleUSDPurchaseNotSufficient",
            "nameLocation": "2312:31:46",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 7746,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2343:2:46"
            },
            "src": "2306:40:46"
          },
          {
            "id": 7749,
            "name": "presaleAmountOverdemand",
            "nameLocation": "2357:23:46",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 7748,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2380:2:46"
            },
            "src": "2351:32:46"
          },
          {
            "id": 7751,
            "name": "presaleNonZeroAddressInvalid",
            "nameLocation": "2394:28:46",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 7750,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2422:2:46"
            },
            "src": "2388:37:46"
          },
          {
            "id": 7753,
            "name": "presaleEndingTimeInvalid",
            "nameLocation": "2436:24:46",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 7752,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2460:2:46"
            },
            "src": "2430:33:46"
          },
          {
            "body": {
              "id": 7768,
              "nodeType": "Block",
              "src": "2515:93:46",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 7762,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 7757,
                      "name": "_address",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7755,
                      "src": "2529:8:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 7760,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2549:1:46",
                          "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": 7759,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "2541:7:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 7758,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2541:7:46",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 7761,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2541:10:46",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2529:22:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 7766,
                  "nodeType": "IfStatement",
                  "src": "2525:65:46",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 7763,
                        "name": "presaleNonZeroAddressInvalid",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7751,
                        "src": "2560:28:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 7764,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2560:30:46",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 7765,
                    "nodeType": "RevertStatement",
                    "src": "2553:37:46"
                  }
                },
                {
                  "id": 7767,
                  "nodeType": "PlaceholderStatement",
                  "src": "2600:1:46"
                }
              ]
            },
            "id": 7769,
            "name": "onlyNonZeroAddress",
            "nameLocation": "2478:18:46",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 7756,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7755,
                  "mutability": "mutable",
                  "name": "_address",
                  "nameLocation": "2505:8:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 7769,
                  "src": "2497:16:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7754,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2497:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2496:18:46"
            },
            "src": "2469:139:46",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7790,
              "nodeType": "Block",
              "src": "2734:123:46",
              "statements": [
                {
                  "expression": {
                    "id": 7780,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 7778,
                      "name": "tokenAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7713,
                      "src": "2744:12:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 7779,
                      "name": "_tokenAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7771,
                      "src": "2759:13:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2744:28:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 7781,
                  "nodeType": "ExpressionStatement",
                  "src": "2744:28:46"
                },
                {
                  "expression": {
                    "id": 7784,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 7782,
                      "name": "presaleReceiver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7715,
                      "src": "2782:15:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 7783,
                      "name": "_presaleReceiver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7773,
                      "src": "2800:16:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "2782:34:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "id": 7785,
                  "nodeType": "ExpressionStatement",
                  "src": "2782:34:46"
                },
                {
                  "expression": {
                    "id": 7788,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 7786,
                      "name": "endingTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7717,
                      "src": "2826:10:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 7787,
                      "name": "_endingTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7775,
                      "src": "2839:11:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2826:24:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7789,
                  "nodeType": "ExpressionStatement",
                  "src": "2826:24:46"
                }
              ]
            },
            "id": 7791,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7776,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7771,
                  "mutability": "mutable",
                  "name": "_tokenAddress",
                  "nameLocation": "2643:13:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 7791,
                  "src": "2635:21:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7770,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2635:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7773,
                  "mutability": "mutable",
                  "name": "_presaleReceiver",
                  "nameLocation": "2682:16:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 7791,
                  "src": "2666:32:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 7772,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2666:15:46",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7775,
                  "mutability": "mutable",
                  "name": "_endingTime",
                  "nameLocation": "2716:11:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 7791,
                  "src": "2708:19:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7774,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2708:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2625:108:46"
            },
            "returnParameters": {
              "id": 7777,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2734:0:46"
            },
            "scope": 8365,
            "src": "2614:243:46",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7801,
              "nodeType": "Block",
              "src": "2987:51:46",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 7797,
                        "name": "totalPresaleRound",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7711,
                        "src": "3004:17:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Counter_$5303_storage",
                          "typeString": "struct Counters.Counter storage ref"
                        }
                      },
                      "id": 7798,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "current",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5315,
                      "src": "3004:25:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Counter_$5303_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Counter_$5303_storage_ptr_$",
                        "typeString": "function (struct Counters.Counter storage pointer) view returns (uint256)"
                      }
                    },
                    "id": 7799,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3004:27:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 7796,
                  "id": 7800,
                  "nodeType": "Return",
                  "src": "2997:34:46"
                }
              ]
            },
            "documentation": {
              "id": 7792,
              "nodeType": "StructuredDocumentation",
              "src": "2863:57:46",
              "text": " @dev Get total amount of presale round"
            },
            "functionSelector": "398dcd26",
            "id": 7802,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getTotalPresaleRound",
            "nameLocation": "2934:20:46",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7793,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2954:2:46"
            },
            "returnParameters": {
              "id": 7796,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7795,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 7802,
                  "src": "2978:7:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7794,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2978:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2977:9:46"
            },
            "scope": 8365,
            "src": "2925:113:46",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7814,
              "nodeType": "Block",
              "src": "3283:66:46",
              "statements": [
                {
                  "expression": {
                    "baseExpression": {
                      "id": 7810,
                      "name": "presaleAmountByRoundMapping",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7726,
                      "src": "3300:27:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                        "typeString": "mapping(uint256 => uint256)"
                      }
                    },
                    "id": 7812,
                    "indexExpression": {
                      "id": 7811,
                      "name": "_presaleRound",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7805,
                      "src": "3328:13:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "3300:42:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 7809,
                  "id": 7813,
                  "nodeType": "Return",
                  "src": "3293:49:46"
                }
              ]
            },
            "documentation": {
              "id": 7803,
              "nodeType": "StructuredDocumentation",
              "src": "3044:120:46",
              "text": " @dev Get presale total amount By presale round\n @param _presaleRound - The presale round chosen"
            },
            "functionSelector": "d958e001",
            "id": 7815,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getPresaleAmountByRound",
            "nameLocation": "3178:23:46",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7806,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7805,
                  "mutability": "mutable",
                  "name": "_presaleRound",
                  "nameLocation": "3210:13:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 7815,
                  "src": "3202:21:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7804,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3202:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3201:23:46"
            },
            "returnParameters": {
              "id": 7809,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7808,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 7815,
                  "src": "3270:7:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7807,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3270:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3269:9:46"
            },
            "scope": 8365,
            "src": "3169:180:46",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7847,
              "nodeType": "Block",
              "src": "3490:299:46",
              "statements": [
                {
                  "assignments": [
                    7822
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7822,
                      "mutability": "mutable",
                      "name": "totalPresale",
                      "nameLocation": "3508:12:46",
                      "nodeType": "VariableDeclaration",
                      "scope": 7847,
                      "src": "3500:20:46",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7821,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3500:7:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 7824,
                  "initialValue": {
                    "hexValue": "30",
                    "id": 7823,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3523:1:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3500:24:46"
                },
                {
                  "body": {
                    "id": 7843,
                    "nodeType": "Block",
                    "src": "3671:82:46",
                    "statements": [
                      {
                        "expression": {
                          "id": 7841,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 7837,
                            "name": "totalPresale",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7822,
                            "src": "3685:12:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "baseExpression": {
                              "id": 7838,
                              "name": "presaleAmountByRoundMapping",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7726,
                              "src": "3701:27:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                "typeString": "mapping(uint256 => uint256)"
                              }
                            },
                            "id": 7840,
                            "indexExpression": {
                              "id": 7839,
                              "name": "presaleRound",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7826,
                              "src": "3729:12:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "3701:41:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3685:57:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7842,
                        "nodeType": "ExpressionStatement",
                        "src": "3685:57:46"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7833,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 7829,
                      "name": "presaleRound",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7826,
                      "src": "3590:12:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 7830,
                          "name": "totalPresaleRound",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7711,
                          "src": "3605:17:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Counter_$5303_storage",
                            "typeString": "struct Counters.Counter storage ref"
                          }
                        },
                        "id": 7831,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "current",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5315,
                        "src": "3605:25:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_Counter_$5303_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Counter_$5303_storage_ptr_$",
                          "typeString": "function (struct Counters.Counter storage pointer) view returns (uint256)"
                        }
                      },
                      "id": 7832,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3605:27:46",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3590:42:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 7844,
                  "initializationExpression": {
                    "assignments": [
                      7826
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 7826,
                        "mutability": "mutable",
                        "name": "presaleRound",
                        "nameLocation": "3560:12:46",
                        "nodeType": "VariableDeclaration",
                        "scope": 7844,
                        "src": "3552:20:46",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7825,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3552:7:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 7828,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 7827,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3575:1:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "3552:24:46"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 7835,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "3646:14:46",
                      "subExpression": {
                        "id": 7834,
                        "name": "presaleRound",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7826,
                        "src": "3646:12:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 7836,
                    "nodeType": "ExpressionStatement",
                    "src": "3646:14:46"
                  },
                  "nodeType": "ForStatement",
                  "src": "3534:219:46"
                },
                {
                  "expression": {
                    "id": 7845,
                    "name": "totalPresale",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7822,
                    "src": "3770:12:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 7820,
                  "id": 7846,
                  "nodeType": "Return",
                  "src": "3763:19:46"
                }
              ]
            },
            "documentation": {
              "id": 7816,
              "nodeType": "StructuredDocumentation",
              "src": "3355:67:46",
              "text": " @dev Get total amount of presale from all rounds"
            },
            "functionSelector": "0aca575a",
            "id": 7848,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getTotalPresaleAmount",
            "nameLocation": "3436:21:46",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7817,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3457:2:46"
            },
            "returnParameters": {
              "id": 7820,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7819,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 7848,
                  "src": "3481:7:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7818,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3481:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3480:9:46"
            },
            "scope": 8365,
            "src": "3427:362:46",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7883,
              "nodeType": "Block",
              "src": "3913:371:46",
              "statements": [
                {
                  "body": {
                    "id": 7879,
                    "nodeType": "Block",
                    "src": "4064:195:46",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7874,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "baseExpression": {
                                "id": 7868,
                                "name": "presaleDetailsMapping",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7722,
                                "src": "4099:21:46",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$7661_storage_$",
                                  "typeString": "mapping(uint256 => struct Presale.PresaleData storage ref)"
                                }
                              },
                              "id": 7870,
                              "indexExpression": {
                                "id": 7869,
                                "name": "presaleRound",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7855,
                                "src": "4121:12:46",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "4099:35:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_PresaleData_$7661_storage",
                                "typeString": "struct Presale.PresaleData storage ref"
                              }
                            },
                            "id": 7871,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "startingTime",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7654,
                            "src": "4099:48:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "expression": {
                              "id": 7872,
                              "name": "block",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4294967292,
                              "src": "4167:5:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_block",
                                "typeString": "block"
                              }
                            },
                            "id": 7873,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "timestamp",
                            "nodeType": "MemberAccess",
                            "src": "4167:15:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4099:83:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7878,
                        "nodeType": "IfStatement",
                        "src": "4078:171:46",
                        "trueBody": {
                          "id": 7877,
                          "nodeType": "Block",
                          "src": "4197:52:46",
                          "statements": [
                            {
                              "expression": {
                                "id": 7875,
                                "name": "presaleRound",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7855,
                                "src": "4222:12:46",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "functionReturnParameters": 7853,
                              "id": 7876,
                              "nodeType": "Return",
                              "src": "4215:19:46"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7864,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 7862,
                      "name": "presaleRound",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7855,
                      "src": "4009:12:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 7863,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4024:1:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "4009:16:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 7880,
                  "initializationExpression": {
                    "assignments": [
                      7855
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 7855,
                        "mutability": "mutable",
                        "name": "presaleRound",
                        "nameLocation": "3949:12:46",
                        "nodeType": "VariableDeclaration",
                        "scope": 7880,
                        "src": "3941:20:46",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7854,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3941:7:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 7861,
                    "initialValue": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 7860,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 7856,
                            "name": "totalPresaleRound",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7711,
                            "src": "3964:17:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Counter_$5303_storage",
                              "typeString": "struct Counters.Counter storage ref"
                            }
                          },
                          "id": 7857,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "current",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 5315,
                          "src": "3964:25:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_struct$_Counter_$5303_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Counter_$5303_storage_ptr_$",
                            "typeString": "function (struct Counters.Counter storage pointer) view returns (uint256)"
                          }
                        },
                        "id": 7858,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3964:27:46",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "hexValue": "31",
                        "id": 7859,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3994:1:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "3964:31:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "3941:54:46"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 7866,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "--",
                      "prefix": false,
                      "src": "4039:14:46",
                      "subExpression": {
                        "id": 7865,
                        "name": "presaleRound",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7855,
                        "src": "4039:12:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 7867,
                    "nodeType": "ExpressionStatement",
                    "src": "4039:14:46"
                  },
                  "nodeType": "ForStatement",
                  "src": "3923:336:46"
                },
                {
                  "expression": {
                    "hexValue": "30",
                    "id": 7881,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "4276:1:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "functionReturnParameters": 7853,
                  "id": 7882,
                  "nodeType": "Return",
                  "src": "4269:8:46"
                }
              ]
            },
            "documentation": {
              "id": 7849,
              "nodeType": "StructuredDocumentation",
              "src": "3795:49:46",
              "text": " @dev Get Current Presale Round"
            },
            "functionSelector": "1c63f0ed",
            "id": 7884,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getCurrentPresaleRound",
            "nameLocation": "3858:22:46",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7850,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3880:2:46"
            },
            "returnParameters": {
              "id": 7853,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7852,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 7884,
                  "src": "3904:7:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7851,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3904:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3903:9:46"
            },
            "scope": 8365,
            "src": "3849:435:46",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7919,
              "nodeType": "Block",
              "src": "4673:384:46",
              "statements": [
                {
                  "assignments": [
                    7897
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7897,
                      "mutability": "mutable",
                      "name": "currentPresaleRound",
                      "nameLocation": "4691:19:46",
                      "nodeType": "VariableDeclaration",
                      "scope": 7919,
                      "src": "4683:27:46",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7896,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4683:7:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 7900,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 7898,
                      "name": "getCurrentPresaleRound",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7884,
                      "src": "4713:22:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                        "typeString": "function () view returns (uint256)"
                      }
                    },
                    "id": 7899,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4713:24:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4683:54:46"
                },
                {
                  "expression": {
                    "components": [
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 7901,
                            "name": "presaleDetailsMapping",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7722,
                            "src": "4768:21:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$7661_storage_$",
                              "typeString": "mapping(uint256 => struct Presale.PresaleData storage ref)"
                            }
                          },
                          "id": 7903,
                          "indexExpression": {
                            "id": 7902,
                            "name": "currentPresaleRound",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7897,
                            "src": "4790:19:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4768:42:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_PresaleData_$7661_storage",
                            "typeString": "struct Presale.PresaleData storage ref"
                          }
                        },
                        "id": 7904,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "startingTime",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7654,
                        "src": "4768:55:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 7905,
                            "name": "presaleDetailsMapping",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7722,
                            "src": "4837:21:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$7661_storage_$",
                              "typeString": "mapping(uint256 => struct Presale.PresaleData storage ref)"
                            }
                          },
                          "id": 7907,
                          "indexExpression": {
                            "id": 7906,
                            "name": "currentPresaleRound",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7897,
                            "src": "4859:19:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4837:42:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_PresaleData_$7661_storage",
                            "typeString": "struct Presale.PresaleData storage ref"
                          }
                        },
                        "id": 7908,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "usdPrice",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7656,
                        "src": "4837:51:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 7909,
                            "name": "presaleDetailsMapping",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7722,
                            "src": "4902:21:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$7661_storage_$",
                              "typeString": "mapping(uint256 => struct Presale.PresaleData storage ref)"
                            }
                          },
                          "id": 7911,
                          "indexExpression": {
                            "id": 7910,
                            "name": "currentPresaleRound",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7897,
                            "src": "4924:19:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4902:42:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_PresaleData_$7661_storage",
                            "typeString": "struct Presale.PresaleData storage ref"
                          }
                        },
                        "id": 7912,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "minimumUSDPurchase",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7658,
                        "src": "4902:61:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 7913,
                            "name": "presaleDetailsMapping",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7722,
                            "src": "4977:21:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$7661_storage_$",
                              "typeString": "mapping(uint256 => struct Presale.PresaleData storage ref)"
                            }
                          },
                          "id": 7915,
                          "indexExpression": {
                            "id": 7914,
                            "name": "currentPresaleRound",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7897,
                            "src": "4999:19:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4977:42:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_PresaleData_$7661_storage",
                            "typeString": "struct Presale.PresaleData storage ref"
                          }
                        },
                        "id": 7916,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "maximumPresaleAmount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7660,
                        "src": "4977:63:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 7917,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "4754:296:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256,uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 7895,
                  "id": 7918,
                  "nodeType": "Return",
                  "src": "4747:303:46"
                }
              ]
            },
            "documentation": {
              "id": 7885,
              "nodeType": "StructuredDocumentation",
              "src": "4290:199:46",
              "text": " @dev Getting the Current Presale Details, including:\n @return Starting Time\n @return USD Price\n @return Minimum USD Purchase\n @return Maximum Presale Amount"
            },
            "functionSelector": "ec2b3523",
            "id": 7920,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getCurrentPresaleDetails",
            "nameLocation": "4503:24:46",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7886,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4527:2:46"
            },
            "returnParameters": {
              "id": 7895,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7888,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 7920,
                  "src": "4588:7:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7887,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4588:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7890,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 7920,
                  "src": "4609:7:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7889,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4609:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7892,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 7920,
                  "src": "4630:7:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7891,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4630:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7894,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 7920,
                  "src": "4651:7:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7893,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4651:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4574:94:46"
            },
            "scope": 8365,
            "src": "4494:563:46",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8121,
              "nodeType": "Block",
              "src": "5462:2792:46",
              "statements": [
                {
                  "assignments": [
                    7931,
                    7933,
                    7935,
                    7937
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7931,
                      "mutability": "mutable",
                      "name": "currentPresaleStartingTime",
                      "nameLocation": "5494:26:46",
                      "nodeType": "VariableDeclaration",
                      "scope": 8121,
                      "src": "5486:34:46",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7930,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5486:7:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 7933,
                      "mutability": "mutable",
                      "name": "currentPresalePrice",
                      "nameLocation": "5542:19:46",
                      "nodeType": "VariableDeclaration",
                      "scope": 8121,
                      "src": "5534:27:46",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7932,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5534:7:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 7935,
                      "mutability": "mutable",
                      "name": "currentPresaleMinimumUSDPurchase",
                      "nameLocation": "5583:32:46",
                      "nodeType": "VariableDeclaration",
                      "scope": 8121,
                      "src": "5575:40:46",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7934,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5575:7:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 7937,
                      "mutability": "mutable",
                      "name": "currentPresaleMaximumPresaleAmount",
                      "nameLocation": "5637:34:46",
                      "nodeType": "VariableDeclaration",
                      "scope": 8121,
                      "src": "5629:42:46",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7936,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5629:7:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 7940,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 7938,
                      "name": "getCurrentPresaleDetails",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7920,
                      "src": "5684:24:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$",
                        "typeString": "function () view returns (uint256,uint256,uint256,uint256)"
                      }
                    },
                    "id": 7939,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5684:26:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256,uint256,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5472:238:46"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 7949,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 7944,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 7941,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967292,
                          "src": "5795:5:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 7942,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "timestamp",
                        "nodeType": "MemberAccess",
                        "src": "5795:15:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "id": 7943,
                        "name": "currentPresaleStartingTime",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7931,
                        "src": "5813:26:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "5795:44:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 7948,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 7945,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967292,
                          "src": "5855:5:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 7946,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "timestamp",
                        "nodeType": "MemberAccess",
                        "src": "5855:15:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">=",
                      "rightExpression": {
                        "id": 7947,
                        "name": "endingTime",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7717,
                        "src": "5874:10:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "5855:29:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "5795:89:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 7953,
                  "nodeType": "IfStatement",
                  "src": "5778:144:46",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 7950,
                        "name": "presaleRoundClosed",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7733,
                        "src": "5902:18:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 7951,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5902:20:46",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 7952,
                    "nodeType": "RevertStatement",
                    "src": "5895:27:46"
                  }
                },
                {
                  "condition": {
                    "id": 7958,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "5977:59:46",
                    "subExpression": {
                      "expression": {
                        "baseExpression": {
                          "id": 7954,
                          "name": "presalePaymentTokenMapping",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7731,
                          "src": "5978:26:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_PresalePaymentTokenData_$7666_storage_$",
                            "typeString": "mapping(address => struct Presale.PresalePaymentTokenData storage ref)"
                          }
                        },
                        "id": 7956,
                        "indexExpression": {
                          "id": 7955,
                          "name": "_paymentTokenAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7923,
                          "src": "6005:20:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "5978:48:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_PresalePaymentTokenData_$7666_storage",
                          "typeString": "struct Presale.PresalePaymentTokenData storage ref"
                        }
                      },
                      "id": 7957,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "available",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7663,
                      "src": "5978:58:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 7962,
                  "nodeType": "IfStatement",
                  "src": "5973:110:46",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 7959,
                        "name": "presaleTokenNotAvailable",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7735,
                        "src": "6057:24:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 7960,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6057:26:46",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 7961,
                    "nodeType": "RevertStatement",
                    "src": "6050:33:46"
                  }
                },
                {
                  "assignments": [
                    7965
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7965,
                      "mutability": "mutable",
                      "name": "token",
                      "nameLocation": "6162:5:46",
                      "nodeType": "VariableDeclaration",
                      "scope": 8121,
                      "src": "6149:18:46",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Custom_$9652",
                        "typeString": "contract IERC20Custom"
                      },
                      "typeName": {
                        "id": 7964,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 7963,
                          "name": "IERC20Custom",
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 9652,
                          "src": "6149:12:46"
                        },
                        "referencedDeclaration": 9652,
                        "src": "6149:12:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Custom_$9652",
                          "typeString": "contract IERC20Custom"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 7969,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 7967,
                        "name": "tokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7713,
                        "src": "6183:12:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 7966,
                      "name": "IERC20Custom",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9652,
                      "src": "6170:12:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IERC20Custom_$9652_$",
                        "typeString": "type(contract IERC20Custom)"
                      }
                    },
                    "id": 7968,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6170:26:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Custom_$9652",
                      "typeString": "contract IERC20Custom"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6149:47:46"
                },
                {
                  "assignments": [
                    7972
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7972,
                      "mutability": "mutable",
                      "name": "priceFeed",
                      "nameLocation": "6228:9:46",
                      "nodeType": "VariableDeclaration",
                      "scope": 8121,
                      "src": "6206:31:46",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_AggregatorV3Interface_$45",
                        "typeString": "contract AggregatorV3Interface"
                      },
                      "typeName": {
                        "id": 7971,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 7970,
                          "name": "AggregatorV3Interface",
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 45,
                          "src": "6206:21:46"
                        },
                        "referencedDeclaration": 45,
                        "src": "6206:21:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_AggregatorV3Interface_$45",
                          "typeString": "contract AggregatorV3Interface"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 7979,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 7974,
                            "name": "presalePaymentTokenMapping",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7731,
                            "src": "6275:26:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_PresalePaymentTokenData_$7666_storage_$",
                              "typeString": "mapping(address => struct Presale.PresalePaymentTokenData storage ref)"
                            }
                          },
                          "id": 7976,
                          "indexExpression": {
                            "id": 7975,
                            "name": "_paymentTokenAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7923,
                            "src": "6302:20:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "6275:48:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_PresalePaymentTokenData_$7666_storage",
                            "typeString": "struct Presale.PresalePaymentTokenData storage ref"
                          }
                        },
                        "id": 7977,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "aggregatorAddress",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7665,
                        "src": "6275:66:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 7973,
                      "name": "AggregatorV3Interface",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45,
                      "src": "6240:21:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_AggregatorV3Interface_$45_$",
                        "typeString": "type(contract AggregatorV3Interface)"
                      }
                    },
                    "id": 7978,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6240:111:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_AggregatorV3Interface_$45",
                      "typeString": "contract AggregatorV3Interface"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6206:145:46"
                },
                {
                  "assignments": [
                    null,
                    7981,
                    null,
                    null,
                    null
                  ],
                  "declarations": [
                    null,
                    {
                      "constant": false,
                      "id": 7981,
                      "mutability": "mutable",
                      "name": "price",
                      "nameLocation": "6371:5:46",
                      "nodeType": "VariableDeclaration",
                      "scope": 8121,
                      "src": "6364:12:46",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      },
                      "typeName": {
                        "id": 7980,
                        "name": "int256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6364:6:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      },
                      "visibility": "internal"
                    },
                    null,
                    null,
                    null
                  ],
                  "id": 7985,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 7982,
                        "name": "priceFeed",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7972,
                        "src": "6386:9:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_AggregatorV3Interface_$45",
                          "typeString": "contract AggregatorV3Interface"
                        }
                      },
                      "id": 7983,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "latestRoundData",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 44,
                      "src": "6386:25:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint80_$_t_int256_$_t_uint256_$_t_uint256_$_t_uint80_$",
                        "typeString": "function () view external returns (uint80,int256,uint256,uint256,uint80)"
                      }
                    },
                    "id": 7984,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6386:27:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint80_$_t_int256_$_t_uint256_$_t_uint256_$_t_uint80_$",
                      "typeString": "tuple(uint80,int256,uint256,uint256,uint80)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6361:52:46"
                },
                {
                  "assignments": [
                    7987
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7987,
                      "mutability": "mutable",
                      "name": "presaleUSDAmount",
                      "nameLocation": "6431:16:46",
                      "nodeType": "VariableDeclaration",
                      "scope": 8121,
                      "src": "6423:24:46",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7986,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6423:7:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8005,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "id": 7994,
                                "name": "price",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7981,
                                "src": "6548:5:46",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "id": 7995,
                                    "name": "priceFeed",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7972,
                                    "src": "6575:9:46",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_AggregatorV3Interface_$45",
                                      "typeString": "contract AggregatorV3Interface"
                                    }
                                  },
                                  "id": 7996,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "decimals",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 6,
                                  "src": "6575:18:46",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_uint8_$",
                                    "typeString": "function () view external returns (uint8)"
                                  }
                                },
                                "id": 7997,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6575:20:46",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "id": 7998,
                                    "name": "token",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7965,
                                    "src": "6617:5:46",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IERC20Custom_$9652",
                                      "typeString": "contract IERC20Custom"
                                    }
                                  },
                                  "id": 7999,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "decimals",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 9606,
                                  "src": "6617:14:46",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_uint8_$",
                                    "typeString": "function () view external returns (uint8)"
                                  }
                                },
                                "id": 8000,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6617:16:46",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                },
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                },
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              ],
                              "expression": {
                                "id": 7992,
                                "name": "PriceConverter",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7631,
                                "src": "6501:14:46",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_PriceConverter_$7631_$",
                                  "typeString": "type(library PriceConverter)"
                                }
                              },
                              "id": 7993,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "scalePrice",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7630,
                              "src": "6501:25:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_int256_$_t_uint8_$_t_uint8_$returns$_t_int256_$",
                                "typeString": "function (int256,uint8,uint8) pure returns (int256)"
                              }
                            },
                            "id": 8001,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6501:150:46",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          ],
                          "id": 7991,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "6476:7:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": {
                            "id": 7990,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "6476:7:46",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 8002,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6476:189:46",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 8003,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7925,
                        "src": "6679:7:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 7988,
                        "name": "SafeMath",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7057,
                        "src": "6450:8:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_SafeMath_$7057_$",
                          "typeString": "type(library SafeMath)"
                        }
                      },
                      "id": 7989,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mul",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6951,
                      "src": "6450:12:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 8004,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6450:246:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6423:273:46"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8019,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 8012,
                                  "name": "presaleUSDAmount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7987,
                                  "src": "6782:16:46",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 8011,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "6775:6:46",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_int256_$",
                                  "typeString": "type(int256)"
                                },
                                "typeName": {
                                  "id": 8010,
                                  "name": "int256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "6775:6:46",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 8013,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6775:24:46",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            {
                              "hexValue": "3138",
                              "id": 8014,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6801:2:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_18_by_1",
                                "typeString": "int_const 18"
                              },
                              "value": "18"
                            },
                            {
                              "hexValue": "30",
                              "id": 8015,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6805:1:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              },
                              {
                                "typeIdentifier": "t_rational_18_by_1",
                                "typeString": "int_const 18"
                              },
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "expression": {
                              "id": 8008,
                              "name": "PriceConverter",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7631,
                              "src": "6749:14:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_PriceConverter_$7631_$",
                                "typeString": "type(library PriceConverter)"
                              }
                            },
                            "id": 8009,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "scalePrice",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7630,
                            "src": "6749:25:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_int256_$_t_uint8_$_t_uint8_$returns$_t_int256_$",
                              "typeString": "function (int256,uint8,uint8) pure returns (int256)"
                            }
                          },
                          "id": 8016,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6749:58:46",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        ],
                        "id": 8007,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "6724:7:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": {
                          "id": 8006,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6724:7:46",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 8017,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6724:97:46",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "id": 8018,
                      "name": "currentPresaleMinimumUSDPurchase",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7935,
                      "src": "6824:32:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6724:132:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8023,
                  "nodeType": "IfStatement",
                  "src": "6707:200:46",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 8020,
                        "name": "presaleUSDPurchaseNotSufficient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7747,
                        "src": "6874:31:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 8021,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6874:33:46",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 8022,
                    "nodeType": "RevertStatement",
                    "src": "6867:40:46"
                  }
                },
                {
                  "assignments": [
                    8025
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8025,
                      "mutability": "mutable",
                      "name": "presaleAmount",
                      "nameLocation": "6926:13:46",
                      "nodeType": "VariableDeclaration",
                      "scope": 8121,
                      "src": "6918:21:46",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8024,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6918:7:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8031,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 8028,
                        "name": "presaleUSDAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7987,
                        "src": "6968:16:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 8029,
                        "name": "currentPresalePrice",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7933,
                        "src": "6998:19:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 8026,
                        "name": "SafeMath",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7057,
                        "src": "6942:8:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_SafeMath_$7057_$",
                          "typeString": "type(library SafeMath)"
                        }
                      },
                      "id": 8027,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6966,
                      "src": "6942:12:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 8030,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6942:85:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6918:109:46"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8039,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 8032,
                      "name": "presaleAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8025,
                      "src": "7055:13:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8038,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 8033,
                        "name": "currentPresaleMaximumPresaleAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7937,
                        "src": "7083:34:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "baseExpression": {
                          "id": 8034,
                          "name": "presaleAmountByRoundMapping",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7726,
                          "src": "7136:27:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                            "typeString": "mapping(uint256 => uint256)"
                          }
                        },
                        "id": 8037,
                        "indexExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 8035,
                            "name": "getCurrentPresaleRound",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7884,
                            "src": "7164:22:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                              "typeString": "function () view returns (uint256)"
                            }
                          },
                          "id": 8036,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7164:24:46",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "7136:53:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "7083:106:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7055:134:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8043,
                  "nodeType": "IfStatement",
                  "src": "7038:194:46",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 8040,
                        "name": "presaleAmountOverdemand",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7749,
                        "src": "7207:23:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 8041,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7207:25:46",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 8042,
                    "nodeType": "RevertStatement",
                    "src": "7200:32:46"
                  }
                },
                {
                  "expression": {
                    "id": 8049,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 8044,
                        "name": "presaleAmountByRoundMapping",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7726,
                        "src": "7243:27:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                          "typeString": "mapping(uint256 => uint256)"
                        }
                      },
                      "id": 8047,
                      "indexExpression": {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 8045,
                          "name": "getCurrentPresaleRound",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7884,
                          "src": "7271:22:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                            "typeString": "function () view returns (uint256)"
                          }
                        },
                        "id": 8046,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7271:24:46",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7243:53:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "id": 8048,
                      "name": "presaleAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8025,
                      "src": "7300:13:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7243:70:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8050,
                  "nodeType": "ExpressionStatement",
                  "src": "7243:70:46"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 8056,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 8051,
                      "name": "_paymentTokenAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7923,
                      "src": "7400:20:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 8054,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7432:1:46",
                          "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": 8053,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "7424:7:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 8052,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7424:7:46",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 8055,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7424:10:46",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "7400:34:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 8103,
                    "nodeType": "Block",
                    "src": "7862:152:46",
                    "statements": [
                      {
                        "assignments": [
                          8089
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 8089,
                            "mutability": "mutable",
                            "name": "paymentToken",
                            "nameLocation": "7883:12:46",
                            "nodeType": "VariableDeclaration",
                            "scope": 8103,
                            "src": "7876:19:46",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20_$2884",
                              "typeString": "contract IERC20"
                            },
                            "typeName": {
                              "id": 8088,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 8087,
                                "name": "IERC20",
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 2884,
                                "src": "7876:6:46"
                              },
                              "referencedDeclaration": 2884,
                              "src": "7876:6:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$2884",
                                "typeString": "contract IERC20"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 8093,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 8091,
                              "name": "_paymentTokenAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7923,
                              "src": "7905:20:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 8090,
                            "name": "IERC20",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2884,
                            "src": "7898:6:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IERC20_$2884_$",
                              "typeString": "type(contract IERC20)"
                            }
                          },
                          "id": 8092,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7898:28:46",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$2884",
                            "typeString": "contract IERC20"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7876:50:46"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 8097,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4294967281,
                                "src": "7966:3:46",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 8098,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "7966:10:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 8099,
                              "name": "presaleReceiver",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7715,
                              "src": "7978:15:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "id": 8100,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7925,
                              "src": "7995:7:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 8094,
                              "name": "paymentToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8089,
                              "src": "7940:12:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$2884",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 8096,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transferFrom",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2865,
                            "src": "7940:25:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,address,uint256) external returns (bool)"
                            }
                          },
                          "id": 8101,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7940:63:46",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8102,
                        "nodeType": "ExpressionStatement",
                        "src": "7940:63:46"
                      }
                    ]
                  },
                  "id": 8104,
                  "nodeType": "IfStatement",
                  "src": "7396:618:46",
                  "trueBody": {
                    "id": 8086,
                    "nodeType": "Block",
                    "src": "7436:420:46",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8060,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 8057,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4294967281,
                              "src": "7454:3:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 8058,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "value",
                            "nodeType": "MemberAccess",
                            "src": "7454:9:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "id": 8059,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7925,
                            "src": "7466:7:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7454:19:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 8084,
                          "nodeType": "Block",
                          "src": "7561:285:46",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 8068,
                                    "name": "_amount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7925,
                                    "src": "7604:7:46",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 8065,
                                    "name": "presaleReceiver",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7715,
                                    "src": "7579:15:46",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  },
                                  "id": 8067,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "transfer",
                                  "nodeType": "MemberAccess",
                                  "src": "7579:24:46",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256)"
                                  }
                                },
                                "id": 8069,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7579:33:46",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8070,
                              "nodeType": "ExpressionStatement",
                              "src": "7579:33:46"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "id": 8079,
                                          "name": "this",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4294967268,
                                          "src": "7817:4:46",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_Presale_$8365",
                                            "typeString": "contract Presale"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_contract$_Presale_$8365",
                                            "typeString": "contract Presale"
                                          }
                                        ],
                                        "id": 8078,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "7809:7:46",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_address_$",
                                          "typeString": "type(address)"
                                        },
                                        "typeName": {
                                          "id": 8077,
                                          "name": "address",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "7809:7:46",
                                          "typeDescriptions": {}
                                        }
                                      },
                                      "id": 8080,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "7809:13:46",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "id": 8081,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "balance",
                                    "nodeType": "MemberAccess",
                                    "src": "7809:21:46",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "arguments": [
                                      {
                                        "expression": {
                                          "id": 8073,
                                          "name": "msg",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4294967281,
                                          "src": "7788:3:46",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_magic_message",
                                            "typeString": "msg"
                                          }
                                        },
                                        "id": 8074,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "sender",
                                        "nodeType": "MemberAccess",
                                        "src": "7788:10:46",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 8072,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "7780:8:46",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_payable_$",
                                        "typeString": "type(address payable)"
                                      },
                                      "typeName": {
                                        "id": 8071,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7780:8:46",
                                        "stateMutability": "payable",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 8075,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "7780:19:46",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  },
                                  "id": 8076,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "transfer",
                                  "nodeType": "MemberAccess",
                                  "src": "7780:28:46",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256)"
                                  }
                                },
                                "id": 8082,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7780:51:46",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8083,
                              "nodeType": "ExpressionStatement",
                              "src": "7780:51:46"
                            }
                          ]
                        },
                        "id": 8085,
                        "nodeType": "IfStatement",
                        "src": "7450:396:46",
                        "trueBody": {
                          "id": 8064,
                          "nodeType": "Block",
                          "src": "7475:80:46",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 8061,
                                  "name": "presaleNativeTokenPaymentNotSufficient",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7737,
                                  "src": "7500:38:46",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                    "typeString": "function () pure"
                                  }
                                },
                                "id": 8062,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7500:40:46",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8063,
                              "nodeType": "RevertStatement",
                              "src": "7493:47:46"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 8108,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "8078:3:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8109,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "8078:10:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 8110,
                        "name": "presaleAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8025,
                        "src": "8090:13:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 8105,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7965,
                        "src": "8067:5:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Custom_$9652",
                          "typeString": "contract IERC20Custom"
                        }
                      },
                      "id": 8107,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9639,
                      "src": "8067:10:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 8111,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8067:37:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8112,
                  "nodeType": "ExpressionStatement",
                  "src": "8067:37:46"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 8114,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "8145:3:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8115,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "8145:10:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 8116,
                        "name": "_paymentTokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7923,
                        "src": "8169:20:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 8117,
                        "name": "presaleAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8025,
                        "src": "8203:13:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 8118,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7925,
                        "src": "8230:7:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8113,
                      "name": "TokenPresold",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7676,
                      "src": "8119:12:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256,uint256)"
                      }
                    },
                    "id": 8119,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8119:128:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8120,
                  "nodeType": "EmitStatement",
                  "src": "8114:133:46"
                }
              ]
            },
            "documentation": {
              "id": 7921,
              "nodeType": "StructuredDocumentation",
              "src": "5063:268:46",
              "text": " @dev Execute the Presale of ALPS Token in exchange of other token\n @param _paymentTokenAddress - Address of the token use to pay (address 0 is for native token)\n @param _amount - Amount denominated in the `paymentTokenAddress` being paid"
            },
            "functionSelector": "efca9049",
            "id": 8122,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 7928,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 7927,
                  "name": "nonReentrant",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 741,
                  "src": "5445:12:46"
                },
                "nodeType": "ModifierInvocation",
                "src": "5445:12:46"
              }
            ],
            "name": "presaleTokens",
            "nameLocation": "5345:13:46",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7926,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7923,
                  "mutability": "mutable",
                  "name": "_paymentTokenAddress",
                  "nameLocation": "5367:20:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 8122,
                  "src": "5359:28:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7922,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5359:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7925,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nameLocation": "5397:7:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 8122,
                  "src": "5389:15:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7924,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5389:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5358:47:46"
            },
            "returnParameters": {
              "id": 7929,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5462:0:46"
            },
            "scope": 8365,
            "src": "5336:2918:46",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8138,
              "nodeType": "Block",
              "src": "8509:113:46",
              "statements": [
                {
                  "expression": {
                    "id": 8132,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 8130,
                      "name": "presaleReceiver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7715,
                      "src": "8519:15:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8131,
                      "name": "_newPresaleReceiver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8125,
                      "src": "8537:19:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "8519:37:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "id": 8133,
                  "nodeType": "ExpressionStatement",
                  "src": "8519:37:46"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 8135,
                        "name": "_newPresaleReceiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8125,
                        "src": "8595:19:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 8134,
                      "name": "PresaleReceiverUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7692,
                      "src": "8572:22:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 8136,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8572:43:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8137,
                  "nodeType": "EmitStatement",
                  "src": "8567:48:46"
                }
              ]
            },
            "documentation": {
              "id": 8123,
              "nodeType": "StructuredDocumentation",
              "src": "8260:142:46",
              "text": " @dev Set new Presale Receiver Address\n @param _newPresaleReceiver - Address that'll receive the presale payment token"
            },
            "functionSelector": "feda925b",
            "id": 8139,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8128,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8127,
                  "name": "onlyOwner",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 474,
                  "src": "8495:9:46"
                },
                "nodeType": "ModifierInvocation",
                "src": "8495:9:46"
              }
            ],
            "name": "setPresaleReceiver",
            "nameLocation": "8416:18:46",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8126,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8125,
                  "mutability": "mutable",
                  "name": "_newPresaleReceiver",
                  "nameLocation": "8451:19:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 8139,
                  "src": "8435:35:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 8124,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8435:15:46",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8434:37:46"
            },
            "returnParameters": {
              "id": 8129,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8509:0:46"
            },
            "scope": 8365,
            "src": "8407:215:46",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8158,
              "nodeType": "Block",
              "src": "8896:101:46",
              "statements": [
                {
                  "expression": {
                    "id": 8152,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 8150,
                      "name": "tokenAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7713,
                      "src": "8906:12:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8151,
                      "name": "_newTokenAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8142,
                      "src": "8921:16:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "8906:31:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 8153,
                  "nodeType": "ExpressionStatement",
                  "src": "8906:31:46"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 8155,
                        "name": "_newTokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8142,
                        "src": "8973:16:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8154,
                      "name": "PresaleTokenUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7704,
                      "src": "8953:19:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 8156,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8953:37:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8157,
                  "nodeType": "EmitStatement",
                  "src": "8948:42:46"
                }
              ]
            },
            "documentation": {
              "id": 8140,
              "nodeType": "StructuredDocumentation",
              "src": "8628:123:46",
              "text": " @dev Set new Presale Token Address\n @param _newTokenAddress - Address of token that'll be presaled"
            },
            "functionSelector": "3c0c134d",
            "id": 8159,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8145,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8144,
                  "name": "onlyOwner",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 474,
                  "src": "8837:9:46"
                },
                "nodeType": "ModifierInvocation",
                "src": "8837:9:46"
              },
              {
                "arguments": [
                  {
                    "id": 8147,
                    "name": "_newTokenAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8142,
                    "src": "8874:16:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 8148,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8146,
                  "name": "onlyNonZeroAddress",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 7769,
                  "src": "8855:18:46"
                },
                "nodeType": "ModifierInvocation",
                "src": "8855:36:46"
              }
            ],
            "name": "setPresaleTokenAddress",
            "nameLocation": "8765:22:46",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8143,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8142,
                  "mutability": "mutable",
                  "name": "_newTokenAddress",
                  "nameLocation": "8796:16:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 8159,
                  "src": "8788:24:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8141,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8788:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8787:26:46"
            },
            "returnParameters": {
              "id": 8149,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8896:0:46"
            },
            "scope": 8365,
            "src": "8756:241:46",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8194,
              "nodeType": "Block",
              "src": "9531:348:46",
              "statements": [
                {
                  "expression": {
                    "id": 8179,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 8174,
                          "name": "presalePaymentTokenMapping",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7731,
                          "src": "9541:26:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_PresalePaymentTokenData_$7666_storage_$",
                            "typeString": "mapping(address => struct Presale.PresalePaymentTokenData storage ref)"
                          }
                        },
                        "id": 8176,
                        "indexExpression": {
                          "id": 8175,
                          "name": "_tokenAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8162,
                          "src": "9568:13:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "9541:41:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_PresalePaymentTokenData_$7666_storage",
                          "typeString": "struct Presale.PresalePaymentTokenData storage ref"
                        }
                      },
                      "id": 8177,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "available",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7663,
                      "src": "9541:64:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8178,
                      "name": "_tokenAvailability",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8164,
                      "src": "9608:18:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "9541:85:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8180,
                  "nodeType": "ExpressionStatement",
                  "src": "9541:85:46"
                },
                {
                  "expression": {
                    "id": 8186,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 8181,
                          "name": "presalePaymentTokenMapping",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7731,
                          "src": "9636:26:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_PresalePaymentTokenData_$7666_storage_$",
                            "typeString": "mapping(address => struct Presale.PresalePaymentTokenData storage ref)"
                          }
                        },
                        "id": 8183,
                        "indexExpression": {
                          "id": 8182,
                          "name": "_tokenAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8162,
                          "src": "9663:13:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "9636:41:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_PresalePaymentTokenData_$7666_storage",
                          "typeString": "struct Presale.PresalePaymentTokenData storage ref"
                        }
                      },
                      "id": 8184,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "aggregatorAddress",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7665,
                      "src": "9636:72:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8185,
                      "name": "_aggregatorAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8166,
                      "src": "9711:18:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "9636:93:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 8187,
                  "nodeType": "ExpressionStatement",
                  "src": "9636:93:46"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 8189,
                        "name": "_tokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8162,
                        "src": "9785:13:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 8190,
                        "name": "_tokenAvailability",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8164,
                        "src": "9812:18:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "id": 8191,
                        "name": "_aggregatorAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8166,
                        "src": "9844:18:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8188,
                      "name": "PresalePaymentTokenUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7700,
                      "src": "9745:26:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bool_$_t_address_$returns$__$",
                        "typeString": "function (address,bool,address)"
                      }
                    },
                    "id": 8192,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9745:127:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8193,
                  "nodeType": "EmitStatement",
                  "src": "9740:132:46"
                }
              ]
            },
            "documentation": {
              "id": 8160,
              "nodeType": "StructuredDocumentation",
              "src": "9003:329:46",
              "text": " @dev Set Presale Payment Token Info\n @param _tokenAddress - Token Address use to purchase Presale\n @param _tokenAvailability - Indication whether Token Address can be used for Presale\n @param _aggregatorAddress - Chainlink's Aggregator Address to determine the USD price (for `presaleTokens`)"
            },
            "functionSelector": "736e38ef",
            "id": 8195,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8169,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8168,
                  "name": "onlyOwner",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 474,
                  "src": "9482:9:46"
                },
                "nodeType": "ModifierInvocation",
                "src": "9482:9:46"
              },
              {
                "arguments": [
                  {
                    "id": 8171,
                    "name": "_aggregatorAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8166,
                    "src": "9511:18:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 8172,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8170,
                  "name": "onlyNonZeroAddress",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 7769,
                  "src": "9492:18:46"
                },
                "nodeType": "ModifierInvocation",
                "src": "9492:38:46"
              }
            ],
            "name": "setPresalePaymentToken",
            "nameLocation": "9346:22:46",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8167,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8162,
                  "mutability": "mutable",
                  "name": "_tokenAddress",
                  "nameLocation": "9386:13:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 8195,
                  "src": "9378:21:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8161,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9378:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8164,
                  "mutability": "mutable",
                  "name": "_tokenAvailability",
                  "nameLocation": "9414:18:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 8195,
                  "src": "9409:23:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8163,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "9409:4:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8166,
                  "mutability": "mutable",
                  "name": "_aggregatorAddress",
                  "nameLocation": "9450:18:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 8195,
                  "src": "9442:26:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8165,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9442:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9368:106:46"
            },
            "returnParameters": {
              "id": 8173,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9531:0:46"
            },
            "scope": 8365,
            "src": "9337:542:46",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8219,
              "nodeType": "Block",
              "src": "10049:181:46",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8206,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 8203,
                      "name": "_newEndingTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8198,
                      "src": "10063:14:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 8204,
                        "name": "block",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967292,
                        "src": "10080:5:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_block",
                          "typeString": "block"
                        }
                      },
                      "id": 8205,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "timestamp",
                      "nodeType": "MemberAccess",
                      "src": "10080:15:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10063:32:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8210,
                  "nodeType": "IfStatement",
                  "src": "10059:71:46",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 8207,
                        "name": "presaleEndingTimeInvalid",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7753,
                        "src": "10104:24:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 8208,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10104:26:46",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 8209,
                    "nodeType": "RevertStatement",
                    "src": "10097:33:46"
                  }
                },
                {
                  "expression": {
                    "id": 8213,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 8211,
                      "name": "endingTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7717,
                      "src": "10140:10:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8212,
                      "name": "_newEndingTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8198,
                      "src": "10153:14:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10140:27:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8214,
                  "nodeType": "ExpressionStatement",
                  "src": "10140:27:46"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 8216,
                        "name": "_newEndingTime",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8198,
                        "src": "10208:14:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8215,
                      "name": "PresaleEndingTimeUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7708,
                      "src": "10183:24:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 8217,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10183:40:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8218,
                  "nodeType": "EmitStatement",
                  "src": "10178:45:46"
                }
              ]
            },
            "documentation": {
              "id": 8196,
              "nodeType": "StructuredDocumentation",
              "src": "9885:95:46",
              "text": " @dev Set new Ending time\n @param _newEndingTime - New Ending Timestamp"
            },
            "functionSelector": "3473bf30",
            "id": 8220,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8201,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8200,
                  "name": "onlyOwner",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 474,
                  "src": "10039:9:46"
                },
                "nodeType": "ModifierInvocation",
                "src": "10039:9:46"
              }
            ],
            "name": "setEndingTime",
            "nameLocation": "9994:13:46",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8199,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8198,
                  "mutability": "mutable",
                  "name": "_newEndingTime",
                  "nameLocation": "10016:14:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 8220,
                  "src": "10008:22:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8197,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10008:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10007:24:46"
            },
            "returnParameters": {
              "id": 8202,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10049:0:46"
            },
            "scope": 8365,
            "src": "9985:245:46",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8363,
              "nodeType": "Block",
              "src": "10889:1911:46",
              "statements": [
                {
                  "assignments": [
                    8237
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8237,
                      "mutability": "mutable",
                      "name": "presaleStartingTime",
                      "nameLocation": "10907:19:46",
                      "nodeType": "VariableDeclaration",
                      "scope": 8363,
                      "src": "10899:27:46",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8236,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "10899:7:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8242,
                  "initialValue": {
                    "expression": {
                      "baseExpression": {
                        "id": 8238,
                        "name": "presaleDetailsMapping",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7722,
                        "src": "10929:21:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$7661_storage_$",
                          "typeString": "mapping(uint256 => struct Presale.PresaleData storage ref)"
                        }
                      },
                      "id": 8240,
                      "indexExpression": {
                        "id": 8239,
                        "name": "_presaleRound",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8223,
                        "src": "10951:13:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "10929:36:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_PresaleData_$7661_storage",
                        "typeString": "struct Presale.PresaleData storage ref"
                      }
                    },
                    "id": 8241,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "startingTime",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 7654,
                    "src": "10929:62:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10899:92:46"
                },
                {
                  "assignments": [
                    8244
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8244,
                      "mutability": "mutable",
                      "name": "presaleUSDPrice",
                      "nameLocation": "11009:15:46",
                      "nodeType": "VariableDeclaration",
                      "scope": 8363,
                      "src": "11001:23:46",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8243,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "11001:7:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8249,
                  "initialValue": {
                    "expression": {
                      "baseExpression": {
                        "id": 8245,
                        "name": "presaleDetailsMapping",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7722,
                        "src": "11027:21:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$7661_storage_$",
                          "typeString": "mapping(uint256 => struct Presale.PresaleData storage ref)"
                        }
                      },
                      "id": 8247,
                      "indexExpression": {
                        "id": 8246,
                        "name": "_presaleRound",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8223,
                        "src": "11049:13:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "11027:36:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_PresaleData_$7661_storage",
                        "typeString": "struct Presale.PresaleData storage ref"
                      }
                    },
                    "id": 8248,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "usdPrice",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 7656,
                    "src": "11027:45:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11001:71:46"
                },
                {
                  "assignments": [
                    8251
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8251,
                      "mutability": "mutable",
                      "name": "presaleMinimumUSDPurchase",
                      "nameLocation": "11090:25:46",
                      "nodeType": "VariableDeclaration",
                      "scope": 8363,
                      "src": "11082:33:46",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8250,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "11082:7:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8256,
                  "initialValue": {
                    "expression": {
                      "baseExpression": {
                        "id": 8252,
                        "name": "presaleDetailsMapping",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7722,
                        "src": "11118:21:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$7661_storage_$",
                          "typeString": "mapping(uint256 => struct Presale.PresaleData storage ref)"
                        }
                      },
                      "id": 8254,
                      "indexExpression": {
                        "id": 8253,
                        "name": "_presaleRound",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8223,
                        "src": "11140:13:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "11118:36:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_PresaleData_$7661_storage",
                        "typeString": "struct Presale.PresaleData storage ref"
                      }
                    },
                    "id": 8255,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "minimumUSDPurchase",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 7658,
                    "src": "11118:68:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11082:104:46"
                },
                {
                  "assignments": [
                    8258
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8258,
                      "mutability": "mutable",
                      "name": "presaleMaximumPresaleAmount",
                      "nameLocation": "11204:27:46",
                      "nodeType": "VariableDeclaration",
                      "scope": 8363,
                      "src": "11196:35:46",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8257,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "11196:7:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8263,
                  "initialValue": {
                    "expression": {
                      "baseExpression": {
                        "id": 8259,
                        "name": "presaleDetailsMapping",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7722,
                        "src": "11234:21:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$7661_storage_$",
                          "typeString": "mapping(uint256 => struct Presale.PresaleData storage ref)"
                        }
                      },
                      "id": 8261,
                      "indexExpression": {
                        "id": 8260,
                        "name": "_presaleRound",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8223,
                        "src": "11269:13:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "11234:58:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_PresaleData_$7661_storage",
                        "typeString": "struct Presale.PresaleData storage ref"
                      }
                    },
                    "id": 8262,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "maximumPresaleAmount",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 7660,
                    "src": "11234:79:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11196:117:46"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 8278,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "id": 8274,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 8270,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8266,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8264,
                            "name": "presaleStartingTime",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8237,
                            "src": "11414:19:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 8265,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "11437:1:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "11414:24:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8269,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8267,
                            "name": "presaleUSDPrice",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8244,
                            "src": "11454:15:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 8268,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "11473:1:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "11454:20:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "11414:60:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&&",
                      "rightExpression": {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8273,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 8271,
                          "name": "presaleMinimumUSDPurchase",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8251,
                          "src": "11490:25:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 8272,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11519:1:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "11490:30:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "src": "11414:106:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8277,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 8275,
                        "name": "presaleMaximumPresaleAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8258,
                        "src": "11536:27:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 8276,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11567:1:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "11536:32:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "11414:154:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8284,
                  "nodeType": "IfStatement",
                  "src": "11397:211:46",
                  "trueBody": {
                    "expression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 8279,
                          "name": "totalPresaleRound",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7711,
                          "src": "11579:17:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Counter_$5303_storage",
                            "typeString": "struct Counters.Counter storage ref"
                          }
                        },
                        "id": 8281,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "increment",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5329,
                        "src": "11579:27:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Counter_$5303_storage_ptr_$returns$__$bound_to$_t_struct$_Counter_$5303_storage_ptr_$",
                          "typeString": "function (struct Counters.Counter storage pointer)"
                        }
                      },
                      "id": 8282,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11579:29:46",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 8283,
                    "nodeType": "ExpressionStatement",
                    "src": "11579:29:46"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 8301,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8287,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 8285,
                        "name": "_startingTime",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8225,
                        "src": "11756:13:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 8286,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11773:1:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "11756:18:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 8299,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 8290,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 8288,
                              "name": "_presaleRound",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8223,
                              "src": "11791:13:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "!=",
                            "rightExpression": {
                              "hexValue": "30",
                              "id": 8289,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11808:1:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "11791:18:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 8298,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 8291,
                              "name": "_startingTime",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8225,
                              "src": "11829:13:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<",
                            "rightExpression": {
                              "expression": {
                                "baseExpression": {
                                  "id": 8292,
                                  "name": "presaleDetailsMapping",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7722,
                                  "src": "11861:21:46",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$7661_storage_$",
                                    "typeString": "mapping(uint256 => struct Presale.PresaleData storage ref)"
                                  }
                                },
                                "id": 8296,
                                "indexExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 8295,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 8293,
                                    "name": "_presaleRound",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8223,
                                    "src": "11883:13:46",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "hexValue": "31",
                                    "id": 8294,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "11899:1:46",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "src": "11883:17:46",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "11861:40:46",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_PresaleData_$7661_storage",
                                  "typeString": "struct Presale.PresaleData storage ref"
                                }
                              },
                              "id": 8297,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "startingTime",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7654,
                              "src": "11861:53:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "11829:85:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "11791:123:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 8300,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "11790:125:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "11756:159:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8305,
                  "nodeType": "IfStatement",
                  "src": "11739:222:46",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 8302,
                        "name": "presaleStartingTimeInvalid",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7739,
                        "src": "11933:26:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 8303,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11933:28:46",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 8304,
                    "nodeType": "RevertStatement",
                    "src": "11926:35:46"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8308,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 8306,
                      "name": "_usdPrice",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8227,
                      "src": "12031:9:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 8307,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "12044:1:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "12031:14:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8312,
                  "nodeType": "IfStatement",
                  "src": "12027:51:46",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 8309,
                        "name": "presaleUSDPriceInvalid",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7741,
                        "src": "12054:22:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 8310,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "12054:24:46",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 8311,
                    "nodeType": "RevertStatement",
                    "src": "12047:31:46"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8315,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 8313,
                      "name": "_minimumUSDPurchase",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8229,
                      "src": "12092:19:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 8314,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "12115:1:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "12092:24:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8319,
                  "nodeType": "IfStatement",
                  "src": "12088:71:46",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 8316,
                        "name": "presaleMimumumUSDPurchaseInvalid",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7743,
                        "src": "12125:32:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 8317,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "12125:34:46",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 8318,
                    "nodeType": "RevertStatement",
                    "src": "12118:41:46"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8322,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 8320,
                      "name": "_maximumPresaleAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8231,
                      "src": "12173:21:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 8321,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "12198:1:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "12173:26:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8326,
                  "nodeType": "IfStatement",
                  "src": "12169:87:46",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 8323,
                        "name": "presaleMaximumPresaleAmountInvalid",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7745,
                        "src": "12220:34:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 8324,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "12220:36:46",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 8325,
                    "nodeType": "RevertStatement",
                    "src": "12213:43:46"
                  }
                },
                {
                  "expression": {
                    "id": 8332,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 8327,
                          "name": "presaleDetailsMapping",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7722,
                          "src": "12267:21:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$7661_storage_$",
                            "typeString": "mapping(uint256 => struct Presale.PresaleData storage ref)"
                          }
                        },
                        "id": 8329,
                        "indexExpression": {
                          "id": 8328,
                          "name": "_presaleRound",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8223,
                          "src": "12289:13:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "12267:36:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_PresaleData_$7661_storage",
                          "typeString": "struct Presale.PresaleData storage ref"
                        }
                      },
                      "id": 8330,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "startingTime",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7654,
                      "src": "12267:49:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8331,
                      "name": "_startingTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8225,
                      "src": "12319:13:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12267:65:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8333,
                  "nodeType": "ExpressionStatement",
                  "src": "12267:65:46"
                },
                {
                  "expression": {
                    "id": 8339,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 8334,
                          "name": "presaleDetailsMapping",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7722,
                          "src": "12342:21:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$7661_storage_$",
                            "typeString": "mapping(uint256 => struct Presale.PresaleData storage ref)"
                          }
                        },
                        "id": 8336,
                        "indexExpression": {
                          "id": 8335,
                          "name": "_presaleRound",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8223,
                          "src": "12364:13:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "12342:36:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_PresaleData_$7661_storage",
                          "typeString": "struct Presale.PresaleData storage ref"
                        }
                      },
                      "id": 8337,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "usdPrice",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7656,
                      "src": "12342:45:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8338,
                      "name": "_usdPrice",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8227,
                      "src": "12390:9:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12342:57:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8340,
                  "nodeType": "ExpressionStatement",
                  "src": "12342:57:46"
                },
                {
                  "expression": {
                    "id": 8346,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 8341,
                          "name": "presaleDetailsMapping",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7722,
                          "src": "12409:21:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$7661_storage_$",
                            "typeString": "mapping(uint256 => struct Presale.PresaleData storage ref)"
                          }
                        },
                        "id": 8343,
                        "indexExpression": {
                          "id": 8342,
                          "name": "_presaleRound",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8223,
                          "src": "12431:13:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "12409:36:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_PresaleData_$7661_storage",
                          "typeString": "struct Presale.PresaleData storage ref"
                        }
                      },
                      "id": 8344,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "minimumUSDPurchase",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7658,
                      "src": "12409:68:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8345,
                      "name": "_minimumUSDPurchase",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8229,
                      "src": "12480:19:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12409:90:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8347,
                  "nodeType": "ExpressionStatement",
                  "src": "12409:90:46"
                },
                {
                  "expression": {
                    "id": 8353,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 8348,
                          "name": "presaleDetailsMapping",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7722,
                          "src": "12509:21:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$7661_storage_$",
                            "typeString": "mapping(uint256 => struct Presale.PresaleData storage ref)"
                          }
                        },
                        "id": 8350,
                        "indexExpression": {
                          "id": 8349,
                          "name": "_presaleRound",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8223,
                          "src": "12531:13:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "12509:36:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_PresaleData_$7661_storage",
                          "typeString": "struct Presale.PresaleData storage ref"
                        }
                      },
                      "id": 8351,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "maximumPresaleAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7660,
                      "src": "12509:70:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8352,
                      "name": "_maximumPresaleAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8231,
                      "src": "12582:21:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12509:94:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8354,
                  "nodeType": "ExpressionStatement",
                  "src": "12509:94:46"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 8356,
                        "name": "_presaleRound",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8223,
                        "src": "12652:13:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 8357,
                        "name": "_startingTime",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8225,
                        "src": "12679:13:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 8358,
                        "name": "_usdPrice",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8227,
                        "src": "12706:9:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 8359,
                        "name": "_minimumUSDPurchase",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8229,
                        "src": "12729:19:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 8360,
                        "name": "_maximumPresaleAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8231,
                        "src": "12762:21:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8355,
                      "name": "PresaleRoundUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7688,
                      "src": "12619:19:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256,uint256,uint256,uint256)"
                      }
                    },
                    "id": 8361,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12619:174:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8362,
                  "nodeType": "EmitStatement",
                  "src": "12614:179:46"
                }
              ]
            },
            "documentation": {
              "id": 8221,
              "nodeType": "StructuredDocumentation",
              "src": "10236:435:46",
              "text": " @dev Creating/Updating a presale round information\n @param _presaleRound - The presale round chosen\n @param _startingTime - The starting Presale time\n @param _usdPrice - The USD Price of the Token in certain Presale Round\n @param _minimumUSDPurchase - The minimum USD amount to purchase the token\n @param _maximumPresaleAmount - The maximum amount of token available for a presale round"
            },
            "functionSelector": "c829d1db",
            "id": 8364,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8234,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8233,
                  "name": "onlyOwner",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 474,
                  "src": "10879:9:46"
                },
                "nodeType": "ModifierInvocation",
                "src": "10879:9:46"
              }
            ],
            "name": "setPresaleRound",
            "nameLocation": "10685:15:46",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8232,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8223,
                  "mutability": "mutable",
                  "name": "_presaleRound",
                  "nameLocation": "10718:13:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 8364,
                  "src": "10710:21:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8222,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10710:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8225,
                  "mutability": "mutable",
                  "name": "_startingTime",
                  "nameLocation": "10749:13:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 8364,
                  "src": "10741:21:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8224,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10741:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8227,
                  "mutability": "mutable",
                  "name": "_usdPrice",
                  "nameLocation": "10780:9:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 8364,
                  "src": "10772:17:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8226,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10772:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8229,
                  "mutability": "mutable",
                  "name": "_minimumUSDPurchase",
                  "nameLocation": "10807:19:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 8364,
                  "src": "10799:27:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8228,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10799:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8231,
                  "mutability": "mutable",
                  "name": "_maximumPresaleAmount",
                  "nameLocation": "10844:21:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 8364,
                  "src": "10836:29:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8230,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10836:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10700:171:46"
            },
            "returnParameters": {
              "id": 8235,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10889:0:46"
            },
            "scope": 8365,
            "src": "10676:2124:46",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 8366,
        "src": "515:12287:46",
        "usedErrors": [
          7733,
          7735,
          7737,
          7739,
          7741,
          7743,
          7745,
          7747,
          7749,
          7751,
          7753
        ]
      }
    ],
    "src": "38:12765:46"
  },
  "compiler": {
    "name": "solc",
    "version": "0.8.11+commit.d7f03943.Emscripten.clang"
  },
  "networks": {
    "250": {
      "events": {
        "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "previousOwner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "newOwner",
              "type": "address"
            }
          ],
          "name": "OwnershipTransferred",
          "type": "event"
        },
        "0x5e50721573a3d3c427f04e866bbc258f046cad12af9fe4a334736b200773d677": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "endingTime",
              "type": "uint256"
            }
          ],
          "name": "PresaleEndingTimeUpdated",
          "type": "event"
        },
        "0x0808e27b4009f59d9d966410b0eead8697b72a10434291d723d6200ab3f343e5": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "address",
              "name": "tokenAddress",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "bool",
              "name": "tokenAvailability",
              "type": "bool"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "aggregatorAddress",
              "type": "address"
            }
          ],
          "name": "PresalePaymentTokenUpdated",
          "type": "event"
        },
        "0xb3df4b02428d73d6993c686e78b4a35e95f5be7d084aaee9277115379dc4ca93": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "address",
              "name": "receiverAddress",
              "type": "address"
            }
          ],
          "name": "PresaleReceiverUpdated",
          "type": "event"
        },
        "0x5460f1c76402b41ef0b7902b6b577fd351a2a6bc531d4a246d8be68dde775a2b": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "uint256",
              "name": "presaleRound",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "startingTime",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "usdPrice",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "minimumUSDPurchase",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "maximumPresaleAmount",
              "type": "uint256"
            }
          ],
          "name": "PresaleRoundUpdated",
          "type": "event"
        },
        "0xee1a99df2103f0b252dbc99d29264423a2ff1bb9c2f60dc19903e2ce82989b8b": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "address",
              "name": "tokenAddress",
              "type": "address"
            }
          ],
          "name": "PresaleTokenUpdated",
          "type": "event"
        },
        "0x69902df1d9bae4b2a08b9e9d689906299b4b15ac10fbbf560d019b5c73fd35d6": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "paymentTokenAddress",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "paymentTokenamount",
              "type": "uint256"
            }
          ],
          "name": "TokenPresold",
          "type": "event"
        }
      },
      "links": {},
      "address": "0xB26bFB82e37A07D267A3379158D72429da45125b",
      "transactionHash": "0x12b33be2e785df4b6e24f8a8a6993d076625310b18cde22537b4735554e7b5fc"
    }
  },
  "schemaVersion": "3.4.4",
  "updatedAt": "2022-03-07T00:41:22.480Z",
  "networkType": "ethereum",
  "devdoc": {
    "kind": "dev",
    "methods": {
      "getCurrentPresaleDetails()": {
        "details": "Getting the Current Presale Details, including:",
        "returns": {
          "_0": "Starting Time",
          "_1": "USD Price",
          "_2": "Minimum USD Purchase",
          "_3": "Maximum Presale Amount"
        }
      },
      "getCurrentPresaleRound()": {
        "details": "Get Current Presale Round"
      },
      "getPresaleAmountByRound(uint256)": {
        "details": "Get presale total amount By presale round",
        "params": {
          "_presaleRound": "- The presale round chosen"
        }
      },
      "getTotalPresaleAmount()": {
        "details": "Get total amount of presale from all rounds"
      },
      "getTotalPresaleRound()": {
        "details": "Get total amount of presale round"
      },
      "owner()": {
        "details": "Returns the address of the current owner."
      },
      "presaleTokens(address,uint256)": {
        "details": "Execute the Presale of ALPS Token in exchange of other token",
        "params": {
          "_amount": "- Amount denominated in the `paymentTokenAddress` being paid",
          "_paymentTokenAddress": "- Address of the token use to pay (address 0 is for native token)"
        }
      },
      "renounceOwnership()": {
        "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
      },
      "setEndingTime(uint256)": {
        "details": "Set new Ending time",
        "params": {
          "_newEndingTime": "- New Ending Timestamp"
        }
      },
      "setPresalePaymentToken(address,bool,address)": {
        "details": "Set Presale Payment Token Info",
        "params": {
          "_aggregatorAddress": "- Chainlink's Aggregator Address to determine the USD price (for `presaleTokens`)",
          "_tokenAddress": "- Token Address use to purchase Presale",
          "_tokenAvailability": "- Indication whether Token Address can be used for Presale"
        }
      },
      "setPresaleReceiver(address)": {
        "details": "Set new Presale Receiver Address",
        "params": {
          "_newPresaleReceiver": "- Address that'll receive the presale payment token"
        }
      },
      "setPresaleRound(uint256,uint256,uint256,uint256,uint256)": {
        "details": "Creating/Updating a presale round information",
        "params": {
          "_maximumPresaleAmount": "- The maximum amount of token available for a presale round",
          "_minimumUSDPurchase": "- The minimum USD amount to purchase the token",
          "_presaleRound": "- The presale round chosen",
          "_startingTime": "- The starting Presale time",
          "_usdPrice": "- The USD Price of the Token in certain Presale Round"
        }
      },
      "setPresaleTokenAddress(address)": {
        "details": "Set new Presale Token Address",
        "params": {
          "_newTokenAddress": "- Address of token that'll be presaled"
        }
      },
      "transferOwnership(address)": {
        "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
      }
    },
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  }
}