{
  "contractName": "KEther",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "invokeTo",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "invokeValue",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "invokeDataHash",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "underlyingAmount",
          "type": "uint256"
        }
      ],
      "name": "Invocation",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "minter",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "kTokenAmount",
          "type": "uint256"
        }
      ],
      "name": "Mint",
      "type": "event"
    },
    {
      "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": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "redeemer",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "kTokenAmount",
          "type": "uint256"
        }
      ],
      "name": "Redeem",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "poolReward",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "platformReward",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "tokenAddress",
          "type": "address"
        }
      ],
      "name": "Reward",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "stateMutability": "payable",
      "type": "fallback"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "balanceOfUnderlying",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenAmount",
          "type": "uint256"
        }
      ],
      "name": "calculateRepaymentAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "currentRepaymentAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "currentSender",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "currentTokenAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "currentTokenAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "subtractedValue",
          "type": "uint256"
        }
      ],
      "name": "decreaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "addedValue",
          "type": "uint256"
        }
      ],
      "name": "increaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "invokeTo",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "invokeData",
          "type": "bytes"
        },
        {
          "internalType": "uint256",
          "name": "underlyingAmount",
          "type": "uint256"
        }
      ],
      "name": "invoke",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isKToken",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isUnderlyingEther",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "mint",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "nativeAmount",
          "type": "uint256"
        }
      ],
      "name": "nativeAmountToUnderlyingAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "paused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "platformReward",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "platformVaultAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "poolReward",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "kTokenAmount",
          "type": "uint256"
        }
      ],
      "name": "redeem",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenAmount",
          "type": "uint256"
        }
      ],
      "name": "redeemUnderlying",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "platformRewardBips",
          "type": "uint256"
        }
      ],
      "name": "setPlatformReward",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newPlatformVaultAddress",
          "type": "address"
        }
      ],
      "name": "setPlatformVaultAddress",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "poolRewardBips",
          "type": "uint256"
        }
      ],
      "name": "setPoolReward",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalReserve",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "underlying",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "underlyingAmount",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "ceil",
          "type": "bool"
        }
      ],
      "name": "underlyingAmountToNativeAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unpause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.7.3+commit.9bfce1f6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"invokeTo\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"invokeValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"invokeDataHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"underlyingAmount\",\"type\":\"uint256\"}],\"name\":\"Invocation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"kTokenAmount\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"type\":\"event\"},{\"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\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"redeemer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"kTokenAmount\",\"type\":\"uint256\"}],\"name\":\"Redeem\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"poolReward\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"platformReward\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"Reward\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOfUnderlying\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"}],\"name\":\"calculateRepaymentAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentRepaymentAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentSender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentTokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentTokenAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"invokeTo\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"invokeData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"underlyingAmount\",\"type\":\"uint256\"}],\"name\":\"invoke\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isKToken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isUnderlyingEther\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"nativeAmount\",\"type\":\"uint256\"}],\"name\":\"nativeAmountToUnderlyingAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"platformReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"platformVaultAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"poolReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"kTokenAmount\",\"type\":\"uint256\"}],\"name\":\"redeem\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"}],\"name\":\"redeemUnderlying\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"platformRewardBips\",\"type\":\"uint256\"}],\"name\":\"setPlatformReward\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newPlatformVaultAddress\",\"type\":\"address\"}],\"name\":\"setPlatformVaultAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolRewardBips\",\"type\":\"uint256\"}],\"name\":\"setPoolReward\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalReserve\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"underlying\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"underlyingAmount\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"ceil\",\"type\":\"bool\"}],\"name\":\"underlyingAmountToNativeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5,05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is called. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"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.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `amount`. - the caller must have allowance for ``sender``'s tokens of at least `amount`.\"},\"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\":{\"/Users/andrekorol/src/kollateral/protocol/contracts/ktoken/KEther.sol\":\"KEther\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/andrekorol/src/kollateral/protocol/contracts/common/invoke/IInvocationHook.sol\":{\"keccak256\":\"0x36fb31db8a8e7eed7038b37554582655826969a556005d8ee3ab5070fe034860\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://e0dde70be03ea1e086a5bce0d3a7bb1ac65549eab7ea2618343255332edddca7\",\"dweb:/ipfs/QmVaQG686g3tbgM3L3mtw4ei1WxzcDRcS9UxipSt4KCYs1\"]},\"/Users/andrekorol/src/kollateral/protocol/contracts/common/invoke/IInvokable.sol\":{\"keccak256\":\"0x372bca80a3e9d20439e9bf88cc026d6d1ec01556463e902511c67b6fc92e12d5\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://a5e6b5ef4246d03871bbd44b34e1212a9567d963f1b1e8e58e6273709442d4fb\",\"dweb:/ipfs/Qmb5Es45FLS4hhNGb9md3KU7L7hyMW7HHzumrVfsZZgxgC\"]},\"/Users/andrekorol/src/kollateral/protocol/contracts/common/utils/ExtendedMath.sol\":{\"keccak256\":\"0x5ced249631b5dfe431f449d725d9f318b01ab0785306ca5e73cdf43760ab271a\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://3f3aef65abfcc02e451ad27a849caba0e6375abb26e28e7605928d19d561c3dd\",\"dweb:/ipfs/QmY5zMeH5x3QMS5xkxkY3DH4SDPWLGJyfPk1R8wPJXH9vr\"]},\"/Users/andrekorol/src/kollateral/protocol/contracts/common/utils/ExternalCaller.sol\":{\"keccak256\":\"0x54f88a1f0ac5dd7ab99a0519124cb09f1e19b4efb9baf240bc2500f8caa0b4ff\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://3170671378d20b47498224d065e33fccc223ae772d7f0af2c5ef314f94b75c98\",\"dweb:/ipfs/Qme8ZEEBnBG5Vvj8uyJCD2YVPcLx6funKsSSCpGkTyn1zi\"]},\"/Users/andrekorol/src/kollateral/protocol/contracts/ktoken/KEther.sol\":{\"keccak256\":\"0xde2d559ea26b44003fc409b3429841cfe1a01f4548eabc58e6aee4b430fb91ad\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://bcbc33adc06aabf0276647a69d54793e81260121525df45772e9cd732b08d976\",\"dweb:/ipfs/QmX1R4soMQAQuEycdaPBG2E9RnJjEbXgyFaU7q6v1eg2Uf\"]},\"/Users/andrekorol/src/kollateral/protocol/contracts/ktoken/KToken.sol\":{\"keccak256\":\"0xc8c0d9869f316491406bc2d135d00682926f2a4b62fe1e3a6daf5b37515bbe8b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://856af08828c3a5516a4018bdd2ed93eea5c02e60305bbc7e31fd8bd46446a97b\",\"dweb:/ipfs/QmVFroDk751zBN2fM6TiwCyhUinzGt2sRPwT3DUhnVgczU\"]},\"/Users/andrekorol/src/kollateral/protocol/contracts/token/CollateralizedEther.sol\":{\"keccak256\":\"0x2a74a69e11a8a843f818b3a9834dca858a44519471d23e136a535937f099a521\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://bf6103f0cb1efa175fd4a8417c61a0c27e42781b7f46aadf2ea8ad6c754232df\",\"dweb:/ipfs/QmPz9NJNvroLUAsPzeaUSN8vq7ZGz18DjBaLWiA9gjqsXb\"]},\"/Users/andrekorol/src/kollateral/protocol/contracts/token/CollateralizedToken.sol\":{\"keccak256\":\"0xfaaaa4324c6cc78d9d1268426eb04fe41d8584ade05bbf22eac4875ecdf174d7\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1e4149a0ecd14003c261b2243adfc19d7a009c83c32341ebdd6a8929c0bdd14d\",\"dweb:/ipfs/QmQbySda22WBU4oycYfrTye1RsJuz1Ub74ksoST7PeegHW\"]},\"/Users/andrekorol/src/kollateral/protocol/contracts/token/UnlimitedApprovalErc20.sol\":{\"keccak256\":\"0x407178fcd78f0a19d705e64aaaa26ae997d228f077f3cf6833f9f3eb31c72308\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://097906cbe6f8f35ba1763bd122d551ec302f45cf677021bbcdb8a55c706940d9\",\"dweb:/ipfs/QmVh7kcUWsXt3QApppB1njhGHfzdP813KSTUF6bh3VCmMM\"]},\"@openzeppelin/contracts/GSN/Context.sol\":{\"keccak256\":\"0x910a2e625b71168563edf9eeef55a50d6d699acfe27ceba3921f291829a8f938\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://248246ac66e6479dce1ad7d4945ec5540c98ceb09881e93c93f7c48d5772925c\",\"dweb:/ipfs/QmXr8tmUiZgEYid6ixeeBRmTdUnASWjKzhP3KRxMPy8fRt\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0x46d2453e9db55eae25c9abdae2c42229086c54f1a6a247e8ce32658bb785f6ae\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://198ef77ef5d9f7a7709d6bbfba1d4d54d82ccc15358e9dced37f1376dac887fa\",\"dweb:/ipfs/QmQHFvCA74s3AHU3NMn4AAYzFTt6UotWq7yk3WzLQs1oJS\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0xba96bc371ba999f452985a98717cca1e4c4abb598dc038a9a9c3db08129b1ba4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://26e50e3f7b6482fb6f598f2e006994a74aa492687daa4b3eee7fd4fb5398ce7f\",\"dweb:/ipfs/QmZudqoPSkA4USLMFsBBmt19dDPZFS8aaAmL5R7pECXu6t\"]},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x482b6d82ba1c9c73758ae15068a438361d4187b7a4e342db17ef0f828cb5e21a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://89725e56bc9c6cfb69521ceaa4a489561b928e930b71e30db85b24024c1c2c03\",\"dweb:/ipfs/QmNvpotZA1Fe48msV6TShSTVxeQ2dkaDS9MTKP4bNxyUG3\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xbd74f587ab9b9711801baf667db1426e4a03fd2d7f15af33e0e0d0394e7cef76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2d0913dfbfce90d170df0d496ad7596c0778518e5fa7aba6c32562522546f66b\",\"dweb:/ipfs/QmR6B8nLj2PJf5e1JWD9Nk7ErkAwkqUwadCnvE82FJr1RU\"]},\"@openzeppelin/contracts/utils/Pausable.sol\":{\"keccak256\":\"0x2a245b797741f05f91212b1c2155a1b99a8884e6fd4c27953c4d3073732737f8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://76325ec3159cd859da98cab114513ec81095fa38e1412ffffb9b789bf14d6b38\",\"dweb:/ipfs/QmNdE2779u3DdRczjpx6RoevVa9kVJsCyEfnXWjkUw79jo\"]},\"@openzeppelin/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0x1153f6dd334c01566417b8c551122450542a2b75a2bbb379d59a8c320ed6da28\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://002b4e5c26a2a069ba42486b83bf9c4b5461f3d5def32f9ef52b0aef8905d6d2\",\"dweb:/ipfs/QmPG44XDF4npiqRzzGvqJroDtUKfcR78wcreQ9bXa6guW6\"]}},\"version\":1}",
  "bytecode": "0x60806040523480156200001157600080fd5b5060016040518060400160405280601081526020017f4b6f6c6c61746572616c204574686572000000000000000000000000000000008152506040518060400160405280600481526020017f6b4554480000000000000000000000000000000000000000000000000000000081525081600390805190602001906200009892919062000224565b508060049080519060200190620000b192919062000224565b506012600560006101000a81548160ff021916908360ff1602179055505050600160068190555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505060006200012c620001fe60201b60201c565b905080600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000600860146101000a81548160ff021916908315150217905550620001f860126200020660201b60201c565b620002ca565b600033905090565b80600560006101000a81548160ff021916908360ff16021790555050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200026757805160ff191683800117855562000298565b8280016001018555821562000298579182015b82811115620002975782518255916020019190600101906200027a565b5b509050620002a79190620002ab565b5090565b5b80821115620002c6576000816000905550600101620002ac565b5090565b613b4280620002da6000396000f3fe6080604052600436106102345760003560e01c806370a082311161012e578063b1197239116100ab578063f2fde38b1161006f578063f2fde38b14610cab578063f35a37aa14610cfc578063fe6551b614610d37578063fef10b9514610d62578063ff69ac3614610d8d5761023b565b8063b119723914610ae6578063b15287db14610b35578063b255158914610b84578063db006a7514610bd5578063dd62ed3e14610c265761023b565b80638da5cb5b116100f25780638da5cb5b1461089057806395d89b41146108d15780639e976db114610961578063a457c2d714610a04578063a9059cbb14610a755761023b565b806370a0823114610751578063715018a6146107b6578063807b9d42146107cd5780638456cb5914610828578063852a12e31461083f5761023b565b806339509351116101bc5780635c975abb116101805780635c975abb146106365780635f39e93a146106635780636f27e9d8146106a45780636f307dc3146106cf57806370348f3e146107105761023b565b806339509351146104f15780633af9e669146105625780633f4ba83a146105c75780634c68df67146105de57806356c04b3b146106095761023b565b80631249c58b116102035780631249c58b146103ba57806318160ddd146103da57806323b872dd1461040557806329d9109c14610496578063313ce567146104c35761023b565b8063046e79131461023d57806306fdde0314610278578063095ea7b31461030857806311eefd5d146103795761023b565b3661023b57005b005b34801561024957600080fd5b506102766004803603602081101561026057600080fd5b8101908080359060200190929190505050610db8565b005b34801561028457600080fd5b5061028d610e8c565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102cd5780820151818401526020810190506102b2565b50505050905090810190601f1680156102fa5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561031457600080fd5b506103616004803603604081101561032b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f2e565b60405180821515815260200191505060405180910390f35b34801561038557600080fd5b5061038e610f4c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103c2610f76565b60405180821515815260200191505060405180910390f35b3480156103e657600080fd5b506103ef610f86565b6040518082815260200191505060405180910390f35b34801561041157600080fd5b5061047e6004803603606081101561042857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f90565b60405180821515815260200191505060405180910390f35b3480156104a257600080fd5b506104ab61102e565b60405180821515815260200191505060405180910390f35b3480156104cf57600080fd5b506104d8611037565b604051808260ff16815260200191505060405180910390f35b3480156104fd57600080fd5b5061054a6004803603604081101561051457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061104e565b60405180821515815260200191505060405180910390f35b34801561056e57600080fd5b506105b16004803603602081101561058557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611101565b6040518082815260200191505060405180910390f35b3480156105d357600080fd5b506105dc61111b565b005b3480156105ea57600080fd5b506105f3611271565b6040518082815260200191505060405180910390f35b34801561061557600080fd5b5061061e611279565b60405180821515815260200191505060405180910390f35b34801561064257600080fd5b5061064b611282565b60405180821515815260200191505060405180910390f35b34801561066f57600080fd5b50610678611299565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106b057600080fd5b506106b96112c3565b6040518082815260200191505060405180910390f35b3480156106db57600080fd5b506106e46112e6565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561071c57600080fd5b50610725611310565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561075d57600080fd5b506107a06004803603602081101561077457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061133a565b6040518082815260200191505060405180910390f35b3480156107c257600080fd5b506107cb611382565b005b3480156107d957600080fd5b50610812600480360360408110156107f057600080fd5b810190808035906020019092919080351515906020019092919050505061150d565b6040518082815260200191505060405180910390f35b34801561083457600080fd5b5061083d611523565b005b34801561084b57600080fd5b506108786004803603602081101561086257600080fd5b810190808035906020019092919050505061167a565b60405180821515815260200191505060405180910390f35b34801561089c57600080fd5b506108a5611715565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156108dd57600080fd5b506108e661173f565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561092657808201518184015260208101905061090b565b50505050905090810190601f1680156109535780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610a026004803603606081101561097757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156109b457600080fd5b8201836020820111156109c657600080fd5b803590602001918460018302840111640100000000831117156109e857600080fd5b9091929391929390803590602001909291905050506117e1565b005b348015610a1057600080fd5b50610a5d60048036036040811015610a2757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611cb2565b60405180821515815260200191505060405180910390f35b348015610a8157600080fd5b50610ace60048036036040811015610a9857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611d7f565b60405180821515815260200191505060405180910390f35b348015610af257600080fd5b50610b1f60048036036020811015610b0957600080fd5b8101908080359060200190929190505050611d9d565b6040518082815260200191505060405180910390f35b348015610b4157600080fd5b50610b6e60048036036020811015610b5857600080fd5b8101908080359060200190929190505050611ddb565b6040518082815260200191505060405180910390f35b348015610b9057600080fd5b50610bd360048036036020811015610ba757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e30565b005b348015610be157600080fd5b50610c0e60048036036020811015610bf857600080fd5b8101908080359060200190929190505050611f3e565b60405180821515815260200191505060405180910390f35b348015610c3257600080fd5b50610c9560048036036040811015610c4957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611fd5565b6040518082815260200191505060405180910390f35b348015610cb757600080fd5b50610cfa60048036036020811015610cce57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061205c565b005b348015610d0857600080fd5b50610d3560048036036020811015610d1f57600080fd5b810190808035906020019092919050505061226c565b005b348015610d4357600080fd5b50610d4c612340565b6040518082815260200191505060405180910390f35b348015610d6e57600080fd5b50610d7761234a565b6040518082815260200191505060405180910390f35b348015610d9957600080fd5b50610da2612354565b6040518082815260200191505060405180910390f35b610dc061235e565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e82576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060098190555050565b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f245780601f10610ef957610100808354040283529160200191610f24565b820191906000526020600020905b815481529060010190602001808311610f0757829003601f168201915b5050505050905090565b6000610f42610f3b61235e565b8484612366565b6001905092915050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000610f813461255d565b905090565b6000600254905090565b6000610f9d848484612694565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610fcf85610fca61235e565b611fd5565b146110235761102284610fe061235e565b61101d856040518060600160405280603981526020016139a46039913961100e8a61100961235e565b611fd5565b6129559092919063ffffffff16565b612366565b5b600190509392505050565b60006001905090565b6000600560009054906101000a900460ff16905090565b60006110f761105b61235e565b846110f2856001600061106c61235e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a1590919063ffffffff16565b612366565b6001905092915050565b600061111461110f8361133a565b611ddb565b9050919050565b61112361235e565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600860149054906101000a900460ff16611267576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b61126f612a9d565b565b600047905090565b60006001905090565b6000600860149054906101000a900460ff16905090565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006112e16112d0611271565b600e54612b9090919063ffffffff16565b905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61138a61235e565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461144c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061151b83836000612bda565b905092915050565b61152b61235e565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600860149054906101000a900460ff1615611670576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b611678612c54565b565b600080611685611271565b116116f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f436f6c6c61746572616c697a6564546f6b656e3a206e6f20726573657276650081525060200191505060405180910390fd5b61170e826117098460016000612bda565b612d48565b9050919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156117d75780601f106117ac576101008083540402835291602001916117d7565b820191906000526020600020905b8154815290600101906020018083116117ba57829003601f168201915b5050505050905090565b6002600654141561185a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600681905550600860149054906101000a900460ff16156118e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561196a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806139316023913960400191505060405180910390fd5b600061198d611977612ea3565b61197f611271565b612b9090919063ffffffff16565b90506119a3338361199e8486612eab565b612eea565b6119ad8583612f3e565b611a02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806139fe602c913960400191505060405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff166309c5eabe3486866040518463ffffffff1660e01b815260040180806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505093505050506000604051808303818588803b158015611a8157600080fd5b505af1158015611a95573d6000803e3d6000fd5b50505050507f75f9f0d535d12ed7059cfbe33ce52e574c3d3e46557966f2338095976688ac9d85348686604051808383808284378083019250505092505050604051809103902085604051808573ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200194505050505060405180910390a1600e54611b28611271565b14611b9b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4b546f6b656e3a20696e636f727265637420656e64696e672062616c616e636581525060200191505060405180910390fd5b6000611ba683612fca565b9050611bd4600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612f3e565b611c29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613a9a602a913960400191505060405180910390fd5b7faab4527149d32aa1e134471eee25c0c019ab961e93f6604ca89353c17a3eb60f611c5384612ffc565b82611c5c6112e6565b604051808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a1611ca26000806000612eea565b5050600160068190555050505050565b6000611d75611cbf61235e565b84611d7085604051806060016040528060258152602001613ae86025913960016000611ce961235e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129559092919063ffffffff16565b612366565b6001905092915050565b6000611d93611d8c61235e565b8484612694565b6001905092915050565b6000611dd4611dab83612fca565b611dc6611db785612ffc565b85612a1590919063ffffffff16565b612a1590919063ffffffff16565b9050919050565b600080611de6610f86565b1415611df55760009050611e2b565b611e28611e00610f86565b611e1a611e0b611271565b8561302e90919063ffffffff16565b6130b490919063ffffffff16565b90505b919050565b611e3861235e565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611efa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080611f49610f86565b11611fbc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f436f6c6c61746572616c697a6564546f6b656e3a206e6f20737570706c79000081525060200191505060405180910390fd5b611fce611fc883611ddb565b83612d48565b9050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61206461235e565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612126576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806138e96026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61227461235e565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612336576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600a8190555050565b6000600a54905090565b6000600954905090565b6000600d54905090565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123ec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613ac46024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612472576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061390f6022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b6000600260065414156125d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60026006819055506000806125fd846125ef611271565b612b9090919063ffffffff16565b1115612617576126108360006001612bda565b905061261b565b8290505b61262533826130fe565b7f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f338483604051808473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a160019150506001600681905550919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561271a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180613a756025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806138a46023913960400191505060405180910390fd5b6127ab8383836132c5565b61281681604051806060016040528060268152602001613954602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129559092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506128a9816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a1590919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000838311158290612a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156129c75780820151818401526020810190506129ac565b50505050905090810190601f1680156129f45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080828401905083811015612a93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600860149054906101000a900460ff16612b1f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b6000600860146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612b6361235e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b6000612bd283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612955565b905092915050565b600080612be5611271565b1415612bf45760009050612c4d565b600082612c0857612c03611271565b612c23565b612c2285612c14611271565b612b9090919063ffffffff16565b5b9050612c49612c42612c33610f86565b8761302e90919063ffffffff16565b82866132ca565b9150505b9392505050565b600860149054906101000a900460ff1615612cd7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6001600860146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612d1b61235e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b600060026006541415612dc3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600681905550612dd5338361332b565b612ddf3384612f3e565b612e34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613a4b602a913960400191505060405180910390fd5b7fe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a929338484604051808473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a160019050600160068190555092915050565b600034905090565b6000612ee2612eb983612fca565b612ed4612ec585612ffc565b86612a1590919063ffffffff16565b612a1590919063ffffffff16565b905092915050565b82600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600d8190555080600e81905550505050565b600081471015612fb6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4b45746865723a206e6f7420656e6f7567682065746865722062616c616e636581525060200191505060405180910390fd5b612fc083836134ef565b6001905092915050565b6000612ff5612710612fe7600a548561302e90919063ffffffff16565b6130b490919063ffffffff16565b9050919050565b60006130276127106130196009548561302e90919063ffffffff16565b6130b490919063ffffffff16565b9050919050565b60008083141561304157600090506130ae565b600082840290508284828161305257fe5b04146130a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806139dd6021913960400191505060405180910390fd5b809150505b92915050565b60006130f683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613566565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156131a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b6131ad600083836132c5565b6131c281600254612a1590919063ffffffff16565b600281905550613219816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a1590919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b505050565b6000806132e084866130b490919063ffffffff16565b9050828015613302575060006132ff858761362c90919063ffffffff16565b14155b61330c5780613321565b613320600182612a1590919063ffffffff16565b5b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133b1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613a2a6021913960400191505060405180910390fd5b6133bd826000836132c5565b613428816040518060600160405280602281526020016138c7602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129559092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061347f81600254612b9090919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b80471015613548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061397a602a913960400191505060405180910390fd5b613562828260405180602001604052806000815250613676565b5050565b60008083118290613612576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156135d75780820151818401526020810190506135bc565b50505050905090810190601f1680156136045780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161361e57fe5b049050809150509392505050565b600061366e83836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f00000000000000008152506137e2565b905092915050565b600060608473ffffffffffffffffffffffffffffffffffffffff1684846040518082805190602001908083835b602083106136c657805182526020820191506020810190506020830392506136a3565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613728576040519150601f19603f3d011682016040523d82523d6000602084013e61372d565b606091505b50915091508181906137da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561379f578082015181840152602081019050613784565b50505050905090810190601f1680156137cc5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050505050565b600080831415829061388f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613854578082015181840152602081019050613839565b50505050905090810190601f1680156138815780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5082848161389957fe5b069050939250505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573734b546f6b656e3a2063616e6e6f7420696e766f6b65207468697320636f6e747261637445524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545787465726e616c43616c6c65723a20696e73756666696369656e742065746865722062616c616e6365556e6c696d69746564417070726f76616c45726332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774b546f6b656e3a20756e61626c6520746f207472616e7366657220696e766f636174696f6e20616d6f756e7445524332303a206275726e2066726f6d20746865207a65726f2061646472657373436f6c6c61746572616c697a6564546f6b656e3a20746f6b656e207472616e73666572206661696c656445524332303a207472616e736665722066726f6d20746865207a65726f20616464726573734b546f6b656e3a20756e61626c6520746f207472616e7366657220706c6174666f726d2072657761726445524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220867d48957497fd816cc955e27545a4d57d427dc311fe7c2d0e2ebd14acc1d1ce64736f6c63430007030033",
  "deployedBytecode": "0x6080604052600436106102345760003560e01c806370a082311161012e578063b1197239116100ab578063f2fde38b1161006f578063f2fde38b14610cab578063f35a37aa14610cfc578063fe6551b614610d37578063fef10b9514610d62578063ff69ac3614610d8d5761023b565b8063b119723914610ae6578063b15287db14610b35578063b255158914610b84578063db006a7514610bd5578063dd62ed3e14610c265761023b565b80638da5cb5b116100f25780638da5cb5b1461089057806395d89b41146108d15780639e976db114610961578063a457c2d714610a04578063a9059cbb14610a755761023b565b806370a0823114610751578063715018a6146107b6578063807b9d42146107cd5780638456cb5914610828578063852a12e31461083f5761023b565b806339509351116101bc5780635c975abb116101805780635c975abb146106365780635f39e93a146106635780636f27e9d8146106a45780636f307dc3146106cf57806370348f3e146107105761023b565b806339509351146104f15780633af9e669146105625780633f4ba83a146105c75780634c68df67146105de57806356c04b3b146106095761023b565b80631249c58b116102035780631249c58b146103ba57806318160ddd146103da57806323b872dd1461040557806329d9109c14610496578063313ce567146104c35761023b565b8063046e79131461023d57806306fdde0314610278578063095ea7b31461030857806311eefd5d146103795761023b565b3661023b57005b005b34801561024957600080fd5b506102766004803603602081101561026057600080fd5b8101908080359060200190929190505050610db8565b005b34801561028457600080fd5b5061028d610e8c565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102cd5780820151818401526020810190506102b2565b50505050905090810190601f1680156102fa5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561031457600080fd5b506103616004803603604081101561032b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f2e565b60405180821515815260200191505060405180910390f35b34801561038557600080fd5b5061038e610f4c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103c2610f76565b60405180821515815260200191505060405180910390f35b3480156103e657600080fd5b506103ef610f86565b6040518082815260200191505060405180910390f35b34801561041157600080fd5b5061047e6004803603606081101561042857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f90565b60405180821515815260200191505060405180910390f35b3480156104a257600080fd5b506104ab61102e565b60405180821515815260200191505060405180910390f35b3480156104cf57600080fd5b506104d8611037565b604051808260ff16815260200191505060405180910390f35b3480156104fd57600080fd5b5061054a6004803603604081101561051457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061104e565b60405180821515815260200191505060405180910390f35b34801561056e57600080fd5b506105b16004803603602081101561058557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611101565b6040518082815260200191505060405180910390f35b3480156105d357600080fd5b506105dc61111b565b005b3480156105ea57600080fd5b506105f3611271565b6040518082815260200191505060405180910390f35b34801561061557600080fd5b5061061e611279565b60405180821515815260200191505060405180910390f35b34801561064257600080fd5b5061064b611282565b60405180821515815260200191505060405180910390f35b34801561066f57600080fd5b50610678611299565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106b057600080fd5b506106b96112c3565b6040518082815260200191505060405180910390f35b3480156106db57600080fd5b506106e46112e6565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561071c57600080fd5b50610725611310565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561075d57600080fd5b506107a06004803603602081101561077457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061133a565b6040518082815260200191505060405180910390f35b3480156107c257600080fd5b506107cb611382565b005b3480156107d957600080fd5b50610812600480360360408110156107f057600080fd5b810190808035906020019092919080351515906020019092919050505061150d565b6040518082815260200191505060405180910390f35b34801561083457600080fd5b5061083d611523565b005b34801561084b57600080fd5b506108786004803603602081101561086257600080fd5b810190808035906020019092919050505061167a565b60405180821515815260200191505060405180910390f35b34801561089c57600080fd5b506108a5611715565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156108dd57600080fd5b506108e661173f565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561092657808201518184015260208101905061090b565b50505050905090810190601f1680156109535780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610a026004803603606081101561097757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156109b457600080fd5b8201836020820111156109c657600080fd5b803590602001918460018302840111640100000000831117156109e857600080fd5b9091929391929390803590602001909291905050506117e1565b005b348015610a1057600080fd5b50610a5d60048036036040811015610a2757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611cb2565b60405180821515815260200191505060405180910390f35b348015610a8157600080fd5b50610ace60048036036040811015610a9857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611d7f565b60405180821515815260200191505060405180910390f35b348015610af257600080fd5b50610b1f60048036036020811015610b0957600080fd5b8101908080359060200190929190505050611d9d565b6040518082815260200191505060405180910390f35b348015610b4157600080fd5b50610b6e60048036036020811015610b5857600080fd5b8101908080359060200190929190505050611ddb565b6040518082815260200191505060405180910390f35b348015610b9057600080fd5b50610bd360048036036020811015610ba757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e30565b005b348015610be157600080fd5b50610c0e60048036036020811015610bf857600080fd5b8101908080359060200190929190505050611f3e565b60405180821515815260200191505060405180910390f35b348015610c3257600080fd5b50610c9560048036036040811015610c4957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611fd5565b6040518082815260200191505060405180910390f35b348015610cb757600080fd5b50610cfa60048036036020811015610cce57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061205c565b005b348015610d0857600080fd5b50610d3560048036036020811015610d1f57600080fd5b810190808035906020019092919050505061226c565b005b348015610d4357600080fd5b50610d4c612340565b6040518082815260200191505060405180910390f35b348015610d6e57600080fd5b50610d7761234a565b6040518082815260200191505060405180910390f35b348015610d9957600080fd5b50610da2612354565b6040518082815260200191505060405180910390f35b610dc061235e565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e82576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060098190555050565b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f245780601f10610ef957610100808354040283529160200191610f24565b820191906000526020600020905b815481529060010190602001808311610f0757829003601f168201915b5050505050905090565b6000610f42610f3b61235e565b8484612366565b6001905092915050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000610f813461255d565b905090565b6000600254905090565b6000610f9d848484612694565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610fcf85610fca61235e565b611fd5565b146110235761102284610fe061235e565b61101d856040518060600160405280603981526020016139a46039913961100e8a61100961235e565b611fd5565b6129559092919063ffffffff16565b612366565b5b600190509392505050565b60006001905090565b6000600560009054906101000a900460ff16905090565b60006110f761105b61235e565b846110f2856001600061106c61235e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a1590919063ffffffff16565b612366565b6001905092915050565b600061111461110f8361133a565b611ddb565b9050919050565b61112361235e565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600860149054906101000a900460ff16611267576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b61126f612a9d565b565b600047905090565b60006001905090565b6000600860149054906101000a900460ff16905090565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006112e16112d0611271565b600e54612b9090919063ffffffff16565b905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61138a61235e565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461144c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061151b83836000612bda565b905092915050565b61152b61235e565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600860149054906101000a900460ff1615611670576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b611678612c54565b565b600080611685611271565b116116f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f436f6c6c61746572616c697a6564546f6b656e3a206e6f20726573657276650081525060200191505060405180910390fd5b61170e826117098460016000612bda565b612d48565b9050919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156117d75780601f106117ac576101008083540402835291602001916117d7565b820191906000526020600020905b8154815290600101906020018083116117ba57829003601f168201915b5050505050905090565b6002600654141561185a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600681905550600860149054906101000a900460ff16156118e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561196a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806139316023913960400191505060405180910390fd5b600061198d611977612ea3565b61197f611271565b612b9090919063ffffffff16565b90506119a3338361199e8486612eab565b612eea565b6119ad8583612f3e565b611a02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806139fe602c913960400191505060405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff166309c5eabe3486866040518463ffffffff1660e01b815260040180806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505093505050506000604051808303818588803b158015611a8157600080fd5b505af1158015611a95573d6000803e3d6000fd5b50505050507f75f9f0d535d12ed7059cfbe33ce52e574c3d3e46557966f2338095976688ac9d85348686604051808383808284378083019250505092505050604051809103902085604051808573ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200194505050505060405180910390a1600e54611b28611271565b14611b9b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4b546f6b656e3a20696e636f727265637420656e64696e672062616c616e636581525060200191505060405180910390fd5b6000611ba683612fca565b9050611bd4600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612f3e565b611c29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613a9a602a913960400191505060405180910390fd5b7faab4527149d32aa1e134471eee25c0c019ab961e93f6604ca89353c17a3eb60f611c5384612ffc565b82611c5c6112e6565b604051808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a1611ca26000806000612eea565b5050600160068190555050505050565b6000611d75611cbf61235e565b84611d7085604051806060016040528060258152602001613ae86025913960016000611ce961235e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129559092919063ffffffff16565b612366565b6001905092915050565b6000611d93611d8c61235e565b8484612694565b6001905092915050565b6000611dd4611dab83612fca565b611dc6611db785612ffc565b85612a1590919063ffffffff16565b612a1590919063ffffffff16565b9050919050565b600080611de6610f86565b1415611df55760009050611e2b565b611e28611e00610f86565b611e1a611e0b611271565b8561302e90919063ffffffff16565b6130b490919063ffffffff16565b90505b919050565b611e3861235e565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611efa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080611f49610f86565b11611fbc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f436f6c6c61746572616c697a6564546f6b656e3a206e6f20737570706c79000081525060200191505060405180910390fd5b611fce611fc883611ddb565b83612d48565b9050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61206461235e565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612126576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806138e96026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61227461235e565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612336576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600a8190555050565b6000600a54905090565b6000600954905090565b6000600d54905090565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123ec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613ac46024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612472576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061390f6022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b6000600260065414156125d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60026006819055506000806125fd846125ef611271565b612b9090919063ffffffff16565b1115612617576126108360006001612bda565b905061261b565b8290505b61262533826130fe565b7f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f338483604051808473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a160019150506001600681905550919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561271a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180613a756025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806138a46023913960400191505060405180910390fd5b6127ab8383836132c5565b61281681604051806060016040528060268152602001613954602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129559092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506128a9816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a1590919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000838311158290612a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156129c75780820151818401526020810190506129ac565b50505050905090810190601f1680156129f45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080828401905083811015612a93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600860149054906101000a900460ff16612b1f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b6000600860146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612b6361235e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b6000612bd283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612955565b905092915050565b600080612be5611271565b1415612bf45760009050612c4d565b600082612c0857612c03611271565b612c23565b612c2285612c14611271565b612b9090919063ffffffff16565b5b9050612c49612c42612c33610f86565b8761302e90919063ffffffff16565b82866132ca565b9150505b9392505050565b600860149054906101000a900460ff1615612cd7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6001600860146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612d1b61235e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b600060026006541415612dc3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600681905550612dd5338361332b565b612ddf3384612f3e565b612e34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613a4b602a913960400191505060405180910390fd5b7fe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a929338484604051808473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a160019050600160068190555092915050565b600034905090565b6000612ee2612eb983612fca565b612ed4612ec585612ffc565b86612a1590919063ffffffff16565b612a1590919063ffffffff16565b905092915050565b82600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600d8190555080600e81905550505050565b600081471015612fb6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4b45746865723a206e6f7420656e6f7567682065746865722062616c616e636581525060200191505060405180910390fd5b612fc083836134ef565b6001905092915050565b6000612ff5612710612fe7600a548561302e90919063ffffffff16565b6130b490919063ffffffff16565b9050919050565b60006130276127106130196009548561302e90919063ffffffff16565b6130b490919063ffffffff16565b9050919050565b60008083141561304157600090506130ae565b600082840290508284828161305257fe5b04146130a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806139dd6021913960400191505060405180910390fd5b809150505b92915050565b60006130f683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613566565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156131a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b6131ad600083836132c5565b6131c281600254612a1590919063ffffffff16565b600281905550613219816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a1590919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b505050565b6000806132e084866130b490919063ffffffff16565b9050828015613302575060006132ff858761362c90919063ffffffff16565b14155b61330c5780613321565b613320600182612a1590919063ffffffff16565b5b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133b1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613a2a6021913960400191505060405180910390fd5b6133bd826000836132c5565b613428816040518060600160405280602281526020016138c7602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129559092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061347f81600254612b9090919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b80471015613548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061397a602a913960400191505060405180910390fd5b613562828260405180602001604052806000815250613676565b5050565b60008083118290613612576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156135d75780820151818401526020810190506135bc565b50505050905090810190601f1680156136045780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161361e57fe5b049050809150509392505050565b600061366e83836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f00000000000000008152506137e2565b905092915050565b600060608473ffffffffffffffffffffffffffffffffffffffff1684846040518082805190602001908083835b602083106136c657805182526020820191506020810190506020830392506136a3565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613728576040519150601f19603f3d011682016040523d82523d6000602084013e61372d565b606091505b50915091508181906137da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561379f578082015181840152602081019050613784565b50505050905090810190601f1680156137cc5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050505050565b600080831415829061388f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613854578082015181840152602081019050613839565b50505050905090810190601f1680156138815780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5082848161389957fe5b069050939250505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573734b546f6b656e3a2063616e6e6f7420696e766f6b65207468697320636f6e747261637445524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545787465726e616c43616c6c65723a20696e73756666696369656e742065746865722062616c616e6365556e6c696d69746564417070726f76616c45726332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774b546f6b656e3a20756e61626c6520746f207472616e7366657220696e766f636174696f6e20616d6f756e7445524332303a206275726e2066726f6d20746865207a65726f2061646472657373436f6c6c61746572616c697a6564546f6b656e3a20746f6b656e207472616e73666572206661696c656445524332303a207472616e736665722066726f6d20746865207a65726f20616464726573734b546f6b656e3a20756e61626c6520746f207472616e7366657220706c6174666f726d2072657761726445524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220867d48957497fd816cc955e27545a4d57d427dc311fe7c2d0e2ebd14acc1d1ce64736f6c63430007030033",
  "immutableReferences": {},
  "generatedSources": [],
  "deployedGeneratedSources": [],
  "sourceMap": "784:312:13:-:0;;;837:105;;;;;;;;;;957:1:35;1948:138:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2023:5;2015;:13;;;;;;;;;;;;:::i;:::-;;2048:7;2038;:17;;;;;;;;;;;;:::i;:::-;;2077:2;2065:9;;:14;;;;;;;;;;;;;;;;;;1948:138;;1637:1:44;1743:7;:22;;;;1252:10:36;1238:11;;:24;;;;;;;;;;;;;;;;;;1196:73;865:17:39;885:12;:10;;;:12;;:::i;:::-;865:32;;916:9;907:6;;:18;;;;;;;;;;;;;;;;;;973:9;940:43;;969:1;940:43;;;;;;;;;;;;840:150;933:5:43;923:7;;:15;;;;;;;;;;;;;;;;;;917:18:13::2;932:2;917:14;;;:18;;:::i;:::-;784:312:::0;;590:104:38;643:15;677:10;670:17;;590:104;:::o;9961:88:41:-;10033:9;10021;;:21;;;;;;;;;;;;;;;;;;9961:88;:::o;784:312:13:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;",
  "deployedSourceMap": "784:312:13:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6203:115:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2151:81:41;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4187:166;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;5795:107:14;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;969:95:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3194:98:41;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;863:558:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;5556:77:14;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3053:81:41;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;5532:215;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;4440:146:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6717:76:14;;;;;;;;;;;;;:::i;:::-;;1478:108:35;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1379:93;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1040:76:43;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;5441:109:14;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;6028:142;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4592:87:36;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;5685:104:14;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3350:117:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1689:145:39;;;;;;;;;;;;;:::i;:::-;;3248:302:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6636:75:14;;;;;;;;;;;;;:::i;:::-;;1607:318:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1066:77:39;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2345:85:41;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2028:1794:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6234:266:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3670:172;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;4957:272:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2980:262:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6461:169:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1313:288:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3900:149:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1983:240:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6324:131:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5334:101;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5235:93;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5908:114;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6203:115;1280:12:39;:10;:12::i;:::-;1270:22;;:6;;;;;;;;;;;:22;;;1262:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6297:14:14::1;6279:15;:32;;;;6203:115:::0;:::o;2151:81:41:-;2188:13;2220:5;2213:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2151:81;:::o;4187:166::-;4270:4;4286:39;4295:12;:10;:12::i;:::-;4309:7;4318:6;4286:8;:39::i;:::-;4342:4;4335:11;;4187:166;;;;:::o;5795:107:14:-;5858:7;5884:11;;;;;;;;;;;5877:18;;5795:107;:::o;969:95:35:-;1011:4;1034:23;1047:9;1034:12;:23::i;:::-;1027:30;;969:95;:::o;3194:98:41:-;3247:7;3273:12;;3266:19;;3194:98;:::o;863:558:37:-;999:4;1015:36;1025:6;1033:9;1044:6;1015:9;:36::i;:::-;1108:2;1065:31;1075:6;1083:12;:10;:12::i;:::-;1065:9;:31::i;:::-;:46;1061:333;;1127:256;1153:6;1177:12;:10;:12::i;:::-;1207:162;1264:6;1207:162;;;;;;;;;;;;;;;;;:31;1217:6;1225:12;:10;:12::i;:::-;1207:9;:31::i;:::-;:35;;:162;;;;;:::i;:::-;1127:8;:256::i;:::-;1061:333;1410:4;1403:11;;863:558;;;;;:::o;5556:77:14:-;5599:4;5622;5615:11;;5556:77;:::o;3053:81:41:-;3094:5;3118:9;;;;;;;;;;;3111:16;;3053:81;:::o;5532:215::-;5620:4;5636:83;5645:12;:10;:12::i;:::-;5659:7;5668:50;5707:10;5668:11;:25;5680:12;:10;:12::i;:::-;5668:25;;;;;;;;;;;;;;;:34;5694:7;5668:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;5636:8;:83::i;:::-;5736:4;5729:11;;5532:215;;;;:::o;4440:146:36:-;4505:7;4531:48;4562:16;4572:5;4562:9;:16::i;:::-;4531:30;:48::i;:::-;4524:55;;4440:146;;;:::o;6717:76:14:-;1280:12:39;:10;:12::i;:::-;1270:22;;:6;;;;;;;;;;;:22;;;1262:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1610:7:43::1;;;;;;;;;;;1602:40;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;6776:10:14::2;:8;:10::i;:::-;6717:76::o:0;1478:108:35:-;1532:7;1558:21;1551:28;;1478:108;:::o;1379:93::-;1438:4;1461;1454:11;;1379:93;:::o;1040:76:43:-;1079:4;1102:7;;;;;;;;;;;1095:14;;1040:76;:::o;5441:109:14:-;5496:7;5522:21;;;;;;;;;;;5515:28;;5441:109;:::o;6028:142::-;6094:7;6120:43;6148:14;:12;:14::i;:::-;6120:23;;:27;;:43;;;;:::i;:::-;6113:50;;6028:142;:::o;4592:87:36:-;4635:7;4661:11;;;;;;;;;;;4654:18;;4592:87;:::o;5685:104:14:-;5742:7;5768:14;;;;;;;;;;;5761:21;;5685:104;:::o;3350:117:41:-;3416:7;3442:9;:18;3452:7;3442:18;;;;;;;;;;;;;;;;3435:25;;3350:117;;;:::o;1689:145:39:-;1280:12;:10;:12::i;:::-;1270:22;;:6;;;;;;;;;;;:22;;;1262:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1795:1:::1;1758:40;;1779:6;;;;;;;;;;;1758:40;;;;;;;;;;;;1825:1;1808:6;;:19;;;;;;;;;;;;;;;;;;1689:145::o:0;3248:302:36:-;3370:7;3412:131;3468:16;3502:4;3524:5;3412:38;:131::i;:::-;3393:150;;3248:302;;;;:::o;6636:75:14:-;1280:12:39;:10;:12::i;:::-;1270:22;;:6;;;;;;;;;;;:22;;;1262:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1346:7:43::1;;;;;;;;;;;1345:8;1337:37;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;6696:8:14::2;:6;:8::i;:::-;6636:75::o:0;1607:318:36:-;1672:4;1713:1;1696:14;:12;:14::i;:::-;:18;1688:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1779:139;1811:11;1840:64;1879:11;1892:4;1898:5;1840:38;:64::i;:::-;1779:14;:139::i;:::-;1760:158;;1607:318;;;:::o;1066:77:39:-;1104:7;1130:6;;;;;;;;;;;1123:13;;1066:77;:::o;2345:85:41:-;2384:13;2416:7;2409:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2345:85;:::o;2028:1794:14:-;1680:1:44;2260:7;;:19;;2252:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1680:1;2390:7;:18;;;;1346:7:43::1;;;;;;;;;;;1345:8;1337:37;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;2240:4:14::2;2220:25;;:8;:25;;;;2199:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2375:23;2401:68;2433:26;:24;:26::i;:::-;2401:14;:12;:14::i;:::-;:18;;:68;;;;:::i;:::-;2375:94;;2479:155;2511:10;2535:16;2565:59;2590:15;2607:16;2565:24;:59::i;:::-;2479:18;:155::i;:::-;2758:46;2777:8;2787:16;2758:18;:46::i;:::-;2737:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2935:8;2924:28;;;2960:9;2971:10;;2924:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;2997:130;3021:8;3043:9;3076:10;;3066:21;;;;;;;;;;;;;;;;;;;;;;;;;;;3101:16;2997:130;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3239:23;;3221:14;:12;:14::i;:::-;:41;3200:120;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;3369:22;3394:41;3418:16;3394:23;:41::i;:::-;3369:66;;3467:57;3486:21;;;;;;;;;;;3509:14;3467:18;:57::i;:::-;3446:146;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3607:121;3627:37;3647:16;3627:19;:37::i;:::-;3678:14;3706:12;:10;:12::i;:::-;3607:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3779:36;3806:1;3810::::0;3813::::2;3779:18;:36::i;:::-;1384:1:43;;1637::44::0;2563:7;:22;;;;2028:1794:14;;;;:::o;6234:266:41:-;6327:4;6343:129;6352:12;:10;:12::i;:::-;6366:7;6375:96;6414:15;6375:96;;;;;;;;;;;;;;;;;:11;:25;6387:12;:10;:12::i;:::-;6375:25;;;;;;;;;;;;;;;:34;6401:7;6375:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;6343:8;:129::i;:::-;6489:4;6482:11;;6234:266;;;;:::o;3670:172::-;3756:4;3772:42;3782:12;:10;:12::i;:::-;3796:9;3807:6;3772:9;:42::i;:::-;3831:4;3824:11;;3670:172;;;;:::o;4957:272:14:-;5059:7;5101:121;5172:36;5196:11;5172:23;:36::i;:::-;5101:49;5117:32;5137:11;5117:19;:32::i;:::-;5101:11;:15;;:49;;;;:::i;:::-;:53;;:121;;;;:::i;:::-;5082:140;;4957:272;;;:::o;2980:262:36:-;3087:7;3131:1;3114:13;:11;:13::i;:::-;:18;3110:57;;;3155:1;3148:8;;;;3110:57;3184:51;3221:13;:11;:13::i;:::-;3184:32;3201:14;:12;:14::i;:::-;3184:12;:16;;:32;;;;:::i;:::-;:36;;:51;;;;:::i;:::-;3177:58;;2980:262;;;;:::o;6461:169:14:-;1280:12:39;:10;:12::i;:::-;1270:22;;:6;;;;;;;;;;;:22;;;1262:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6600:23:14::1;6576:21;;:47;;;;;;;;;;;;;;;;;;6461:169:::0;:::o;1313:288:36:-;1369:4;1409:1;1393:13;:11;:13::i;:::-;:17;1385:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1474:120;1506:44;1537:12;1506:30;:44::i;:::-;1568:12;1474:14;:120::i;:::-;1455:139;;1313:288;;;:::o;3900:149:41:-;3989:7;4015:11;:18;4027:5;4015:18;;;;;;;;;;;;;;;:27;4034:7;4015:27;;;;;;;;;;;;;;;;4008:34;;3900:149;;;;:::o;1983:240:39:-;1280:12;:10;:12::i;:::-;1270:22;;:6;;;;;;;;;;;:22;;;1262:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2091:1:::1;2071:22;;:8;:22;;;;2063:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2180:8;2151:38;;2172:6;;;;;;;;;;;2151:38;;;;;;;;;;;;2208:8;2199:6;;:17;;;;;;;;;;;;;;;;;;1983:240:::0;:::o;6324:131:14:-;1280:12:39;:10;:12::i;:::-;1270:22;;:6;;;;;;;;;;;:22;;;1262:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6430:18:14::1;6408:19;:40;;;;6324:131:::0;:::o;5334:101::-;5383:7;5409:19;;5402:26;;5334:101;:::o;5235:93::-;5280:7;5306:15;;5299:22;;5235:93;:::o;5908:114::-;5970:7;5996:19;;5989:26;;5908:114;:::o;590:104:38:-;643:15;677:10;670:17;;590:104;:::o;9298:340:41:-;9416:1;9399:19;;:5;:19;;;;9391:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9496:1;9477:21;;:7;:21;;;;9469:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9578:6;9548:11;:18;9560:5;9548:18;;;;;;;;;;;;;;;:27;9567:7;9548:27;;;;;;;;;;;;;;;:36;;;;9615:7;9599:32;;9608:5;9599:32;;;9624:6;9599:32;;;;;;;;;;;;;;;;;;9298:340;;;:::o;1931:486:36:-;2000:4;1680:1:44;2260:7;;:19;;2252:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1680:1;2390:7;:18;;;;2016:20:36::1;2079:1:::0;2050:26:::1;2069:6;2050:14;:12;:14::i;:::-;:18;;:26;;;;:::i;:::-;:30;2046:249;;;2111:121;2167:6;2191:5;2214:4;2111:38;:121::i;:::-;2096:136;;2046:249;;;2278:6;2263:21;;2046:249;2304:31;2310:10;2322:12;2304:5;:31::i;:::-;2350:38;2355:10;2367:6;2375:12;2350:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2406:4;2399:11;;;1637:1:44::0;2563:7;:22;;;;1931:486:36;;;:::o;6974:530:41:-;7097:1;7079:20;;:6;:20;;;;7071:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7180:1;7159:23;;:9;:23;;;;7151:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7233:47;7254:6;7262:9;7273:6;7233:20;:47::i;:::-;7311:71;7333:6;7311:71;;;;;;;;;;;;;;;;;:9;:17;7321:6;7311:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;7291:9;:17;7301:6;7291:17;;;;;;;;;;;;;;;:91;;;;7415:32;7440:6;7415:9;:20;7425:9;7415:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;7392:9;:20;7402:9;7392:20;;;;;;;;;;;;;;;:55;;;;7479:9;7462:35;;7471:6;7462:35;;;7490:6;7462:35;;;;;;;;;;;;;;;;;;6974:530;;;:::o;1746:187:40:-;1832:7;1864:1;1859;:6;;1867:12;1851:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1890:9;1906:1;1902;:5;1890:17;;1925:1;1918:8;;;1746:187;;;;;:::o;874:176::-;932:7;951:9;967:1;963;:5;951:17;;991:1;986;:6;;978:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1042:1;1035:8;;;874:176;;;;:::o;2042:117:43:-;1610:7;;;;;;;;;;;1602:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2110:5:::1;2100:7;;:15;;;;;;;;;;;;;;;;;;2130:22;2139:12;:10;:12::i;:::-;2130:22;;;;;;;;;;;;;;;;;;;;2042:117::o:0;1321:134:40:-;1379:7;1405:43;1409:1;1412;1405:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1398:50;;1321:134;;;;:::o;3556:740:36:-;3716:7;3757:1;3739:14;:12;:14::i;:::-;:19;3735:58;;;3781:1;3774:8;;;;3735:58;3904:28;3935:15;:95;;4016:14;:12;:14::i;:::-;3935:95;;;3965:36;3984:16;3965:14;:12;:14::i;:::-;:18;;:36;;;;:::i;:::-;3935:95;3904:126;;4151:138;4180:35;4201:13;:11;:13::i;:::-;4180:16;:20;;:35;;;;:::i;:::-;4233:20;4271:4;4151:11;:138::i;:::-;4132:157;;;3556:740;;;;;;:::o;1795:115:43:-;1346:7;;;;;;;;;;;1345:8;1337:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1864:4:::1;1854:7;;:14;;;;;;;;;;;;;;;;;;1883:20;1890:12;:10;:12::i;:::-;1883:20;;;;;;;;;;;;;;;;;;;;1795:115::o:0;2423:404:36:-;2545:4;1680:1:44;2260:7;;:19;;2252:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1680:1;2390:7;:18;;;;2565:31:36::1;2571:10;2583:12;2565:5;:31::i;:::-;2627:43;2646:10;2658:11;2627:18;:43::i;:::-;2606:132;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2753:45;2760:10;2772:11;2785:12;2753:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2816:4;2809:11;;1637:1:44::0;2563:7;:22;;;;2423:404:36;;;;:::o;948:146:13:-;1048:7;1078:9;1071:16;;948:146;:::o;4656:295:14:-;4781:7;4819:125;4894:36;4918:11;4894:23;:36::i;:::-;4819:53;4839:32;4859:11;4839:19;:32::i;:::-;4819:15;:19;;:53;;;;:::i;:::-;:57;;:125;;;;:::i;:::-;4800:144;;4656:295;;;;:::o;3971:305::-;4148:13;4131:14;;:30;;;;;;;;;;;;;;;;;;4193:18;4171:19;:40;;;;4247:22;4221:23;:48;;;;3971:305;;;:::o;1070:303:35:-;1177:4;1243:6;1218:21;:31;;1197:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1317:28;1334:2;1338:6;1317:16;:28::i;:::-;1362:4;1355:11;;1070:303;;;;:::o;4465:185:14:-;4566:7;4596:47;4637:5;4596:36;4612:19;;4596:11;:15;;:36;;;;:::i;:::-;:40;;:47;;;;:::i;:::-;4589:54;;4465:185;;;:::o;4282:177::-;4379:7;4409:43;4446:5;4409:32;4425:15;;4409:11;:15;;:32;;;;:::i;:::-;:36;;:43;;;;:::i;:::-;4402:50;;4282:177;;;:::o;2180:459:40:-;2238:7;2484:1;2479;:6;2475:45;;;2508:1;2501:8;;;;2475:45;2530:9;2546:1;2542;:5;2530:17;;2574:1;2569;2565;:5;;;;;;:10;2557:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2631:1;2624:8;;;2180:459;;;;;:::o;3101:130::-;3159:7;3185:39;3189:1;3192;3185:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;3178:46;;3101:130;;;;:::o;7775:370:41:-;7877:1;7858:21;;:7;:21;;;;7850:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7926:49;7955:1;7959:7;7968:6;7926:20;:49::i;:::-;8001:24;8018:6;8001:12;;:16;;:24;;;;:::i;:::-;7986:12;:39;;;;8056:30;8079:6;8056:9;:18;8066:7;8056:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;8035:9;:18;8045:7;8035:18;;;;;;;;;;;;;;;:51;;;;8122:7;8101:37;;8118:1;8101:37;;;8131:6;8101:37;;;;;;;;;;;;;;;;;;7775:370;;:::o;10636:92::-;;;;:::o;830:226:8:-;940:7;959:13;975:8;981:1;975;:5;;:8;;;;:::i;:::-;959:24;;1001:7;:24;;;;;1024:1;1012:8;1018:1;1012;:5;;:8;;;;:::i;:::-;:13;;1001:24;1000:49;;1044:5;1000:49;;;1029:12;1039:1;1029:5;:9;;:12;;;;:::i;:::-;1000:49;993:56;;;830:226;;;;;:::o;8465:410:41:-;8567:1;8548:21;;:7;:21;;;;8540:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8618:49;8639:7;8656:1;8660:6;8618:20;:49::i;:::-;8699:68;8722:6;8699:68;;;;;;;;;;;;;;;;;:9;:18;8709:7;8699:18;;;;;;;;;;;;;;;;:22;;:68;;;;;:::i;:::-;8678:9;:18;8688:7;8678:18;;;;;;;;;;;;;;;:89;;;;8792:24;8809:6;8792:12;;:16;;:24;;;;:::i;:::-;8777:12;:39;;;;8857:1;8831:37;;8840:7;8831:37;;;8861:6;8831:37;;;;;;;;;;;;;;;;;;8465:410;;:::o;695:240:9:-;815:6;790:21;:31;;769:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;899:29;912:3;917:6;899:29;;;;;;;;;;;;:12;:29::i;:::-;695:240;;:::o;3713:272:40:-;3799:7;3830:1;3826;:5;3833:12;3818:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3856:9;3872:1;3868;:5;;;;;;3856:17;;3977:1;3970:8;;;3713:272;;;;;:::o;4436:128::-;4494:7;4520:37;4524:1;4527;4520:37;;;;;;;;;;;;;;;;;:3;:37::i;:::-;4513:44;;4436:128;;;;:::o;941:267:9:-;1062:12;1076:23;1103:3;:8;;1119:6;1140:5;1103:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1061:94;;;;1173:7;1189:10;1165:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;941:267;;;;;:::o;5035:163:40:-;5121:7;5153:1;5148;:6;;5156:12;5140:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5190:1;5186;:5;;;;;;5179:12;;5035:163;;;;;:::o",
  "source": "/*\n\n    Copyright 2020 Kollateral LLC.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n*/\n\n// SPDX-License-Identifier: Apache-2.0\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\nimport \"./KToken.sol\";\nimport \"../token/CollateralizedEther.sol\";\n\ncontract KEther is KToken, CollateralizedEther {\n    constructor() CollateralizedEther() ERC20(\"Kollateral Ether\", \"kETH\") {\n        _setupDecimals(18);\n    }\n\n    function payableReserveAdjustment()\n        internal\n        view\n        override\n        returns (uint256)\n    {\n        return msg.value;\n    }\n}\n",
  "sourcePath": "/Users/andrekorol/src/kollateral/protocol/contracts/ktoken/KEther.sol",
  "ast": {
    "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/ktoken/KEther.sol",
    "exportedSymbols": {
      "CollateralizedEther": [
        4894
      ],
      "CollateralizedToken": [
        5197
      ],
      "Context": [
        5279
      ],
      "ERC20": [
        6087
      ],
      "ExtendedMath": [
        1506
      ],
      "ExternalCaller": [
        1563
      ],
      "IERC20": [
        6165
      ],
      "IInvocationHook": [
        1170
      ],
      "IInvokable": [
        1178
      ],
      "KEther": [
        1716
      ],
      "KToken": [
        2115
      ],
      "Ownable": [
        5388
      ],
      "Pausable": [
        6255
      ],
      "ReentrancyGuard": [
        6295
      ],
      "SafeMath": [
        5584
      ],
      "UnlimitedApprovalErc20": [
        5256
      ]
    },
    "id": 1717,
    "license": "Apache-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1684,
        "literals": [
          "solidity",
          "^",
          "0.7",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "640:23:13"
      },
      {
        "absolutePath": "@openzeppelin/contracts/math/SafeMath.sol",
        "file": "@openzeppelin/contracts/math/SafeMath.sol",
        "id": 1685,
        "nodeType": "ImportDirective",
        "scope": 1717,
        "sourceUnit": 5585,
        "src": "665:51:13",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/ktoken/KToken.sol",
        "file": "./KToken.sol",
        "id": 1686,
        "nodeType": "ImportDirective",
        "scope": 1717,
        "sourceUnit": 2116,
        "src": "717:22:13",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/token/CollateralizedEther.sol",
        "file": "../token/CollateralizedEther.sol",
        "id": 1687,
        "nodeType": "ImportDirective",
        "scope": 1717,
        "sourceUnit": 4895,
        "src": "740:42:13",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 1688,
              "name": "KToken",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2115,
              "src": "803:6:13",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_KToken_$2115",
                "typeString": "contract KToken"
              }
            },
            "id": 1689,
            "nodeType": "InheritanceSpecifier",
            "src": "803:6:13"
          },
          {
            "baseName": {
              "id": 1690,
              "name": "CollateralizedEther",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4894,
              "src": "811:19:13",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_CollateralizedEther_$4894",
                "typeString": "contract CollateralizedEther"
              }
            },
            "id": 1691,
            "nodeType": "InheritanceSpecifier",
            "src": "811:19:13"
          }
        ],
        "contractDependencies": [
          1170,
          1506,
          1563,
          2115,
          4894,
          5197,
          5256,
          5279,
          5388,
          6087,
          6165,
          6255,
          6295
        ],
        "contractKind": "contract",
        "fullyImplemented": true,
        "id": 1716,
        "linearizedBaseContracts": [
          1716,
          4894,
          1563,
          2115,
          6255,
          5388,
          5197,
          1506,
          6295,
          5256,
          6087,
          6165,
          5279,
          1170
        ],
        "name": "KEther",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 1704,
              "nodeType": "Block",
              "src": "907:35:13",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "3138",
                        "id": 1701,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "932:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_18_by_1",
                          "typeString": "int_const 18"
                        },
                        "value": "18"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_18_by_1",
                          "typeString": "int_const 18"
                        }
                      ],
                      "id": 1700,
                      "name": "_setupDecimals",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6075,
                      "src": "917:14:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint8_$returns$__$",
                        "typeString": "function (uint8)"
                      }
                    },
                    "id": 1702,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "917:18:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1703,
                  "nodeType": "ExpressionStatement",
                  "src": "917:18:13"
                }
              ]
            },
            "id": 1705,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [],
                "id": 1694,
                "modifierName": {
                  "id": 1693,
                  "name": "CollateralizedEther",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4894,
                  "src": "851:19:13",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_CollateralizedEther_$4894_$",
                    "typeString": "type(contract CollateralizedEther)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "851:21:13"
              },
              {
                "arguments": [
                  {
                    "hexValue": "4b6f6c6c61746572616c204574686572",
                    "id": 1696,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "879:18:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_cbb9d763612a96db0587d7013fe95c48a1641f7413a79a76fceceb10897bbf6f",
                      "typeString": "literal_string \"Kollateral Ether\""
                    },
                    "value": "Kollateral Ether"
                  },
                  {
                    "hexValue": "6b455448",
                    "id": 1697,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "899:6:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_e7cbc0ff4035309f71987d099a88ed33ef6bfd1a7d6c1050befb12561b95eb9c",
                      "typeString": "literal_string \"kETH\""
                    },
                    "value": "kETH"
                  }
                ],
                "id": 1698,
                "modifierName": {
                  "id": 1695,
                  "name": "ERC20",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6087,
                  "src": "873:5:13",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_ERC20_$6087_$",
                    "typeString": "type(contract ERC20)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "873:33:13"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1692,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "848:2:13"
            },
            "returnParameters": {
              "id": 1699,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "907:0:13"
            },
            "scope": 1716,
            "src": "837:105:13",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              1888
            ],
            "body": {
              "id": 1714,
              "nodeType": "Block",
              "src": "1061:33:13",
              "statements": [
                {
                  "expression": {
                    "expression": {
                      "id": 1711,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -15,
                      "src": "1078:3:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 1712,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "value",
                    "nodeType": "MemberAccess",
                    "src": "1078:9:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1710,
                  "id": 1713,
                  "nodeType": "Return",
                  "src": "1071:16:13"
                }
              ]
            },
            "id": 1715,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "payableReserveAdjustment",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 1707,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1022:8:13"
            },
            "parameters": {
              "id": 1706,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "981:2:13"
            },
            "returnParameters": {
              "id": 1710,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1709,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1715,
                  "src": "1048:7:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1708,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1048:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1047:9:13"
            },
            "scope": 1716,
            "src": "948:146:13",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 1717,
        "src": "784:312:13"
      }
    ],
    "src": "640:457:13"
  },
  "legacyAST": {
    "attributes": {
      "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/ktoken/KEther.sol",
      "exportedSymbols": {
        "CollateralizedEther": [
          4894
        ],
        "CollateralizedToken": [
          5197
        ],
        "Context": [
          5279
        ],
        "ERC20": [
          6087
        ],
        "ExtendedMath": [
          1506
        ],
        "ExternalCaller": [
          1563
        ],
        "IERC20": [
          6165
        ],
        "IInvocationHook": [
          1170
        ],
        "IInvokable": [
          1178
        ],
        "KEther": [
          1716
        ],
        "KToken": [
          2115
        ],
        "Ownable": [
          5388
        ],
        "Pausable": [
          6255
        ],
        "ReentrancyGuard": [
          6295
        ],
        "SafeMath": [
          5584
        ],
        "UnlimitedApprovalErc20": [
          5256
        ]
      },
      "license": "Apache-2.0"
    },
    "children": [
      {
        "attributes": {
          "literals": [
            "solidity",
            "^",
            "0.7",
            ".0"
          ]
        },
        "id": 1684,
        "name": "PragmaDirective",
        "src": "640:23:13"
      },
      {
        "attributes": {
          "SourceUnit": 5585,
          "absolutePath": "@openzeppelin/contracts/math/SafeMath.sol",
          "file": "@openzeppelin/contracts/math/SafeMath.sol",
          "scope": 1717,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 1685,
        "name": "ImportDirective",
        "src": "665:51:13"
      },
      {
        "attributes": {
          "SourceUnit": 2116,
          "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/ktoken/KToken.sol",
          "file": "./KToken.sol",
          "scope": 1717,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 1686,
        "name": "ImportDirective",
        "src": "717:22:13"
      },
      {
        "attributes": {
          "SourceUnit": 4895,
          "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/token/CollateralizedEther.sol",
          "file": "../token/CollateralizedEther.sol",
          "scope": 1717,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 1687,
        "name": "ImportDirective",
        "src": "740:42:13"
      },
      {
        "attributes": {
          "abstract": false,
          "contractDependencies": [
            1170,
            1506,
            1563,
            2115,
            4894,
            5197,
            5256,
            5279,
            5388,
            6087,
            6165,
            6255,
            6295
          ],
          "contractKind": "contract",
          "fullyImplemented": true,
          "linearizedBaseContracts": [
            1716,
            4894,
            1563,
            2115,
            6255,
            5388,
            5197,
            1506,
            6295,
            5256,
            6087,
            6165,
            5279,
            1170
          ],
          "name": "KEther",
          "scope": 1717
        },
        "children": [
          {
            "attributes": {},
            "children": [
              {
                "attributes": {
                  "name": "KToken",
                  "referencedDeclaration": 2115,
                  "type": "contract KToken"
                },
                "id": 1688,
                "name": "UserDefinedTypeName",
                "src": "803:6:13"
              }
            ],
            "id": 1689,
            "name": "InheritanceSpecifier",
            "src": "803:6:13"
          },
          {
            "attributes": {},
            "children": [
              {
                "attributes": {
                  "name": "CollateralizedEther",
                  "referencedDeclaration": 4894,
                  "type": "contract CollateralizedEther"
                },
                "id": 1690,
                "name": "UserDefinedTypeName",
                "src": "811:19:13"
              }
            ],
            "id": 1691,
            "name": "InheritanceSpecifier",
            "src": "811:19:13"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": true,
              "kind": "constructor",
              "name": "",
              "scope": 1716,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 1692,
                "name": "ParameterList",
                "src": "848:2:13"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 1699,
                "name": "ParameterList",
                "src": "907:0:13"
              },
              {
                "attributes": {
                  "arguments": [
                    null
                  ]
                },
                "children": [
                  {
                    "attributes": {
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 4894,
                      "type": "type(contract CollateralizedEther)",
                      "value": "CollateralizedEther"
                    },
                    "id": 1693,
                    "name": "Identifier",
                    "src": "851:19:13"
                  }
                ],
                "id": 1694,
                "name": "ModifierInvocation",
                "src": "851:21:13"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 6087,
                      "type": "type(contract ERC20)",
                      "value": "ERC20"
                    },
                    "id": 1695,
                    "name": "Identifier",
                    "src": "873:5:13"
                  },
                  {
                    "attributes": {
                      "hexvalue": "4b6f6c6c61746572616c204574686572",
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "token": "string",
                      "type": "literal_string \"Kollateral Ether\"",
                      "value": "Kollateral Ether"
                    },
                    "id": 1696,
                    "name": "Literal",
                    "src": "879:18:13"
                  },
                  {
                    "attributes": {
                      "hexvalue": "6b455448",
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "token": "string",
                      "type": "literal_string \"kETH\"",
                      "value": "kETH"
                    },
                    "id": 1697,
                    "name": "Literal",
                    "src": "899:6:13"
                  }
                ],
                "id": 1698,
                "name": "ModifierInvocation",
                "src": "873:33:13"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_18_by_1",
                                  "typeString": "int_const 18"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6075,
                              "type": "function (uint8)",
                              "value": "_setupDecimals"
                            },
                            "id": 1700,
                            "name": "Identifier",
                            "src": "917:14:13"
                          },
                          {
                            "attributes": {
                              "hexvalue": "3138",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "number",
                              "type": "int_const 18",
                              "value": "18"
                            },
                            "id": 1701,
                            "name": "Literal",
                            "src": "932:2:13"
                          }
                        ],
                        "id": 1702,
                        "name": "FunctionCall",
                        "src": "917:18:13"
                      }
                    ],
                    "id": 1703,
                    "name": "ExpressionStatement",
                    "src": "917:18:13"
                  }
                ],
                "id": 1704,
                "name": "Block",
                "src": "907:35:13"
              }
            ],
            "id": 1705,
            "name": "FunctionDefinition",
            "src": "837:105:13"
          },
          {
            "attributes": {
              "baseFunctions": [
                1888
              ],
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "payableReserveAdjustment",
              "scope": 1716,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 1707,
                "name": "OverrideSpecifier",
                "src": "1022:8:13"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 1706,
                "name": "ParameterList",
                "src": "981:2:13"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 1715,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1708,
                        "name": "ElementaryTypeName",
                        "src": "1048:7:13"
                      }
                    ],
                    "id": 1709,
                    "name": "VariableDeclaration",
                    "src": "1048:7:13"
                  }
                ],
                "id": 1710,
                "name": "ParameterList",
                "src": "1047:9:13"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 1710
                    },
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "member_name": "value",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": -15,
                              "type": "msg",
                              "value": "msg"
                            },
                            "id": 1711,
                            "name": "Identifier",
                            "src": "1078:3:13"
                          }
                        ],
                        "id": 1712,
                        "name": "MemberAccess",
                        "src": "1078:9:13"
                      }
                    ],
                    "id": 1713,
                    "name": "Return",
                    "src": "1071:16:13"
                  }
                ],
                "id": 1714,
                "name": "Block",
                "src": "1061:33:13"
              }
            ],
            "id": 1715,
            "name": "FunctionDefinition",
            "src": "948:146:13"
          }
        ],
        "id": 1716,
        "name": "ContractDefinition",
        "src": "784:312:13"
      }
    ],
    "id": 1717,
    "name": "SourceUnit",
    "src": "640:457:13"
  },
  "compiler": {
    "name": "solc",
    "version": "0.7.3+commit.9bfce1f6.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.3.3",
  "updatedAt": "2021-02-01T23:13:33.207Z",
  "devdoc": {
    "kind": "dev",
    "methods": {
      "allowance(address,address)": {
        "details": "See {IERC20-allowance}."
      },
      "approve(address,uint256)": {
        "details": "See {IERC20-approve}. Requirements: - `spender` cannot be the zero address."
      },
      "balanceOf(address)": {
        "details": "See {IERC20-balanceOf}."
      },
      "decimals()": {
        "details": "Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5,05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is called. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."
      },
      "decreaseAllowance(address,uint256)": {
        "details": "Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`."
      },
      "increaseAllowance(address,uint256)": {
        "details": "Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address."
      },
      "name()": {
        "details": "Returns the name of the token."
      },
      "owner()": {
        "details": "Returns the address of the current owner."
      },
      "paused()": {
        "details": "Returns true if the contract is paused, and false otherwise."
      },
      "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."
      },
      "symbol()": {
        "details": "Returns the symbol of the token, usually a shorter version of the name."
      },
      "totalSupply()": {
        "details": "See {IERC20-totalSupply}."
      },
      "transfer(address,uint256)": {
        "details": "See {IERC20-transfer}. Requirements: - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`."
      },
      "transferFrom(address,address,uint256)": {
        "details": "See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `amount`. - the caller must have allowance for ``sender``'s tokens of at least `amount`."
      },
      "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
  }
}