[ { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "cashPrior", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "interestAccumulated", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "borrowIndex", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalBorrows", "type": "uint256" } ], "name": "AccrueInterest", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "error", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "info", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "detail", "type": "uint256" } ], "name": "Failure", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "receiver", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Flash", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldAdminFeeMantissa", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newAdminFeeMantissa", "type": "uint256" } ], "name": "NewAdminFee", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldIonicFeeMantissa", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newIonicFeeMantissa", "type": "uint256" } ], "name": "NewIonicFee", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "contract InterestRateModel", "name": "oldInterestRateModel", "type": "address" }, { "indexed": false, "internalType": "contract InterestRateModel", "name": "newInterestRateModel", "type": "address" } ], "name": "NewMarketInterestRateModel", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldReserveFactorMantissa", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newReserveFactorMantissa", "type": "uint256" } ], "name": "NewReserveFactor", "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": "amount", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [], "name": "_getExtensionFunctions", "outputs": [ { "internalType": "bytes4[]", "name": "", "type": "bytes4[]" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newAdminFeeMantissa", "type": "uint256" } ], "name": "_setAdminFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract InterestRateModel", "name": "newInterestRateModel", "type": "address" } ], "name": "_setInterestRateModel", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" } ], "name": "_setNameAndSymbol", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newReserveFactorMantissa", "type": "uint256" } ], "name": "_setReserveFactor", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "accrualBlockNumber", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "accrueInterest", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "adminFeeMantissa", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "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": "owner", "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": "address", "name": "account", "type": "address" } ], "name": "borrowBalanceCurrent", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "borrowIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "borrowRatePerBlock", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "borrowAmount", "type": "uint256" } ], "name": "borrowRatePerBlockAfterBorrow", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "comptroller", "outputs": [ { "internalType": "contract IonicComptroller", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "exchangeRateCurrent", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "feeSeizeShareMantissa", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "flash", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "getAccountSnapshot", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTotalUnderlyingSupplied", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "interestRateModel", "outputs": [ { "internalType": "contract InterestRateModel", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "ionicAdmin", "outputs": [ { "internalType": "address payable", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "ionicFeeMantissa", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes[]", "name": "data", "type": "bytes[]" } ], "name": "multicall", "outputs": [ { "internalType": "bytes[]", "name": "results", "type": "bytes[]" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "protocolSeizeShareMantissa", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "registerInSFS", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "reserveFactorMantissa", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "supplyRatePerBlock", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "mintAmount", "type": "uint256" } ], "name": "supplyRatePerBlockAfterDeposit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "withdrawAmount", "type": "uint256" } ], "name": "supplyRatePerBlockAfterWithdraw", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalAdminFees", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalBorrows", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalBorrowsCurrent", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalIonicFees", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalReserves", "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": "dst", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "src", "type": "address" }, { "internalType": "address", "name": "dst", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "underlying", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" } ]
608060405234801561001057600080fd5b50613c2f806100206000396000f3fe6080604052600436106102675760003560e01c80638d02d9a111610144578063bd6d894d116100b6578063cfcd4c071161007a578063cfcd4c07146106fe578063dd62ed3e1461071e578063f2b3abbd14610764578063f3fdb15a14610784578063f8f9da28146107a4578063fca7820b146107b957600080fd5b8063bd6d894d14610657578063be99f1191461066c578063c37f68e214610688578063c3bf11cd146106c8578063c91a424f146106de57600080fd5b8063a6afed9511610108578063a6afed95146105b7578063a9059cbb146105cc578063aa5af0fd146105ec578063ac9650d814610602578063ae9d70b014610622578063b1e23dbb1461063757600080fd5b80638d02d9a1146105405780638f840ddd1461055657806391dd36c61461056c57806395d89b411461058c5780639826394b146105a157600080fd5b806347bd3718116101dd5780636c540baf116101a15780636c540baf146104885780636f307dc31461049e57806370a08231146104be57806373acee98146104f45780637f15e2161461050957806389f8132e1461051e57600080fd5b806347bd3718146103ef5780634aeb3d9a146104055780635fe3b5671461041a57806361feacff146104575780636752e7021461046d57600080fd5b806323b872dd1161022f57806323b872dd14610321578063313ce5671461034157806334154d4c1461036d57806335daea641461038f5780633af9e669146103af5780633c3b4b89146103cf57600080fd5b806306fdde031461026c578063095ea7b314610297578063173b9904146102c757806317bfdfbc146102eb57806318160ddd1461030b575b600080fd5b34801561027857600080fd5b506102816107d9565b60405161028e91906135d6565b60405180910390f35b3480156102a357600080fd5b506102b76102b23660046135fe565b610867565b604051901515815260200161028e565b3480156102d357600080fd5b506102dd60085481565b60405190815260200161028e565b3480156102f757600080fd5b506102dd61030636600461362a565b61097e565b34801561031757600080fd5b506102dd600f5481565b34801561032d57600080fd5b506102b761033c366004613647565b610b2e565b34801561034d57600080fd5b5060035461035b9060ff1681565b60405160ff909116815260200161028e565b34801561037957600080fd5b5061038d6103883660046136ca565b610c03565b005b34801561039b57600080fd5b506102dd6103aa366004613736565b610c60565b3480156103bb57600080fd5b506102dd6103ca36600461362a565b610de2565b3480156103db57600080fd5b5061038d6103ea36600461374f565b610e7d565b3480156103fb57600080fd5b506102dd600b5481565b34801561041157600080fd5b506102dd6110de565b34801561042657600080fd5b5060035461043f9061010090046001600160a01b031681565b6040516001600160a01b03909116815260200161028e565b34801561046357600080fd5b506102dd600d5481565b34801561047957600080fd5b506102dd666379da05b6000081565b34801561049457600080fd5b506102dd60095481565b3480156104aa57600080fd5b5060135461043f906001600160a01b031681565b3480156104ca57600080fd5b506102dd6104d936600461362a565b6001600160a01b031660009081526010602052604090205490565b34801561050057600080fd5b506102dd61117b565b34801561051557600080fd5b506102dd61120b565b34801561052a57600080fd5b506105336112f5565b60405161028e919061379b565b34801561054c57600080fd5b506102dd60065481565b34801561056257600080fd5b506102dd600c5481565b34801561057857600080fd5b506102dd610587366004613736565b61198e565b34801561059857600080fd5b50610281611b4b565b3480156105ad57600080fd5b506102dd600e5481565b3480156105c357600080fd5b506102dd611b58565b3480156105d857600080fd5b506102b76105e73660046135fe565b611c69565b3480156105f857600080fd5b506102dd600a5481565b6106156106103660046137e9565b611d3d565b60405161028e919061385e565b34801561062e57600080fd5b506102dd611d49565b34801561064357600080fd5b506102dd610652366004613736565b611e6f565b34801561066357600080fd5b506102dd611f9f565b34801561067857600080fd5b506102dd67016345785d8a000081565b34801561069457600080fd5b506106a86106a336600461362a565b6120cd565b60408051948552602085019390935291830152606082015260800161028e565b3480156106d457600080fd5b506102dd60075481565b3480156106ea57600080fd5b5060005461043f906001600160a01b031681565b34801561070a57600080fd5b506102dd610719366004613736565b612113565b34801561072a57600080fd5b506102dd6107393660046138c0565b6001600160a01b03918216600090815260116020908152604080832093909416825291909152205490565b34801561077057600080fd5b506102dd61077f36600461362a565b61223a565b34801561079057600080fd5b5060045461043f906001600160a01b031681565b3480156107b057600080fd5b506102dd612379565b3480156107c557600080fd5b506102dd6107d4366004613736565b612440565b600180546107e6906138f9565b80601f0160208091040260200160405190810160405280929190818152602001828054610812906138f9565b801561085f5780601f106108345761010080835404028352916020019161085f565b820191906000526020600020905b81548152906001019060200180831161084257829003601f168201915b505050505081565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926108b49261010090910490911690339030906001600160e01b03198835169060040161392e565b602060405180830381865afa1580156108d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f59190613961565b61091a5760405162461bcd60e51b815260040161091190613983565b60405180910390fd5b3360008181526011602090815260408083206001600160a01b038816808552908352928190208690555185815283917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060019392505050565b6000804360095414156109945750600a54610a0f565b6000306001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f891906139ab565b90506000610a0643836124f6565b60200151925050505b6001600160a01b0383166000908152601260205260408120805482918291610a3e575060009695505050505050565b8054610a4a908661278b565b90945092506000846003811115610a6357610a636139c4565b14610ab05760405162461bcd60e51b815260206004820152601e60248201527f216d756c55496e74206f766572666c6f7720636865636b206661696c656400006044820152606401610911565b610abe8382600101546127cd565b90945091506000846003811115610ad757610ad76139c4565b14610b245760405162461bcd60e51b815260206004820152601e60248201527f2164697655496e74206f766572666c6f7720636865636b206661696c656400006044820152606401610911565b5095945050505050565b600080610b3a816127f8565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169363df595cb893610b8493610100900416913391309190356001600160e01b0319169060040161392e565b602060405180830381865afa158015610ba1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc59190613961565b610be15760405162461bcd60e51b815260040161091190613983565b6000610bef338787876128bc565b149150610bfb81612b73565b509392505050565b610c0b612bf2565b610c405760405162461bcd60e51b815260206004820152600660248201526510b0b236b4b760d11b6044820152606401610911565b610c4c600185856134e1565b50610c59600283836134e1565b5050505050565b600080306001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ca1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc591906139ab565b905082811015610d105760405162461bcd60e51b81526020600482015260166024820152750dac2e4d6cae840c6c2e6d040dcdee840cadcdeeaced60531b6044820152606401610911565b6004546001600160a01b031663b8168816610d2b85846139f0565b600b54600e54600d54600c54610d419190613a07565b610d4b9190613a07565b600654600754600854610d5e9190613a07565b610d689190613a07565b6040516001600160e01b031960e087901b16815260048101949094526024840192909252604483015260648201526084015b602060405180830381865afa158015610db7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ddb91906139ab565b9392505050565b6000806040518060200160405280610df8611f9f565b90526001600160a01b038416600090815260106020526040812054919250908190610e24908490612d69565b90925090506000826003811115610e3d57610e3d6139c4565b14610e755760405162461bcd60e51b81526020600482015260086024820152672162616c616e636560c01b6044820152606401610911565b949350505050565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169363df595cb893610ec793610100900416913391309190356001600160e01b0319169060040161392e565b602060405180830381865afa158015610ee4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f089190613961565b610f245760405162461bcd60e51b815260040161091190613983565b610f2c611b58565b5082600b6000828254610f3f9190613a07565b9091555030905060405163067db1b360e01b8152336004820152602481018590526001600160a01b03919091169063067db1b390604401600060405180830381600087803b158015610f9057600080fd5b505af1158015610fa4573d6000803e3d6000fd5b505060135460405163012b1f4560e71b815233935063958fa2809250610fdc916001600160a01b031690879087908790600401613a1f565b600060405180830381600087803b158015610ff657600080fd5b505af115801561100a573d6000803e3d6000fd5b505050506110153090565b6040516304d7c4cd60e21b8152336004820152602481018590526001600160a01b03919091169063135f1334906044016020604051808303816000875af1158015611064573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108891906139ab565b5082600b600082825461109b91906139f0565b909155505060408051338152602081018590527fe756d016d0e956882a6de9c72a2fe06d7d488ecbe6d76628713077ea7930cff8910160405180910390a1505050565b6000600d54600e54600c546110f39190613a07565b6110fd9190613a07565b600b54306001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561113e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116291906139ab565b61116c9190613a07565b61117691906139f0565b905090565b600043600954141561118e5750600b5490565b6000306001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f291906139ab565b9050600061120043836124f6565b606001519392505050565b6000611215612bf2565b8061122f575060035461010090046001600160a01b031633145b6112645760405162461bcd60e51b815260206004820152600660248201526510b0b236b4b760d11b6044820152606401610911565b604051632210724360e11b8152738fba84867ba458e7c6e2c024d2de3d0b5c3ea1c26004820152738680ceabcb9b56913c519c069add6bc3494b7020908190634420e486906024016020604051808303816000875af11580156112cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ef91906139ab565b91505090565b60408051601880825261032082019092526060919060009082602082016103008036833701905050905063a9059cbb60e01b8161133184613a7d565b93508360ff168151811061134757611347613a9a565b6001600160e01b0319909216602092830291909101909101526323b872dd60e01b8161137284613a7d565b93508360ff168151811061138857611388613a9a565b6001600160e01b031990921660209283029190910190910152636eb1769f60e11b816113b384613a7d565b93508360ff16815181106113c9576113c9613a9a565b6001600160e01b03199092166020928302919091019091015263095ea7b360e01b816113f484613a7d565b93508360ff168151811061140a5761140a613a9a565b6001600160e01b0319909216602092830291909101909101526370a0823160e01b8161143584613a7d565b93508360ff168151811061144b5761144b613a9a565b6001600160e01b0319909216602092830291909101909101526348ee9b6360e11b8161147684613a7d565b93508360ff168151811061148c5761148c613a9a565b6001600160e01b03199092166020928302919091019091015263f2b3abbd60e01b816114b784613a7d565b93508360ff16815181106114cd576114cd613a9a565b6001600160e01b031990921660209283029190910190910152630d05535360e21b816114f884613a7d565b93508360ff168151811061150e5761150e613a9a565b6001600160e01b03199092166020928302919091019091015263fca7820b60e01b8161153984613a7d565b93508360ff168151811061154f5761154f613a9a565b6001600160e01b031990921660209283029190910190910152630ae9d70b60e41b8161157a84613a7d565b93508360ff168151811061159057611590613a9a565b6001600160e01b031990921660209283029190910190910152631f1f3b4560e31b816115bb84613a7d565b93508360ff16815181106115d1576115d1613a9a565b6001600160e01b03199092166020928302919091019091015263bd6d894d60e01b816115fc84613a7d565b93508360ff168151811061161257611612613a9a565b6001600160e01b03199092166020928302919091019091015263a6afed9560e01b8161163d84613a7d565b93508360ff168151811061165357611653613a9a565b6001600160e01b031990921660209283029190910190910152630e759dd360e31b8161167e84613a7d565b93508360ff168151811061169457611694613a9a565b6001600160e01b031990921660209283029190910190910152633af9e66960e01b816116bf84613a7d565b93508360ff16815181106116d5576116d5613a9a565b6001600160e01b031990921660209283029190910190910152631592ca1b60e31b8161170084613a7d565b93508360ff168151811061171657611716613a9a565b6001600160e01b03199092166020928302919091019091015263b1e23dbb60e01b8161174184613a7d565b93508360ff168151811061175757611757613a9a565b6001600160e01b031990921660209283029190910190910152630d76ba9960e21b8161178284613a7d565b93508360ff168151811061179857611798613a9a565b6001600160e01b03199092166020928302919091019091015263cfcd4c0760e01b816117c384613a7d565b93508360ff16815181106117d9576117d9613a9a565b6001600160e01b0319909216602092830291909101909101526325759ecd60e11b8161180484613a7d565b93508360ff168151811061181a5761181a613a9a565b6001600160e01b031990921660209283029190910190910152633c3b4b8960e01b8161184584613a7d565b93508360ff168151811061185b5761185b613a9a565b6001600160e01b0319909216602092830291909101909101526361bfb47160e11b8161188684613a7d565b93508360ff168151811061189c5761189c613a9a565b6001600160e01b0319909216602092830291909101909101526305eff7ef60e21b816118c784613a7d565b93508360ff16815181106118dd576118dd613a9a565b6001600160e01b031990921660209283029190910190910152633f8af10b60e11b8161190884613a7d565b93508360ff168151811061191e5761191e613a9a565b6001600160e01b03199092166020928302919091019091015260ff8216156119885760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e677468000000006044820152606401610911565b92915050565b60008061199a816127f8565b6119a2611b58565b5043600954146119bf576119b8600a6052612dbb565b9150611b3c565b6000198314156119cf5760065492505b60008060009054906101000a90046001600160a01b03166001600160a01b031663dd86fea16040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a4791906139ab565b9050670de0b6b3a76400008185600854611a619190613a07565b611a6b9190613a07565b1115611a8557611a7d60026053612dbb565b925050611b3c565b8360065414611ae957611a96612bf2565b611aa657611a7d60016051612dbb565b600680549085905560408051828152602081018790527fcdd0b588250e1398549f79cfdb8217c186688822905d6715b0834ea1c865594a910160405180910390a1505b8060075414611b3557600780549082905560408051828152602081018490527fedec4b9c99c2cdb231e7fd036f861e0445b015916700f41b9835f984cb9be4cb910160405180910390a1505b60005b9250505b611b4581612b73565b50919050565b600280546107e6906138f9565b6009546000904390811415611b6e5760006112ef565b6000306001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd291906139ab565b90506000611be083836124f6565b6009849055602081810151600a819055606080840151600b819055608080860151600c5560a0860151600e5560c0860151600d5560e0860151604080518a815296870191909152850193909352908301529192507f4dec04e750ca11537cabcd8a9eab06494de08da3735bc8871cd41250e190bc04910160405180910390a16000935050505090565b600080611c75816127f8565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169363df595cb893611cbf93610100900416913391309190356001600160e01b0319169060040161392e565b602060405180830381865afa158015611cdc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d009190613961565b611d1c5760405162461bcd60e51b815260040161091190613983565b6000611d2a333387876128bc565b149150611d3681612b73565b5092915050565b6060610ddb8383612e34565b6004546000906001600160a01b031663b8168816306001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dbf91906139ab565b600b54600e54600d54600c54611dd59190613a07565b611ddf9190613a07565b600654600754600854611df29190613a07565b611dfc9190613a07565b6040516001600160e01b031960e087901b16815260048101949094526024840192909252604483015260648201526084015b602060405180830381865afa158015611e4b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117691906139ab565b6004546000906001600160a01b031663b816881683306001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ec2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee691906139ab565b611ef09190613a07565b600b54600e54600d54600c54611f069190613a07565b611f109190613a07565b600654600754600854611f239190613a07565b611f2d9190613a07565b6040516001600160e01b031960e087901b1681526004810194909452602484019290925260448301526064820152608401602060405180830381865afa158015611f7b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061198891906139ab565b600060095443141561202d57611176600f54600554611fbb3090565b6001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ff8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201c91906139ab565b600b54600c54600d54600e54612f85565b6000306001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561206d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209191906139ab565b9050600061209f43836124f6565b90506120c6816040015160055484846060015185608001518660c001518760a00151612f85565b9250505090565b6001600160a01b03811660009081526010602052604081205481908190819081806120f78861097e565b9150612101611f9f565b90506000989297509095509350915050565b600080306001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612154573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061217891906139ab565b9050828110156121c35760405162461bcd60e51b81526020600482015260166024820152750dac2e4d6cae840c6c2e6d040dcdee840cadcdeeaced60531b6044820152606401610911565b6004546001600160a01b03166315f240536121de85846139f0565b85600b546121ec9190613a07565b600e54600d54600c546121ff9190613a07565b6122099190613a07565b6040516001600160e01b031960e086901b168152600481019390935260248301919091526044820152606401610d9a565b600080612246816127f8565b61224e611b58565b50612257612bf2565b612267576119b86001604d612dbb565b436009541461227c576119b8600a604c612dbb565b826001600160a01b0316632191f92a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122de9190613961565b6123145760405162461bcd60e51b8152602060048201526007602482015266216e6f7449726d60c81b6044820152606401610911565b600480546001600160a01b038581166001600160a01b031983168117909355604080519190921680825260208201939093527fedffc32e068c7c95dfd4bdfd5c4d939a084d6b11c4199eac8436ed234d72f92691015b60405180910390a16000611b38565b6004546000906001600160a01b03166315f24053306001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ef91906139ab565b600b54600e54600d54600c546124059190613a07565b61240f9190613a07565b6040516001600160e01b031960e086901b168152600481019390935260248301919091526044820152606401611e2e565b60008061244c816127f8565b612454611b58565b5061245d612bf2565b61246d576119b860016058612dbb565b4360095414612482576119b8600a6059612dbb565b670de0b6b3a76400006007546006548561249c9190613a07565b6124a69190613a07565b11156124b8576119b86002605a612dbb565b600880549084905560408051828152602081018690527faaa68312e2ea9d50e16af5068410ab56e1a1fd06037b1a35664812c30f821460910161236a565b61253e60405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6000600e54600d546125509190613a07565b600454600b54600c549293506000926001600160a01b03909216916315f2405391879161257e908790613a07565b6040516001600160e01b031960e086901b168152600481019390935260248301919091526044820152606401602060405180830381865afa1580156125c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125eb91906139ab565b905065048c2739500081111561264257818411156126395760405162461bcd60e51b815260206004820152600b60248201526a21626f72726f775261746560a81b6044820152606401610911565b5065048c273950005b600080612651876009546130c4565b9092509050600082600381111561266a5761266a6139c4565b146126a55760405162461bcd60e51b815260206004820152600b60248201526a21626c6f636b44656c746160a81b6044820152606401610911565b868552600f546040808701919091528051602081019091528381526000906126cd90836130ef565b90506126db81600b54613120565b60e08701819052600b546126ee91613a07565b60608701526040805160208101909152600854815260e0870151600c54612716929190613138565b60808701526040805160208101909152600754815260e0870151600e5461273e929190613138565b60a08701526040805160208101909152600654815260e0870151600d54612766929190613138565b60c0870152600a5461277a90829080613138565b602087015250939695505050505050565b6000808361279e575060009050806127c6565b838302836127ac8683613ab0565b146127bf576002600092509250506127c6565b6000925090505b9250929050565b600080826127e157506001905060006127c6565b60006127ed8486613ab0565b915091509250929050565b600054600160a01b900460ff1661283e5760405162461bcd60e51b815260206004820152600a6024820152691c994b595b9d195c995960b21b6044820152606401610911565b806128ac57600360019054906101000a90046001600160a01b03166001600160a01b031663c90c20b16040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561289357600080fd5b505af11580156128a7573d6000803e3d6000fd5b505050505b506000805460ff60a01b19169055565b6003546040516317b9b84b60e31b81523060048201526001600160a01b03858116602483015284811660448301526064820184905260009283926101009091049091169063bdcdc258906084016020604051808303816000875af1158015612928573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061294c91906139ab565b90508015612969576129616003605b83613162565b915050610e75565b836001600160a01b0316856001600160a01b0316141561298f576129616002605c612dbb565b6000856001600160a01b0316876001600160a01b031614156129b457506000196129dc565b506001600160a01b038086166000908152601160209081526040808320938a16835292905220545b6000806000806129ec85896130c4565b90945092506000846003811115612a0557612a056139c4565b14612a2357612a166009605c612dbb565b9650505050505050610e75565b6001600160a01b038a16600090815260106020526040902054612a4690896130c4565b90945091506000846003811115612a5f57612a5f6139c4565b14612a7057612a166009605d612dbb565b6001600160a01b038916600090815260106020526040902054612a939089613204565b90945090506000846003811115612aac57612aac6139c4565b14612abd57612a166009605e612dbb565b6001600160a01b03808b16600090815260106020526040808220859055918b168152208190556000198514612b15576001600160a01b03808b166000908152601160209081526040808320938f168352929052208390555b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8a604051612b5a91815260200190565b60405180910390a35060009a9950505050505050505050565b6000805460ff60a01b1916600160a01b17905580612bef57600360019054906101000a90046001600160a01b03166001600160a01b031663632e51426040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612bdb57600080fd5b505af1158015610c59573d6000803e3d6000fd5b50565b600080600360019054906101000a90046001600160a01b03169050806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c6f9190613ad2565b6001600160a01b0316336001600160a01b0316148015612cec5750806001600160a01b0316630a755ec26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cec9190613961565b806112ef57506000546001600160a01b0316331480156112ef5750806001600160a01b031663cf6bfd2d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d45573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ef9190613961565b600080600080612d79868661322a565b90925090506000826003811115612d9257612d926139c4565b14612da357509150600090506127c6565b6000612dae826132a6565b9350935050509250929050565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0836011811115612df057612df06139c4565b836061811115612e0257612e026139c4565b60408051928352602083019190915260009082015260600160405180910390a1826011811115610ddb57610ddb6139c4565b60608167ffffffffffffffff811115612e4f57612e4f613a67565b604051908082528060200260200182016040528015612e8257816020015b6060815260200190600190039081612e6d5790505b50905060005b82811015611d365760008030868685818110612ea657612ea6613a9a565b9050602002810190612eb89190613aef565b604051612ec6929190613b36565b600060405180830381855af49150503d8060008114612f01576040519150601f19603f3d011682016040523d82523d6000602084013e612f06565b606091505b509150915081612f5257604481511015612f1f57600080fd5b60048101905080806020019051810190612f399190613b46565b60405162461bcd60e51b815260040161091191906135d6565b80848481518110612f6557612f65613a9a565b602002602001018190525050508080612f7d90613be8565b915050612e88565b600087612f935750856130b9565b6000612fab6040518060200160405280600081525090565b6000612fcc898987612fbd8a8c613a07565b612fc79190613a07565b6132be565b935090506000816003811115612fe457612fe46139c4565b1461303f5760405162461bcd60e51b815260206004820152602560248201527f216164645468656e53756255496e74206f766572666c6f7720636865636b2066604482015264185a5b195960da1b6064820152608401610911565b613049838c613311565b925090506000816003811115613061576130616139c4565b146130ae5760405162461bcd60e51b815260206004820152601d60248201527f21676574457870206f766572666c6f7720636865636b206661696c65640000006044820152606401610911565b505191506130b99050565b979650505050505050565b6000808383116130e35760006130da84866139f0565b915091506127c6565b506003905060006127c6565b60408051602081019091526000815260405180602001604052806131178560000151856133dc565b90529392505050565b60008061312d84846130ef565b9050610e75816132a6565b60008061314585856130ef565b9050613159613153826132a6565b8461341e565b95945050505050565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0846011811115613197576131976139c4565b8460618111156131a9576131a96139c4565b604080519283526020830191909152810184905260600160405180910390a160038460118111156131dc576131dc6139c4565b146131f8578360118111156131f3576131f36139c4565b610e75565b610e75826103e8613a07565b60008083830184811061321c576000925090506127c6565b6002600092509250506127c6565b60006132426040518060200160405280600081525090565b60008061325386600001518661278b565b9092509050600082600381111561326c5761326c6139c4565b1461328b575060408051602081019091526000815290925090506127c6565b60408051602081019091529081526000969095509350505050565b805160009061198890670de0b6b3a764000090613ab0565b6000806000806132ce8787613204565b909250905060008260038111156132e7576132e76139c4565b146132f85750915060009050613309565b61330281866130c4565b9350935050505b935093915050565b60006133296040518060200160405280600081525090565b60008061333e86670de0b6b3a764000061278b565b90925090506000826003811115613357576133576139c4565b14613376575060408051602081019091526000815290925090506127c6565b60008061338383886127cd565b9092509050600082600381111561339c5761339c6139c4565b146133bf57816040518060200160405280600081525095509550505050506127c6565b604080516020810190915290815260009890975095505050505050565b6000610ddb83836040518060400160405280601781526020017f6d756c7469706c69636174696f6e206f766572666c6f77000000000000000000815250613454565b6000610ddb8383604051806040016040528060118152602001706164646974696f6e206f766572666c6f7760781b8152506134b0565b6000831580613461575082155b1561346e57506000610ddb565b600061347a8486613c03565b9050836134878683613ab0565b1483906134a75760405162461bcd60e51b815260040161091191906135d6565b50949350505050565b6000806134bd8486613a07565b905082858210156134a75760405162461bcd60e51b815260040161091191906135d6565b8280546134ed906138f9565b90600052602060002090601f01602090048101928261350f5760008555613555565b82601f106135285782800160ff19823516178555613555565b82800160010185558215613555579182015b8281111561355557823582559160200191906001019061353a565b50613561929150613565565b5090565b5b808211156135615760008155600101613566565b60005b8381101561359557818101518382015260200161357d565b838111156135a4576000848401525b50505050565b600081518084526135c281602086016020860161357a565b601f01601f19169290920160200192915050565b602081526000610ddb60208301846135aa565b6001600160a01b0381168114612bef57600080fd5b6000806040838503121561361157600080fd5b823561361c816135e9565b946020939093013593505050565b60006020828403121561363c57600080fd5b8135610ddb816135e9565b60008060006060848603121561365c57600080fd5b8335613667816135e9565b92506020840135613677816135e9565b929592945050506040919091013590565b60008083601f84011261369a57600080fd5b50813567ffffffffffffffff8111156136b257600080fd5b6020830191508360208285010111156127c657600080fd5b600080600080604085870312156136e057600080fd5b843567ffffffffffffffff808211156136f857600080fd5b61370488838901613688565b9096509450602087013591508082111561371d57600080fd5b5061372a87828801613688565b95989497509550505050565b60006020828403121561374857600080fd5b5035919050565b60008060006040848603121561376457600080fd5b83359250602084013567ffffffffffffffff81111561378257600080fd5b61378e86828701613688565b9497909650939450505050565b6020808252825182820181905260009190848201906040850190845b818110156137dd5783516001600160e01b031916835292840192918401916001016137b7565b50909695505050505050565b600080602083850312156137fc57600080fd5b823567ffffffffffffffff8082111561381457600080fd5b818501915085601f83011261382857600080fd5b81358181111561383757600080fd5b8660208260051b850101111561384c57600080fd5b60209290920196919550909350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156138b357603f198886030184526138a18583516135aa565b94509285019290850190600101613885565b5092979650505050505050565b600080604083850312156138d357600080fd5b82356138de816135e9565b915060208301356138ee816135e9565b809150509250929050565b600181811c9082168061390d57607f821691505b60208210811415611b4557634e487b7160e01b600052602260045260246000fd5b6001600160a01b0394851681529284166020840152921660408201526001600160e01b0319909116606082015260800190565b60006020828403121561397357600080fd5b81518015158114610ddb57600080fd5b6020808252600e908201526d1b9bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b6000602082840312156139bd57600080fd5b5051919050565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082821015613a0257613a026139da565b500390565b60008219821115613a1a57613a1a6139da565b500190565b6001600160a01b0385168152602081018490526060604082018190528101829052818360808301376000818301608090810191909152601f909201601f191601019392505050565b634e487b7160e01b600052604160045260246000fd5b600060ff821680613a9057613a906139da565b6000190192915050565b634e487b7160e01b600052603260045260246000fd5b600082613acd57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215613ae457600080fd5b8151610ddb816135e9565b6000808335601e19843603018112613b0657600080fd5b83018035915067ffffffffffffffff821115613b2157600080fd5b6020019150368190038213156127c657600080fd5b8183823760009101908152919050565b600060208284031215613b5857600080fd5b815167ffffffffffffffff80821115613b7057600080fd5b818401915084601f830112613b8457600080fd5b815181811115613b9657613b96613a67565b604051601f8201601f19908116603f01168101908382118183101715613bbe57613bbe613a67565b81604052828152876020848701011115613bd757600080fd5b6130b983602083016020880161357a565b6000600019821415613bfc57613bfc6139da565b5060010190565b6000816000190483118215151615613c1d57613c1d6139da565b50029056fea164736f6c634300080a000a