UNPKG

@arbitrum/nitro-contracts

Version:

Layer 2 precompiles and rollup for Arbitrum Nitro

1,597 lines 109 kB
{ "_format": "hh-sol-artifact-1", "contractName": "ExpressLaneAuction", "sourceName": "src/express-lane-auction/ExpressLaneAuction.sol", "abi": [ { "inputs": [], "name": "AuctionNotClosed", "type": "error" }, { "inputs": [], "name": "BidsWrongOrder", "type": "error" }, { "inputs": [ { "internalType": "uint64", "name": "fixedUntilRound", "type": "uint64" } ], "name": "FixedTransferor", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "amountRequested", "type": "uint256" }, { "internalType": "uint256", "name": "balance", "type": "uint256" } ], "name": "InsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "amountRequested", "type": "uint256" }, { "internalType": "uint256", "name": "balance", "type": "uint256" } ], "name": "InsufficientBalanceAcc", "type": "error" }, { "inputs": [ { "internalType": "uint64", "name": "currentRound", "type": "uint64" }, { "internalType": "uint64", "name": "newRound", "type": "uint64" } ], "name": "InvalidNewRound", "type": "error" }, { "inputs": [ { "internalType": "uint64", "name": "currentStart", "type": "uint64" }, { "internalType": "uint64", "name": "newStart", "type": "uint64" } ], "name": "InvalidNewStart", "type": "error" }, { "inputs": [], "name": "NegativeOffset", "type": "error" }, { "inputs": [ { "internalType": "int64", "name": "roundStart", "type": "int64" } ], "name": "NegativeRoundStart", "type": "error" }, { "inputs": [ { "internalType": "uint64", "name": "round", "type": "uint64" }, { "internalType": "address", "name": "controller", "type": "address" }, { "internalType": "address", "name": "sender", "type": "address" } ], "name": "NotExpressLaneController", "type": "error" }, { "inputs": [ { "internalType": "uint64", "name": "round", "type": "uint64" }, { "internalType": "address", "name": "expectedTransferor", "type": "address" }, { "internalType": "address", "name": "msgSender", "type": "address" } ], "name": "NotTransferor", "type": "error" }, { "inputs": [], "name": "NothingToWithdraw", "type": "error" }, { "inputs": [], "name": "ReserveBlackout", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "bidAmount", "type": "uint256" }, { "internalType": "uint256", "name": "reservePrice", "type": "uint256" } ], "name": "ReservePriceNotMet", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "reservePrice", "type": "uint256" }, { "internalType": "uint256", "name": "minReservePrice", "type": "uint256" } ], "name": "ReservePriceTooLow", "type": "error" }, { "inputs": [ { "internalType": "uint64", "name": "round", "type": "uint64" } ], "name": "RoundAlreadyResolved", "type": "error" }, { "inputs": [], "name": "RoundDurationTooShort", "type": "error" }, { "inputs": [ { "internalType": "uint64", "name": "round", "type": "uint64" } ], "name": "RoundNotResolved", "type": "error" }, { "inputs": [ { "internalType": "uint64", "name": "roundDurationSeconds", "type": "uint64" } ], "name": "RoundTooLong", "type": "error" }, { "inputs": [ { "internalType": "uint64", "name": "round", "type": "uint64" }, { "internalType": "uint64", "name": "currentRound", "type": "uint64" } ], "name": "RoundTooOld", "type": "error" }, { "inputs": [], "name": "SameBidder", "type": "error" }, { "inputs": [], "name": "TieBidsWrongOrder", "type": "error" }, { "inputs": [], "name": "WithdrawalInProgress", "type": "error" }, { "inputs": [], "name": "WithdrawalMaxRound", "type": "error" }, { "inputs": [], "name": "ZeroAmount", "type": "error" }, { "inputs": [], "name": "ZeroAuctionClosingSeconds", "type": "error" }, { "inputs": [], "name": "ZeroBiddingToken", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bool", "name": "isMultiBidAuction", "type": "bool" }, { "indexed": false, "internalType": "uint64", "name": "round", "type": "uint64" }, { "indexed": true, "internalType": "address", "name": "firstPriceBidder", "type": "address" }, { "indexed": true, "internalType": "address", "name": "firstPriceExpressLaneController", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "firstPriceAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "price", "type": "uint256" }, { "indexed": false, "internalType": "uint64", "name": "roundStartTimestamp", "type": "uint64" }, { "indexed": false, "internalType": "uint64", "name": "roundEndTimestamp", "type": "uint64" } ], "name": "AuctionResolved", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Deposit", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "oldBeneficiary", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newBeneficiary", "type": "address" } ], "name": "SetBeneficiary", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint64", "name": "round", "type": "uint64" }, { "indexed": true, "internalType": "address", "name": "previousExpressLaneController", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newExpressLaneController", "type": "address" }, { "indexed": true, "internalType": "address", "name": "transferor", "type": "address" }, { "indexed": false, "internalType": "uint64", "name": "startTimestamp", "type": "uint64" }, { "indexed": false, "internalType": "uint64", "name": "endTimestamp", "type": "uint64" } ], "name": "SetExpressLaneController", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldPrice", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newPrice", "type": "uint256" } ], "name": "SetMinReservePrice", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldReservePrice", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newReservePrice", "type": "uint256" } ], "name": "SetReservePrice", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint64", "name": "currentRound", "type": "uint64" }, { "indexed": false, "internalType": "int64", "name": "offsetTimestamp", "type": "int64" }, { "indexed": false, "internalType": "uint64", "name": "roundDurationSeconds", "type": "uint64" }, { "indexed": false, "internalType": "uint64", "name": "auctionClosingSeconds", "type": "uint64" }, { "indexed": false, "internalType": "uint64", "name": "reserveSubmissionSeconds", "type": "uint64" } ], "name": "SetRoundTimingInfo", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "expressLaneController", "type": "address" }, { "indexed": true, "internalType": "address", "name": "transferor", "type": "address" }, { "indexed": false, "internalType": "uint64", "name": "fixedUntilRound", "type": "uint64" } ], "name": "SetTransferor", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "withdrawalAmount", "type": "uint256" } ], "name": "WithdrawalFinalized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "withdrawalAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "roundWithdrawable", "type": "uint256" } ], "name": "WithdrawalInitiated", "type": "event" }, { "inputs": [], "name": "AUCTIONEER_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "AUCTIONEER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "BENEFICIARY_SETTER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MIN_RESERVE_SETTER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "RESERVE_SETTER_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "RESERVE_SETTER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "ROUND_TIMING_SETTER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "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": "uint64", "name": "round", "type": "uint64" } ], "name": "balanceOfAtRound", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "beneficiary", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "beneficiaryBalance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "biddingToken", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "currentRound", "outputs": [ { "internalType": "uint64", "name": "", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "deposit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "domainSeparator", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "finalizeWithdrawal", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "flushBeneficiaryBalance", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint64", "name": "round", "type": "uint64" }, { "internalType": "address", "name": "expressLaneController", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "getBidHash", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "getRoleMember", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleMemberCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "_auctioneer", "type": "address" }, { "internalType": "address", "name": "_biddingToken", "type": "address" }, { "internalType": "address", "name": "_beneficiary", "type": "address" }, { "components": [ { "internalType": "int64", "name": "offsetTimestamp", "type": "int64" }, { "internalType": "uint64", "name": "roundDurationSeconds", "type": "uint64" }, { "internalType": "uint64", "name": "auctionClosingSeconds", "type": "uint64" }, { "internalType": "uint64", "name": "reserveSubmissionSeconds", "type": "uint64" } ], "internalType": "struct RoundTimingInfo", "name": "_roundTimingInfo", "type": "tuple" }, { "internalType": "uint256", "name": "_minReservePrice", "type": "uint256" }, { "internalType": "address", "name": "_auctioneerAdmin", "type": "address" }, { "internalType": "address", "name": "_minReservePriceSetter", "type": "address" }, { "internalType": "address", "name": "_reservePriceSetter", "type": "address" }, { "internalType": "address", "name": "_reservePriceSetterAdmin", "type": "address" }, { "internalType": "address", "name": "_beneficiarySetter", "type": "address" }, { "internalType": "address", "name": "_roundTimingSetter", "type": "address" }, { "internalType": "address", "name": "_masterAdmin", "type": "address" } ], "internalType": "struct InitArgs", "name": "args", "type": "tuple" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "initiateWithdrawal", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "isAuctionRoundClosed", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isReserveBlackout", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "minReservePrice", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "reservePrice", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "expressLaneController", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes", "name": "signature", "type": "bytes" } ], "internalType": "struct Bid", "name": "firstPriceBid", "type": "tuple" }, { "components": [ { "internalType": "address", "name": "expressLaneController", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes", "name": "signature", "type": "bytes" } ], "internalType": "struct Bid", "name": "secondPriceBid", "type": "tuple" } ], "name": "resolveMultiBidAuction", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "expressLaneController", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes", "name": "signature", "type": "bytes" } ], "internalType": "struct Bid", "name": "firstPriceBid", "type": "tuple" } ], "name": "resolveSingleBidAuction", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "resolvedRounds", "outputs": [ { "components": [ { "internalType": "address", "name": "expressLaneController", "type": "address" }, { "internalType": "uint64", "name": "round", "type": "uint64" } ], "internalType": "struct ELCRound", "name": "", "type": "tuple" }, { "components": [ { "internalType": "address", "name": "expressLaneController", "type": "address" }, { "internalType": "uint64", "name": "round", "type": "uint64" } ], "internalType": "struct ELCRound", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint64", "name": "round", "type": "uint64" } ], "name": "roundTimestamps", "outputs": [ { "internalType": "uint64", "name": "", "type": "uint64" }, { "internalType": "uint64", "name": "", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "roundTimingInfo", "outputs": [ { "internalType": "int64", "name": "offsetTimestamp", "type": "int64" }, { "internalType": "uint64", "name": "roundDurationSeconds", "type": "uint64" }, { "internalType": "uint64", "name": "auctionClosingSeconds", "type": "uint64" }, { "internalType": "uint64", "name": "reserveSubmissionSeconds", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newBeneficiary", "type": "address" } ], "name": "setBeneficiary", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newMinReservePrice", "type": "uint256" } ], "name": "setMinReservePrice", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newReservePrice", "type": "uint256" } ], "name": "setReservePrice", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "int64", "name": "offsetTimestamp", "type": "int64" }, { "internalType": "uint64", "name": "roundDurationSeconds", "type": "uint64" }, { "internalType": "uint64", "name": "auctionClosingSeconds", "type": "uint64" }, { "internalType": "uint64", "name": "reserveSubmissionSeconds", "type": "uint64" } ], "internalType": "struct RoundTimingInfo", "name": "newRoundTimingInfo", "type": "tuple" } ], "name": "setRoundTimingInfo", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "addr", "type": "address" }, { "internalType": "uint64", "name": "fixedUntilRound", "type": "uint64" } ], "internalType": "struct Transferor", "name": "transferor", "type": "tuple" } ], "name": "setTransferor", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint64", "name": "round", "type": "uint64" }, { "internalType": "address", "name": "newExpressLaneController", "type": "address" } ], "name": "transferExpressLaneController", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "transferorOf", "outputs": [ { "internalType": "address", "name": "addr", "type": "address" }, { "internalType": "uint64", "name": "fixedUntilRound", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "withdrawableBalance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint64", "name": "round", "type": "uint64" } ], "name": "withdrawableBalanceAtRound", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" } ], "bytecode": "0x60a06040523060805234801561001457600080fd5b506080516147d7610030600039600061173901526147d76000f3fe608060405234801561001057600080fd5b50600436106103145760003560e01c80637b617f94116101a7578063c5b6aa2f116100ee578063e2fc6f6811610097578063e4d20c1d11610071578063e4d20c1d146107de578063f698da25146107f1578063fed87be8146107f957600080fd5b8063e2fc6f68146107a5578063e3f7bb55146107af578063e460d2c5146107d657600080fd5b8063cfe9232b116100c8578063cfe9232b14610761578063d547741f14610788578063db2e1eed1461079b57600080fd5b8063c5b6aa2f14610733578063ca15c8731461073b578063ce9c7c0d1461074e57600080fd5b80639a1fadd311610150578063b51d1d4f1161012a578063b51d1d4f14610705578063b6b55f251461070d578063bef0ec741461072057600080fd5b80639a1fadd3146106c3578063a217fddf146106d6578063b3ee252f146106de57600080fd5b80638a19c8bc116101815780638a19c8bc146106565780639010d07c1461067757806391d148541461068a57600080fd5b80637b617f94146105f157806383af0a1f146106255780638948cc4e1461062f57600080fd5b80632f2ff15d1161026b578063639d7566116102145780636dc4fc4e116101ee5780636dc4fc4e146105b85780636e8cace5146105cb57806370a08231146105de57600080fd5b8063639d7566146105375780636a514beb1461054b5780636ad72517146105b057600080fd5b806338af3eed1161024557806338af3eed146104e5578063447a709e146105115780635633c3371461052457600080fd5b80632f2ff15d14610498578063336a5b5e146104ab57806336568abe146104d257600080fd5b80630d253fbe116102cd5780631c31f710116102a75780631c31f7101461045a578063248a9ca31461046d5780632d668ce71461049057600080fd5b80630d253fbe146103f657806314d963161461040c5780631682e50b1461043357600080fd5b806301ffc9a7116102fe57806301ffc9a71461039f57806302b62938146103c257806304c584ad146103e357600080fd5b80627be2fe146103195780630152682d1461032e575b600080fd5b61032c610327366004613e9b565b61080c565b005b6101045461036590600781900b9067ffffffffffffffff600160401b8204811691600160801b8104821691600160c01b9091041684565b6040805160079590950b855267ffffffffffffffff9384166020860152918316918401919091521660608201526080015b60405180910390f35b6103b26103ad366004613ed4565b610ab2565b6040519015158152602001610396565b6103d56103d0366004613efe565b610af6565b604051908152602001610396565b6103d56103f1366004613f1b565b610b6f565b6103fe610bf0565b604051610396929190613f5c565b6103d57f3fb9f0655b78e8eabe9e0f51d65db56c7690d4329012c3faf1fbd6d43f65826181565b6103d57f6d8dad7188c7ed005c55bf77fbf589583d8668b0dad30a9b9dd016321a5c256f81565b61032c610468366004613efe565b610cb1565b6103d561047b366004613faa565b60009081526065602052604090206001015490565b6103b2610d54565b61032c6104a6366004613fc3565b610db0565b6103d57fc1b97c934675624ef2089089ac12ae8922988c11dc8a578dfbac10d9eecf476181565b61032c6104e0366004613fc3565b610dda565b610100546104f9906001600160a01b031681565b6040516001600160a01b039091168152602001610396565b61032c61051f366004614000565b610e66565b6103d5610532366004614064565b611145565b610101546104f9906001600160a01b031681565b610588610559366004613efe565b610106602052600090815260409020546001600160a01b03811690600160a01b900467ffffffffffffffff1682565b604080516001600160a01b03909316835267ffffffffffffffff909116602083015201610396565b61032c611275565b61032c6105c6366004614092565b6112c3565b6103d56105d9366004614064565b61142b565b6103d56105ec366004613efe565b611515565b6106046105ff3660046140cf565b61158e565b6040805167ffffffffffffffff938416815292909116602083015201610396565b6103d56101035481565b6103d57fb07567e7223e21f7dce4c0a89131ce9c32d0d3484085f3f331dea8caef56d14181565b61065e6115f1565b60405167ffffffffffffffff9091168152602001610396565b6104f96106853660046140ec565b611648565b6103b2610698366004613fc3565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61032c6106d136600461410e565b611660565b6103d5600081565b6103d57f19e6f23df7275b48d1c33822c6ad041a743378552246ac819f578ae1d6709cf981565b61032c611c2b565b61032c61071b366004613faa565b611cf3565b61032c61072e366004614121565b611d5e565b61032c611ec4565b6103d5610749366004613faa565b611f81565b61032c61075c366004613faa565b611f98565b6103d57f1d693f62a755e2b3c6494da41af454605b9006057cb3c79b6adda1378f2a50a781565b61032c610796366004613fc3565b612070565b6103d56101025481565b6103d56101055481565b6103d57fa8131bb4589277d6866d942849029b416b39e61eb3969a32787130bbdd292a9681565b6103b2612095565b61032c6107ec366004613faa565b61210a565b6103d561218b565b61032c610807366004614133565b612195565b6040805160808101825261010454600781900b825267ffffffffffffffff600160401b820481166020840152600160801b8204811693830193909352600160c01b90049091166060820152600061086282612348565b90508067ffffffffffffffff168467ffffffffffffffff1610156108cb576040517f395f4fd600000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8086166004830152821660248201526044015b60405180910390fd5b60006108d860fe8661237e565b80546001600160a01b039081166000818152610106602052604090205492935091168015610968576001600160a01b0381163314610963576040517f7621d94a00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff881660048201526001600160a01b03821660248201523360448201526064016108c2565b6109cb565b6001600160a01b03821633146109cb576040517f660af6d200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff881660048201526001600160a01b03831660248201523360448201526064016108c2565b825473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0387161783556000806109fe878a61241d565b90925090506001600160a01b038316610a175783610a19565b825b6001600160a01b0316886001600160a01b0316856001600160a01b03167fb59adc820ca642dad493a0a6e0bdf979dcae037dea114b70d5c66b1c0b791c4b8c4267ffffffffffffffff168767ffffffffffffffff1610610a795786610a7b565b425b6040805167ffffffffffffffff938416815291831660208301529187168183015290519081900360600190a4505050505050505050565b60006001600160e01b031982167f5a05180f000000000000000000000000000000000000000000000000000000001480610af05750610af0826124b5565b92915050565b6040805160808101825261010454600781900b825267ffffffffffffffff600160401b820481166020840152600160801b8204811693830193909352600160c01b90049091166060820152600090610af090610b5190612348565b6001600160a01b038416600090815260fd602052604090209061251c565b604080517f0358b2b705d5c5ef47651be44f418326852a390f3b4c933661a5f4f0d8fa1ee3602082015267ffffffffffffffff8516918101919091526001600160a01b038316606082015260808101829052600090610be69060a00160405160208183030381529060405280519060200120612546565b90505b9392505050565b6040805180820190915260008082526020820152604080518082019091526000808252602082015260fe60010154600160a01b900467ffffffffffffffff1660fe60000154600160a01b900467ffffffffffffffff1611610c545760ff60fe610c59565b60fe60ff5b60408051808201825292546001600160a01b03808216855267ffffffffffffffff600160a01b928390048116602080880191909152845180860190955294549182168452919004169181019190915290939092509050565b7fc1b97c934675624ef2089089ac12ae8922988c11dc8a578dfbac10d9eecf4761610cdb816125af565b61010054604080516001600160a01b03928316815291841660208301527f8a0149b2f3ddf2c9ee85738165131d82babbb938f749321d59f75750afa7f4e6910160405180910390a150610100805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6040805160808101825261010454600781900b825267ffffffffffffffff600160401b820481166020840152600160801b8204811693830193909352600160c01b90049091166060820152600090610dab906125b9565b905090565b600082815260656020526040902060010154610dcb816125af565b610dd58383612625565b505050565b6001600160a01b0381163314610e585760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084016108c2565b610e628282612647565b5050565b7f1d693f62a755e2b3c6494da41af454605b9006057cb3c79b6adda1378f2a50a7610e90816125af565b6040805160808101825261010454600781900b825267ffffffffffffffff600160401b820481166020840152600160801b8204811693830193909352600160c01b90049091166060820152610ee4816125b9565b610f1a576040517fb9adeefd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826020013584602001351015610f5c576040517fa234cb1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101025483602001351015610faf57610102546040517f56f9b75a0000000000000000000000000000000000000000000000000000000081526020850135600482015260248101919091526044016108c2565b6000610fba82612348565b90506000610fc9826001614171565b9050600080610fe0610fda89614202565b84612669565b91509150600080610ffa89610ff490614202565b86612669565b91509150816001600160a01b0316846001600160a01b031603611049576040517ff4a3e48500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88602001358a602001351480156110db57506040516bffffffffffffffffffffffff19606084901b1660208201526034810182905260540160408051808303601f190181529082905280516020918201206bffffffffffffffffffffffff19606088901b169183019190915260348201859052906054016040516020818303038152906040528051906020012060001c105b15611112576040517f9185a0ae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008061111f898861241d565b9150915061113760018d888e602001358c8787612760565b505050505050505050505050565b6040805160808101825261010454600781900b825267ffffffffffffffff600160401b820481166020840152600160801b8204811693830193909352600160c01b9004909116606082015260009061119c90612348565b67ffffffffffffffff168267ffffffffffffffff161015611253576040805160808101825261010454600781900b825267ffffffffffffffff600160401b820481166020840152600160801b8204811693830193909352600160c01b90049091166060820152829061120d90612348565b6040517f395f4fd600000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9283166004820152911660248201526044016108c2565b6001600160a01b038316600090815260fd60205260409020610be990836128b8565b61010554600081900361129b57604051631f2a200560e01b815260040160405180910390fd5b60006101055561010054610101546112c0916001600160a01b039182169116836128d0565b50565b7f1d693f62a755e2b3c6494da41af454605b9006057cb3c79b6adda1378f2a50a76112ed816125af565b6040805160808101825261010454600781900b825267ffffffffffffffff600160401b820481166020840152600160801b8204811693830193909352600160c01b90049091166060820152611341816125b9565b611377576040517fb9adeefd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61010254836020013510156113ca57610102546040517f56f9b75a0000000000000000000000000000000000000000000000000000000081526020850135600482015260248101919091526044016108c2565b60006113d582612348565b905060006113e4826001614171565b905060006113fa6113f487614202565b83612669565b50905060008061140a868561241d565b915091506114216000898561010254898787612760565b5050505050505050565b6040805160808101825261010454600781900b825267ffffffffffffffff600160401b820481166020840152600160801b8204811693830193909352600160c01b9004909116606082015260009061148290612348565b67ffffffffffffffff168267ffffffffffffffff1610156114f3576040805160808101825261010454600781900b825267ffffffffffffffff600160401b820481166020840152600160801b8204811693830193909352600160c01b90049091166060820152829061120d90612348565b6001600160a01b038316600090815260fd60205260409020610be9908361251c565b6040805160808101825261010454600781900b825267ffffffffffffffff600160401b820481166020840152600160801b8204811693830193909352600160c01b90049091166060820152600090610af09061157090612348565b6001600160a01b038416600090815260fd60205260409020906128b8565b6040805160808101825261010454600781900b825267ffffffffffffffff600160401b820481166020840152600160801b8204811693830193909352600160c01b9004909116606082015260009081906115e8908461241d565b91509150915091565b6040805160808101825261010454600781900b825267ffffffffffffffff600160401b820481166020840152600160801b8204811693830193909352600160c01b90049091166060820152600090610dab90612348565b6000828152609760205260408120610be99083612961565b600054610100900460ff16158080156116805750600054600160ff909116105b8061169a5750303b15801561169a575060005460ff166001145b61170c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016108c2565b6000805460ff19166001179055801561172f576000805461ff0019166101001790555b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036117cd5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c000000000000000000000000000000000000000060648201526084016108c2565b6117d561296d565b6118496040518060400160405280601281526020017f457870726573734c616e6541756374696f6e00000000000000000000000000008152506040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152506129ec565b600061185b6040840160208501613efe565b6001600160a01b03160361189b576040517f3fb3c7af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118ab6040830160208401613efe565b610101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790556118e96060830160408401613efe565b610100805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790557f8a0149b2f3ddf2c9ee85738165131d82babbb938f749321d59f75750afa7f4e6600061194a6060850160408601613efe565b604080516001600160a01b0393841681529290911660208301520160405180910390a160e0820135610103819055604080516000815260208101929092527f5848068f11aa3ba9fe3fc33c5f9f2a3cd1aed67986b85b5e0cedc67dbe96f0f0910160405180910390a160e0820135610102819055604080516000815260208101929092527f9725e37e079c5bda6009a8f54d86265849f30acf61c630f9e1ac91e67de98794910160405180910390a16000611a0b60808401606085016142ca565b60070b1215611a46576040517f16f46dfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a5282606001612a73565b611a6e6000611a696101e085016101c08601613efe565b612625565b611aa47fb07567e7223e21f7dce4c0a89131ce9c32d0d3484085f3f331dea8caef56d141611a6961014085016101208601613efe565b611ada7fc1b97c934675624ef2089089ac12ae8922988c11dc8a578dfbac10d9eecf4761611a696101a085016101808601613efe565b611b437f1d693f62a755e2b3c6494da41af454605b9006057cb3c79b6adda1378f2a50a7611b0b6020850185613efe565b7f3fb9f0655b78e8eabe9e0f51d65db56c7690d4329012c3faf1fbd6d43f658261611b3e61012087016101008801613efe565b612c82565b611bac7f19e6f23df7275b48d1c33822c6ad041a743378552246ac819f578ae1d6709cf9611b7961016085016101408601613efe565b7fa8131bb4589277d6866d942849029b416b39e61eb3969a32787130bbdd292a96611b3e61018087016101608801613efe565b611be27f6d8dad7188c7ed005c55bf77fbf589583d8668b0dad30a9b9dd016321a5c256f611a696101c085016101a08601613efe565b8015610e62576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6040805160808101825261010454600781900b825267ffffffffffffffff600160401b820481166020840152600160801b8204811693830193909352600160c01b90049091166060820152600090611c8290612348565b611c8d906002614171565b33600090815260fd602052604090208054919250611cab9083612ca6565b6040805182815267ffffffffffffffff8416602082015233917f31f69201fab7912e3ec9850e3ab705964bf46d9d4276bdcbb6d05e965e5f5401910160405180910390a25050565b33600090815260fd602052604