[ { "inputs": [ { "internalType": "address", "name": "ethPriceSourceAddress", "type": "address" }, { "internalType": "uint256", "name": "minimumCollateralPercentage", "type": "uint256" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "symbol", "type": "string" }, { "internalType": "address", "name": "_mai", "type": "address" }, { "internalType": "address", "name": "_collateral", "type": "address" }, { "internalType": "string", "name": "baseURI", "type": "string" } ], "payable": false, "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "approved", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "vaultID", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "BorrowToken", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "vaultID", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "creator", "type": "address" } ], "name": "CreateVault", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "vaultID", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "DepositCollateral", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "vaultID", "type": "uint256" } ], "name": "DestroyVault", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "vaultID", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "address", "name": "buyer", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "debtRepaid", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "collateralLiquidated", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "closingFee", "type": "uint256" } ], "name": "LiquidateVault", "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": "uint256", "name": "vaultID", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "closingFee", "type": "uint256" } ], "name": "PayBackToken", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "vaultID", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "from", "type": "address" }, { "indexed": false, "internalType": "address", "name": "to", "type": "address" } ], "name": "TransferVault", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "vaultID", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "WithdrawCollateral", "type": "event" }, { "constant": true, "inputs": [], "name": "_minimumCollateralPercentage", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "baseURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "uint256", "name": "vaultID", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "borrowToken", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "uint256", "name": "amountToken", "type": "uint256" } ], "name": "burn", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "cfDelta", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "ethPriceSourceAddress", "type": "address" } ], "name": "changeEthPriceSource", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "uint256", "name": "vaultID", "type": "uint256" } ], "name": "checkCollateralPercentage", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "uint256", "name": "vaultID", "type": "uint256" } ], "name": "checkCost", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "uint256", "name": "vaultID", "type": "uint256" } ], "name": "checkExtract", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "uint256", "name": "vaultID", "type": "uint256" } ], "name": "checkLiquidation", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "closingFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "collateral", "outputs": [ { "internalType": "contract ERC20Detailed", "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [], "name": "createVault", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "debtRatio", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "uint256", "name": "vaultID", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "depositCollateral", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "uint256", "name": "vaultID", "type": "uint256" } ], "name": "destroyVault", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "ethPriceSource", "outputs": [ { "internalType": "contract IPriceSource", "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "uint256", "name": "vaultID", "type": "uint256" } ], "name": "exists", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "gainRatio", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "getClosingFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "getDebtCeiling", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "getEthPriceSource", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [], "name": "getPaid", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "getTokenPriceSource", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "isOwner", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "uint256", "name": "vaultID", "type": "uint256" } ], "name": "liquidateVault", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "mai", "outputs": [ { "internalType": "contract ERC20Detailed", "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "maticDebt", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "minDebt", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "uint256", "name": "vaultID", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "payBackToken", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "priceSourceDecimals", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [], "name": "renounceOwnership", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "safeTransferFrom", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "uint256", "name": "_debtRatio", "type": "uint256" } ], "name": "setDebtRatio", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "uint256", "name": "_gainRatio", "type": "uint256" } ], "name": "setGainRatio", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "uint256", "name": "minimumCollateralPercentage", "type": "uint256" } ], "name": "setMinCollateralRatio", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "uint256", "name": "_minDebt", "type": "uint256" } ], "name": "setMinDebt", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "_pool", "type": "address" } ], "name": "setStabilityPool", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "string", "name": "_uri", "type": "string" } ], "name": "setTokenURI", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "uint256", "name": "_treasury", "type": "uint256" } ], "name": "setTreasury", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "stabilityPool", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenOfOwnerByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "tokenPeg", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "totalBorrowed", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "treasury", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "uri", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "vaultCollateral", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "vaultCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "vaultDebt", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "version", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "uint256", "name": "vaultID", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "withdrawCollateral", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" } ]
6080604052601f805460ff191660031790553480156200001e57600080fd5b5060405162004fd038038062004fd0833981810160405260e08110156200004457600080fd5b815160208301516040808501805191519395929483019291846401000000008211156200007057600080fd5b9083019060208201858111156200008657600080fd5b8251640100000000811182820188101715620000a157600080fd5b82525081516020918201929091019080838360005b83811015620000d0578181015183820152602001620000b6565b50505050905090810190601f168015620000fe5780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200012257600080fd5b9083019060208201858111156200013857600080fd5b82516401000000008111828201881017156200015357600080fd5b82525081516020918201929091019080838360005b838110156200018257818101518382015260200162000168565b50505050905090810190601f168015620001b05780820380516001836020036101000a031916815260200191505b50604081815260208301519083015160609093018051919593949293929184640100000000821115620001e257600080fd5b908301906020820185811115620001f857600080fd5b82516401000000008111828201881017156200021357600080fd5b82525081516020918201929091019080838360005b838110156200024257818101518382015260200162000228565b50505050905090810190601f168015620002705780820380516001836020036101000a031916815260200191505b5060405250506000805460ff19166001179055508686868686868684848282828181620002ad6301ffc9a760e01b6001600160e01b036200064c16565b620002c86380ac58cd60e01b6001600160e01b036200064c16565b620002e363780e9d6360e01b6001600160e01b036200064c16565b8151620002f890600a906020850190620007c5565b5080516200030e90600b906020840190620007c5565b506200032a635b5e139f60e01b6001600160e01b036200064c16565b50508251620003439250600e91506020840190620007c5565b505050506001600160a01b0387166200035857fe5b856200036057fe5b6032601255600f80546001600160a01b03808a166001600160a01b031992831617909255601a8054821690556305f5e100601555600260185561044c6019556010889055601b8054858416908316179055601c8054868416921691909117908190556040805163313ce56760e01b81529051919092169163313ce567916004808301926020929190829003018186803b158015620003fd57600080fd5b505afa15801562000412573d6000803e3d6000fd5b505050506040513d60208110156200042957600080fd5b5051601b546040805163313ce56760e01b8152905160ff909316926001600160a01b039092169163313ce56791600480820192602092909190829003018186803b1580156200047757600080fd5b505afa1580156200048c573d6000803e3d6000fd5b505050506040513d6020811015620004a357600080fd5b505160ff161015620005c157601b546040805163313ce56760e01b81529051620005b5926001600160a01b03169163313ce567916004808301926020929190829003018186803b158015620004f757600080fd5b505afa1580156200050c573d6000803e3d6000fd5b505050506040513d60208110156200052357600080fd5b5051601c546040805163313ce56760e01b8152905160ff909316926001600160a01b039092169163313ce56791600480820192602092909190829003018186803b1580156200057157600080fd5b505afa15801562000586573d6000803e3d6000fd5b505050506040513d60208110156200059d57600080fd5b505160ff1690620006d4602090811b6200341317901c565b600a0a602055620005c7565b60016020555b50506008601d555060009350620005eb9250506001600160e01b0362000725169050565b602280546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3505060006014555062000867945050505050565b6001600160e01b03198082161415620006ac576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152600160208190526040909120805460ff19169091179055565b60006200071e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506200072a60201b60201c565b9392505050565b335b90565b60008184841115620007bd5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156200078157818101518382015260200162000767565b50505050905090810190601f168015620007af5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200080857805160ff191683800117855562000838565b8280016001018555821562000838579182015b82811115620008385782518255916020019190600101906200081b565b50620008469291506200084a565b5090565b6200072791905b8082111562000846576000815560010162000851565b61475980620008776000396000f3fe608060405234801561001057600080fd5b50600436106104215760003560e01c806385e290a311610235578063cdfedd6311610135578063e5f4dc92116100c8578063eb6a887d11610097578063f17336d71161007c578063f17336d714610bd6578063f2fde38b14610bde578063ffc73da714610c0457610421565b8063eb6a887d14610b96578063ece1373214610bb357610421565b8063e5f4dc9214610b50578063e985e9c514610b58578063ea78930814610b86578063eac989f814610b8e57610421565b8063d4a9b2c511610104578063d4a9b2c514610a68578063d8dfeb4514610a85578063df98784614610a8d578063e0df5b6f14610aaa57610421565b8063cdfedd6314610a33578063cea55f5714610a3b578063cf41d6f814610a43578063d310f49b14610a4b57610421565b8063a22cb465116101c8578063b86f6aef11610197578063c71abb321161017c578063c71abb3214610a06578063c87b56dd14610a0e578063cd44db1b14610a2b57610421565b8063b86f6aef14610923578063b88d4fde1461094057610421565b8063a22cb465146108bf578063a5e98837146108ed578063a7c6a100146108f5578063b165ff0b146108fd57610421565b806394cd4ba71161020457806394cd4ba71461088157806395d89b411461088957806398c3f2db1461089157806398d721e01461089957610421565b806385e290a3146108375780638da5cb5b146108545780638f32d59b1461085c57806390cf0bba1461086457610421565b806342f371c61161034057806361d027b3116102d357806370a08231116102a2578063715018a611610287578063715018a6146107e9578063767a7b05146107f157806385af3c161461081457610421565b806370a08231146107a65780637139c929146107cc57610421565b806361d027b31461075c5780636234dc21146107645780636352211e146107815780636c0360eb1461079e57610421565b806354fd4d501161030f57806354fd4d501461071157806356572ac01461072f578063570b2b841461074c5780635d12928b1461075457610421565b806342f371c6146106c75780634c19386c146106cf5780634f558e79146106d75780634f6ccce7146106f457610421565b806318160ddd116103b8578063311f392a11610387578063311f392a1461064f578063385362751461065757806342842e0e1461067457806342966c68146106aa57610421565b806318160ddd146105dd5780631c883e7b146105e557806323b872dd146105ed5780632f745c591461062357610421565b8063081812fc116103f4578063081812fc1461054257806308ec59271461055f578063095ea7b31461058257806311b4a832146105ae57610421565b806301ffc9a714610426578063048c661d1461047957806306fdde031461049d578063079605321461051a575b600080fd5b6104656004803603602081101561043c57600080fd5b50357fffffffff0000000000000000000000000000000000000000000000000000000016610c21565b604080519115158252519081900360200190f35b610481610c5c565b604080516001600160a01b039092168252519081900360200190f35b6104a5610c6b565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104df5781810151838201526020016104c7565b50505050905090810190601f16801561050c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6105406004803603602081101561053057600080fd5b50356001600160a01b0316610d02565b005b6104816004803603602081101561055857600080fd5b5035610d8a565b6105406004803603604081101561057557600080fd5b5080359060200135610dec565b6105406004803603604081101561059857600080fd5b506001600160a01b0381351690602001356110af565b6105cb600480360360208110156105c457600080fd5b50356111e4565b60408051918252519081900360200190f35b6105cb6112c2565b6105cb6112c8565b6105406004803603606081101561060357600080fd5b506001600160a01b038135811691602081013590911690604001356112ce565b6105cb6004803603604081101561063957600080fd5b506001600160a01b03813516906020013561132a565b6105cb6113aa565b6105406004803603602081101561066d57600080fd5b50356113b0565b6105406004803603606081101561068a57600080fd5b506001600160a01b0381358116916020810135909116906040013561140e565b610540600480360360208110156106c057600080fd5b5035611429565b61048161151a565b6105cb611529565b610465600480360360208110156106ed57600080fd5b503561152f565b6105cb6004803603602081101561070a57600080fd5b503561153a565b6107196115a0565b6040805160ff9092168252519081900360200190f35b6105cb6004803603602081101561074557600080fd5b50356115a9565b6104816116b7565b6105cb6116c6565b6105cb611734565b6105406004803603602081101561077a57600080fd5b503561173a565b6104816004803603602081101561079757600080fd5b5035611798565b6104a56117ec565b6105cb600480360360208110156107bc57600080fd5b50356001600160a01b031661184d565b610540600480360360208110156107e257600080fd5b50356118b5565b610540611964565b6105406004803603604081101561080757600080fd5b5080359060200135611a14565b6105406004803603604081101561082a57600080fd5b5080359060200135611c7e565b6105406004803603602081101561084d57600080fd5b5035611f51565b61048161217a565b610465612189565b6105406004803603602081101561087a57600080fd5b50356121af565b6105cb61259a565b6104a5612616565b6105cb612677565b610540600480360360208110156108af57600080fd5b50356001600160a01b03166126fa565b610540600480360360408110156108d557600080fd5b506001600160a01b0381351690602001351515612782565b6105cb612887565b6105cb61288d565b6105cb6004803603602081101561091357600080fd5b50356001600160a01b0316612893565b6104656004803603602081101561093957600080fd5b50356128a5565b6105406004803603608081101561095657600080fd5b6001600160a01b0382358116926020810135909116916040820135919081019060808101606082013564010000000081111561099157600080fd5b8201836020820111156109a357600080fd5b803590602001918460018302840111640100000000831117156109c557600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061298c945050505050565b6105cb6129ea565b6104a560048036036020811015610a2457600080fd5b50356129f0565b6105cb612a96565b6105cb612a9c565b6105cb612aa2565b610540612aa8565b6105cb60048036036020811015610a6157600080fd5b5035612baa565b6105cb60048036036020811015610a7e57600080fd5b5035612bbc565b610481612bce565b6105cb60048036036020811015610aa357600080fd5b5035612bdd565b61054060048036036020811015610ac057600080fd5b810190602081018135640100000000811115610adb57600080fd5b820183602082011115610aed57600080fd5b80359060200191846001830284011164010000000083111715610b0f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612ca6945050505050565b6105cb612d16565b61046560048036036040811015610b6e57600080fd5b506001600160a01b0381358116916020013516612d1c565b6105cb612d4a565b6104a5612d50565b61054060048036036020811015610bac57600080fd5b5035612dde565b61054060048036036040811015610bc957600080fd5b5080359060200135612e3c565b6105cb612ee6565b61054060048036036020811015610bf457600080fd5b50356001600160a01b0316612eec565b61054060048036036020811015610c1a57600080fd5b5035612f51565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081526001602052604090205460ff165b919050565b601a546001600160a01b031681565b600a8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610cf75780601f10610ccc57610100808354040283529160200191610cf7565b820191906000526020600020905b815481529060010190602001808311610cda57829003601f168201915b505050505090505b90565b610d0a612189565b610d5b576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600f805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000610d9582612faf565b610dd05760405162461bcd60e51b815260040180806020018281038252602c815260200180614577602c913960400191505060405180910390fd5b506000908152600360205260409020546001600160a01b031690565b81610df681612faf565b610e3e576040805162461bcd60e51b815260206004820152601460248201527315985d5b1d08191bd95cc81b9bdd08195e1a5cdd60621b604482015290519081900360640190fd5b33610e4882611798565b6001600160a01b031614610ea3576040805162461bcd60e51b815260206004820152601960248201527f5661756c74206973206e6f74206f776e656420627920796f7500000000000000604482015290519081900360640190fd5b60008211610ef8576040805162461bcd60e51b815260206004820152601b60248201527f4d75737420626f72726f77206e6f6e2d7a65726f20616d6f756e740000000000604482015290519081900360640190fd5b610f0061259a565b821115610f3e5760405162461bcd60e51b815260040180806020018281038252602f8152602001806143e5602f913960400191505060405180910390fd5b600083815260176020526040812054610f5d908463ffffffff612fcc16565b6000858152601760205260409020549091508111610f7757fe5b600084815260166020526040902054610f90908261302d565b610fcb5760405162461bcd60e51b815260040180806020018281038252603a8152602001806145cc603a913960400191505060405180910390fd5b601354600085815260176020526040902054610fed908563ffffffff612fcc16565b101561102a5760405162461bcd60e51b81526004018080602001828103825260218152602001806144ce6021913960400191505060405180910390fd5b6000848152601760205260409020819055601c54611058906001600160a01b0316338563ffffffff61306216565b601e5461106b908463ffffffff612fcc16565b601e55604080518581526020810185905281517f3e08df88d8e28f37df9bf227d3142ac506a364403445661a60891a49ed6792ca929181900390910190a150505050565b60006110ba82611798565b9050806001600160a01b0316836001600160a01b0316141561110d5760405162461bcd60e51b81526004018080602001828103825260218152602001806146066021913960400191505060405180910390fd5b806001600160a01b031661111f6130e2565b6001600160a01b0316148061114057506111408161113b6130e2565b612d1c565b61117b5760405162461bcd60e51b81526004018080602001828103825260388152602001806144456038913960400191505060405180910390fd5b600082815260036020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b600081815260166020526040812054158061120b5750600082815260176020526040902054155b8061121c575061121a826128a5565b155b1561122957506000610c57565b6000828152601660209081526040808320546017909252822054829161124e916130e6565b91509150806000141561126657600092505050610c57565b6000611278838363ffffffff61329c16565b9050611292601d54600a0a8361329c90919063ffffffff16565b915060006112ab6018548461329c90919063ffffffff16565b905060135481116112b95750815b95945050505050565b60085490565b60125481565b6112df6112d96130e2565b826132de565b61131a5760405162461bcd60e51b81526004018080602001828103825260318152602001806146576031913960400191505060405180910390fd5b61132583838361337a565b505050565b60006113358361184d565b82106113725760405162461bcd60e51b815260040180806020018281038252602b8152602001806142ed602b913960400191505060405180910390fd5b6001600160a01b038316600090815260066020526040902080548390811061139657fe5b906000526020600020015490505b92915050565b60195481565b6113b8612189565b611409576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b601055565b6113258383836040518060200160405280600081525061298c565b611431612189565b611482576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b601c54604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160048201526024810184905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b1580156114f057600080fd5b505af1158015611504573d6000803e3d6000fd5b505050506040513d602081101561132557600080fd5b600f546001600160a01b031681565b601e5481565b60006113a482612faf565b60006115446112c2565b82106115815760405162461bcd60e51b815260040180806020018281038252602c815260200180614688602c913960400191505060405180910390fd5b6008828154811061158e57fe5b90600052602060002001549050919050565b601f5460ff1681565b60008181526016602052604081205415806115ca57506115c8826128a5565b155b156115d757506000610c57565b600082815260166020908152604080832054601790925282205482916115fc916130e6565b9150915060006116176018548361329c90919063ffffffff16565b90508061162a5760009350505050610c57565b601354601d54611644908390600a0a63ffffffff61329c16565b1161168b5761168160205461167561165a612677565b6116756103e86116756019548961339990919063ffffffff16565b9063ffffffff61329c16565b9350505050610c57565b61168160205461167561169c612677565b6116756103e86116756019548861339990919063ffffffff16565b601c546001600160a01b031681565b6011546000906116dd81600163ffffffff612fcc16565b60118190558111156116eb57fe5b6116f533826133f2565b6040805182815233602082015281517f8b6c1d05c678fa59695e26465a85918ce0fc63a88f74af53d1daef8f0a9c7804929181900390910190a1905090565b60145481565b611742612189565b611793576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b601355565b6000818152600260205260408120546001600160a01b0316806113a45760405162461bcd60e51b81526004018080602001828103825260298152602001806144ef6029913960400191505060405180910390fd5b600c8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610cf75780601f10610ccc57610100808354040283529160200191610cf7565b60006001600160a01b0382166118945760405162461bcd60e51b815260040180806020018281038252602a8152602001806144a4602a913960400191505060405180910390fd5b6001600160a01b03821660009081526004602052604090206113a49061340f565b6118bd612189565b61190e576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61191781612faf565b61195f576040805162461bcd60e51b815260206004820152601460248201527315985d5b1d08191bd95cc81b9bdd08195e1a5cdd60621b604482015290519081900360640190fd5b601455565b61196c612189565b6119bd576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6022546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36022805473ffffffffffffffffffffffffffffffffffffffff19169055565b81611a1e81612faf565b611a66576040805162461bcd60e51b815260206004820152601460248201527315985d5b1d08191bd95cc81b9bdd08195e1a5cdd60621b604482015290519081900360640190fd5b33611a7082611798565b6001600160a01b031614611acb576040805162461bcd60e51b815260206004820152601960248201527f5661756c74206973206e6f74206f776e656420627920796f7500000000000000604482015290519081900360640190fd5b60005460ff16611b22576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6000805460ff1916815583815260166020526040902054821115611b775760405162461bcd60e51b81526004018080602001828103825260258152602001806143946025913960400191505060405180910390fd5b600083815260166020526040812054611b96908463ffffffff61341316565b60008581526017602052604090205490915015611c0257600084815260176020526040902054611bc790829061302d565b611c025760405162461bcd60e51b815260040180806020018281038252603e815260200180614518603e913960400191505060405180910390fd5b6000848152601660205260409020819055601b54611c30906001600160a01b0316338563ffffffff61306216565b604080518581526020810185905281517f6c0ea3bea9dd66afa8f9d39d6eb93d833466190330813b42835efc650dca4cb9929181900390910190a150506000805460ff191660011790555050565b601c54604080516370a0823160e01b8152336004820152905183926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015611cc857600080fd5b505afa158015611cdc573d6000803e3d6000fd5b505050506040513d6020811015611cf257600080fd5b50511015611d47576040805162461bcd60e51b815260206004820152601560248201527f546f6b656e2062616c616e636520746f6f206c6f770000000000000000000000604482015290519081900360640190fd5b600082815260176020526040902054811115611d945760405162461bcd60e51b815260040180806020018281038252602781526020018061447d6027913960400191505060405180910390fd5b601354600083815260176020526040902054611db6908363ffffffff61341316565b101580611dd0575060008281526017602052604090205481145b611e0b5760405162461bcd60e51b81526004018080602001828103825260218152602001806144ce6021913960400191505060405180910390fd5b6000611e4f611e30602054611e24612710611e24612677565b9063ffffffff61339916565b611675611e3b612a96565b601254611e2490879063ffffffff61339916565b601c54909150611e70906001600160a01b031633308563ffffffff61345516565b600083815260176020526040902054611e8f908363ffffffff61341316565b600084815260176020908152604080832093909355601690522054611eba908263ffffffff61341316565b6000848152601660205260408082209290925560145481522054611ee4908263ffffffff612fcc16565b601454600090815260166020526040902055601e54611f09908363ffffffff61341316565b601e55604080518481526020810184905280820183905290517f31f96762af4051f367185773cc2f55bfb112a6c114b3407ded1f321a9eb199ac9181900360600190a1505050565b80611f5b81612faf565b611fa3576040805162461bcd60e51b815260206004820152601460248201527315985d5b1d08191bd95cc81b9bdd08195e1a5cdd60621b604482015290519081900360640190fd5b33611fad82611798565b6001600160a01b031614612008576040805162461bcd60e51b815260206004820152601960248201527f5661756c74206973206e6f74206f776e656420627920796f7500000000000000604482015290519081900360640190fd5b60005460ff1661205f576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6000805460ff1916815582815260176020526040902054156120c8576040805162461bcd60e51b815260206004820152601a60248201527f5661756c7420686173206f75747374616e64696e672064656274000000000000604482015290519081900360640190fd5b60008281526016602052604090205415612110576121106120e883611798565b600084815260166020526040902054601b546001600160a01b0316919063ffffffff61306216565b612119826134dd565b60008281526016602090815260408083208390556017825280832092909255815184815291517f4fe08624ee65b341c38ab9693d216b909d4ddee1bc8d3fe0fea14026c361b4659281900390910190a150506000805460ff19166001179055565b6022546001600160a01b031690565b6022546000906001600160a01b03166121a06130e2565b6001600160a01b031614905090565b6121b881612faf565b612200576040805162461bcd60e51b815260206004820152601460248201527315985d5b1d08191bd95cc81b9bdd08195e1a5cdd60621b604482015290519081900360640190fd5b601a546001600160a01b031615806122225750601a546001600160a01b031633145b61225d5760405162461bcd60e51b81526004018080602001828103825260228152602001806147036022913960400191505060405180910390fd5b60008181526016602090815260408083205460179092528220548291612282916130e6565b90925090506000612299838363ffffffff61329c16565b905060105481106122db5760405162461bcd60e51b81526004018080602001828103825260308152602001806146276030913960400191505060405180910390fd5b601d546122f2908390600a0a63ffffffff61329c16565b9150600061230b6018548461329c90919063ffffffff16565b905060135481116123195750815b601c54604080516370a0823160e01b8152336004820152905183926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561236357600080fd5b505afa158015612377573d6000803e3d6000fd5b505050506040513d602081101561238d57600080fd5b505110156123cc5760405162461bcd60e51b81526004018080602001828103825260318152602001806144146031913960400191505060405180910390fd5b601c546123ea906001600160a01b031633308463ffffffff61345516565b601e546123fd908263ffffffff61341316565b601e55600061240b866115a9565b60008781526017602052604090205490915061242d908363ffffffff61341316565b600087815260176020908152604082209290925590546124769061245790611e2461271081612677565b611675612462612a96565b601254611e2490889063ffffffff61339916565b600088815260166020526040902054909150612498908263ffffffff61341316565b60008881526016602052604080822092909255601454815220546124c2908263ffffffff612fcc16565b6014546000908152601660205260408082209290925588815220546124ed908363ffffffff61341316565b60008881526016602090815260408083209390935533825260219052205461251b908363ffffffff612fcc16565b336000908152602160205260409020557f4d151d3a98b83151d51917640c221f8c8e3c054422ea1b48dcbbd57e3f4210d58761255681611798565b604080519283526001600160a01b0390911660208301523382820152606082018690526080820185905260a08201849052519081900360c00190a150505050505050565b601c54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156125e557600080fd5b505afa1580156125f9573d6000803e3d6000fd5b505050506040513d602081101561260f57600080fd5b5051905090565b600b8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610cf75780601f10610ccc57610100808354040283529160200191610cf7565b600080600f60009054906101000a90046001600160a01b03166001600160a01b03166350d25bcd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156126c857600080fd5b505afa1580156126dc573d6000803e3d6000fd5b505050506040513d60208110156126f257600080fd5b505191505090565b612702612189565b612753576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b601a805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b61278a6130e2565b6001600160a01b0316826001600160a01b031614156127f0576040805162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015290519081900360640190fd5b80600560006127fd6130e2565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff1916921515929092179091556128416130e2565b60408051841515815290516001600160a01b0392909216917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319181900360200190a35050565b60125490565b60115481565b60216020526000908152604090205481565b60006128b082612faf565b6128f8576040805162461bcd60e51b815260206004820152601460248201527315985d5b1d08191bd95cc81b9bdd08195e1a5cdd60621b604482015290519081900360640190fd5b600082815260166020526040902054158061291f5750600082815260176020526040902054155b1561292c57506000610c57565b60008281526016602090815260408083205460179092528220548291612951916130e6565b90925090506000612968838363ffffffff61329c16565b90506010548110156129805760019350505050610c57565b60009350505050610c57565b61299d6129976130e2565b836132de565b6129d85760405162461bcd60e51b81526004018080602001828103825260318152602001806146576031913960400191505060405180910390fd5b6129e4848484846134ef565b50505050565b601d5481565b60606129fb82612faf565b612a0457600080fd5b600e805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015612a8a5780601f10612a5f57610100808354040283529160200191612a8a565b820191906000526020600020905b815481529060010190602001808311612a6d57829003601f168201915b50505050509050919050565b60155490565b60155481565b60185481565b60005460ff16612aff576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6000805460ff1916815533815260216020526040902054612b67576040805162461bcd60e51b815260206004820152601c60248201527f446f6e2774206861766520616e797468696e6720666f7220796f752e00000000604482015290519081900360640190fd5b3360008181526021602052604081208054919055601b549091612b9a916001600160a01b0316908363ffffffff61306216565b506000805460ff19166001179055565b60176020526000908152604090205481565b60166020526000908152604090205481565b601b546001600160a01b031681565b6000612be882612faf565b612c30576040805162461bcd60e51b815260206004820152601460248201527315985d5b1d08191bd95cc81b9bdd08195e1a5cdd60621b604482015290519081900360640190fd5b6000828152601660205260409020541580612c575750600082815260176020526040902054155b15612c6457506000610c57565b60008281526016602090815260408083205460179092528220548291612c89916130e6565b9092509050612c9e828263ffffffff61329c16565b949350505050565b612cae612189565b612cff576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b8051612d1290600e9060208401906141f0565b5050565b60105481565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b60205481565b600e805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015612dd65780601f10612dab57610100808354040283529160200191612dd6565b820191906000526020600020905b815481529060010190602001808311612db957829003601f168201915b505050505081565b612de6612189565b612e37576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b601855565b601b54612e5a906001600160a01b031633308463ffffffff61345516565b600082815260166020526040812054612e79908363ffffffff612fcc16565b600084815260166020526040902054909150811015612e9457fe5b600083815260166020908152604091829020839055815185815290810184905281517f52c4e7127ec34e8fc95f09ce2d06b4f00acca12ccbcdfb246ef67ee6aefe068d929181900390910190a1505050565b60135481565b612ef4612189565b612f45576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b612f4e81613541565b50565b612f59612189565b612faa576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b601955565b6000908152600260205260409020546001600160a01b0316151590565b600082820183811015613026576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b600080600061303c85856130e6565b90925090506000613053838363ffffffff61329c16565b60105411159695505050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526113259084906135ef565b3390565b6000806130f1612677565b6130f757fe5b6130ff612a96565b61310557fe5b6000613241613226601b60009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561315b57600080fd5b505afa15801561316f573d6000803e3d6000fd5b505050506040513d602081101561318557600080fd5b5051601c54604080517f313ce567000000000000000000000000000000000000000000000000000000008152905160ff909316926001600160a01b039092169163313ce56791600480820192602092909190829003018186803b1580156131eb57600080fd5b505afa1580156131ff573d6000803e3d6000fd5b505050506040513d602081101561321557600080fd5b505160ff169063ffffffff61341316565b600a0a611e24613234612677565b889063ffffffff61339916565b90508481101561324d57fe5b600061326761325a612a96565b869063ffffffff61339916565b90508481101561327357fe5b600061328683606463ffffffff61339916565b905082811161329157fe5b969095509350505050565b600061302683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506137a7565b60006132e982612faf565b6133245760405162461bcd60e51b815260040180806020018281038252602c8152602001806143b9602c913960400191505060405180910390fd5b600061332f83611798565b9050806001600160a01b0316846001600160a01b0316148061336a5750836001600160a01b031661335f84610d8a565b6001600160a01b0316145b80612c9e5750612c9e8185612d1c565b613385838383613849565b61338f838261399a565b6113258282613a8f565b6000826133a8575060006113a4565b828202828482816133b557fe5b04146130265760405162461bcd60e51b81526004018080602001828103825260218152602001806145566021913960400191505060405180910390fd5b6133fc8282613acd565b6134068282613a8f565b612d1281613c0b565b5490565b600061302683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613c4f565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526129e49085906135ef565b612f4e6134e982611798565b82613ca9565b6134fa84848461337a565b61350684848484613cf1565b6129e45760405162461bcd60e51b81526004018080602001828103825260328152602001806143186032913960400191505060405180910390fd5b6001600160a01b0381166135865760405162461bcd60e51b815260040180806020018281038252602681526020018061434a6026913960400191505060405180910390fd5b6022546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36022805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b613601826001600160a01b0316613fa3565b613652576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106136905780518252601f199092019160209182019101613671565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146136f2576040519150601f19603f3d011682016040523d82523d6000602084013e6136f7565b606091505b50915091508161374e576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b8051156129e45780806020019051602081101561376a57600080fd5b50516129e45760405162461bcd60e51b815260040180806020018281038252602a8152602001806146d9602a913960400191505060405180910390fd5b600081836138335760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156137f85781810151838201526020016137e0565b50505050905090810190601f1680156138255780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161383f57fe5b0495945050505050565b826001600160a01b031661385c82611798565b6001600160a01b0316146138a15760405162461bcd60e51b81526004018080602001828103825260298152602001806145a36029913960400191505060405180910390fd5b6001600160a01b0382166138e65760405162461bcd60e51b81526004018080602001828103825260248152602001806143706024913960400191505060405180910390fd5b6138ef81613fdc565b6001600160a01b038316600090815260046020526040902061391090614024565b6001600160a01b03821660009081526004602052604090206139319061403b565b600081815260026020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6001600160a01b0382166000908152600660205260408120546139c490600163ffffffff61341316565b600083815260076020526040902054909150808214613a5f576001600160a01b0384166000908152600660205260408120805484908110613a0157fe5b906000526020600020015490508060066000876001600160a01b03166001600160a01b031681526020019081526020016000208381548110613a3f57fe5b600091825260208083209091019290925591825260079052604090208190555b6001600160a01b0384166000908152600660205260409020805490613a8890600019830161426e565b5050505050565b6001600160a01b0390911660009081526006602081815260408084208054868652600784529185208290559282526001810183559183529091200155565b6001600160a01b038216613b28576040805162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b613b3181612faf565b15613b83576040805162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015290519081900360640190fd5b6000818152600260209081526040808320805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038716908117909155835260049091529020613bcf9061403b565b60405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b60008184841115613ca15760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156137f85781810151838201526020016137e0565b505050900390565b613cb38282614044565b6000818152600d60205260409020546002600019610100600184161502019091160415612d12576000818152600d60205260408120612d1291614292565b6000613d05846001600160a01b0316613fa3565b613d1157506001612c9e565b600060606001600160a01b0386167f150b7a0200000000000000000000000000000000000000000000000000000000613d486130e2565b89888860405160240180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613dc1578181015183820152602001613da9565b50505050905090810190601f168015613dee5780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909a16999099178952518151919890975087965094509250829150849050835b60208310613e835780518252601f199092019160209182019101613e64565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613ee5576040519150601f19603f3d011682016040523d82523d6000602084013e613eea565b606091505b509150915081613f3b57805115613f045780518082602001fd5b60405162461bcd60e51b81526004018080602001828103825260328152602001806143186032913960400191505060405180910390fd5b6000818060200190516020811015613f5257600080fd5b50517fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149350612c9e92505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590612c9e575050151592915050565b6000818152600360205260409020546001600160a01b031615612f4e576000908152600360205260409020805473ffffffffffffffffffffffffffffffffffffffff19169055565b805461403790600163ffffffff61341316565b9055565b80546001019055565b61404e8282614070565b614058828261399a565b600081815260076020526040812055612d1281614154565b816001600160a01b031661408382611798565b6001600160a01b0316146140c85760405162461bcd60e51b81526004018080602001828103825260258152602001806146b46025913960400191505060405180910390fd5b6140d181613fdc565b6001600160a01b03821660009081526004602052604090206140f290614024565b600081815260026020526040808220805473ffffffffffffffffffffffffffffffffffffffff19169055518291906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b60085460009061416b90600163ffffffff61341316565b6000838152600960205260408120546008805493945090928490811061418d57fe5b9060005260206000200154905080600883815481106141a857fe5b600091825260208083209091019290925582815260099091526040902082905560088054906141db90600019830161426e565b50505060009182525060096020526040812055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061423157805160ff191683800117855561425e565b8280016001018555821561425e579182015b8281111561425e578251825591602001919060010190614243565b5061426a9291506142d2565b5090565b815481835581811115611325576000838152602090206113259181019083016142d2565b50805460018160011615610100020316600290046000825580601f106142b85750612f4e565b601f016020900490600052602060002090810190612f4e91905b610cff91905b8082111561426a57600081556001016142d856fe455243373231456e756d657261626c653a206f776e657220696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433732313a207472616e7366657220746f20746865207a65726f20616464726573735661756c7420646f6573206e6f74206861766520656e6f75676820636f6c6c61746572616c4552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e626f72726f77546f6b656e3a2043616e6e6f74206d696e74206f76657220617661696c61626c6520737570706c792e546f6b656e2062616c616e636520746f6f206c6f7720746f20706179206f6666206f75747374616e64696e6720646562744552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c5661756c742064656274206c657373207468616e20616d6f756e7420746f20706179206261636b4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573735661756c7420646562742063616e277420626520756e646572206d696e446562744552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e5769746864726177616c20776f756c6420707574207661756c742062656c6f77206d696e696d756d20636f6c6c61746572616c2070657263656e74616765536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e426f72726f7720776f756c6420707574207661756c742062656c6f77206d696e696d756d20636f6c6c61746572616c2070657263656e746167654552433732313a20617070726f76616c20746f2063757272656e74206f776e65725661756c74206973206e6f742062656c6f77206d696e696d756d20636f6c6c61746572616c2070657263656e746167654552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564455243373231456e756d657261626c653a20676c6f62616c20696e646578206f7574206f6620626f756e64734552433732313a206275726e206f6620746f6b656e2074686174206973206e6f74206f776e5361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565646c69717569646174696f6e2069732064697361626c656420666f72207075626c6963a265627a7a723158209c6fd9fb4ece46d8ff160612910512f99a0fff1f5bc01e751bffad7f932a7dd064736f6c634300051100320000000000000000000000002779d32d5166baaa2b2b658333ba7e6ec0c65743000000000000000000000000000000000000000000000000000000000000008200000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001200000000000000000000000005c49b268c9841aff1cc3b0a418ff5c3442ee3f3b00000000000000000000000050b7545627a5162f82a992c33b87adc75187b2180000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000d425443204d4149205661756c740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064254434d565400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d593159616a6e3859504a4134324255327434783851594541517944516778564c6b64667046684d706d6b4e540000000000000000000000