0 txs
594 calls
constructor
No constructor.
functions
balanceOf
viewfunction balanceOf(address owner) view returns (uint256)
boughtCountInSession
viewfunction boughtCountInSession(address, uint256, uint8) view returns (uint256)
configSystem
viewfunction configSystem() view returns (address adminFee, address adminCommission, address usdt, address tokenFee, uint256 tokenPrice, uint256 subscription_fee, uint256 subscription_period, uint256 MAX_PRICE, uint256 PRICE_FEE_BP, uint256 PRICE_INCREMENT_BP, uint256 BP_DENOMINATOR, address trustSign)
getApproved
viewfunction getApproved(uint256 tokenId) view returns (address)
getMyNFTs
viewfunction getMyNFTs(address user) view returns (tuple[])
getNextTokenId
viewfunction getNextTokenId() view returns (uint256)
getNFTSession
viewfunction getNFTSession(uint256 session, uint8 round) view returns (uint256[])
getOwnedNFTs
viewfunction getOwnedNFTs(address user) view returns (uint256[])
getSessionAvailableNFTs
viewfunction getSessionAvailableNFTs(uint256 session, uint8 round, address user) view returns (uint256 availableNFTs, uint256 remainingNFTs, uint256 remainingAmount, uint256 userBoughtCount, uint256 userAmountSpent)
hasPaidForDay
viewfunction hasPaidForDay(address, uint256) view returns (bool)
isApprovedForAll
viewfunction isApprovedForAll(address owner, address operator) view returns (bool)
maxAmountPerSession
viewfunction maxAmountPerSession() view returns (uint256)
maxNFTPerSession
viewfunction maxNFTPerSession() view returns (uint256)
name
viewfunction name() view returns (string)
nftMinted
viewfunction nftMinted(uint256) view returns (address owner, uint8 round, uint256 session, uint256 price, uint256 price_old, uint256 fee, uint256 commission, bool sold, bool isBlock)
nftStabilizer
viewfunction nftStabilizer() view returns (address)
onERC721Received
purefunction onERC721Received(address, address, uint256, bytes) pure returns (bytes4)
owner
viewfunction owner() view returns (address)
ownerOf
viewfunction ownerOf(uint256 tokenId) view returns (address)
poolAffAddress
viewfunction poolAffAddress() view returns (address)
poolDao3Address
viewfunction poolDao3Address() view returns (address)
poolNFTOldAddress
viewfunction poolNFTOldAddress() view returns (address)
pools4Address
viewfunction pools4Address() view returns (address)
pools5Address
viewfunction pools5Address() view returns (address)
poolStabilizationAddress
viewfunction poolStabilizationAddress() view returns (address)
poolSystemAddress
viewfunction poolSystemAddress() view returns (address)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
sessionsNFTSell
viewfunction sessionsNFTSell(uint256, uint8, uint256) view returns (uint256)
subscriptionBooked
viewfunction subscriptionBooked(address, uint256) view returns (bool)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
symbol
viewfunction symbol() view returns (string)
tokenByIndex
viewfunction tokenByIndex(uint256 index) view returns (uint256)
tokenOfOwnerByIndex
viewfunction tokenOfOwnerByIndex(address owner, uint256 index) view returns (uint256)
tokenURI
viewfunction tokenURI(uint256 tokenId) view returns (string)
totalAmountSpentInSession
viewfunction totalAmountSpentInSession(uint256) view returns (uint256)
totalNFTBoughtInSession
viewfunction totalNFTBoughtInSession(uint256) view returns (uint256)
totalSupply
viewfunction totalSupply() view returns (uint256)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
userAmountSpentInSession
viewfunction userAmountSpentInSession(address, uint256, uint8) view returns (uint256)
addNFTs
nonpayablefunction addNFTs(uint256 session, uint8 round, uint256[] newArray)
adminUpdateConfig
nonpayablefunction adminUpdateConfig(address _usdtAddress, address _tokenAddress, address _adminfee, address _adminCommission, address _trustSign, uint256 _maxNFTPerSession, uint256 _maxAmountPerSession)
approve
nonpayablefunction approve(address to, uint256 tokenId)
burn
nonpayablefunction burn(uint256 tokenId)
burnAllMyNFTs
nonpayablefunction burnAllMyNFTs()
burnExpiredByUser
nonpayablefunction burnExpiredByUser(uint256 tokenId, uint256 timeStart)
burnNFT
nonpayablefunction burnNFT(uint256 tokenId)
burnNFTInSession
nonpayablefunction burnNFTInSession(uint256 session, uint8 round)
buyNFTAutoBySession
nonpayablefunction buyNFTAutoBySession(tuple input)
clearNFTs
nonpayablefunction clearNFTs(uint256 session, uint8 round)
initialize
nonpayablefunction initialize(address initialOwner, address _usdtAddress, address _tokenAddress, address _adminfee, address _adminCommission, address _trustSign)
renounceOwnership
nonpayablefunction renounceOwnership()
safeTransferFrom
nonpayablefunction safeTransferFrom(address from, address to, uint256 tokenId, bytes data)
safeTransferFrom
nonpayablefunction safeTransferFrom(address from, address to, uint256 tokenId)
sellAllAvailableNFTs
nonpayablefunction sellAllAvailableNFTs()
sellNFT
nonpayablefunction sellNFT(uint256 tokenId, uint256 session, uint256 startTime, uint8 round)
setAllPools
nonpayablefunction setAllPools(address _pool4Address, address _pool5Address, address _poolSystemAddress, address _poolStabilizationAddress, address _poolAffAddress, address _poolDao3Address, address _poolNFTOldAddress)
setApprovalForAll
nonpayablefunction setApprovalForAll(address operator, bool approved)
setNFTSession
nonpayablefunction setNFTSession(uint256 session, uint8 round, uint256[] tokenIds)
setSessionLimits
nonpayablefunction setSessionLimits(uint256 _maxNFTPerSession, uint256 _maxAmountPerSession)
setStabilizerAddress
nonpayablefunction setStabilizerAddress(address stabilizer)
subscribe
nonpayablefunction subscribe(uint256 session)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 tokenId)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
updateNextTokenId
nonpayablefunction updateNextTokenId(uint256 newTokenId)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
Approval
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
ApprovalForAll
event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
BatchMetadataUpdate
event BatchMetadataUpdate(uint256 _fromTokenId, uint256 _toTokenId)
Initialized
event Initialized(uint64 version)
MetadataUpdate
event MetadataUpdate(uint256 _tokenId)
NFTBought
event NFTBought(address indexed buyer, uint256 indexed tokenId, uint256 price, uint256 fee, uint256 commission, uint256 session, uint8 round)
NFTBurned
event NFTBurned(uint256 indexed tokenId, address indexed buyer, uint256 price, uint256 fee, uint256 commission, uint256 session)
NFTBurnedOut
event NFTBurnedOut(uint256 indexed tokenId, address indexed buyer, uint256 price, uint256 fee, uint256 commission, uint256 session)
NFTClaimCoinGame
event NFTClaimCoinGame(uint256 indexed tokenId, address indexed buyer, uint256 price, uint256 fee, uint256 commission, uint256 session)
NFTListedForSale
event NFTListedForSale(address indexed seller, uint256 indexed tokenId, address indexed originalOwner, uint8 round, uint256 price, uint256 fee, uint256 commission, uint256 session)
NFTLocked
event NFTLocked(address indexed user, uint256 indexed tokenId)
NFTMinted
event NFTMinted(address indexed to, uint256 indexed tokenId, uint256 price, uint256 priceOld, uint256 fee, uint256 commission, uint256 session, uint8 round, uint8 action)
NFTSessionReordered
event NFTSessionReordered(uint256 indexed session, uint8 indexed round, uint256 priorityCount, uint256 regularCount)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
registerBuyDate
event registerBuyDate(address indexed user, uint256 session)
SpinToGame
event SpinToGame(address indexed buyer, uint256 amount, uint256 spin)
Transfer
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
Upgraded
event Upgraded(address indexed implementation)
USDTToGame
event USDTToGame(address indexed buyer, uint256 amount, uint256 spin)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ERC721EnumerableForbiddenBatchMint
error ERC721EnumerableForbiddenBatchMint()
ERC721IncorrectOwner
error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner)
ERC721InsufficientApproval
error ERC721InsufficientApproval(address operator, uint256 tokenId)
ERC721InvalidApprover
error ERC721InvalidApprover(address approver)
ERC721InvalidOperator
error ERC721InvalidOperator(address operator)
ERC721InvalidOwner
error ERC721InvalidOwner(address owner)
ERC721InvalidReceiver
error ERC721InvalidReceiver(address receiver)
ERC721InvalidSender
error ERC721InvalidSender(address sender)
ERC721NonexistentToken
error ERC721NonexistentToken(uint256 tokenId)
ERC721OutOfBoundsIndex
error ERC721OutOfBoundsIndex(address owner, uint256 index)
FailedCall
error FailedCall()
InvalidInitialization
error InvalidInitialization()
NotInitializing
error NotInitializing()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x60a080604052346100fb57306080526001601155601680546001600160a01b031990811673f101d3ea3430eaaa5ab33896385f082dc7e29b9517909155601780548216730addb349c8263264f7b8aad358246b5664734bfa17905560188054821673dc85294d823df790a24f44495b1619c75659bd8c179055601980548216731da622e4417c9cd5e70af91b96b62f327cc354a1179055601a8054821673118fd05591fb0f0fa7c48a6d755b31a8d9cc70dd179055601b805482167371bacafaa013eba03fa74196c10b550982e36a53908117909155601c8054909216179055615a769081610100823960805181818161150d01526116810152f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c80623e1efa1461042357806301ffc9a71461041e57806306fdde0314610419578063081812fc14610414578063095ea7b31461040f5780630c365cc91461040a5780630c6230f7146104055780630e8e26e8146104005780630f574ba7146103fb578063150b7a02146103f6578063165fd9ea146103f157806318148f1b146103ec57806318160ddd146103e75780631f6c38ac146103e25780632148338d146103dd57806323b872dd146103d857806327b522f1146103d35780632890e0d7146103ce5780632f745c59146103c9578063386b9d68146103c4578063386c43ba146103bf5780633f6615af146103ba57806340c90931146103b557806342842e0e146103b057806342966c68146103ab5780634d113906146103a65780634f1ef286146103a15780634f6ccce71461039c57806352d1902d146103975780635e8ff81b146103925780636224158c1461038d5780636352211e1461038857806369141cdc146103835780636fdaac241461037e57806370a082311461037957806370ebade914610374578063715018a61461036f5780638a996e441461036a5780638da5cb5b146103655780639064c82b1461036057806395d89b411461035b57806398e4b085146103565780639c6c4acd14610351578063a22cb4651461034c578063ad3cb1cc14610347578063afe82d5714610342578063b25824861461033d578063b88d4fde14610338578063ba820a4414610333578063c180239a1461032e578063c87b56dd14610329578063caa0f92a14610324578063cc2a9a5b1461031f578063cd73e06c1461031a578063cfeb915914610315578063d88947f914610310578063dbca2eb31461030b578063e260271a14610306578063e679a26414610301578063e921ee6e146102fc578063e985e9c5146102f7578063ec152c3d146102f2578063f2fde38b146102ed578063f4bd34e9146102e85763ffd68f15146102e3575f80fd5b612ca7565b612c33565b612c0a565b612be3565b612ba6565b612aa7565b6129d8565b6129bb565b61298d565b612879565b612851565b612827565b61268d565b612670565b61263d565b612493565b6121a6565b612152565b611ff9565b611fd1565b611f8a565b611eef565b611e48565b611d1d565b611c60565b611b66565b611b32565b611aac565b611a45565b611a1d565b6119fa565b6119b7565b61183e565b611820565b6116ee565b6116c6565b61166f565b611613565b6114cf565b611398565b61137b565b611346565b61131c565b6111b0565b611188565b61116b565b61113c565b610fbb565b610f55565b610ee0565b610e0a565b610d7f565b610d56565b610c4c565b610bcb565b610b21565b6109cd565b6109a5565b61095b565b6108c6565b6107c4565b610769565b610677565b610592565b610536565b600435906001600160a01b038216820361043e57565b5f80fd5b602435906001600160a01b038216820361043e57565b604435906001600160a01b038216820361043e57565b606435906001600160a01b038216820361043e57565b608435906001600160a01b038216820361043e57565b60a435906001600160a01b038216820361043e57565b60c435906001600160a01b038216820361043e57565b6001600160a01b03165f9081527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab00793056020526040902090565b6001600160a01b03165f9081527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab00793036020526040902090565b3461043e57604036600319011261043e5761054f610428565b6024359060018060a01b03165f52600f60205260405f20905f52602052602060ff60405f2054166040519015158152f35b6001600160e01b031981160361043e57565b3461043e57602036600319011261043e576004356105af81610580565b63ffffffff60e01b16632483248360e11b81149081156105d8575b506040519015158152602090f35b63780e9d6360e01b8114915081156105f2575b505f6105ca565b6380ac58cd60e01b811491508115610624575b8115610613575b505f6105eb565b6301ffc9a760e01b1490505f61060c565b635b5e139f60e01b81149150610605565b5f91031261043e57565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b90602061067492818152019061063f565b90565b3461043e575f36600319011261043e576040515f5f5160206159015f395f51905f52546106a381612d4a565b808452906001811690811561074557506001146106db575b6106d7836106cb81850382611411565b60405191829182610663565b0390f35b5f5160206159015f395f51905f525f9081527f37c58c799b6609234b945e882912ee9ad34948a1dfaa20a97485e1a7752bbf81939250905b80821061072b575090915081016020016106cb6106bb565b919260018160209254838588010152019101909291610713565b60ff191660208086019190915291151560051b840190910191506106cb90506106bb565b3461043e57602036600319011261043e5760206107b260043561078b816136cb565b505f9081525f5160206159e15f395f51905f5260205260409020546001600160a01b031690565b6040516001600160a01b039091168152f35b3461043e57604036600319011261043e576107dd610428565b602435906107ea826136cb565b331515806108b3575b80610886575b61087357610871926108529181906001600160a01b0385811691167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9255f80a45f525f5160206159e15f395f51905f5260205260405f2090565b80546001600160a01b0319166001600160a01b03909216919091179055565b005b63a9fbf51f60e01b5f523360045260245ffd5b5060ff6108ab33610896846104c6565b9060018060a01b03165f5260205260405f2090565b5416156107f9565b506001600160a01b0381163314156107f3565b3461043e57602036600319011261043e576004356108e26136fa565b60115481106108f057601155005b60405162461bcd60e51b815260206004820152603b60248201527f4e657720746f6b656e204944206d75737420626520677265617465722074686160448201527f6e206f7220657175616c20746f2063757272656e742076616c756500000000006064820152608490fd5b3461043e57604036600319011261043e57610974610428565b6024359060018060a01b03165f52601060205260405f20905f52602052602060ff60405f2054166040519015158152f35b3461043e575f36600319011261043e576018546040516001600160a01b039091168152602090f35b3461043e57602036600319011261043e57600435610a25610a20610a1c610a1584610a083360018060a01b03165f52601060205260405f2090565b905f5260205260405f2090565b5460ff1690565b1590565b612e20565b6003545f90602090610a8090610a4b906001600160a01b03165b6001600160a01b031690565b6005546040516323b872dd60e01b815233600482015261dead6024820152604481019190915293849283919082906064820190565b03925af18015610b1c57610a9b915f91610aed575b50612eae565b335f818152601060209081526040808320858452825291829020805460ff19166001179055905192835290917f2d1c87fb67e414976ffc36ccc8766206f8a5b97334131a4879e73fcbe13ad2a79190a2005b610b0f915060203d602011610b15575b610b078183611411565b810190612e6c565b5f610a95565b503d610afd565b612ea3565b3461043e57608036600319011261043e57610b3a610428565b50610b43610442565b506064356001600160401b03811161043e573660238201121561043e5780600401356001600160401b03811161043e573691016024011161043e57604051630a85bd0160e11b8152602090f35b60ff81160361043e57565b606090600319011261043e576004356001600160a01b038116810361043e57906024359060443561067481610b90565b3461043e576020610c0a610bde36610b9b565b9160018060a01b03165f52600e845260405f20905f52835260405f209060ff165f5260205260405f2090565b54604051908152f35b60206040818301928281528451809452019201905f5b818110610c365750505090565b8251845260209384019390920191600101610c29565b3461043e57602036600319011261043e57610c65610428565b6040516370a0823160e01b81526001600160a01b0382166004820152602081602481305afa908115610b1c575f91610d37575b50610ca281612f16565b915f5b828110610cba57604051806106d78682610c13565b604051632f745c5960e01b81526001600160a01b03831660048201526024810182905290602082604481305afa8015610b1c576001925f91610d09575b50610d028287612f48565b5201610ca5565b610d2a915060203d8111610d30575b610d228183611411565b810190612ef0565b5f610cf7565b503d610d18565b610d50915060203d602011610d3057610d228183611411565b5f610c98565b3461043e575f36600319011261043e5760205f5160206159815f395f51905f5254604051908152f35b3461043e575f36600319011261043e576019546040516001600160a01b039091168152602090f35b90606060031983011261043e5760043591602435610dc481610b90565b916044356001600160401b03811161043e578260238201121561043e578060040135926001600160401b03841161043e5760248460051b8301011161043e576024019190565b3461043e57610e1836610da7565b90610e249392936136fa565b8115610e73575f5b828110610e3557005b600190845f52600d602052610e6d610e5b8760405f209060ff165f5260205260405f2090565b610e66838787612f5c565b3590612f6c565b01610e2c565b60405162461bcd60e51b815260206004820152600b60248201526a456d70747920617272617960a81b6044820152606490fd5b606090600319011261043e576004356001600160a01b038116810361043e57906024356001600160a01b038116810361043e579060443590565b3461043e57610871610ef136610ea6565b91612fa7565b634e487b7160e01b5f52603260045260245ffd5b5f5160206159815f395f51905f5254811015610f3b575f5160206159815f395f51905f525f5260205f2001905f90565b610ef7565b8054821015610f3b575f5260205f2001905f90565b3461043e57606036600319011261043e57600435610f97602435610f7881610b90565b604435925f52600d60205260405f209060ff165f5260205260405f2090565b805482101561043e57602091610fac91610f40565b90549060031b1c604051908152f35b3461043e57602036600319011261043e57600435610feb610fdb826136cb565b6001600160a01b031633146130df565b610ff681303361372d565b61101061100b825f52600c60205260405f2090565b61311b565b61101982614157565b6060810151601554909190611036906001600160a01b0316610a3f565b81519091906001600160a01b03169161106161105b6020604085015194015160ff1690565b60ff1690565b93813b1561043e57604051630ddbb17760e31b8152600481018790526001600160a01b03949094166024850152604484015260648301919091526084820192909252905f90829060a490829084905af18015610b1c57611122575b506110fb6110d2825f52600c60205260405f2090565b60065f918281558260018201558260028201558260038201558260048201558260058201550155565b337fa9262575db5f22d8b54192efce38602ac59d04bcdbcba1962fc351473de561465f80a3005b806111305f61113693611411565b80610635565b5f6110bc565b3461043e57604036600319011261043e57602061116361115a610428565b602435906131b0565b604051908152f35b3461043e575f36600319011261043e576020601d54604051908152f35b3461043e575f36600319011261043e576015546040516001600160a01b039091168152602090f35b3461043e575f36600319011261043e576111c933613376565b6111d481151561321d565b6111dd81612f16565b905f5b8181106112fe57825f5b8151811015610871578061120060019284612f48565b51611213815f52600c60205260405f2090565b90600682018461122c611227835460ff1690565b151590565b036112f6577f5acaae67cf200a73e396223c5acb98ede22307917c5a0fd5d92f1bf585ca0f0d858401936112608554613276565b809561128a611274845460ff9060a01c1690565b9561128088303361372d565b805460ff19169055565b55611296848487613785565b80546001600160a01b03166112ec600283015496600560048501549401546040519485948c8060a01b0316993398869192608093969594919660ff60a08501981684526020840152604083015260608201520152565b0390a45b016111ea565b5050506112f0565b8061130b600192336131b0565b6113158286612f48565b52016111e0565b3461043e57602036600319011261043e576004355f526013602052602060405f2054604051908152f35b3461043e5761087161135736610ea6565b9060405192611367602085611411565b5f8452611375838383612fa7565b336138f3565b3461043e57602036600319011261043e5761087133600435613f88565b3461043e575f36600319011261043e57601a546040516001600160a01b039091168152602090f35b634e487b7160e01b5f52604160045260245ffd5b61010081019081106001600160401b038211176113f057604052565b6113c0565b61012081019081106001600160401b038211176113f057604052565b90601f801991011681019081106001600160401b038211176113f057604052565b6040519061144261010083611411565b565b6040519061144261012083611411565b60405190611442606083611411565b6001600160401b0381116113f057601f01601f191660200190565b92919261148a82611463565b916114986040519384611411565b82948184528183011161043e578281602093845f960137010152565b9080601f8301121561043e578160206106749335910161147e565b604036600319011261043e576114e3610428565b6024356001600160401b03811161043e576115029036906004016114b4565b906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163081149081156115f1575b506115e2576115456136fa565b6040516352d1902d60e01b8152916020836004816001600160a01b0386165afa5f93816115c1575b5061158e57634c9c8ce360e01b5f526001600160a01b03821660045260245ffd5b905f5160206159615f395f51905f5283036115ad57610871925061422e565b632a87526960e21b5f52600483905260245ffd5b6115db91945060203d602011610d3057610d228183611411565b925f61156d565b63703e46dd60e11b5f5260045ffd5b5f5160206159615f395f51905f52546001600160a01b0316141590505f611538565b3461043e57602036600319011261043e576004355f5160206159815f395f51905f52548110156116595761164690610f0b565b905460405160039290921b1c8152602090f35b63295f44f760e21b5f525f60045260245260445ffd5b3461043e575f36600319011261043e577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031630036115e25760206040515f5160206159615f395f51905f528152f35b3461043e575f36600319011261043e576017546040516001600160a01b039091168152602090f35b3461043e57606036600319011261043e57610a086004356106d760243561171481610b90565b61171c610458565b92805f52600d60205261173d8260405f209060ff165f5260205260405f2090565b549360018060a01b0381165f52600e60205261179a8361177084611780836117708360405f20905f5260205260405f2090565b9060ff165f5260205260405f2090565b54998a9560018060a01b03165f52601460205260405f2090565b54601d54909381156117fa57506117b1925061329f565b935b601e548281156117f1576117c69161329f565b604051958695869192608093969594919660a084019784526020840152604083015260608201520152565b50505f196117c6565b611814915061177061181a945f52600d60205260405f2090565b5461329f565b936117b3565b3461043e57602036600319011261043e5760206107b26004356136cb565b3461043e57608036600319011261043e576024356004356044356118df8260643561186881610b90565b8561187b835f52600c60205260405f2090565b94611888610a3f856136cb565b331480611999575b611899906132ac565b60018601906118a88254613276565b8314908161198f575b508061196d575b6118c190613304565b6118cc84303361372d565b60068601805460ff191690555585613785565b8054907f5acaae67cf200a73e396223c5acb98ede22307917c5a0fd5d92f1bf585ca0f0d9061191b6001600160a01b0384169360a01c60ff1690565b926119686002830154966005600485015494015460405194859460018060a01b0316993398869192608093969594919660ff60a08501981684526020840152604083015260608201520152565b0390a4005b506118c161198361105b885460ff9060a01c1690565b60ff85161490506118b8565b905042105f6118b1565b5061189960016119ad600689015460ff1690565b1515149050611890565b3461043e57602036600319011261043e576119d0610428565b6119d86136fa565b601580546001600160a01b0319166001600160a01b0392909216919091179055005b3461043e57602036600319011261043e576020611163611a18610428565b613376565b3461043e575f36600319011261043e57601c546040516001600160a01b039091168152602090f35b3461043e575f36600319011261043e57611a5d6136fa565b5f5160206159215f395f51905f5280546001600160a01b031981169091555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461043e57604036600319011261043e57611aea602435600435611acf82610b90565b5f52600d60205260405f209060ff165f5260205260405f2090565b8054611af581612f16565b915f5b828110611b0d57604051806106d78682610c13565b80611b1a60019284610f40565b90549060031b1c611b2b8287612f48565b5201611af8565b3461043e575f36600319011261043e575f5160206159215f395f51905f52546040516001600160a01b039091168152602090f35b3461043e57604036600319011261043e57602435600435611b86816137ae565b9162278d008101809111611c5b57421115611c1d578151611baf906001600160a01b0316610fdb565b611bb881614157565b815160608084015160a085015160c08601516040968701518751938452602084019290925295820195909552908101939093526001600160a01b0316917fcfb973d167054ba7994e803da29c81242c42edd54a74fd1348db8078b1df9fb290608090a3005b60405162461bcd60e51b8152602060048201526016602482015275139195081a5cc81b9bdd08195e1c1a5c9959081e595d60521b6044820152606490fd5b613262565b3461043e575f36600319011261043e576040515f5f516020615a215f395f51905f5254611c8c81612d4a565b80845290600181169081156107455750600114611cb3576106d7836106cb81850382611411565b5f516020615a215f395f51905f525f9081527ff4bad0a69248f59680a4f2b3000328cec71a413447c96781cfe5996daa8c456e939250905b808210611d03575090915081016020016106cb6106bb565b919260018160209254838588010152019101909291611ceb565b3461043e5760e036600319011261043e57610871611d39610428565b611e26611d44610442565b611e04611d4f610458565b611de2611d5a61046e565b611dc0611d65610484565b93611d6e61049a565b96611d776104b0565b99611d806136fa565b601680546001600160a01b03199081166001600160a01b039384161790915560178054821693831693909317909255601880549092169216919091179055565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b601a80546001600160a01b0319166001600160a01b0392909216919091179055565b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b601c80546001600160a01b0319166001600160a01b0392909216919091179055565b3461043e575f36600319011261043e575f54600154600254600354600454600554600654600754600854600954600a54600b54604080516001600160a01b039d8e1681529b8d1660208d0152998c16998b0199909952968a1660608a0152608089019590955260a088019390935260c087019190915260e08601526101008501526101208401526101408301529190911661016082015261018090f35b8015150361043e57565b3461043e57604036600319011261043e57611f08610428565b602435611f1481611ee5565b6001600160a01b038216918215611f775781611f36611f4792610896336104c6565b9060ff801983541691151516179055565b60405190151581527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a3005b82630b61174360e31b5f5260045260245ffd5b3461043e575f36600319011261043e576106d7604051611fab604082611411565b60058152640352e302e360dc1b602082015260405191829160208352602083019061063f565b3461043e575f36600319011261043e576016546040516001600160a01b039091168152602090f35b3461043e5760e036600319011261043e576120fe612015610428565b6120f9612020610442565b6120f461202b610458565b936120d761203761046e565b936120b5612043610484565b9361209360a4359761205460c43590565b9a61205d6136fa565b60018060a01b03166001600160601b0360a01b5f5416175f5560018060a01b03166001600160601b0360a01b6001541617600155565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b60018060a01b03166001600160601b0360a01b600b541617600b55565b601d55565b601e55565b61210e662386f26fc10000600455565b6121206801158e460913d00000600555565b612132681b1ae4d6e2ef500000600755565b61213c60c8600855565b61214761024e600955565b610871612710600a55565b3461043e57608036600319011261043e5761216b610428565b612173610442565b90604435606435926001600160401b03841161043e5761219a6108719436906004016114b4565b92611375838383612fa7565b3461043e57602036600319011261043e576004356001600160401b03811161043e578060040160a0600319833603011261043e57612265612216926122b66122906024830135926121f88415156139e4565b61228a612283873597608461227b888b612273604489019e8f613a30565b60648a01359d8e936040519485936020850197339389939160759593918552602085015260ff60f81b9060f81b16604084015260418301526001600160601b03199060601b1660618201520190565b03601f198101835282611411565b5190206142d0565b940190613a3a565b369161147e565b90614315565b600b546122a5906001600160a01b0316610a3f565b6001600160a01b0390911614613a6c565b6122c96122c285613a30565b84336143a3565b335f90815260106020908152604080832087845290915290205490929060ff1690831080612489575b6122fb90613aac565b1561239d575b506123966123906108719461237961236761235d61234261232a895f52600d60205260405f2090565b61233386613a30565b60ff165f5260205260405f2090565b6123578154612352811515613b47565b613291565b90610f40565b90549060031b1c90565b612372811515613b88565b3390614646565b61238b61238582613a30565b86614e9b565b613a30565b91613276565b9133614efb565b620151809004335f908152600f602052604090206123c490610a1c90610a15908490610a08565b15612301576003546123de906001600160a01b0316610a3f565b6040516323b872dd60e01b815233600482015261dead60248201526801a055690d9db80000604482015290602090829060649082905f905af1948515610b1c576124626123969361243d61087198612390955f9161246a575b50613b0a565b335f908152600f6020908152604080832093835292905220805460ff19166001179055565b945050612301565b612483915060203d602011610b1557610b078183611411565b5f612437565b50428211156122f2565b3461043e57604036600319011261043e576004356024356124b381610b90565b6124bb6136fa565b6124d181611770845f52600d60205260405f2090565b9081546124dd81612f16565b905f935f5b8281106125485750505061250a61250583611770875f52600d60205260405f2090565b613460565b5f5b83811061251557005b60019061254261253185611770895f52600d60205260405f2090565b61253b8386612f48565b5190612f6c565b0161250c565b61255561235d8284610f40565b61256a61100b825f52600c60205260405f2090565b9030612578610a3f836136cb565b0361261d57908161258b60019493614157565b6125a06110d2825f52600c60205260405f2090565b81517fe0e4c65a614ee76a799b1861c4f4143a3e64c4618e7d5d5ffec3ab8182184352906001600160a01b03169260608101519361261360a083015192604060c0820151910151906040519485948b8060a01b031698859094939260609260808301968352602083015260408201520152565b0390a35b016124e2565b612637915096600192976126318288612f48565b526133a5565b95612617565b3461043e57602036600319011261043e576106d761265c600435613c0a565b60405191829160208352602083019061063f565b3461043e575f36600319011261043e576020601154604051908152f35b3461043e5760c036600319011261043e576126a6610428565b6126ae610442565b906126b7610458565b6126bf61046e565b6126c7610484565b906126d061049a565b925f516020615a015f395f51905f5254956001600160401b0361270a6126fd610a1c8a60ff9060401c1690565b986001600160401b031690565b168015908161281f575b6001149081612815575b15908161280c575b506127fd57612769958761276060016001600160401b03195f516020615a015f395f51905f525416175f516020615a015f395f51905f5255565b6127c857613481565b61276f57005b61279960ff60401b195f516020615a015f395f51905f5254165f516020615a015f395f51905f5255565b604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1005b6127f8600160401b60ff60401b195f516020615a015f395f51905f525416175f516020615a015f395f51905f5255565b613481565b63f92ee8a960e01b5f5260045ffd5b9050155f612726565b303b15915061271e565b889150612714565b3461043e57602036600319011261043e576004355f526012602052602060405f2054604051908152f35b3461043e575f36600319011261043e57601b546040516001600160a01b039091168152602090f35b3461043e575f36600319011261043e5761289233613376565b61289d81151561321d565b6128a681612f16565b905f5b81811061296f57825f5b815181101561087157806128c960019284612f48565b516128d3816137ae565b906128ea336128e4610a3f846136cb565b146135a3565b6128f381614157565b6129086110d2825f52600c60205260405f2090565b7fb2b1b7792429233aa1f8f5bdb7ba6040645917c0b9e84b9cb3912f45174de8d360608301519260a0810151612966604060c08401519301516040519384933398859094939260609260808301968352602083015260408201520152565b0390a3016128b3565b8061297c600192336131b0565b6129868286612f48565b52016128a9565b3461043e57604036600319011261043e576108716125056024356004356129b382610b90565b611acf6136fa565b3461043e575f36600319011261043e576020601e54604051908152f35b3461043e576020610c0a6129eb36610b9b565b9160018060a01b03165f526014845260405f20905f52835260405f209060ff165f5260205260405f2090565b60206040818301928281528451809452019201905f5b818110612a3a5750505090565b909192602061010060019260e0875180518352858060a01b0385820151168584015260408101516040840152606081015160608401526080810151608084015260a081015160a084015260ff60c08201511660c08401520151151560e08201520194019101919091612a2d565b3461043e57602036600319011261043e57612ac0610428565b612ac981613376565b612ad2816135db565b915f5b828110612aea57604051806106d78682612a17565b80612af7600192846131b0565b612b8a612b03826137ae565b8051612b81906001600160a01b031691606081015160a082015160c083015190604084015192612b63612b4760e0612b3f602089015160ff1690565b970151151590565b97612b50611432565b9a8b526001600160a01b031660208b0152565b60408901526060880152608087015260a086015260ff1660c0850152565b151560e0830152565b612b948287612f48565b52612b9f8186612f48565b5001612ad5565b3461043e57604036600319011261043e57602060ff612bd7612bc6610428565b610896612bd1610442565b916104c6565b54166040519015158152f35b3461043e57604036600319011261043e57602435600435612c026136fa565b601d55601e55005b3461043e57602036600319011261043e57610871612c26610428565b612c2e6136fa565b61365a565b3461043e57612c4136610da7565b90612c4d9392936136fa565b825f52600d602052612c706125058560405f209060ff165f5260205260405f2090565b5f5b828110612c7b57005b600190845f52600d602052612ca1610e5b8760405f209060ff165f5260205260405f2090565b01612c72565b3461043e57602036600319011261043e576004355f908152600c602090815260409182902080546001820154600283015460038401546004850154600586015460069096015488516001600160a01b038716815260ff60a097881c81169982019990995298890194909452606088019290925260808701529185019190915260c0840191909152818116151560e084015260081c16151561010082015261012090f35b90600182811c92168015612d78575b6020831014612d6457565b634e487b7160e01b5f52602260045260245ffd5b91607f1691612d59565b9060405191825f825492612d9584612d4a565b8084529360018116908115612dfe5750600114612dba575b5061144292500383611411565b90505f9291925260205f20905f915b818310612de2575050906020611442928201015f612dad565b6020919350806001915483858901015201910190918492612dc9565b90506020925061144294915060ff191682840152151560051b8201015f612dad565b15612e2757565b60405162461bcd60e51b815260206004820152601f60248201527f416c7265616479207375627363726962656420666f72207468697320646179006044820152606490fd5b9081602091031261043e575161067481611ee5565b6001600160a01b03918216815291166020820152604081019190915260600190565b6040513d5f823e3d90fd5b15612eb557565b60405162461bcd60e51b81526020600482015260136024820152723a3930b739b332b910313ab9371032b93937b960691b6044820152606490fd5b9081602091031261043e575190565b6001600160401b0381116113f05760051b60200190565b90612f2082612eff565b612f2d6040519182611411565b8281528092612f3e601f1991612eff565b0190602036910137565b8051821015610f3b5760209160051b010190565b9190811015610f3b5760051b0190565b90815491600160401b8310156113f05782612f8f91600161144295018155610f40565b90919082549060031b91821b915f19901b1916179055565b9091906001600160a01b03831680156130cc57612fc383613f34565b93336130bc575b6001600160a01b0385169184908315801561309e575b612fe9846104fe565b6001815401905561301284610852855f525f5160206159c15f395f51905f5260205260405f2090565b8282865f5160206159a15f395f51905f525f80a4156130885761303482615202565b8303613078575b50506001600160a01b0382160361305157505050565b6364283d7b60e01b5f526001600160a01b039081166004526024919091521660445260645ffd5b613081916152a3565b5f8361303b565b838114613034576130998288615138565b613034565b6130a783613f5a565b6130b0886104fe565b80545f19019055612fe0565b6130c78433876156b8565b612fca565b633250574960e11b5f525f60045260245ffd5b156130e657565b60405162461bcd60e51b815260206004820152600d60248201526c2737ba1027232a1037bbb732b960991b6044820152606490fd5b906114426131a6600661312c611444565b85546001600160a01b03811682529095906131599061314f905b60a01c60ff1690565b60ff166020880152565b600181015460408701526002810154606087015260038101546080870152600481015460a0870152600581015460c0870152015461319d60ff8216151560e0870152565b60081c60ff1690565b1515610100840152565b6131b981613376565b8210156132005760018060a01b03165f527f645e039705490088daad89bae25049a34f4a9072d398537b1ab2425f24cbed0060205260405f20905f5260205260405f205490565b63295f44f760e21b5f5260018060a01b031660045260245260445ffd5b1561322457565b60405162461bcd60e51b8152602060048201526016602482015275596f7520646f6e2774206f776e20616e79204e46547360501b6044820152606490fd5b634e487b7160e01b5f52601160045260245ffd5b9060018201809211611c5b57565b91908201809211611c5b57565b5f19810191908211611c5b57565b91908203918211611c5b57565b156132b357565b60405162461bcd60e51b8152602060048201526024808201527f4e4654206e6f74206f776e6572206f72204e465420616c7265616479206f6e2060448201526373616c6560e01b6064820152608490fd5b1561330b57565b60405162461bcd60e51b815260206004820152603c60248201527f496e76616c69642073657373696f6e206f7220616c726561647920737461727460448201527f6564206f722073657373696f6e20726f756e64206d69736d61746368000000006064820152608490fd5b6001600160a01b038116156133925761338e906104fe565b5490565b6322718ad960e21b5f525f60045260245ffd5b5f198114611c5b5760010190565b90601482029180830460141490151715611c5b57565b90602882029180830460281490151715611c5b57565b90606482029180830460641490151715611c5b57565b90609682029180830460961490151715611c5b57565b9060e682029180830460e61490151715611c5b57565b90603282029180830460321490151715611c5b57565b81810292918115918404141715611c5b57565b818110613455575050565b5f815560010161344a565b80545f82558061346e575050565b611442915f5260205f209081019061344a565b90612093611442969561353261354f966134a86120b5966134a0614f73565b612c2e614f73565b6134f7604080516134b98282611411565b600a8152690a6e0d2dc9c8ca884def60b31b60208201526134dc82519283611411565b60098252680a6e0d2dc9c8ca884b60bb1b6020830152613e01565b6134ff614f73565b613507614f73565b61350f614f73565b613517614f73565b60018060a01b03166001600160601b0360a01b5f5416175f55565b60018060a01b03166001600160601b0360a01b6001541617600155565b61355f662386f26fc10000600455565b6135716801158e460913d00000600555565b613583681b1ae4d6e2ef500000600755565b61358d60c8600855565b61359861024e600955565b6120d7612710600a55565b156135aa57565b60405162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b6044820152606490fd5b906135e582612eff565b6135f26040519182611411565b8281528092613603601f1991612eff565b01905f5b82811061361357505050565b602090604051613622816113d4565b5f81525f838201525f60408201525f60608201525f60808201525f60a08201525f60c08201525f60e082015282828501015201613607565b6001600160a01b031680156136b8575f5160206159215f395f51905f5280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b6136d481613f34565b906001600160a01b038216156136e8575090565b637e27328960e01b5f5260045260245ffd5b5f5160206159215f395f51905f52546001600160a01b0316330361371a57565b63118cdaa760e01b5f523360045260245ffd5b919291906001600160a01b038116156130cc578361374a91614073565b906001600160a01b0382168061376d5784637e27328960e01b5f5260045260245ffd5b929391926001600160a01b0382160361305157505050565b61144292916137a9915f52600d60205260405f209060ff165f5260205260405f2090565b612f6c565b5f6101006040516137be816113f5565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e082015201525f52600c60205260405f206106746138746006613808611444565b84546001600160a01b03811682529094906138309061382690613146565b60ff166020870152565b600181015460408601526002810154606086015260038101546080860152600481015460a0860152600581015460c0860152015461319d60ff8216151560e0860152565b1515610100830152565b9081602091031261043e575161067481610580565b6001600160a01b0391821681529116602082015260408101919091526080606082018190526106749291019061063f565b3d156138ee573d906138d582611463565b916138e36040519384611411565b82523d5f602084013e565b606090565b939193843b613904575b5050505050565b6139256020936040519586948594630a85bd0160e11b865260048601613893565b03815f6001600160a01b0387165af15f91816139b3575b50613976575061394a6138c4565b805191908261396f57633250574960e11b5f526001600160a01b03821660045260245ffd5b6020915001fd5b6001600160e01b03191663757a42ff60e11b0161399857505f808080806138fd565b633250574960e11b5f526001600160a01b031660045260245ffd5b6139d691925060203d6020116139dd575b6139ce8183611411565b81019061387e565b905f61393c565b503d6139c4565b156139eb57565b60405162461bcd60e51b815260206004820152601a60248201527f496e76616c69642073657373696f6e2073746172742074696d650000000000006044820152606490fd5b3561067481610b90565b903590601e198136030182121561043e57018035906001600160401b03821161043e5760200191813603831361043e57565b15613a7357565b60405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b6044820152606490fd5b15613ab357565b60405162461bcd60e51b815260206004820152602960248201527f427579206c696d6974206578636565646564206f722053657373696f6e206e6f6044820152681d081cdd185c9d195960ba1b6064820152608490fd5b15613b1157565b60405162461bcd60e51b815260206004820152600e60248201526d14185e5b595b9d0819985a5b195960921b6044820152606490fd5b15613b4e57565b60405162461bcd60e51b815260206004820152601260248201527127379027232a399034b71039b2b9b9b4b7b760711b6044820152606490fd5b15613b8f57565b60405162461bcd60e51b8152602060048201526011602482015270105b1b081391951cc8185c99481cdbdb19607a1b6044820152606490fd5b805191908290602001825e015f815290565b61144290613bfc613bf694936040519586936020850190613bc8565b90613bc8565b03601f198101845283611411565b613c13816136cb565b50805f527f0542a41881ee128a365a727b282c86fa859579490b9bb45aab8503648c8e7900602052613c4760405f20612d82565b613c4f614f2e565b805115613dfb578151613df1575050613c67816136cb565b50613c70614f2e565b805190919015613ddb5780815f9272184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b811015613db5575b50806d04ee2d6d415b85acef8100000000600a921015613d99575b662386f26fc10000811015613d84575b6305f5e100811015613d72575b612710811015613d62575b6064811015613d53575b1015613d48575b613d2d6021613d0260018501615690565b938401015b5f1901916f181899199a1a9b1b9c1cb0b131b232b360811b600a82061a8353600a900490565b908115613d3d57613d2d90613d07565b505061067491613bda565b600190910190613cf1565b60029060649004930192613cea565b6004906127109004930192613ce0565b6008906305f5e1009004930192613cd5565b601090662386f26fc100009004930192613cc8565b6020906d04ee2d6d415b85acef81000000009004930192613cb8565b6040935072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b90049050600a613c9d565b5050604051613deb602082611411565b5f815290565b6106749250613bda565b50905090565b613e09614f73565b613e11614f73565b8051906001600160401b0382116113f057613e4282613e3d5f5160206159015f395f51905f5254612d4a565b614f9e565b602090601f8311600114613e95579180613e769261144295945f92613e8a575b50508160011b915f199060031b1c19161790565b5f5160206159015f395f51905f5255615025565b015190505f80613e62565b5f5160206159015f395f51905f525f52601f19831691907f37c58c799b6609234b945e882912ee9ad34948a1dfaa20a97485e1a7752bbf81925f5b818110613f1c575091600193918561144297969410613f04575b505050811b015f5160206159015f395f51905f5255615025565b01515f1960f88460031b161c191690555f8080613eea565b92936020600181928786015181550195019301613ed0565b5f9081525f5160206159c15f395f51905f5260205260409020546001600160a01b031690565b613f78905f525f5160206159e15f395f51905f5260205260405f2090565b80546001600160a01b0319169055565b61067490613f9581613f34565b92816001600160a01b038216614062575b50506001600160a01b038316801580159183905f9084614021575b613fdf835f525f5160206159c15f395f51905f5260205260405f2090565b80546001600160a01b03191690555f5160206159a15f395f51905f528280a415614012575061400d81615202565b615311565b156153115761400d8184615138565b61403f835f525f5160206159e15f395f51905f5260205260405f2090565b80546001600160a01b0319169055614056886104fe565b82198154019055613fc1565b61406c91856156b8565b5f81613fa6565b61407c82613f34565b916001600160a01b0383168015908115614139575b6001600160a01b038416918215908115614124575b6140c886610852875f525f5160206159c15f395f51905f5260205260405f2090565b8484845f5160206159a15f395f51905f525f80a41561410e576140ea84615202565b156140fb5750506106749150615311565b0361410557505090565b610674916152a3565b8183146140ea5761411f8487615138565b6140ea565b61412d866104fe565b600181540190556140a6565b61414283613f5a565b61414b856104fe565b80545f19019055614091565b61416081613f34565b6001600160a01b0381168015919082159084905f90836141ed575b614199835f525f5160206159c15f395f51905f5260205260405f2090565b80546001600160a01b03191690555f5160206159a15f395f51905f528280a482156141d957506141c883615202565b6141d183615311565b506136e85750565b156141c8576141e88382615138565b6141c8565b61420b835f525f5160206159e15f395f51905f5260205260405f2090565b80546001600160a01b0319169055614222856104fe565b8219815401905561417b565b90813b156142af575f5160206159615f395f51905f5280546001600160a01b0319166001600160a01b0384169081179091557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a280511561429757614294916153ff565b50565b5050346142a057565b63b398979f60e01b5f5260045ffd5b50634c9c8ce360e01b5f9081526001600160a01b0391909116600452602490fd5b60405160208101917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008352603c820152603c815261430f605c82611411565b51902090565b604182510361435e5760208281015160408085015160609586015182519586525f90811a868601529185019290925293830152828052919060809060015afa15610b1c575f5190565b60405162461bcd60e51b815260206004820152601860248201527f496e76616c6964207369676e6174757265206c656e67746800000000000000006044820152606490fd5b9061338e929160018060a01b03165f52600e60205260405f20905f5260205260405f209060ff165f5260205260405f2090565b81156143e0570490565b634e487b7160e01b5f52601260045260245ffd5b156143fb57565b60405162461bcd60e51b815260206004820152601560248201527413dddb995c881d1c985b9cd9995c8819985a5b1959605a1b6044820152606490fd5b1561443f57565b60405162461bcd60e51b8152602060048201526015602482015274141bdbdb0d081d1c985b9cd9995c8819985a5b1959605a1b6044820152606490fd5b1561448357565b60405162461bcd60e51b8152602060048201526015602482015274141bdbdb0d481d1c985b9cd9995c8819985a5b1959605a1b6044820152606490fd5b156144c757565b60405162461bcd60e51b815260206004820152601a60248201527f506f6f6c53797374656d207472616e73666572206661696c65640000000000006044820152606490fd5b1561451357565b60405162461bcd60e51b815260206004820152602160248201527f506f6f6c53746162696c697a6174696f6e207472616e73666572206661696c656044820152601960fa1b6064820152608490fd5b1561456957565b60405162461bcd60e51b815260206004820152601760248201527f506f6f6c416666207472616e73666572206661696c65640000000000000000006044820152606490fd5b156145b557565b60405162461bcd60e51b815260206004820152601860248201527f506f6f6c44616f33207472616e73666572206661696c656400000000000000006044820152606490fd5b1561460157565b60405162461bcd60e51b815260206004820152601c60248201527f506f6f6c204e4654204f6c64207472616e73666572206661696c6564000000006044820152606490fd5b919091614652816137ae565b9260408401519060608501519061467d61467260a0880193845190613284565b60c088015190613284565b9561469761468f602083015160ff1690565b838987615473565b6060810151938351946147a160c0840151956146b1611454565b92835260208301978852604083019687526146da6146d260608701516133b3565b612710900490565b6146ea6146d260608801516133c9565b6146fa6146d260608901516133df565b61470a6146d260608a01516133f5565b61471a6146d260608b015161340b565b9161472b6146d260608c0151613421565b9361473c6146d260608d0151613421565b9560208d8d6147516146d260608301516133f5565b905f61478361476a610a3f60025460018060a01b031690565b83519094906060906001600160a01b0316940151613284565b6040516323b872dd60e01b81529e8f95869485939160048501612e81565b03925af1908115610b1c576147c36020926148129b5f91614e7e575b506143f4565b6002548e906147da906001600160a01b0316610a3f565b6016549091905f906147f4906001600160a01b0316610a3f565b6040516323b872dd60e01b81529d8e95869485939060048501612e81565b03925af1908115610b1c576148346020926148809a5f91614e61575b50614438565b600254614849906001600160a01b0316610a3f565b6017548e905f90614862906001600160a01b0316610a3f565b6040516323b872dd60e01b81529c8d95869485939060048501612e81565b03925af1908115610b1c576148a26020926148ee995f91614e44575b5061447c565b6002546148b7906001600160a01b0316610a3f565b6018548d905f906148d0906001600160a01b0316610a3f565b6040516323b872dd60e01b81529b8c95869485939060048501612e81565b03925af1908115610b1c57614910602092614959985f91614e27575b506144c0565b600254614925906001600160a01b0316610a3f565b60195461493a906001600160a01b0316610a3f565b5f8d6040519a8b95869485936323b872dd60e01b855260048501612e81565b03925af1908115610b1c5761497b6020926149c4975f91614e0a575b5061450c565b600254614990906001600160a01b0316610a3f565b601a546149a5906001600160a01b0316610a3f565b5f8c604051998a95869485936323b872dd60e01b855260048501612e81565b03925af1908115610b1c576149e6602092614a2f965f91614ded575b50614562565b6002546149fb906001600160a01b0316610a3f565b601b54614a10906001600160a01b0316610a3f565b5f8b604051988995869485936323b872dd60e01b855260048501612e81565b03925af1908115610b1c57614a51602092614a9a955f91614dd0575b506145ae565b600254614a66906001600160a01b0316610a3f565b601c54614a7b906001600160a01b0316610a3f565b5f8a604051978895869485936323b872dd60e01b855260048501612e81565b03925af1918215610b1c57614b1292614aba915f91614db1575b506145fa565b614ad38b614acc602088015160ff1690565b8689615557565b6001600160a01b03861685528a6060860152614af16008548c613437565b90614aff600a5480936143d6565b9052614b0d6009548c613437565b6143d6565b60c0840152600160e08401526007548910614d6657614b3087614157565b80518651865160408051938452602084019290925290820152606081018390526001600160a01b03851699908a9089907fb2b1b7792429233aa1f8f5bdb7ba6040645917c0b9e84b9cb3912f45174de8d390608090a36005900430845260808401995f5b600560ff821610614c20575050507f282ff65372667fe270dd8b35b290765ebc9cb1d89519330b296dee3022c823af959697985090614be26020614c1b94935b519851965193015160ff1690565b60408051988952602089019690965294870191909152606086015260ff90921660808501526001600160a01b03169290819060a0820190565b0390a3565b600160ff916020848f8b88614d5c7f49e559030d460398a5a0756e586d028b31d491802533aaa21360baffae8bf96893614ce88f8f90614ce290614ccb614c6561567e565b9b8c92614c71846137ae565b6001600160a01b038c168152958a6060880152614cb2614c936008548d613437565b614ca0600a5480926143d6565b60a08a0152614b0d8d60095490613437565b60c0880152600160e08801526040870152015160ff1690565b60ff1660208401908152975f6101008501526157d3565b88615599565b51928d614cf760085485613437565b91614d20614d18614d0b600a5480966143d6565b94614b0d60095489613437565b915160ff1690565b9260405196879687929460c09460029660ff949998939960e087019a875260208701526040860152606085015260808401521660a08201520152565b0390a30116614b94565b8697985090614be260208493614da1614c1b967f282ff65372667fe270dd8b35b290765ebc9cb1d89519330b296dee3022c823af9a9b615599565b614dac8b883061372d565b614bd4565b614dca915060203d602011610b1557610b078183611411565b5f614ab4565b614de79150843d8611610b1557610b078183611411565b5f614a4b565b614e049150843d8611610b1557610b078183611411565b5f6149e0565b614e219150843d8611610b1557610b078183611411565b5f614975565b614e3e9150843d8611610b1557610b078183611411565b5f61490a565b614e5b9150843d8611610b1557610b078183611411565b5f61489c565b614e789150843d8611610b1557610b078183611411565b5f61482e565b614e959150843d8611610b1557610b078183611411565b5f6147bd565b90614ebb915f52600d60205260405f209060ff165f5260205260405f2090565b80548015614ee7575f190190614ee4614ed48383610f40565b8154905f199060031b1b19169055565b55565b634e487b7160e01b5f52603160045260245ffd5b90614ee4929160018060a01b03165f52600e60205260405f20905f5260205260405f209060ff165f5260205260405f2090565b60405190614f3d606083611411565b60218252602f60f81b6040837f68747470733a2f2f6170692e7370696e6e66742e6e65742f6d6574616461746160208201520152565b60ff5f516020615a015f395f51905f525460401c1615614f8f57565b631afcd79f60e31b5f5260045ffd5b90601f8211614fab575050565b611442915f5160206159015f395f51905f525f5260205f20906020601f840160051c83019310614fe3575b601f0160051c019061344a565b9091508190614fd6565b9190601f8111614ffc57505050565b611442925f5260205f20906020601f840160051c83019310614fe357601f0160051c019061344a565b9081516001600160401b0381116113f057615064816150515f516020615a215f395f51905f5254612d4a565b5f516020615a215f395f51905f52614fed565b602092601f82116001146150a457615093929382915f92613e8a5750508160011b915f199060031b1c19161790565b5f516020615a215f395f51905f5255565b5f516020615a215f395f51905f525f52601f198216937ff4bad0a69248f59680a4f2b3000328cec71a413447c96781cfe5996daa8c456e915f5b8681106151205750836001959610615108575b505050811b015f516020615a215f395f51905f5255565b01515f1960f88460031b161c191690555f80806150f1565b919260206001819286850151815501940192016150de565b905f6151b761514684613376565b928083525f5160206158e15f395f51905f5260205260408320549460018060a01b031683527f645e039705490088daad89bae25049a34f4a9072d398537b1ab2425f24cbed0060205260408320948481036151c5575b505f525f5160206158e15f395f51905f5260205260405f2090565b555f526020525f6040812055565b848452856020526151fb6040852054828652876020528060408720555f525f5160206158e15f395f51905f5260205260405f2090565b555f61519c565b5f5160206159815f395f51905f5254815f525f5160206159415f395f51905f5260205260405f20555f5160206159815f395f51905f5254600160401b8110156113f057600181015f5160206159815f395f51905f52555f5160206159815f395f51905f5254811015610f3b575f5160206159815f395f51905f525f527fa42f15e5d656f8155fd7419d740a6073999f19cd6e061449ce4a257150545bf20155565b906152ad82613376565b5f19810192908311611c5b5760018060a01b03165f527f645e039705490088daad89bae25049a34f4a9072d398537b1ab2425f24cbed0060205260405f20825f526020528060405f20555f525f5160206158e15f395f51905f5260205260405f2055565b5f5160206159815f395f51905f52545f198101908111611c5b57815f525f5160206159415f395f51905f5260205261534d60405f205491610f0b565b90549060031b1c61536181612f8f84610f0b565b5f525f5160206159415f395f51905f5260205260405f20555f525f5160206159415f395f51905f526020525f60408120555f5160206159815f395f51905f52548015614ee7575f198101905f5160206159815f395f51905f5254821015610f3b575f5160206159815f395f51905f525f8181527fa42f15e5d656f8155fd7419d740a6073999f19cd6e061449ce4a257150545bf19092019190915555565b5f8061067493602081519101845af46154166138c4565b91615775565b1561542357565b60405162461bcd60e51b815260206004820152602260248201527f557365722073657373696f6e20616d6f756e74206c696d697420657863656564604482015261195960f21b6064820152608490fd5b9190601d54806154ce575b50601e54928361548f575050505050565b6154c4946117706154b792610a086154bd9660018060a01b03165f52601460205260405f2090565b54613284565b111561541c565b5f808080806138fd565b6001600160a01b0383165f908152600e60209081526040808320878452825280832060ff8916845290915290205460018101809111611c5b5711615512575f61547e565b60405162461bcd60e51b815260206004820152601f60248201527f557365722073657373696f6e204e4654206c696d6974206578636565646564006044820152606490fd5b9061558a929160018060a01b03165f52601460205260405f20905f5260205260405f209060ff165f5260205260405f2090565b8054918201809211611c5b5755565b90611442915f52600c602052615668610100600660405f206155e06155c4865160018060a01b031690565b82546001600160a01b0319166001600160a01b03909116178255565b61560b6155f1602087015160ff1690565b825460ff60a01b191660a09190911b60ff60a01b16178255565b60408501516001820155606085015160028201556080850151600382015560a0850151600482015560c08501516005820155019261566161564f60e0830151151590565b859060ff801983541691151516179055565b0151151590565b815461ff00191690151560081b61ff0016179055565b60115461568a816133a5565b60115590565b9061569a82611463565b6156a76040519182611411565b8281528092612f3e601f1991611463565b6001600160a01b03821691821515908161570e575b50156156d857505050565b6001600160a01b03166156f957637e27328960e01b5f52600482905260245ffd5b63177e802f60e01b5f5260045260245260445ffd5b6001600160a01b03831684149150811561575c575b508015615731575b5f6156cd565b505f8381525f5160206159e15f395f51905f5260205260409020546001600160a01b0316821461572b565b60ff915061576d90610896846104c6565b54165f615723565b90615799575080511561578a57602081519101fd5b63d6bda27560e01b5f5260045ffd5b815115806157ca575b6157aa575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b156157a2565b6040516020926157e38483611411565b5f82526001600160a01b0383169081156130cc576001600160a01b036158098286614073565b166158cd57833b61581b575050505050565b918495939491615844935f604051809681958294630a85bd0160e11b8452843360048601613893565b03925af15f91816158ae575b5061588957505061585f6138c4565b805192908361588457633250574960e11b5f526001600160a01b03831660045260245ffd5b019050fd5b9092506001600160e01b03191663757a42ff60e11b0161399857505f808080806138fd565b6158c6919250853d87116139dd576139ce8183611411565b905f615850565b6339e3563760e11b5f525f60045260245ffdfe645e039705490088daad89bae25049a34f4a9072d398537b1ab2425f24cbed0180bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab00793009016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300645e039705490088daad89bae25049a34f4a9072d398537b1ab2425f24cbed03360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc645e039705490088daad89bae25049a34f4a9072d398537b1ab2425f24cbed02ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930280bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079304f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0080bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079301a264697066735822122089c7b514636d435389efeecf70b9b455e165059ccb16d68ab2b8aaa620aacf3d64736f6c634300081e0033