[ { "inputs": [], "name": "AcceptAdminPendingAdminCheck", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "actualAddAmount", "type": "uint256" } ], "name": "AddReservesFactorFreshCheck", "type": "error" }, { "inputs": [], "name": "BorrowCashNotAvailable", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "errorCode", "type": "uint256" } ], "name": "BorrowComptrollerRejection", "type": "error" }, { "inputs": [], "name": "BorrowFreshnessCheck", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "errorCode", "type": "uint256" } ], "name": "LiquidateAccrueBorrowInterestFailed", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "errorCode", "type": "uint256" } ], "name": "LiquidateAccrueCollateralInterestFailed", "type": "error" }, { "inputs": [], "name": "LiquidateCloseAmountIsUintMax", "type": "error" }, { "inputs": [], "name": "LiquidateCloseAmountIsZero", "type": "error" }, { "inputs": [], "name": "LiquidateCollateralFreshnessCheck", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "errorCode", "type": "uint256" } ], "name": "LiquidateComptrollerRejection", "type": "error" }, { "inputs": [], "name": "LiquidateFreshnessCheck", "type": "error" }, { "inputs": [], "name": "LiquidateLiquidatorIsBorrower", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "errorCode", "type": "uint256" } ], "name": "LiquidateRepayBorrowFreshFailed", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "errorCode", "type": "uint256" } ], "name": "LiquidateSeizeComptrollerRejection", "type": "error" }, { "inputs": [], "name": "LiquidateSeizeLiquidatorIsBorrower", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "errorCode", "type": "uint256" } ], "name": "MintComptrollerRejection", "type": "error" }, { "inputs": [], "name": "MintFreshnessCheck", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "errorCode", "type": "uint256" } ], "name": "RedeemComptrollerRejection", "type": "error" }, { "inputs": [], "name": "RedeemFreshnessCheck", "type": "error" }, { "inputs": [], "name": "RedeemTransferOutNotPossible", "type": "error" }, { "inputs": [], "name": "ReduceReservesAdminCheck", "type": "error" }, { "inputs": [], "name": "ReduceReservesCashNotAvailable", "type": "error" }, { "inputs": [], "name": "ReduceReservesCashValidation", "type": "error" }, { "inputs": [], "name": "ReduceReservesFreshCheck", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "errorCode", "type": "uint256" } ], "name": "RepayBorrowComptrollerRejection", "type": "error" }, { "inputs": [], "name": "RepayBorrowFreshnessCheck", "type": "error" }, { "inputs": [], "name": "SetComptrollerOwnerCheck", "type": "error" }, { "inputs": [], "name": "SetInterestRateModelFreshCheck", "type": "error" }, { "inputs": [], "name": "SetInterestRateModelOwnerCheck", "type": "error" }, { "inputs": [], "name": "SetPendingAdminOwnerCheck", "type": "error" }, { "inputs": [], "name": "SetReserveFactorAdminCheck", "type": "error" }, { "inputs": [], "name": "SetReserveFactorBoundsCheck", "type": "error" }, { "inputs": [], "name": "SetReserveFactorFreshCheck", "type": "error" }, { "inputs": [], "name": "SetReserveGuardianOwnerCheck", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "errorCode", "type": "uint256" } ], "name": "TransferComptrollerRejection", "type": "error" }, { "inputs": [], "name": "TransferNotAllowed", "type": "error" }, { "inputs": [], "name": "TransferNotEnough", "type": "error" }, { "inputs": [], "name": "TransferTooMuch", "type": "error" }, { "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": "address", "name": "borrower", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "borrowAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "accountBorrows", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalBorrows", "type": "uint256" } ], "name": "Borrow", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "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": "repayAmount", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "cTokenCollateral", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "seizeTokens", "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" }, { "indexed": false, "internalType": "uint256", "name": "mintTokens", "type": "uint256" } ], "name": "Mint", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "oldAdmin", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newAdmin", "type": "address" } ], "name": "NewAdmin", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "contract ComptrollerInterface", "name": "oldComptroller", "type": "address" }, { "indexed": false, "internalType": "contract ComptrollerInterface", "name": "newComptroller", "type": "address" } ], "name": "NewComptroller", "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": "address", "name": "oldPendingAdmin", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newPendingAdmin", "type": "address" } ], "name": "NewPendingAdmin", "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": false, "internalType": "address", "name": "oldReserveGuardian", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newReserveGuardian", "type": "address" } ], "name": "NewReserveGuardian", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "redeemer", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "redeemAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "redeemTokens", "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": "repayAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "accountBorrows", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalBorrows", "type": "uint256" } ], "name": "RepayBorrow", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "benefactor", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "addAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newTotalReserves", "type": "uint256" } ], "name": "ReservesAdded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "admin", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "reduceAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newTotalReserves", "type": "uint256" } ], "name": "ReservesReduced", "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": "NO_ERROR", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_acceptAdmin", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "_addReserves", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "reduceAmount", "type": "uint256" } ], "name": "_reduceReserves", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract ComptrollerInterface", "name": "newComptroller", "type": "address" } ], "name": "_setComptroller", "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": "address payable", "name": "newPendingAdmin", "type": "address" } ], "name": "_setPendingAdmin", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newReserveFactorMantissa", "type": "uint256" } ], "name": "_setReserveFactor", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address payable", "name": "newReserveGuardian", "type": "address" } ], "name": "_setReserveGuardian", "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": "admin", "outputs": [ { "internalType": "address payable", "name": "", "type": "address" } ], "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": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "borrowAmount", "type": "uint256" } ], "name": "borrow", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "borrowBalanceCurrent", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "borrowBalanceStored", "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": [], "name": "comptroller", "outputs": [ { "internalType": "contract ComptrollerInterface", "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": "nonpayable", "type": "function" }, { "inputs": [], "name": "exchangeRateStored", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "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": "getCash", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "underlying_", "type": "address" }, { "internalType": "contract ComptrollerInterface", "name": "comptroller_", "type": "address" }, { "internalType": "contract InterestRateModel", "name": "interestRateModel_", "type": "address" }, { "internalType": "uint256", "name": "initialExchangeRateMantissa_", "type": "uint256" }, { "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": [ { "internalType": "contract ComptrollerInterface", "name": "comptroller_", "type": "address" }, { "internalType": "contract InterestRateModel", "name": "interestRateModel_", "type": "address" }, { "internalType": "uint256", "name": "initialExchangeRateMantissa_", "type": "uint256" }, { "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": "interestRateModel", "outputs": [ { "internalType": "contract InterestRateModel", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isCToken", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "borrower", "type": "address" }, { "internalType": "contract CToken", "name": "cTokenCollateral", "type": "address" } ], "name": "liquidateBorrow", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "borrower", "type": "address" }, { "internalType": "uint256", "name": "repayAmount", "type": "uint256" }, { "internalType": "contract CToken", "name": "cTokenCollateral", "type": "address" } ], "name": "liquidateBorrow", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "mint", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "mintAmount", "type": "uint256" } ], "name": "mint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pendingAdmin", "outputs": [ { "internalType": "address payable", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "protocolSeizeShareMantissa", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "underlying_", "type": "address" }, { "internalType": "contract ComptrollerInterface", "name": "comptroller_", "type": "address" }, { "internalType": "contract InterestRateModel", "name": "interestRateModel_", "type": "address" }, { "internalType": "uint256", "name": "initialExchangeRateMantissa_", "type": "uint256" }, { "internalType": "string", "name": "name_", "type": "string" }, { "internalType": "string", "name": "symbol_", "type": "string" }, { "internalType": "uint8", "name": "decimals_", "type": "uint8" }, { "internalType": "address payable", "name": "admin_", "type": "address" } ], "name": "proxyInitialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "redeemTokens", "type": "uint256" } ], "name": "redeem", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "redeemAmount", "type": "uint256" } ], "name": "redeemUnderlying", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "repayAmount", "type": "uint256" } ], "name": "repayBorrow", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "repayBorrow", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "borrower", "type": "address" }, { "internalType": "uint256", "name": "repayAmount", "type": "uint256" } ], "name": "repayBorrowBehalf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "borrower", "type": "address" } ], "name": "repayBorrowBehalf", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "reserveFactorMantissa", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "reserveGuardian", "outputs": [ { "internalType": "address payable", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "liquidator", "type": "address" }, { "internalType": "address", "name": "borrower", "type": "address" }, { "internalType": "uint256", "name": "seizeTokens", "type": "uint256" } ], "name": "seize", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "supplyRatePerBlock", "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": "totalBorrows", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalBorrowsCurrent", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "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" }, { "stateMutability": "payable", "type": "receive" } ]
608060405234801561001057600080fd5b50613ee4806100206000396000f3fe60806040526004361061036f5760003560e01c806395d89b41116101c6578063c39b127f116100f7578063f3fdb15a11610095578063f8f9da281161006f578063f8f9da2814610990578063fca7820b146109a5578063fcb64147146109c5578063fe9c44ae146109cd57600080fd5b8063f3fdb15a14610938578063f5e3c46214610958578063f851a4401461096b57600080fd5b8063dd62ed3e116100d1578063dd62ed3e146108aa578063e5974619146108f0578063e9c714f214610903578063f2b3abbd1461091857600080fd5b8063c39b127f1461084a578063c5ebeaec1461086a578063db006a751461088a57600080fd5b8063aae40a2a11610164578063b57a4a721161013e578063b57a4a72146107b5578063b71d1a0c146107d5578063bd6d894d146107f5578063c37f68e21461080a57600080fd5b8063aae40a2a1461076d578063ae9d70b014610780578063b2a02ff11461079557600080fd5b8063a0712d68116101a0578063a0712d681461070f578063a6afed9514610722578063a9059cbb14610737578063aa5af0fd1461075757600080fd5b806395d89b41146106ba57806395dd9193146106cf57806399d8c1b4146106ef57600080fd5b80633af9e669116102a05780636752e7021161023e57806370a082311161021857806370a082311461063957806373acee981461066f578063852a12e3146106845780638f840ddd146106a457600080fd5b80636752e702146105f357806369ab32501461060e5780636c540baf1461062357600080fd5b806347bd37181161027a57806347bd3718146105955780634e4d9fea146105ab5780635fe3b567146105b3578063601a0bf1146105d357600080fd5b80633af9e669146105405780633b1d21a2146105605780634576b5db1461057557600080fd5b806318160ddd1161030d57806323b872dd116102e757806323b872dd146104c15780632608f818146104e157806326782247146104f4578063313ce5671461051457600080fd5b806318160ddd14610476578063182df0f51461048c5780631a31d465146104a157600080fd5b80630e752702116103495780630e752702146104175780631249c58b14610438578063173b99041461044057806317bfdfbc1461045657600080fd5b806306fdde0314610384578063095ea7b3146103af5780630d983cc6146103df57600080fd5b3661037f5761037d346109e2565b005b600080fd5b34801561039057600080fd5b50610399610a46565b6040516103a69190613753565b60405180910390f35b3480156103bb57600080fd5b506103cf6103ca3660046137b6565b610ad4565b60405190151581526020016103a6565b3480156103eb57600080fd5b506011546103ff906001600160a01b031681565b6040516001600160a01b0390911681526020016103a6565b61042a6104253660046137e2565b610b44565b6040519081526020016103a6565b61037d610bbc565b34801561044c57600080fd5b5061042a60085481565b34801561046257600080fd5b5061042a6104713660046137fb565b610be7565b34801561048257600080fd5b5061042a600d5481565b34801561049857600080fd5b5061042a610c46565b3480156104ad57600080fd5b5061037d6104bc3660046138d1565b610c55565b3480156104cd57600080fd5b506103cf6104dc366004613987565b610c6c565b61042a6104ef3660046137b6565b610cc8565b34801561050057600080fd5b506004546103ff906001600160a01b031681565b34801561052057600080fd5b5060035461052e9060ff1681565b60405160ff90911681526020016103a6565b34801561054c57600080fd5b5061042a61055b3660046137fb565b610d42565b34801561056c57600080fd5b5061042a610d88565b34801561058157600080fd5b5061042a6105903660046137fb565b610d92565b3480156105a157600080fd5b5061042a600b5481565b61037d610ee4565b3480156105bf57600080fd5b506005546103ff906001600160a01b031681565b3480156105df57600080fd5b5061042a6105ee3660046137e2565b610f0d565b3480156105ff57600080fd5b5061042a666379da05b6000081565b34801561061a57600080fd5b5061042a600081565b34801561062f57600080fd5b5061042a60095481565b34801561064557600080fd5b5061042a6106543660046137fb565b6001600160a01b03166000908152600e602052604090205490565b34801561067b57600080fd5b5061042a610f54565b34801561069057600080fd5b5061042a61069f3660046137e2565b610faa565b3480156106b057600080fd5b5061042a600c5481565b3480156106c657600080fd5b50610399610ffc565b3480156106db57600080fd5b5061042a6106ea3660046137fb565b611009565b3480156106fb57600080fd5b5061037d61070a3660046139c8565b611014565b61042a61071d3660046137e2565b611269565b34801561072e57600080fd5b5061042a6112d8565b34801561074357600080fd5b506103cf6107523660046137b6565b6114c4565b34801561076357600080fd5b5061042a600a5481565b61037d61077b366004613a6a565b61151f565b34801561078c57600080fd5b5061042a61152e565b3480156107a157600080fd5b5061042a6107b0366004613987565b6115c6565b3480156107c157600080fd5b5061037d6107d0366004613aa3565b611621565b3480156107e157600080fd5b5061042a6107f03660046137fb565b611778565b34801561080157600080fd5b5061042a611805565b34801561081657600080fd5b5061082a6108253660046137fb565b611861565b6040805194855260208501939093529183015260608201526080016103a6565b34801561085657600080fd5b5061042a6108653660046137fb565b6118a2565b34801561087657600080fd5b5061042a6108853660046137e2565b61192f565b34801561089657600080fd5b5061042a6108a53660046137e2565b611981565b3480156108b657600080fd5b5061042a6108c5366004613a6a565b6001600160a01b039182166000908152600f6020908152604080832093909416825291909152205490565b61037d6108fe3660046137fb565b6119d3565b34801561090f57600080fd5b5061042a611a00565b34801561092457600080fd5b5061042a6109333660046137fb565b611b07565b34801561094457600080fd5b506006546103ff906001600160a01b031681565b61042a610966366004613b6e565b611b1b565b34801561097757600080fd5b506003546103ff9061010090046001600160a01b031681565b34801561099c57600080fd5b5061042a611b51565b3480156109b157600080fd5b5061042a6109c03660046137e2565b611ba4565b61042a611beb565b3480156109d957600080fd5b506103cf600181565b60005462010000900460ff16610a135760405162461bcd60e51b8152600401610a0a90613bb0565b60405180910390fd5b6000805462ff000019169055610a276112d8565b50610a323382611bf6565b506000805462ff0000191662010000179055565b60018054610a5390613bd4565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7f90613bd4565b8015610acc5780601f10610aa157610100808354040283529160200191610acc565b820191906000526020600020905b815481529060010190602001808311610aaf57829003601f168201915b505050505081565b336000818152600f602090815260408083206001600160a01b03871680855292528083208590555191929182907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610b309087815260200190565b60405180910390a360019150505b92915050565b600081600003610b8c5760405162461bcd60e51b81526020600482015260136024820152727265706179416d6f756e74206973207a65726f60681b6044820152606401610a0a565b813414610bab5760405162461bcd60e51b8152600401610a0a90613c08565b610bb434611e1f565b506000919050565b34600003610bdc5760405162461bcd60e51b8152600401610a0a90613c34565b610be5346109e2565b565b6000805462010000900460ff16610c105760405162461bcd60e51b8152600401610a0a90613bb0565b6000805462ff000019169055610c246112d8565b50610c2e82611009565b90506000805462ff0000191662010000179055919050565b6000610c50611e7c565b905090565b610c63868686868686611014565b50505050505050565b6000805462010000900460ff16610c955760405162461bcd60e51b8152600401610a0a90613bb0565b6000805462ff000019168155610cad33868686611ee4565b1490506000805462ff00001916620100001790559392505050565b600081600003610d105760405162461bcd60e51b81526020600482015260136024820152727265706179416d6f756e74206973207a65726f60681b6044820152606401610a0a565b813414610d2f5760405162461bcd60e51b8152600401610a0a90613c08565b610d398334612110565b50600092915050565b6000806040518060200160405280610d58611805565b90526001600160a01b0384166000908152600e6020526040902054909150610d8190829061216e565b9392505050565b6000610c5061218e565b60035460009061010090046001600160a01b03163314610dc55760405163d219dc1f60e01b815260040160405180910390fd5b60055460408051623f1ee960e11b815290516001600160a01b0392831692851691627e3dd29160048083019260209291908290030181865afa158015610e0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e339190613c5f565b610e7f5760405162461bcd60e51b815260206004820152601c60248201527f6d61726b6572206d6574686f642072657475726e65642066616c7365000000006044820152606401610a0a565b600580546001600160a01b0319166001600160a01b0385811691821790925560408051928416835260208301919091527f7ac369dbd14fa5ea3f473ed67cc9d598964a77501540ba6751eb0b3decf5870d91015b60405180910390a150600092915050565b34600003610f045760405162461bcd60e51b8152600401610a0a90613c34565b610be534611e1f565b6000805462010000900460ff16610f365760405162461bcd60e51b8152600401610a0a90613bb0565b6000805462ff000019169055610f4a6112d8565b50610c2e8261219a565b6000805462010000900460ff16610f7d5760405162461bcd60e51b8152600401610a0a90613bb0565b6000805462ff000019169055610f916112d8565b5050600b546000805462ff000019166201000017905590565b600081600003610ff35760405162461bcd60e51b815260206004820152601460248201527372656465656d416d6f756e74206973207a65726f60601b6044820152606401610a0a565b610bb4826122a7565b60028054610a5390613bd4565b6000610b3e826122f0565b60035461010090046001600160a01b0316331461107f5760405162461bcd60e51b8152602060048201526024808201527f6f6e6c792061646d696e206d617920696e697469616c697a6520746865206d616044820152631c9ad95d60e21b6064820152608401610a0a565b60095415801561108f5750600a54155b6110e75760405162461bcd60e51b815260206004820152602360248201527f6d61726b6574206d6179206f6e6c7920626520696e697469616c697a6564206f6044820152626e636560e81b6064820152608401610a0a565b6007849055836111525760405162461bcd60e51b815260206004820152603060248201527f696e697469616c2065786368616e67652072617465206d75737420626520677260448201526f32b0ba32b9103a3430b7103d32b9379760811b6064820152608401610a0a565b600061115d87610d92565b905080156111ad5760405162461bcd60e51b815260206004820152601a60248201527f73657474696e6720636f6d7074726f6c6c6572206661696c65640000000000006044820152606401610a0a565b42600955670de0b6b3a7640000600a556111c68661233c565b905080156112215760405162461bcd60e51b815260206004820152602260248201527f73657474696e6720696e7465726573742072617465206d6f64656c206661696c604482015261195960f21b6064820152608401610a0a565b600161122d8582613ccf565b50600261123a8482613ccf565b50506003805460ff90921660ff1990921691909117905550506000805462ff0000191662010000179055505050565b6000816000036112b05760405162461bcd60e51b81526020600482015260126024820152716d696e74416d6f756e74206973207a65726f60701b6044820152606401610a0a565b8134146112cf5760405162461bcd60e51b8152600401610a0a90613c08565b610bb4346109e2565b60095460009042908181036112f05760009250505090565b60006112fa61218e565b600b54600c54600a546006546040516315f2405360e01b81526004810186905260248101859052604481018490529495509293919290916000916001600160a01b0316906315f2405390606401602060405180830381865afa158015611364573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113889190613d8f565b905064746a5288008111156113df5760405162461bcd60e51b815260206004820152601c60248201527f626f72726f772072617465206973206162737572646c792068696768000000006044820152606401610a0a565b60006113eb8789613dbe565b90506000611407604051806020016040528085815250836124b1565b90506000611415828861216e565b905060006114238883613dd1565b905060006114426040518060200160405280600854815250848a6124e2565b9050600061145185898a6124e2565b60098e9055600a819055600b849055600c839055604080518d815260208101879052908101829052606081018590529091507f4dec04e750ca11537cabcd8a9eab06494de08da3735bc8871cd41250e190bc049060800160405180910390a160009d505050505050505050505050505090565b6000805462010000900460ff166114ed5760405162461bcd60e51b8152600401610a0a90613bb0565b6000805462ff00001916815561150533808686611ee4565b1490506000805462ff000019166201000017905592915050565b61152a823483612503565b5050565b6006546000906001600160a01b031663b816881661154a61218e565b600b54600c546008546040516001600160e01b031960e087901b16815260048101949094526024840192909252604483015260648201526084015b602060405180830381865afa1580156115a2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c509190613d8f565b6000805462010000900460ff166115ef5760405162461bcd60e51b8152600401610a0a90613bb0565b6000805462ff000019169055611607338585856125ed565b50600080805462ff00001916620100001790559392505050565b600054610100900460ff16158080156116415750600054600160ff909116105b8061165b5750303b15801561165b575060005460ff166001145b6116be5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a0a565b6000805460ff1916600117905580156116e1576000805461ff0019166101001790555b60038054610100600160a81b031916336101000217905561170789898989898989610c55565b60038054610100600160a81b0319166101006001600160a01b03851602179055801561176d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b60035460009061010090046001600160a01b031633146117ab57604051635cb56c2b60e01b815260040160405180910390fd5b600480546001600160a01b038481166001600160a01b031983168117909355604080519190921680825260208201939093527fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a99101610ed3565b6000805462010000900460ff1661182e5760405162461bcd60e51b8152600401610a0a90613bb0565b6000805462ff0000191690556118426112d8565b5061184b610c46565b90506000805462ff000019166201000017905590565b6001600160a01b0381166000908152600e6020526040812054819081908190819061188b876122f0565b611893611e7c565b93509350935093509193509193565b60035460009061010090046001600160a01b031633146118d557604051632f7aaee760e01b815260040160405180910390fd5b601180546001600160a01b038481166001600160a01b031983168117909355604080519190921680825260208201939093527fe3f5272426aa3e70e583474d1155b19c7d9a5394147c40191dfaf32b792bc9789101610ed3565b6000816000036119785760405162461bcd60e51b8152602060048201526014602482015273626f72726f77416d6f756e74206973207a65726f60601b6044820152606401610a0a565b610bb482612865565b6000816000036119ca5760405162461bcd60e51b815260206004820152601460248201527372656465656d546f6b656e73206973207a65726f60601b6044820152606401610a0a565b610bb4826128ac565b346000036119f35760405162461bcd60e51b8152600401610a0a90613c34565b6119fd8134612110565b50565b6004546000906001600160a01b031633141580611a1b575033155b15611a3957604051631ba24f2960e21b815260040160405180910390fd5b60038054600480546001600160a01b03808216610100818102610100600160a81b0319871617968790556001600160a01b031990931690935560408051948390048216808652929095041660208401529290917ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc910160405180910390a1600454604080516001600160a01b03808516825290921660208301527fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9910160405180910390a160009250505090565b6000611b116112d8565b50610b3e8261233c565b6000823414611b3c5760405162461bcd60e51b8152600401610a0a90613c08565b611b47843484612503565b5060009392505050565b6006546000906001600160a01b03166315f24053611b6d61218e565b600b54600c546040516001600160e01b031960e086901b168152600481019390935260248301919091526044820152606401611585565b6000805462010000900460ff16611bcd5760405162461bcd60e51b8152600401610a0a90613bb0565b6000805462ff000019169055611be16112d8565b50610c2e826128f5565b6000610c50346129b1565b600554604051634ef4c3e160e01b81526000916001600160a01b031690634ef4c3e190611c2b90309087908790600401613de4565b6020604051808303816000875af1158015611c4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c6e9190613d8f565b90508015611c92576040516349abd4fd60e01b815260048101829052602401610a0a565b4260095414611cb4576040516338d8859760e01b815260040160405180910390fd5b60006040518060200160405280611cc9611e7c565b905290506000611cd98585612a14565b90506000611ce78284612aa6565b905080600d54611cf79190613dd1565b600d556001600160a01b0386166000908152600e6020526040902054611d1e908290613dd1565b6001600160a01b0387166000908152600e60205260409081902091909155517f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f90611d6e90889085908590613e08565b60405180910390a16040518181526001600160a01b038716903090600080516020613e8f8339815191529060200160405180910390a36005546040516341c728b960e01b81523060048201526001600160a01b0388811660248301526044820185905260648201849052909116906341c728b990608401600060405180830381600087803b158015611dff57600080fd5b505af1158015611e13573d6000803e3d6000fd5b50505050505050505050565b60005462010000900460ff16611e475760405162461bcd60e51b8152600401610a0a90613bb0565b6000805462ff000019169055611e5b6112d8565b50611e67333383612ac4565b50506000805462ff0000191662010000179055565b600d54600090808203611e9157505060075490565b6000611e9b61218e565b90506000600c54600b5483611eb09190613dd1565b611eba9190613dbe565b9050600083611ed1670de0b6b3a764000084613e29565b611edb9190613e48565b95945050505050565b6005546040516317b9b84b60e31b81523060048201526001600160a01b038581166024830152848116604483015260648201849052600092839291169063bdcdc258906084016020604051808303816000875af1158015611f49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6d9190613d8f565b90508015611f915760405163089d427760e11b815260048101829052602401610a0a565b836001600160a01b0316856001600160a01b031603611fc357604051638cd22d1960e01b815260040160405180910390fd5b6000856001600160a01b0316876001600160a01b031603611fe7575060001961200f565b506001600160a01b038086166000908152600f60209081526040808320938a16835292905220545b600061201b8583613dbe565b6001600160a01b0388166000908152600e602052604081205491925090612043908790613dbe565b6001600160a01b0388166000908152600e60205260408120549192509061206b908890613dd1565b6001600160a01b03808b166000908152600e6020526040808220869055918b16815220819055905060001984146120c5576001600160a01b03808a166000908152600f60209081526040808320938e168352929052208390555b876001600160a01b0316896001600160a01b0316600080516020613e8f833981519152896040516120f891815260200190565b60405180910390a35060009998505050505050505050565b60005462010000900460ff166121385760405162461bcd60e51b8152600401610a0a90613bb0565b6000805462ff00001916905561214c6112d8565b50612158338383612ac4565b50506000805462ff000019166201000017905550565b60008061217b84846124b1565b905061218681612c6d565b949350505050565b6000610c503447613dbe565b600354600090819061010090046001600160a01b031633148015906121ca57506011546001600160a01b03163314155b156121e857604051630f7e5e6d60e41b815260040160405180910390fd5b426009541461220a57604051630dff50cb60e41b815260040160405180910390fd5b8261221361218e565b101561223257604051633345e99960e01b815260040160405180910390fd5b600c54831115612255576040516378d2980560e11b815260040160405180910390fd5b82600c546122639190613dbe565b600c81905590506122743384612c85565b7f3bad0c59cf2f06e7314077049f48a93578cd16f5ef92329f1dab1420a99c177e338483604051610ed393929190613e08565b60005462010000900460ff166122cf5760405162461bcd60e51b8152600401610a0a90613bb0565b6000805462ff0000191690556122e36112d8565b50610a3233600083612d42565b6001600160a01b0381166000908152601060205260408120805482036123195750600092915050565b600a54815460009161232a91613e29565b90508160010154816121869190613e48565b600354600090819061010090046001600160a01b031633146123715760405163407fded560e01b815260040160405180910390fd5b426009541461239357604051630be2a5cb60e11b815260040160405180910390fd5b600660009054906101000a90046001600160a01b03169050826001600160a01b0316632191f92a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061240d9190613c5f565b6124595760405162461bcd60e51b815260206004820152601c60248201527f6d61726b6572206d6574686f642072657475726e65642066616c7365000000006044820152606401610a0a565b600680546001600160a01b0319166001600160a01b0385811691821790925560408051928416835260208301919091527fedffc32e068c7c95dfd4bdfd5c4d939a084d6b11c4199eac8436ed234d72f9269101610ed3565b60408051602081019091526000815260405180602001604052806124d985600001518561301f565b90529392505050565b6000806124ef85856124b1565b9050611edb6124fd82612c6d565b8461302b565b60005462010000900460ff1661252b5760405162461bcd60e51b8152600401610a0a90613bb0565b6000805462ff00001916905561253f6112d8565b506000816001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612582573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125a69190613d8f565b905080156125ca57604051633eea49b760e11b815260048101829052602401610a0a565b6125d633858585613037565b50506000805462ff00001916620100001790555050565b60055460405163d02f735160e01b81523060048201526001600160a01b0386811660248301528581166044830152848116606483015260848201849052600092169063d02f73519060a4016020604051808303816000875af1158015612657573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061267b9190613d8f565b9050801561269f576040516363e00e3360e11b815260048101829052602401610a0a565b836001600160a01b0316836001600160a01b0316036126d157604051633a94626760e11b815260040160405180910390fd5b60006126f2836040518060200160405280666379da05b600008152506134f1565b905060006127008285613dbe565b905060006040518060200160405280612717611e7c565b905290506000612727828561216e565b9050600081600c546127399190613dd1565b600c819055600d5490915061274f908690613dbe565b600d556001600160a01b0388166000908152600e6020526040902054612776908890613dbe565b6001600160a01b03808a166000908152600e602052604080822093909355908b16815220546127a6908590613dd1565b6001600160a01b03808b166000818152600e602052604090819020939093559151908a1690600080516020613e8f833981519152906127e89088815260200190565b60405180910390a360405185815230906001600160a01b038a1690600080516020613e8f8339815191529060200160405180910390a37fa91e67c5ea634cd43a12c5a482724b03de01e85ca68702a53d0c2f45cb7c1dc530838360405161285193929190613e08565b60405180910390a150505050505050505050565b60005462010000900460ff1661288d5760405162461bcd60e51b8152600401610a0a90613bb0565b6000805462ff0000191690556128a16112d8565b50610a323382613514565b60005462010000900460ff166128d45760405162461bcd60e51b8152600401610a0a90613bb0565b6000805462ff0000191690556128e86112d8565b50610a3233826000612d42565b60035460009061010090046001600160a01b0316331461292857604051631205b57b60e11b815260040160405180910390fd5b426009541461294a57604051637dfca6b760e11b815260040160405180910390fd5b670de0b6b3a76400008211156129735760405163717220f360e11b815260040160405180910390fd5b600880549083905560408051828152602081018590527faaa68312e2ea9d50e16af5068410ab56e1a1fd06037b1a35664812c30f8214609101610ed3565b6000805462010000900460ff166129da5760405162461bcd60e51b8152600401610a0a90613bb0565b6000805462ff0000191690556129ee6112d8565b506129f8826136b3565b5050600090506000805462ff0000191662010000179055919050565b6000336001600160a01b03841614612a605760405162461bcd60e51b815260206004820152600f60248201526e0e6cadcc8cae440dad2e6dac2e8c6d608b1b6044820152606401610a0a565b813414612aa05760405162461bcd60e51b815260206004820152600e60248201526d0ecc2d8eaca40dad2e6dac2e8c6d60931b6044820152606401610a0a565b50919050565b6000610d81612abd84670de0b6b3a764000061301f565b8351613747565b600554604051631200453160e11b81523060048201526001600160a01b03858116602483015284811660448301526064820184905260009283929116906324008a62906084016020604051808303816000875af1158015612b29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b4d9190613d8f565b90508015612b7157604051638c81362d60e01b815260048101829052602401610a0a565b4260095414612b935760405163c9021e2f60e01b815260040160405180910390fd5b6000612b9e856122f0565b905060006000198514612bb15784612bb3565b815b90506000612bc18883612a14565b90506000612bcf8285613dbe565b9050600082600b54612be19190613dbe565b6001600160a01b038a8116600081815260106020908152604091829020878155600a54600190910155600b8590558151938f168452830191909152810185905260608101849052608081018290529091507f1a2a22cb034d26d1854bdc6666a5b91fe25efbbb5dcad3b0355478d6f5c362a19060a00160405180910390a1509098975050505050505050565b8051600090610b3e90670de0b6b3a764000090613e48565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612cd2576040519150601f19603f3d011682016040523d82523d6000602084013e612cd7565b606091505b5050905080612d3d5760405162461bcd60e51b815260206004820152602c60248201527f4345746865723a3a646f5472616e736665724f75743a2045746865722074726160448201526b1b9cd9995c8819985a5b195960a21b6064820152608401610a0a565b505050565b811580612d4d575080155b612db65760405162461bcd60e51b815260206004820152603460248201527f6f6e65206f662072656465656d546f6b656e73496e206f722072656465656d416044820152736d6f756e74496e206d757374206265207a65726f60601b6064820152608401610a0a565b60006040518060200160405280612dcb611e7c565b905290506000808415612dec57849150612de5838661216e565b9050612dfc565b612df68484612aa6565b91508390505b60055460405163eabe7d9160e01b81526000916001600160a01b03169063eabe7d9190612e319030908b908890600401613de4565b6020604051808303816000875af1158015612e50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e749190613d8f565b90508015612e985760405163480f424760e01b815260048101829052602401610a0a565b4260095414612eba576040516397b5cfcd60e01b815260040160405180910390fd5b81612ec361218e565b1015612ee2576040516391240a1b60e01b815260040160405180910390fd5b82600d54612ef09190613dbe565b600d556001600160a01b0387166000908152600e6020526040902054612f17908490613dbe565b6001600160a01b0388166000908152600e6020526040902055612f3a8783612c85565b60405183815230906001600160a01b03891690600080516020613e8f8339815191529060200160405180910390a37fe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a929878385604051612f9b93929190613e08565b60405180910390a16005546040516351dff98960e01b81523060048201526001600160a01b0389811660248301526044820185905260648201869052909116906351dff98990608401600060405180830381600087803b158015612ffe57600080fd5b505af1158015613012573d6000803e3d6000fd5b5050505050505050505050565b6000610d818284613e29565b6000610d818284613dd1565b600554604051632fe3f38f60e11b81523060048201526001600160a01b03838116602483015286811660448301528581166064830152608482018590526000921690635fc7e71e9060a4016020604051808303816000875af11580156130a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130c59190613d8f565b905080156130e957604051630a14d17960e11b815260048101829052602401610a0a565b426009541461310b576040516380965b1b60e01b815260040160405180910390fd5b42826001600160a01b0316636c540baf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561314a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061316e9190613d8f565b1461318c57604051631046f38d60e31b815260040160405180910390fd5b846001600160a01b0316846001600160a01b0316036131be57604051631bd1a62160e21b815260040160405180910390fd5b826000036131df5760405163d29da7ef60e01b815260040160405180910390fd5b600019830361320157604051635982c5bb60e11b815260040160405180910390fd5b600061320e868686612ac4565b60055460405163c488847b60e01b815291925060009182916001600160a01b03169063c488847b9061324890309089908890600401613de4565b6040805180830381865afa158015613264573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132889190613e6a565b91509150600082146132f85760405162461bcd60e51b815260206004820152603360248201527f4c49515549444154455f434f4d5054524f4c4c45525f43414c43554c4154455f604482015272105353d5539517d4d152569157d19052531151606a1b6064820152608401610a0a565b6040516370a0823160e01b81526001600160a01b0388811660048301528291908716906370a0823190602401602060405180830381865afa158015613341573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133659190613d8f565b10156133b35760405162461bcd60e51b815260206004820152601860248201527f4c49515549444154455f5345495a455f544f4f5f4d55434800000000000000006044820152606401610a0a565b306001600160a01b038616036133d4576133cf308989846125ed565b61348e565b60405163b2a02ff160e01b81526000906001600160a01b0387169063b2a02ff190613407908c908c908790600401613de4565b6020604051808303816000875af1158015613426573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061344a9190613d8f565b1461348e5760405162461bcd60e51b81526020600482015260146024820152731d1bdad95b881cd95a5e9d5c994819985a5b195960621b6044820152606401610a0a565b604080516001600160a01b038a811682528981166020830152818301869052871660608201526080810183905290517f298637f684da70674f26509b10f07ec2fbc77a335ab1e7d6215a4b2484d8bb529181900360a00190a15050505050505050565b6000670de0b6b3a764000061350a84846000015161301f565b610d819190613e48565b60055460405163368f515360e21b81526000916001600160a01b03169063da3d454c9061354990309087908790600401613de4565b6020604051808303816000875af1158015613568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061358c9190613d8f565b905080156135b05760405163918db40f60e01b815260048101829052602401610a0a565b42600954146135d257604051630e8d8c6160e21b815260040160405180910390fd5b816135db61218e565b10156135fa576040516348c2588160e01b815260040160405180910390fd5b6000613605846122f0565b905060006136138483613dd1565b9050600084600b546136259190613dd1565b6001600160a01b0387166000908152601060205260409020838155600a54600190910155600b819055905061365a8686612c85565b604080516001600160a01b038816815260208101879052908101839052606081018290527f13ed6866d4e1ee6da46f845c46d7e54120883d75c5ea9a2dacc1c4ca8984ab809060800160405180910390a1505050505050565b600080808042600954146136dd576040516338acf79960e01b815260048101829052602401610a0a565b6136e73386612a14565b905080600c546136f79190613dd1565b915081600c819055507fa91e67c5ea634cd43a12c5a482724b03de01e85ca68702a53d0c2f45cb7c1dc533828460405161373393929190613e08565b60405180910390a160009590945092505050565b6000610d818284613e48565b600060208083528351808285015260005b8181101561378057858101830151858201604001528201613764565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146119fd57600080fd5b600080604083850312156137c957600080fd5b82356137d4816137a1565b946020939093013593505050565b6000602082840312156137f457600080fd5b5035919050565b60006020828403121561380d57600080fd5b8135610d81816137a1565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261383f57600080fd5b813567ffffffffffffffff8082111561385a5761385a613818565b604051601f8301601f19908116603f0116810190828211818310171561388257613882613818565b8160405283815286602085880101111561389b57600080fd5b836020870160208301376000602085830101528094505050505092915050565b803560ff811681146138cc57600080fd5b919050565b600080600080600080600060e0888a0312156138ec57600080fd5b87356138f7816137a1565b96506020880135613907816137a1565b95506040880135613917816137a1565b945060608801359350608088013567ffffffffffffffff8082111561393b57600080fd5b6139478b838c0161382e565b945060a08a013591508082111561395d57600080fd5b5061396a8a828b0161382e565b92505061397960c089016138bb565b905092959891949750929550565b60008060006060848603121561399c57600080fd5b83356139a7816137a1565b925060208401356139b7816137a1565b929592945050506040919091013590565b60008060008060008060c087890312156139e157600080fd5b86356139ec816137a1565b955060208701356139fc816137a1565b945060408701359350606087013567ffffffffffffffff80821115613a2057600080fd5b613a2c8a838b0161382e565b94506080890135915080821115613a4257600080fd5b50613a4f89828a0161382e565b925050613a5e60a088016138bb565b90509295509295509295565b60008060408385031215613a7d57600080fd5b8235613a88816137a1565b91506020830135613a98816137a1565b809150509250929050565b600080600080600080600080610100898b031215613ac057600080fd5b8835613acb816137a1565b97506020890135613adb816137a1565b96506040890135613aeb816137a1565b955060608901359450608089013567ffffffffffffffff80821115613b0f57600080fd5b613b1b8c838d0161382e565b955060a08b0135915080821115613b3157600080fd5b50613b3e8b828c0161382e565b935050613b4d60c08a016138bb565b915060e0890135613b5d816137a1565b809150509295985092959890939650565b600080600060608486031215613b8357600080fd5b8335613b8e816137a1565b9250602084013591506040840135613ba5816137a1565b809150509250925092565b6020808252600a90820152691c994b595b9d195c995960b21b604082015260600190565b600181811c90821680613be857607f821691505b602082108103612aa057634e487b7160e01b600052602260045260246000fd5b6020808252601290820152710dae6ce5cecc2d8eaca40dad2e6dac2e8c6d60731b604082015260600190565b6020808252601190820152706d73672e76616c7565206973207a65726f60781b604082015260600190565b600060208284031215613c7157600080fd5b81518015158114610d8157600080fd5b601f821115612d3d57600081815260208120601f850160051c81016020861015613ca85750805b601f850160051c820191505b81811015613cc757828155600101613cb4565b505050505050565b815167ffffffffffffffff811115613ce957613ce9613818565b613cfd81613cf78454613bd4565b84613c81565b602080601f831160018114613d325760008415613d1a5750858301515b600019600386901b1c1916600185901b178555613cc7565b600085815260208120601f198616915b82811015613d6157888601518255948401946001909101908401613d42565b5085821015613d7f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215613da157600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610b3e57610b3e613da8565b80820180821115610b3e57610b3e613da8565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b039390931683526020830191909152604082015260600190565b6000816000190483118215151615613e4357613e43613da8565b500290565b600082613e6557634e487b7160e01b600052601260045260246000fd5b500490565b60008060408385031215613e7d57600080fd5b50508051602090910151909290915056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212204885955c4114c61ada41851daf1b4e96a2fe25ded1e3e5beaa53dcf6d808342364736f6c63430008100033