Loading
[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "ammount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "accountBorrow", "type": "uint256" } ], "name": "Borrow", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "liquidator", "type": "address" }, { "indexed": false, "internalType": "address", "name": "borrower", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "lTokenCollateral", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "seizeAmount", "type": "uint256" } ], "name": "LiquidateBorrow", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "minter", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "mintAmount", "type": "uint256" } ], "name": "Mint", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "underlyingAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "lTokenAmount", "type": "uint256" } ], "name": "Redeem", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "payer", "type": "address" }, { "indexed": false, "internalType": "address", "name": "borrower", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "accountBorrow", "type": "uint256" } ], "name": "RepayBorrow", "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": "_totalBorrow", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "accInterestIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "accountSnapshot", "outputs": [ { "components": [ { "internalType": "uint256", "name": "lTokenBalance", "type": "uint256" }, { "internalType": "uint256", "name": "borrowBalance", "type": "uint256" }, { "internalType": "uint256", "name": "exchangeRate", "type": "uint256" } ], "internalType": "struct Constant.AccountSnapshot", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "accruedAccountSnapshot", "outputs": [ { "components": [ { "internalType": "uint256", "name": "lTokenBalance", "type": "uint256" }, { "internalType": "uint256", "name": "borrowBalance", "type": "uint256" }, { "internalType": "uint256", "name": "exchangeRate", "type": "uint256" } ], "internalType": "struct Constant.AccountSnapshot", "name": "", "type": "tuple" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "accruedBorrowBalanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "accruedExchangeRate", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "accruedTotalBorrow", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "borrow", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "borrowBalanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "address", "name": "borrower", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "borrowBehalf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "core", "outputs": [ { "internalType": "contract ICore", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "exchangeRate", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getAccInterestIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getCash", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getOwner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getRateModel", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" }, { "internalType": "uint8", "name": "_decimals", "type": "uint8" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "initialized", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lastAccruedTime", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "lTokenCollateral", "type": "address" }, { "internalType": "address", "name": "liquidator", "type": "address" }, { "internalType": "address", "name": "borrower", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "liquidateBorrow", "outputs": [ { "internalType": "uint256", "name": "seizeLAmount", "type": "uint256" }, { "internalType": "uint256", "name": "rebateLAmount", "type": "uint256" }, { "internalType": "uint256", "name": "liquidatorLAmount", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "rateModel", "outputs": [ { "internalType": "contract IRateModel", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "rebateDistributor", "outputs": [ { "internalType": "contract IRebateDistributor", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "redeemer", "type": "address" }, { "internalType": "uint256", "name": "lAmount", "type": "uint256" } ], "name": "redeemToken", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "redeemer", "type": "address" }, { "internalType": "uint256", "name": "uAmount", "type": "uint256" } ], "name": "redeemUnderlying", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "repayBorrow", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "reserveFactor", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "liquidator", "type": "address" }, { "internalType": "address", "name": "borrower", "type": "address" }, { "internalType": "uint256", "name": "lAmount", "type": "uint256" } ], "name": "seize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_core", "type": "address" } ], "name": "setCore", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_rateModel", "type": "address" } ], "name": "setRateModel", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_rebateDistributor", "type": "address" } ], "name": "setRebateDistributor", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_reserveFactor", "type": "uint256" } ], "name": "setReserveFactor", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_underlying", "type": "address" } ], "name": "setUnderlying", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "uAmount", "type": "uint256" } ], "name": "supply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "address", "name": "supplier", "type": "address" }, { "internalType": "uint256", "name": "uAmount", "type": "uint256" } ], "name": "supplyBehalf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalBorrow", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalReserve", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "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": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "address", "name": "src", "type": "address" }, { "internalType": "address", "name": "dst", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferTokensInternal", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "underlying", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "underlyingBalanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "withdrawReserves", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ]
60806040523480156200001157600080fd5b5060006200001e62000105565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060018055604051632210724360e11b8152738680ceabcb9b56913c519c069add6bc3494b7020908190634420e48690620000a790339060040162000122565b602060405180830381600087803b158015620000c257600080fd5b505af1158015620000d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000fd919062000109565b505062000136565b3390565b6000602082840312156200011b578081fd5b5051919050565b6001600160a01b0391909116815260200190565b614fce80620001466000396000f3fe6080604052600436106103035760003560e01c8063830cbbbd11610190578063b2a02ff1116100dc578063dd62ed3e11610095578063ecdaff7e1161006f578063ecdaff7e14610853578063f2b9fdb814610868578063f2f4eb261461087b578063f2fde38b146108905761030a565b8063dd62ed3e146107f1578063de02d64214610811578063e61604cf146108315761030a565b8063b2a02ff114610754578063bba6157814610774578063bdb2321f14610787578063c23379da146107a7578063d49187b3146107c7578063d88c3f22146107dc5761030a565b8063935a8b84116101495780639951c2cf116101235780639951c2cf146106f7578063a10884591461070c578063a9059cbb14610721578063abdb5ea8146107415761030a565b8063935a8b84146106a257806395d89b41146106c257806396294178146106d75761030a565b8063830cbbbd146106035780638399c0ba14610623578063893d20e8146106435780638b9db037146106585780638da5cb5b1461066d57806392fa4e8e146106825761030a565b80633ba0b9a91161024f5780636f307dc3116102085780637f9028c8116101e25780637f9028c8146105995780637ffc93b1146105b957806380009630146105ce5780638285ef40146105ee5761030a565b80636f307dc31461054f57806370a0823114610564578063715018a6146105845761030a565b80633ba0b9a9146104b95780634322b714146104ce5780634b8a3529146104e35780634c68df671461050357806352e97efd1461051857806359341a1a1461052d5761030a565b80631c446983116102bc578063313ce56711610296578063313ce5671461044257806333f9c87614610464578063374c49b4146104845780633b1d21a2146104a45761030a565b80631c446983146103ed57806323b872dd1461040d57806326d5f6411461042d5761030a565b8063014a296f1461030f57806306fdde0314610345578063095ea7b314610367578063158ef93e146103945780631624f6c6146103a957806318160ddd146103cb5761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b5061032f61032a36600461443e565b6108b0565b60405161033c9190614eb9565b60405180910390f35b34801561035157600080fd5b5061035a6108fe565b60405161033c919061477f565b34801561037357600080fd5b5061038761038236600461453e565b61098c565b60405161033c9190614774565b3480156103a057600080fd5b506103876109f7565b3480156103b557600080fd5b506103c96103c4366004614589565b610a05565b005b3480156103d757600080fd5b506103e0610ac7565b60405161033c9190614eda565b3480156103f957600080fd5b506103c9610408366004614603565b610acd565b34801561041957600080fd5b506103876104283660046144fe565b610caa565b34801561043957600080fd5b506103c9610e9b565b34801561044e57600080fd5b5061045761107b565b60405161033c9190614ef9565b34801561047057600080fd5b506103e061047f3660046144fe565b611084565b34801561049057600080fd5b506103e061049f36600461443e565b611289565b3480156104b057600080fd5b506103e06112eb565b3480156104c557600080fd5b506103e06112fb565b3480156104da57600080fd5b506103e061136b565b3480156104ef57600080fd5b506103e06104fe36600461453e565b611371565b34801561050f57600080fd5b506103e0611575565b34801561052457600080fd5b506103e061157b565b34801561053957600080fd5b50610542611581565b60405161033c919061467c565b34801561055b57600080fd5b50610542611590565b34801561057057600080fd5b506103e061057f36600461443e565b61159f565b34801561059057600080fd5b506103c96115ba565b3480156105a557600080fd5b506103c96105b436600461443e565b611643565b3480156105c557600080fd5b506103e061181c565b3480156105da57600080fd5b506103c96105e936600461443e565b611822565b3480156105fa57600080fd5b506103e06118d2565b34801561060f57600080fd5b506103e061061e36600461453e565b6118eb565b34801561062f57600080fd5b506103e061063e36600461443e565b611a7c565b34801561064f57600080fd5b50610542611c1d565b34801561066457600080fd5b506103e0611c27565b34801561067957600080fd5b50610542611d83565b34801561068e57600080fd5b5061032f61069d36600461443e565b611d92565b3480156106ae57600080fd5b506103e06106bd36600461443e565b611f72565b3480156106ce57600080fd5b5061035a611faa565b3480156106e357600080fd5b506103e06106f236600461453e565b612005565b34801561070357600080fd5b506103e061218f565b34801561071857600080fd5b50610542612195565b34801561072d57600080fd5b5061038761073c36600461453e565b6121a4565b6103e061074f36600461453e565b612394565b34801561076057600080fd5b506103c961076f3660046144fe565b61254e565b6103e06107823660046144fe565b612795565b34801561079357600080fd5b506103c96107a236600461443e565b612a09565b3480156107b357600080fd5b506103c96107c23660046144ae565b612ab9565b3480156107d357600080fd5b50610542612d94565b3480156107e857600080fd5b506103e0612da3565b3480156107fd57600080fd5b506103e061080c366004614476565b612dbf565b34801561081d57600080fd5b506103c961082c36600461443e565b612dea565b61084461083f3660046144ae565b612e71565b60405161033c93929190614ee3565b34801561085f57600080fd5b506103e061326d565b6103e061087636600461453e565b6133c8565b34801561088757600080fd5b5061054261363b565b34801561089c57600080fd5b506103c96108ab36600461443e565b61364a565b6108b861430c565b6108c061430c565b6001600160a01b03831660009081526009602052604090205481526108e483611289565b60208201526108f16112fb565b604082015290505b919050565b600e805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156109845780601f1061095957610100808354040283529160200191610984565b820191906000526020600020905b81548152906001019060200180831161096757829003601f168201915b505050505081565b3360008181526011602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906109e5908690614eda565b60405180910390a35060015b92915050565b601054610100900460ff1681565b610a0d61370a565b6001600160a01b0316610a1e611d83565b6001600160a01b031614610a4d5760405162461bcd60e51b8152600401610a4490614c15565b60405180910390fd5b601054610100900460ff1615610a755760405162461bcd60e51b8152600401610a4490614b1a565b610a7d61370e565b8251610a9090600e90602086019061432d565b508151610aa490600f90602085019061432d565b506010805461ff001960ff90931660ff1990911617919091166101001790555050565b60065481565b600c5442118015610ae857506003546001600160a01b031615155b15610c3e576003546000906001600160a01b03166315f24053610b09613720565b6008546007546040518463ffffffff1660e01b8152600401610b2d93929190614ee3565b60206040518083038186803b158015610b4557600080fd5b505afa158015610b59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7d919061461b565b90506000610ba0610b99600c54426137bf90919063ffffffff16565b83906137e7565b90506000610bcb670de0b6b3a7640000610bc5846008546137e790919063ffffffff16565b90613821565b600854909150610bdb9082613853565b600855600b54610c0790610bfe90670de0b6b3a764000090610bc59085906137e7565b60075490613853565b600755600d54610c3390610c2a90670de0b6b3a764000090610bc59086906137e7565b600d5490613853565b600d55505042600c55505b610c4661370a565b6001600160a01b0316610c57611d83565b6001600160a01b031614610c7d5760405162461bcd60e51b8152600401610a4490614c15565b670de0b6b3a7640000811115610ca55760405162461bcd60e51b8152600401610a4490614ddd565b600b55565b6000600c5442118015610cc757506003546001600160a01b031615155b15610dfe576003546000906001600160a01b03166315f24053610ce8613720565b6008546007546040518463ffffffff1660e01b8152600401610d0c93929190614ee3565b60206040518083038186803b158015610d2457600080fd5b505afa158015610d38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5c919061461b565b90506000610d78610b99600c54426137bf90919063ffffffff16565b90506000610d9d670de0b6b3a7640000610bc5846008546137e790919063ffffffff16565b600854909150610dad9082613853565b600855600b54610dd090610bfe90670de0b6b3a764000090610bc59085906137e7565b600755600d54610df390610c2a90670de0b6b3a764000090610bc59086906137e7565b600d55505042600c55505b60026001541415610e215760405162461bcd60e51b8152600401610a4490614e14565b60026001819055546040516368155ec160e01b81526001600160a01b03909116906368155ec190610e5c903390889088908890600401614690565b600060405180830381600087803b158015610e7657600080fd5b505af1158015610e8a573d6000803e3d6000fd5b505060018080559695505050505050565b600c5442118015610eb657506003546001600160a01b031615155b15610fed576003546000906001600160a01b03166315f24053610ed7613720565b6008546007546040518463ffffffff1660e01b8152600401610efb93929190614ee3565b60206040518083038186803b158015610f1357600080fd5b505afa158015610f27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4b919061461b565b90506000610f67610b99600c54426137bf90919063ffffffff16565b90506000610f8c670de0b6b3a7640000610bc5846008546137e790919063ffffffff16565b600854909150610f9c9082613853565b600855600b54610fbf90610bfe90670de0b6b3a764000090610bc59085906137e7565b600755600d54610fe290610c2a90670de0b6b3a764000090610bc59086906137e7565b600d55505042600c55505b6004546001600160a01b031633146110175760405162461bcd60e51b8152600401610a4490614d51565b6002600154141561103a5760405162461bcd60e51b8152600401610a4490614e14565b600260015560075461104a6112eb565b10611075576007548015611073576000600755600454611073906001600160a01b031682613878565b505b60018055565b60105460ff1681565b6000600c54421180156110a157506003546001600160a01b031615155b156111d8576003546000906001600160a01b03166315f240536110c2613720565b6008546007546040518463ffffffff1660e01b81526004016110e693929190614ee3565b60206040518083038186803b1580156110fe57600080fd5b505afa158015611112573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611136919061461b565b90506000611152610b99600c54426137bf90919063ffffffff16565b90506000611177670de0b6b3a7640000610bc5846008546137e790919063ffffffff16565b6008549091506111879082613853565b600855600b546111aa90610bfe90670de0b6b3a764000090610bc59085906137e7565b600755600d546111cd90610c2a90670de0b6b3a764000090610bc59086906137e7565b600d55505042600c55505b6002546001600160a01b031633146112025760405162461bcd60e51b8152600401610a4490614e4b565b8161120b6112eb565b10156112295760405162461bcd60e51b8152600401610a4490614c4a565b611235838360006138b2565b61123f8483613878565b7fe1979fe4c35e0cef342fef5668e2c8e7a7e9f5d5d1ca8fee0ac6c427fa4153af838361126b86611289565b60405161127a93929190614753565b60405180910390a15092915050565b600061129361430c565b61129b61395a565b6001600160a01b0384166000908152600a602052604090208054919250906112c8576000925050506108f9565b6001810154604083015182546112e39291610bc591906137e7565b949350505050565b60006112f5613720565b90505b90565b6000600654600014156113175750670de0b6b3a76400006112f8565b61131f61430c565b61132761395a565b9050611365600654610bc5670de0b6b3a764000061135f85602001516113598760000151611353613720565b90613853565b906137bf565b906137e7565b91505090565b600b5481565b6000600c544211801561138e57506003546001600160a01b031615155b156114c5576003546000906001600160a01b03166315f240536113af613720565b6008546007546040518463ffffffff1660e01b81526004016113d393929190614ee3565b60206040518083038186803b1580156113eb57600080fd5b505afa1580156113ff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611423919061461b565b9050600061143f610b99600c54426137bf90919063ffffffff16565b90506000611464670de0b6b3a7640000610bc5846008546137e790919063ffffffff16565b6008549091506114749082613853565b600855600b5461149790610bfe90670de0b6b3a764000090610bc59085906137e7565b600755600d546114ba90610c2a90670de0b6b3a764000090610bc59086906137e7565b600d55505042600c55505b6002546001600160a01b031633146114ef5760405162461bcd60e51b8152600401610a4490614e4b565b816114f86112eb565b10156115165760405162461bcd60e51b8152600401610a4490614c4a565b611522838360006138b2565b61152c8383613878565b7fe1979fe4c35e0cef342fef5668e2c8e7a7e9f5d5d1ca8fee0ac6c427fa4153af838361155886611289565b60405161156793929190614753565b60405180910390a150919050565b60075481565b60085481565b6004546001600160a01b031681565b6005546001600160a01b031681565b6001600160a01b031660009081526009602052604090205490565b6115c261370a565b6001600160a01b03166115d3611d83565b6001600160a01b0316146115f95760405162461bcd60e51b8152600401610a4490614c15565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600c544211801561165e57506003546001600160a01b031615155b15611795576003546000906001600160a01b03166315f2405361167f613720565b6008546007546040518463ffffffff1660e01b81526004016116a393929190614ee3565b60206040518083038186803b1580156116bb57600080fd5b505afa1580156116cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f3919061461b565b9050600061170f610b99600c54426137bf90919063ffffffff16565b90506000611734670de0b6b3a7640000610bc5846008546137e790919063ffffffff16565b6008549091506117449082613853565b600855600b5461176790610bfe90670de0b6b3a764000090610bc59085906137e7565b600755600d5461178a90610c2a90670de0b6b3a764000090610bc59086906137e7565b600d55505042600c55505b61179d61370a565b6001600160a01b03166117ae611d83565b6001600160a01b0316146117d45760405162461bcd60e51b8152600401610a4490614c15565b6001600160a01b0381166117fa5760405162461bcd60e51b8152600401610a4490614cc3565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b600c5481565b61182a61370a565b6001600160a01b031661183b611d83565b6001600160a01b0316146118615760405162461bcd60e51b8152600401610a4490614c15565b6001600160a01b0381166118875760405162461bcd60e51b8152600401610a4490614866565b6002546001600160a01b0316156118b05760405162461bcd60e51b8152600401610a44906148d4565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b60006118dc61430c565b6118e461395a565b5191505090565b6000600c544211801561190857506003546001600160a01b031615155b15611a3f576003546000906001600160a01b03166315f24053611929613720565b6008546007546040518463ffffffff1660e01b815260040161194d93929190614ee3565b60206040518083038186803b15801561196557600080fd5b505afa158015611979573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199d919061461b565b905060006119b9610b99600c54426137bf90919063ffffffff16565b905060006119de670de0b6b3a7640000610bc5846008546137e790919063ffffffff16565b6008549091506119ee9082613853565b600855600b54611a1190610bfe90670de0b6b3a764000090610bc59085906137e7565b600755600d54611a3490610c2a90670de0b6b3a764000090610bc59086906137e7565b600d55505042600c55505b6002546001600160a01b03163314611a695760405162461bcd60e51b8152600401610a4490614e4b565b611a7583836000613acc565b9392505050565b6000600c5442118015611a9957506003546001600160a01b031615155b15611bd0576003546000906001600160a01b03166315f24053611aba613720565b6008546007546040518463ffffffff1660e01b8152600401611ade93929190614ee3565b60206040518083038186803b158015611af657600080fd5b505afa158015611b0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2e919061461b565b90506000611b4a610b99600c54426137bf90919063ffffffff16565b90506000611b6f670de0b6b3a7640000610bc5846008546137e790919063ffffffff16565b600854909150611b7f9082613853565b600855600b54611ba290610bfe90670de0b6b3a764000090610bc59085906137e7565b600755600d54611bc590610c2a90670de0b6b3a764000090610bc59086906137e7565b600d55505042600c55505b6001600160a01b0382166000908152600a60205260409020600181015415611c16576001810154600d548254611c0b9291610bc591906137e7565b8155600d5460018201555b5492915050565b60006112f5611d83565b6000600c5442118015611c4457506003546001600160a01b031615155b15611d7b576003546000906001600160a01b03166315f24053611c65613720565b6008546007546040518463ffffffff1660e01b8152600401611c8993929190614ee3565b60206040518083038186803b158015611ca157600080fd5b505afa158015611cb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cd9919061461b565b90506000611cf5610b99600c54426137bf90919063ffffffff16565b90506000611d1a670de0b6b3a7640000610bc5846008546137e790919063ffffffff16565b600854909150611d2a9082613853565b600855600b54611d4d90610bfe90670de0b6b3a764000090610bc59085906137e7565b600755600d54611d7090610c2a90670de0b6b3a764000090610bc59086906137e7565b600d55505042600c55505b6112f56112fb565b6000546001600160a01b031690565b611d9a61430c565b600c5442118015611db557506003546001600160a01b031615155b15611eec576003546000906001600160a01b03166315f24053611dd6613720565b6008546007546040518463ffffffff1660e01b8152600401611dfa93929190614ee3565b60206040518083038186803b158015611e1257600080fd5b505afa158015611e26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4a919061461b565b90506000611e66610b99600c54426137bf90919063ffffffff16565b90506000611e8b670de0b6b3a7640000610bc5846008546137e790919063ffffffff16565b600854909150611e9b9082613853565b600855600b54611ebe90610bfe90670de0b6b3a764000090610bc59085906137e7565b600755600d54611ee190610c2a90670de0b6b3a764000090610bc59086906137e7565b600d55505042600c55505b611ef461430c565b6001600160a01b0383166000908152600a60205260409020600181015415611f3a576001810154600d548254611f2f9291610bc591906137e7565b8155600d5460018201555b6001600160a01b0384166000908152600960209081526040909120548352815490830152611f666112fb565b60408301525092915050565b60006109f1670de0b6b3a7640000610bc5611f8b6112fb565b6001600160a01b038616600090815260096020526040902054906137e7565b600f805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156109845780601f1061095957610100808354040283529160200191610984565b6000600c544211801561202257506003546001600160a01b031615155b15612159576003546000906001600160a01b03166315f24053612043613720565b6008546007546040518463ffffffff1660e01b815260040161206793929190614ee3565b60206040518083038186803b15801561207f57600080fd5b505afa158015612093573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b7919061461b565b905060006120d3610b99600c54426137bf90919063ffffffff16565b905060006120f8670de0b6b3a7640000610bc5846008546137e790919063ffffffff16565b6008549091506121089082613853565b600855600b5461212b90610bfe90670de0b6b3a764000090610bc59085906137e7565b600755600d5461214e90610c2a90670de0b6b3a764000090610bc59086906137e7565b600d55505042600c55505b6002546001600160a01b031633146121835760405162461bcd60e51b8152600401610a4490614e4b565b611a7583600084613acc565b600d5481565b6003546001600160a01b031681565b6000600c54421180156121c157506003546001600160a01b031615155b156122f8576003546000906001600160a01b03166315f240536121e2613720565b6008546007546040518463ffffffff1660e01b815260040161220693929190614ee3565b60206040518083038186803b15801561221e57600080fd5b505afa158015612232573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612256919061461b565b90506000612272610b99600c54426137bf90919063ffffffff16565b90506000612297670de0b6b3a7640000610bc5846008546137e790919063ffffffff16565b6008549091506122a79082613853565b600855600b546122ca90610bfe90670de0b6b3a764000090610bc59085906137e7565b600755600d546122ed90610c2a90670de0b6b3a764000090610bc59086906137e7565b600d55505042600c55505b6002600154141561231b5760405162461bcd60e51b8152600401610a4490614e14565b60026001819055546040516368155ec160e01b81526001600160a01b03909116906368155ec190612356903390819088908890600401614690565b600060405180830381600087803b15801561237057600080fd5b505af1158015612384573d6000803e3d6000fd5b5050600180805595945050505050565b6000600c54421180156123b157506003546001600160a01b031615155b156124e8576003546000906001600160a01b03166315f240536123d2613720565b6008546007546040518463ffffffff1660e01b81526004016123f693929190614ee3565b60206040518083038186803b15801561240e57600080fd5b505afa158015612422573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612446919061461b565b90506000612462610b99600c54426137bf90919063ffffffff16565b90506000612487670de0b6b3a7640000610bc5846008546137e790919063ffffffff16565b6008549091506124979082613853565b600855600b546124ba90610bfe90670de0b6b3a764000090610bc59085906137e7565b600755600d546124dd90610c2a90670de0b6b3a764000090610bc59086906137e7565b600d55505042600c55505b6002546001600160a01b031633146125125760405162461bcd60e51b8152600401610a4490614e4b565b6000198214156125285761252583611289565b91505b600554611a7590849081906001600160a01b0316156125475784612549565b345b613da9565b600c544211801561256957506003546001600160a01b031615155b156126a0576003546000906001600160a01b03166315f2405361258a613720565b6008546007546040518463ffffffff1660e01b81526004016125ae93929190614ee3565b60206040518083038186803b1580156125c657600080fd5b505afa1580156125da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125fe919061461b565b9050600061261a610b99600c54426137bf90919063ffffffff16565b9050600061263f670de0b6b3a7640000610bc5846008546137e790919063ffffffff16565b60085490915061264f9082613853565b600855600b5461267290610bfe90670de0b6b3a764000090610bc59085906137e7565b600755600d5461269590610c2a90670de0b6b3a764000090610bc59086906137e7565b600d55505042600c55505b6002546001600160a01b031633146126ca5760405162461bcd60e51b8152600401610a4490614e4b565b600260015414156126ed5760405162461bcd60e51b8152600401610a4490614e14565b60026001556001600160a01b03821660009081526009602052604090205461271590826137bf565b6001600160a01b0380841660009081526009602052604080822093909355908516815220546127449082613853565b6001600160a01b038085166000818152600960205260409081902093909355915190841690600080516020614f7983398151915290612784908590614eda565b60405180910390a350506001805550565b6000600c54421180156127b257506003546001600160a01b031615155b156128e9576003546000906001600160a01b03166315f240536127d3613720565b6008546007546040518463ffffffff1660e01b81526004016127f793929190614ee3565b60206040518083038186803b15801561280f57600080fd5b505afa158015612823573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612847919061461b565b90506000612863610b99600c54426137bf90919063ffffffff16565b90506000612888670de0b6b3a7640000610bc5846008546137e790919063ffffffff16565b6008549091506128989082613853565b600855600b546128bb90610bfe90670de0b6b3a764000090610bc59085906137e7565b600755600d546128de90610c2a90670de0b6b3a764000090610bc59086906137e7565b600d55505042600c55505b6002546001600160a01b031633146129135760405162461bcd60e51b8152600401610a4490614e4b565b600061291d6112fb565b6005549091506001600160a01b0316156129375782612939565b345b92506129458584613e58565b9250600061295f82610bc586670de0b6b3a76400006137e7565b9050600081116129815760405162461bcd60e51b8152600401610a4490614a75565b61298d85826000613fe4565b7f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688585826040516129be92919061473a565b60405180910390a1846001600160a01b031660006001600160a01b0316600080516020614f79833981519152836040516129f89190614eda565b60405180910390a395945050505050565b612a1161370a565b6001600160a01b0316612a22611d83565b6001600160a01b031614612a485760405162461bcd60e51b8152600401610a4490614c15565b6001600160a01b038116612a6e5760405162461bcd60e51b8152600401610a44906149fb565b6005546001600160a01b031615612a975760405162461bcd60e51b8152600401610a4490614aac565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b03163314612ae35760405162461bcd60e51b8152600401610a4490614e4b565b816001600160a01b0316836001600160a01b031614158015612c075750600260009054906101000a90046001600160a01b03166001600160a01b0316633a5381b56040518163ffffffff1660e01b815260040160206040518083038186803b158015612b4e57600080fd5b505afa158015612b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b86919061445a565b6001600160a01b031663eabe7d913085846040518463ffffffff1660e01b8152600401612bb5939291906146ba565b602060405180830381600087803b158015612bcf57600080fd5b505af1158015612be3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c079190614569565b612c235760405162461bcd60e51b8152600401610a449061490b565b80612c405760405162461bcd60e51b8152600401610a4490614839565b6000836001600160a01b0316856001600160a01b031614612c86576001600160a01b03808516600090815260116020908152604080832093891683529290522054612c8a565b6000195b90506000612cb383604051806060016040528060298152602001614f5060299139849190614059565b6001600160a01b038616600090815260096020526040902054909150612cd990846137bf565b6001600160a01b038087166000908152600960205260408082209390935590861681522054612d089084613853565b6001600160a01b0385166000908152600960205260409020556000198214612d53576001600160a01b038086166000908152601160209081526040808320938a168352929052208190555b836001600160a01b0316856001600160a01b0316600080516020614f7983398151915285604051612d849190614eda565b60405180910390a3505050505050565b6003546001600160a01b031690565b6000612dad61430c565b612db561395a565b6040015191505090565b6001600160a01b03918216600090815260116020908152604080832093909416825291909152205490565b612df261370a565b6001600160a01b0316612e03611d83565b6001600160a01b031614612e295760405162461bcd60e51b8152600401610a4490614c15565b6001600160a01b038116612e4f5760405162461bcd60e51b8152600401610a4490614d06565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000806000600c5442118015612e9157506003546001600160a01b031615155b15612fc8576003546000906001600160a01b03166315f24053612eb2613720565b6008546007546040518463ffffffff1660e01b8152600401612ed693929190614ee3565b60206040518083038186803b158015612eee57600080fd5b505afa158015612f02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f26919061461b565b90506000612f42610b99600c54426137bf90919063ffffffff16565b90506000612f67670de0b6b3a7640000610bc5846008546137e790919063ffffffff16565b600854909150612f779082613853565b600855600b54612f9a90610bfe90670de0b6b3a764000090610bc59085906137e7565b600755600d54612fbd90610c2a90670de0b6b3a764000090610bc59086906137e7565b600d55505042600c55505b6002546001600160a01b03163314612ff25760405162461bcd60e51b8152600401610a4490614e4b565b856001600160a01b0316856001600160a01b031614156130245760405162461bcd60e51b8152600401610a44906147b2565b6005546001600160a01b03161561303b578361303d565b345b935061304a868686613da9565b935060008411801561305d575060001984105b6130795760405162461bcd60e51b8152600401610a4490614e82565b600260009054906101000a90046001600160a01b03166001600160a01b0316633a5381b56040518163ffffffff1660e01b815260040160206040518083038186803b1580156130c757600080fd5b505afa1580156130db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130ff919061445a565b6001600160a01b031663f643b5df3089876040518463ffffffff1660e01b815260040161312e939291906146ba565b606060405180830381600087803b15801561314857600080fd5b505af115801561315c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131809190614633565b6040516370a0823160e01b8152929550909350915083906001600160a01b038916906370a08231906131b690899060040161467c565b60206040518083038186803b1580156131ce57600080fd5b505afa1580156131e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613206919061461b565b10156132245760405162461bcd60e51b8152600401610a4490614bb7565b7f298637f684da70674f26509b10f07ec2fbc77a335ab1e7d6215a4b2484d8bb528686868a8760405161325b9594939291906146de565b60405180910390a19450945094915050565b6000600c544211801561328a57506003546001600160a01b031615155b156133c1576003546000906001600160a01b03166315f240536132ab613720565b6008546007546040518463ffffffff1660e01b81526004016132cf93929190614ee3565b60206040518083038186803b1580156132e757600080fd5b505afa1580156132fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061331f919061461b565b9050600061333b610b99600c54426137bf90919063ffffffff16565b90506000613360670de0b6b3a7640000610bc5846008546137e790919063ffffffff16565b6008549091506133709082613853565b600855600b5461339390610bfe90670de0b6b3a764000090610bc59085906137e7565b600755600d546133b690610c2a90670de0b6b3a764000090610bc59086906137e7565b600d55505042600c55505b5060085490565b6000600c54421180156133e557506003546001600160a01b031615155b1561351c576003546000906001600160a01b03166315f24053613406613720565b6008546007546040518463ffffffff1660e01b815260040161342a93929190614ee3565b60206040518083038186803b15801561344257600080fd5b505afa158015613456573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061347a919061461b565b90506000613496610b99600c54426137bf90919063ffffffff16565b905060006134bb670de0b6b3a7640000610bc5846008546137e790919063ffffffff16565b6008549091506134cb9082613853565b600855600b546134ee90610bfe90670de0b6b3a764000090610bc59085906137e7565b600755600d5461351190610c2a90670de0b6b3a764000090610bc59086906137e7565b600d55505042600c55505b6002546001600160a01b031633146135465760405162461bcd60e51b8152600401610a4490614e4b565b60006135506112fb565b6005549091506001600160a01b03161561356a578261356c565b345b92506135788484613e58565b9250600061359282610bc586670de0b6b3a76400006137e7565b9050600081116135b45760405162461bcd60e51b8152600401610a4490614a75565b6135c085826000613fe4565b7f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688585826040516135f192919061473a565b60405180910390a1846001600160a01b031660006001600160a01b0316600080516020614f798339815191528360405161362b9190614eda565b60405180910390a3949350505050565b6002546001600160a01b031681565b61365261370a565b6001600160a01b0316613663611d83565b6001600160a01b0316146136895760405162461bcd60e51b8152600401610a4490614c15565b6001600160a01b0381166136af5760405162461bcd60e51b8152600401610a44906147f3565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b42600c55670de0b6b3a7640000600d55565b6005546000906001600160a01b0316156137b9576005546040516370a0823160e01b81526001600160a01b03909116906370a082319061376490309060040161467c565b60206040518083038186803b15801561377c57600080fd5b505afa158015613790573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137b4919061461b565b6112f5565b6112f547345b6000828211156137e15760405162461bcd60e51b8152600401610a44906149c4565b50900390565b6000826137f6575060006109f1565b8282028284828161380357fe5b0414611a755760405162461bcd60e51b8152600401610a4490614b76565b60008082116138425760405162461bcd60e51b8152600401610a4490614a3e565b81838161384b57fe5b049392505050565b600082820183811015611a755760405162461bcd60e51b8152600401610a449061489d565b6005546001600160a01b0316613897576138928282614085565b6138ae565b6005546138ae906001600160a01b03168383614117565b5050565b6001600160a01b0383166000908152600a6020526040902060018101546138dc57600d5460018201555b61390582611359856113538560010154610bc5600d5488600001546137e790919063ffffffff16565b8155600d5460018201556008546139229083906113599086613853565b60085580546103e811613936578054613939565b60005b81556008546103e81161394e57600854613951565b60005b60085550505050565b61396261430c565b61396a61430c565b60085481526007546020820152600d546040820152600c544211801561399257506000600854115b156112f5576003546000906001600160a01b03166315f240536139b3613720565b6008546007546040518463ffffffff1660e01b81526004016139d793929190614ee3565b60206040518083038186803b1580156139ef57600080fd5b505afa158015613a03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a27919061461b565b90506000613a43610b99600c54426137bf90919063ffffffff16565b90506000613a68670de0b6b3a7640000610bc5846008546137e790919063ffffffff16565b600854909150613a789082613853565b8452600b54613a9a90610bfe90670de0b6b3a764000090610bc59085906137e7565b6020850152600d54613abf90610c2a90670de0b6b3a764000090610bc59086906137e7565b6040850152505050905090565b6000821580613ad9575081155b613af55760405162461bcd60e51b8152600401610a4490614942565b826006541015613b175760405162461bcd60e51b8152600401610a4490614ae3565b81613b206112eb565b101580613b2b575081155b613b475760405162461bcd60e51b8152600401610a4490614c8c565b613b65670de0b6b3a7640000610bc5613b5e6112fb565b86906137e7565b613b6d6112eb565b101580613b78575082155b613b945760405162461bcd60e51b8152600401610a4490614c8c565b6000808411613bbf57613bba613ba86112fb565b610bc585670de0b6b3a76400006137e7565b613bc1565b835b90506000808511613bd25783613bf0565b613bf0670de0b6b3a7640000610bc5613be96112fb565b88906137e7565b9050600260009054906101000a90046001600160a01b03166001600160a01b0316633a5381b56040518163ffffffff1660e01b815260040160206040518083038186803b158015613c4057600080fd5b505afa158015613c54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c78919061445a565b6001600160a01b031663eabe7d913088856040518463ffffffff1660e01b8152600401613ca7939291906146ba565b602060405180830381600087803b158015613cc157600080fd5b505af1158015613cd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cf99190614569565b613d155760405162461bcd60e51b8152600401610a4490614b47565b613d2186600084613fe4565b613d2b8682613878565b60006001600160a01b0316866001600160a01b0316600080516020614f7983398151915284604051613d5d9190614eda565b60405180910390a37fe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a929868284604051613d9893929190614753565b60405180910390a195945050505050565b600080613db584611289565b90506000613dc38285614205565b9050613dcf8682613e58565b9050613ddd856000836138b2565b6005546001600160a01b0316613e1b576000818511613dfd576000613e07565b613e0785836137bf565b90508015613e1957613e198782613878565b505b7fa9a154237a69922f8860321d1fec1624a5dbe8a8af89a3dd3d7a759f6c8080d8868683613e4889611289565b604051613d989493929190614711565b6005546000906001600160a01b0316613e9c5781341015613e8b5760405162461bcd60e51b8152600401610a4490614994565b613e953483614205565b90506109f1565b6005546040516370a0823160e01b81526000916001600160a01b0316906370a0823190613ecd90309060040161467c565b60206040518083038186803b158015613ee557600080fd5b505afa158015613ef9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f1d919061461b565b600554909150613f38906001600160a01b031685308661421b565b6005546040516370a0823160e01b81526000916001600160a01b0316906370a0823190613f6990309060040161467c565b60206040518083038186803b158015613f8157600080fd5b505afa158015613f95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fb9919061461b565b905083613fc682846137bf565b1115613fd157600080fd5b613fdb81836137bf565b925050506109f1565b6001600160a01b03831660009081526009602052604090205461400d9082906113599085613853565b6001600160a01b0384166000908152600960205260409020556006546140399082906113599085613853565b60068190556103e81161404e57600654614051565b60005b600655505050565b6000818484111561407d5760405162461bcd60e51b8152600401610a44919061477f565b505050900390565b604080516000808252602082019092526001600160a01b0384169083906040516140af9190614660565b60006040518083038185875af1925050503d80600081146140ec576040519150601f19603f3d011682016040523d82523d6000602084013e6140f1565b606091505b50509050806141125760405162461bcd60e51b8152600401610a4490614d88565b505050565b60006060846001600160a01b031663a9059cbb858560405160240161413d92919061473a565b6040516020818303038152906040529060e01b6020820180516001600160e01b0383818316178352505050506040516141769190614660565b6000604051808303816000865af19150503d80600081146141b3576040519150601f19603f3d011682016040523d82523d6000602084013e6141b8565b606091505b50915091508180156141e25750805115806141e25750808060200190518101906141e29190614569565b6141fe5760405162461bcd60e51b8152600401610a4490614bee565b5050505050565b60008183106142145781611a75565b5090919050565b60006060856001600160a01b03166323b872dd868686604051602401614243939291906146ba565b6040516020818303038152906040529060e01b6020820180516001600160e01b03838183161783525050505060405161427c9190614660565b6000604051808303816000865af19150503d80600081146142b9576040519150601f19603f3d011682016040523d82523d6000602084013e6142be565b606091505b50915091508180156142e85750805115806142e85750808060200190518101906142e89190614569565b6143045760405162461bcd60e51b8152600401610a4490614db2565b505050505050565b60405180606001604052806000815260200160008152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061436e57805160ff191683800117855561439b565b8280016001018555821561439b579182015b8281111561439b578251825591602001919060010190614380565b506143a79291506143ab565b5090565b5b808211156143a757600081556001016143ac565b600082601f8301126143d0578081fd5b813567ffffffffffffffff808211156143e7578283fd5b604051601f8301601f191681016020018281118282101715614407578485fd5b60405282815292508284830160200186101561442257600080fd5b8260208601602083013760006020848301015250505092915050565b60006020828403121561444f578081fd5b8135611a7581614f37565b60006020828403121561446b578081fd5b8151611a7581614f37565b60008060408385031215614488578081fd5b823561449381614f37565b915060208301356144a381614f37565b809150509250929050565b600080600080608085870312156144c3578182fd5b84356144ce81614f37565b935060208501356144de81614f37565b925060408501356144ee81614f37565b9396929550929360600135925050565b600080600060608486031215614512578283fd5b833561451d81614f37565b9250602084013561452d81614f37565b929592945050506040919091013590565b60008060408385031215614550578182fd5b823561455b81614f37565b946020939093013593505050565b60006020828403121561457a578081fd5b81518015158114611a75578182fd5b60008060006060848603121561459d578283fd5b833567ffffffffffffffff808211156145b4578485fd5b6145c0878388016143c0565b945060208601359150808211156145d5578384fd5b506145e2868287016143c0565b925050604084013560ff811681146145f8578182fd5b809150509250925092565b600060208284031215614614578081fd5b5035919050565b60006020828403121561462c578081fd5b5051919050565b600080600060608486031215614647578283fd5b8351925060208401519150604084015190509250925092565b60008251614672818460208701614f07565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039485168152928416602084015292166040820152606081019190915260800190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b039586168152938516602085015260408401929092529092166060820152608081019190915260a00190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260800190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039390931683526020830191909152604082015260600190565b901515815260200190565b600060208252825180602084015261479e816040850160208701614f07565b601f01601f19169190910160400192915050565b60208082526021908201527f4c546f6b656e3a2063616e6e6f74206c697175696461746520796f757273656c6040820152603360f91b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526013908201527213151bdad95b8e881e995c9bc8185b5bdd5b9d606a1b604082015260600190565b6020808252601d908201527f474d61726b65743a20696e76616c696420636f72652061646472657373000000604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526019908201527f474d61726b65743a20636f726520616c72656164792073657400000000000000604082015260600190565b60208082526017908201527f4c546f6b656e3a2063616e6e6f74207472616e73666572000000000000000000604082015260600190565b60208082526032908201527f4c546f6b656e3a206f6e65206f66206c416d6f756e74496e206f722075416d6f604082015271756e74496e206d757374206265207a65726f60701b606082015260800190565b602080825260169082015275098a8ded6cadc7440ecc2d8eaca40dad2e6dac2e8c6d60531b604082015260600190565b6020808252601e908201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604082015260600190565b60208082526023908201527f474d61726b65743a20696e76616c696420756e6465726c79696e67206164647260408201526265737360e81b606082015260800190565b6020808252601a908201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604082015260600190565b60208082526017908201527f4c546f6b656e3a20696e76616c6964206c416d6f756e74000000000000000000604082015260600190565b6020808252601f908201527f474d61726b65743a2073657420756e6465726c79696e6720616c726561647900604082015260600190565b6020808252601f908201527f4c546f6b656e3a206e6f7420656e6f75676820746f74616c20737570706c7900604082015260600190565b602080825260139082015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604082015260600190565b6020808252601590820152744c546f6b656e3a2063616e6e6f742072656465656d60581b604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252601d908201527f4c546f6b656e3a20746f6f206d756368207365697a6520616d6f756e74000000604082015260600190565b6020808252600d908201526c10b9b0b332aa3930b739b332b960991b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526022908201527f4c546f6b656e3a20626f72726f7720616d6f756e7420657863656564732063616040820152610e6d60f31b606082015260800190565b6020808252601d908201527f4c546f6b656e3a206e6f7420656e6f75676820756e6465726c79696e67000000604082015260600190565b60208082526023908201527f474d61726b65743a20696e76616c69642072617465206d6f64656c206164647260408201526265737360e81b606082015260800190565b6020808252602b908201527f474d61726b65743a20696e76616c69642072656261746520646973747269627560408201526a746f72206164647265737360a81b606082015260800190565b6020808252601e908201527f4c546f6b656e3a206f6e6c79205265626174654469737472696275746f720000604082015260600190565b60208082526010908201526f042e6c2cccaa8e4c2dce6cccae48aa8960831b604082015260600190565b60208082526011908201527021736166655472616e7366657246726f6d60781b604082015260600190565b6020808252601f908201527f474d61726b65743a20696e76616c6964207265736572766520666163746f7200604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252601a908201527f4c546f6b656e3a206f6e6c7920436f726520436f6e7472616374000000000000604082015260600190565b6020808252601c908201527f4c546f6b656e3a20696e76616c696420726570617920616d6f756e7400000000604082015260600190565b81518152602080830151908201526040918201519181019190915260600190565b90815260200190565b9283526020830191909152604082015260600190565b60ff91909116815260200190565b60005b83811015614f22578181015183820152602001614f0a565b83811115614f31576000848401525b50505050565b6001600160a01b0381168114614f4c57600080fd5b5056fe4c546f6b656e3a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220402fc8a277e7db1dc80277938362cd3d0e6497ae92b406d3058eeceee57ffd7764736f6c634300060c0033