157 txs
133 calls
constructor
constructor(string _name, string _symbol, address _lzEndpoint, address _delegate, address admin, address minter1)
functions
ADMIN_ROLE
viewfunction ADMIN_ROLE() view returns (bytes32)
allowInitializePath
viewfunction allowInitializePath(tuple origin) view returns (bool)
approvalRequired
purefunction approvalRequired() pure returns (bool)
balanceOf
viewfunction balanceOf(address owner) view returns (uint256)
combineOptions
viewfunction combineOptions(uint32 _eid, uint16 _msgType, bytes _extraOptions) view returns (bytes)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
endpoint
viewfunction endpoint() view returns (address)
enforcedOptions
viewfunction enforcedOptions(uint32 eid, uint16 msgType) view returns (bytes enforcedOption)
getApproved
viewfunction getApproved(uint256 tokenId) view returns (address)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
isApprovedForAll
viewfunction isApprovedForAll(address owner, address operator) view returns (bool)
isComposeMsgSender
viewfunction isComposeMsgSender(tuple, bytes, address _sender) view returns (bool)
isPeer
viewfunction isPeer(uint32 _eid, bytes32 _peer) view returns (bool)
MINTER_ROLE
viewfunction MINTER_ROLE() view returns (bytes32)
msgInspector
viewfunction msgInspector() view returns (address)
name
viewfunction name() view returns (string)
nextNonce
viewfunction nextNonce(uint32, bytes32) view returns (uint64 nonce)
oApp
viewfunction oApp() view returns (address)
oAppVersion
purefunction oAppVersion() pure returns (uint64 senderVersion, uint64 receiverVersion)
onftVersion
purefunction onftVersion() pure returns (bytes4 interfaceId, uint64 version)
owner
viewfunction owner() view returns (address)
ownerOf
viewfunction ownerOf(uint256 tokenId) view returns (address)
peers
viewfunction peers(uint32 eid) view returns (bytes32 peer)
preCrime
viewfunction preCrime() view returns (address)
quoteSend
viewfunction quoteSend(tuple _sendParam, bool _payInLzToken) view returns (tuple msgFee)
SEND_AND_COMPOSE
viewfunction SEND_AND_COMPOSE() view returns (uint16)
SEND
viewfunction SEND() view returns (uint16)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
symbol
viewfunction symbol() view returns (string)
token
viewfunction token() view returns (address)
tokenURI
viewfunction tokenURI(uint256 tokenId) view returns (string)
transfersLocked
viewfunction transfersLocked() view returns (bool)
approve
nonpayablefunction approve(address to, uint256 tokenId)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
lzReceive
payablefunction lzReceive(tuple _origin, bytes32 _guid, bytes _message, address _executor, bytes _extraData) payable
lzReceiveAndRevert
payablefunction lzReceiveAndRevert(tuple[] _packets) payable
lzReceiveSimulate
payablefunction lzReceiveSimulate(tuple _origin, bytes32 _guid, bytes _message, address _executor, bytes _extraData) payable
mint
nonpayablefunction mint(uint256 tokenID, address minterAddress)
renounceOwnership
nonpayablefunction renounceOwnership()
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
safeTransferFrom
nonpayablefunction safeTransferFrom(address from, address to, uint256 tokenId, bytes data)
safeTransferFrom
nonpayablefunction safeTransferFrom(address from, address to, uint256 tokenId)
send
payablefunction send(tuple _sendParam, tuple _fee, address _refundAddress) payable returns (tuple msgReceipt)
setApprovalForAll
nonpayablefunction setApprovalForAll(address operator, bool approved)
setBaseURI
nonpayablefunction setBaseURI(string _baseTokenURI)
setDelegate
nonpayablefunction setDelegate(address _delegate)
setEnforcedOptions
nonpayablefunction setEnforcedOptions(tuple[] _enforcedOptions)
setMsgInspector
nonpayablefunction setMsgInspector(address _msgInspector)
setPeer
nonpayablefunction setPeer(uint32 _eid, bytes32 _peer)
setPreCrime
nonpayablefunction setPreCrime(address _preCrime)
setTransferLock
nonpayablefunction setTransferLock(bool _lock)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 tokenId)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
withdrawERC20
nonpayablefunction withdrawERC20(address tokenAddress)
withdrawEther
nonpayablefunction withdrawEther(address to, uint256 amount)
events
Approval
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
ApprovalForAll
event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
BaseURISet
event BaseURISet(string baseURI)
EnforcedOptionSet
event EnforcedOptionSet((uint32 eid, uint16 msgType, bytes options)[] _enforcedOptions)
MsgInspectorSet
event MsgInspectorSet(address inspector)
ONFTReceived
event ONFTReceived(bytes32 indexed guid, uint32 srcEid, address indexed toAddress, uint256 tokenId)
ONFTSent
event ONFTSent(bytes32 indexed guid, uint32 dstEid, address indexed fromAddress, uint256 tokenId)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
PeerSet
event PeerSet(uint32 eid, bytes32 peer)
PreCrimeSet
event PreCrimeSet(address preCrimeAddress)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
Transfer
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
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)
InvalidDelegate
error InvalidDelegate()
InvalidEndpointCall
error InvalidEndpointCall()
InvalidOptions
error InvalidOptions(bytes options)
InvalidReceiver
error InvalidReceiver()
LzTokenUnavailable
error LzTokenUnavailable()
NoPeer
error NoPeer(uint32 eid)
NotEnoughNative
error NotEnoughNative(uint256 msgValue)
OnlyEndpoint
error OnlyEndpoint(address addr)
OnlyNFTOwner
error OnlyNFTOwner(address caller, address owner)
OnlyPeer
error OnlyPeer(uint32 eid, bytes32 sender)
OnlySelf
error OnlySelf()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
SimulationResult
error SimulationResult(bytes result)
creation bytecode
0x60a0604052600d805460ff1916600117905534801561001c575f5ffd5b5060405161430538038061430583398101604081905261003b916103b6565b858585858383838381818181806001600160a01b03811661007557604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b61007e816101b8565b506001600160a01b0380831660805281166100ac57604051632d618d8160e21b815260040160405180910390fd5b60805160405163ca5eb5e160e01b81526001600160a01b0383811660048301529091169063ca5eb5e1906024015f604051808303815f87803b1580156100f0575f5ffd5b505af1158015610102573d5f5f3e3d5ffd5b50505050505050505050816005908161011b91906104de565b50600661012882826104de565b505050505050506101415f5f1b8361020760201b60201c565b506101595f5160206142e55f395f51905f5283610207565b506101715f5160206142c55f395f51905f5282610207565b506101895f5160206142e55f395f51905f52806102b4565b6101ad5f5160206142c55f395f51905f525f5160206142e55f395f51905f526102b4565b505050505050610598565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f828152600c602090815260408083206001600160a01b038516845290915281205460ff166102ab575f838152600c602090815260408083206001600160a01b03861684529091529020805460ff191660011790556102633390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102ae565b505f5b92915050565b5f828152600c6020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112610321575f5ffd5b81516001600160401b0381111561033a5761033a6102fe565b604051601f8201601f19908116603f011681016001600160401b0381118282101715610368576103686102fe565b60405281815283820160200185101561037f575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b80516001600160a01b03811681146103b1575f5ffd5b919050565b5f5f5f5f5f5f60c087890312156103cb575f5ffd5b86516001600160401b038111156103e0575f5ffd5b6103ec89828a01610312565b602089015190975090506001600160401b03811115610409575f5ffd5b61041589828a01610312565b9550506104246040880161039b565b93506104326060880161039b565b92506104406080880161039b565b915061044e60a0880161039b565b90509295509295509295565b600181811c9082168061046e57607f821691505b60208210810361048c57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156104d957805f5260205f20601f840160051c810160208510156104b75750805b601f840160051c820191505b818110156104d6575f81556001016104c3565b50505b505050565b81516001600160401b038111156104f7576104f76102fe565b61050b81610505845461045a565b84610492565b6020601f82116001811461053d575f83156105265750848201515b5f19600385901b1c1916600184901b1784556104d6565b5f84815260208120601f198516915b8281101561056c578785015182556020948501946001909201910161054c565b508482101561058957868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b608051613ce46105e15f395f818161061b01528181610b4701528181611624015281816119d101528181611c68015281816122dd01528181612764015261281b0152613ce45ff3fe608060405260043610610348575f3560e01c806383f1211b116101b8578063bc70b354116100f5578063d424388511610099578063f2fde38b1161006b578063f2fde38b14610a12578063f4f3b20014610a31578063fc0c546a14610585578063ff7bd03d14610a5057005b8063d424388514610982578063d5391393146109a1578063d547741f146109d4578063e985e9c5146109f357005b8063c6414e7b116100d2578063c6414e7b14610905578063c87b56dd14610931578063ca5eb5e114610950578063d045a0dc1461096f57005b8063bc70b354146108b4578063bd815db0146108d3578063bff35618146108e657005b8063a22cb4651161015c578063b731ea0a11610139578063b731ea0a1461082c578063b88d4fde1461084b578063b98bd0701461086a578063bb0b6a531461088957005b8063a22cb465146107d2578063a72f5dd8146107f1578063b21a33e41461081857005b806394bf804d1161019557806394bf804d1461077a57806395d89b41146107995780639f68b964146107ad578063a217fddf146107bf57005b806383f1211b146107265780638da5cb5b1461073f57806391d148541461075b57005b806342842e0e116102865780636352211e1161022a578063715018a611610207578063715018a61461069a57806375b238fc146106ae5780637d25a05e146106ce57806382413eac1461070757005b80636352211e1461063d5780636fc1b31e1461065c57806370a082311461067b57005b80635535d461116102635780635535d4611461059757806355f804b3146105b65780635a0dfe4d146105d55780635e280f111461060a57005b806342842e0e14610547578063522f68151461056657806352ae28791461058557005b80631f5e1334116102ed578063248a9ca3116102ca578063248a9ca3146104ae5780632f2ff15d146104ea5780633400288b1461050957806336568abe1461052857005b80631f5e13341461044857806321eb730b1461046f57806323b872dd1461048f57005b8063095ea7b311610326578063095ea7b3146103d6578063111ecdad146103f557806313137d651461041457806317442b701461042757005b806301ffc9a71461034a57806306fdde031461037e578063081812fc1461039f575b005b348015610355575f5ffd5b50610369610364366004612c79565b610a6f565b60405190151581526020015b60405180910390f35b348015610389575f5ffd5b50610392610a7f565b6040516103759190612cc2565b3480156103aa575f5ffd5b506103be6103b9366004612cd4565b610b0f565b6040516001600160a01b039091168152602001610375565b3480156103e1575f5ffd5b506103486103f0366004612cff565b610b36565b348015610400575f5ffd5b506004546103be906001600160a01b031681565b610348610422366004612d83565b610b45565b348015610432575f5ffd5b5060408051600181526002602082015201610375565b348015610453575f5ffd5b5061045c600181565b60405161ffff9091168152602001610375565b61048261047d366004612e2d565b610c05565b6040516103759190612e95565b34801561049a575f5ffd5b506103486104a9366004612ed6565b610cbd565b3480156104b9575f5ffd5b506104dc6104c8366004612cd4565b5f908152600c602052604090206001015490565b604051908152602001610375565b3480156104f5575f5ffd5b50610348610504366004612f14565b610d46565b348015610514575f5ffd5b50610348610523366004612f5a565b610d6a565b348015610533575f5ffd5b50610348610542366004612f14565b610d7c565b348015610552575f5ffd5b50610348610561366004612ed6565b610db4565b348015610571575f5ffd5b50610348610580366004612cff565b610dce565b348015610590575f5ffd5b50306103be565b3480156105a2575f5ffd5b506103926105b1366004612f85565b610f23565b3480156105c1575f5ffd5b506103486105d0366004612fb6565b610fc5565b3480156105e0575f5ffd5b506103696105ef366004612f5a565b63ffffffff919091165f908152600160205260409020541490565b348015610615575f5ffd5b506103be7f000000000000000000000000000000000000000000000000000000000000000081565b348015610648575f5ffd5b506103be610657366004612cd4565b611017565b348015610667575f5ffd5b50610348610676366004612ff4565b611021565b348015610686575f5ffd5b506104dc610695366004612ff4565b61107e565b3480156106a5575f5ffd5b506103486110c3565b3480156106b9575f5ffd5b506104dc5f516020613c8f5f395f51905f5281565b3480156106d9575f5ffd5b506106ef6106e8366004612f5a565b5f92915050565b6040516001600160401b039091168152602001610375565b348015610712575f5ffd5b5061036961072136600461300f565b6110d6565b348015610731575f5ffd5b50600d546103699060ff1681565b34801561074a575f5ffd5b505f546001600160a01b03166103be565b348015610766575f5ffd5b50610369610775366004612f14565b6110eb565b348015610785575f5ffd5b50610348610794366004612f14565b611115565b3480156107a4575f5ffd5b50610392611149565b3480156107b8575f5ffd5b505f610369565b3480156107ca575f5ffd5b506104dc5f81565b3480156107dd575f5ffd5b506103486107ec36600461307e565b611158565b3480156107fc575f5ffd5b50604080516311f0c6d360e11b81526001602082015201610375565b348015610823575f5ffd5b5061045c600281565b348015610837575f5ffd5b506002546103be906001600160a01b031681565b348015610856575f5ffd5b506103486108653660046131b0565b611163565b348015610875575f5ffd5b50610348610884366004613257565b61117b565b348015610894575f5ffd5b506104dc6108a3366004613289565b60016020525f908152604090205481565b3480156108bf575f5ffd5b506103926108ce3660046132a2565b611195565b6103486108e1366004613257565b611336565b3480156108f1575f5ffd5b506103486109003660046132fe565b6114b6565b348015610910575f5ffd5b5061092461091f366004613319565b6114e1565b604051610375919061335c565b34801561093c575f5ffd5b5061039261094b366004612cd4565b611525565b34801561095b575f5ffd5b5061034861096a366004612ff4565b6115fd565b61034861097d366004612d83565b61167e565b34801561098d575f5ffd5b5061034861099c366004612ff4565b6116ad565b3480156109ac575f5ffd5b506104dc7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b3480156109df575f5ffd5b506103486109ee366004612f14565b611703565b3480156109fe575f5ffd5b50610369610a0d366004613373565b611727565b348015610a1d575f5ffd5b50610348610a2c366004612ff4565b611754565b348015610a3c575f5ffd5b50610348610a4b366004612ff4565b611791565b348015610a5b575f5ffd5b50610369610a6a36600461339f565b61186f565b5f610a79826118a3565b92915050565b606060058054610a8e906133b9565b80601f0160208091040260200160405190810160405280929190818152602001828054610aba906133b9565b8015610b055780601f10610adc57610100808354040283529160200191610b05565b820191905f5260205f20905b815481529060010190602001808311610ae857829003601f168201915b5050505050905090565b5f610b19826118c7565b505f828152600960205260409020546001600160a01b0316610a79565b610b418282336118ff565b5050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163314610b95576040516391ac5e4f60e01b81523360048201526024015b60405180910390fd5b60208701803590610baf90610baa908a613289565b61190c565b14610bed57610bc16020880188613289565b60405163309afaf360e21b815263ffffffff909116600482015260208801356024820152604401610b8c565b610bfc87878787878787611947565b50505050505050565b610c0d612c24565b610c28336040860135610c236020880188613289565b611a9d565b5f5f610c3386611afd565b9092509050610c5f610c486020880188613289565b8383610c59368a90038a018a6133eb565b88611c37565b805190935033907f986156872b2ee0022b9585231dbbfde457f87f8a16b6c45e1a81c54c4ad8351f610c9460208a018a613289565b6040805163ffffffff9092168252808b013560208301520160405180910390a350509392505050565b6001600160a01b038216610ce657604051633250574960e11b81525f6004820152602401610b8c565b5f610cf2838333611d3d565b9050836001600160a01b0316816001600160a01b031614610d40576040516364283d7b60e01b81526001600160a01b0380861660048301526024820184905282166044820152606401610b8c565b50505050565b5f828152600c6020526040902060010154610d6081611def565b610d408383611df9565b610d72611e8a565b610b418282611eb6565b6001600160a01b0381163314610da55760405163334bd91960e11b815260040160405180910390fd5b610daf8282611f03565b505050565b610daf83838360405180602001604052805f815250611163565b5f516020613c8f5f395f51905f52610de581611def565b6001600160a01b038316610e345760405162461bcd60e51b815260206004820152601660248201527557697468647261773a207a65726f206164647265737360501b6044820152606401610b8c565b81471015610e845760405162461bcd60e51b815260206004820152601e60248201527f57697468647261773a20696e73756666696369656e742062616c616e636500006044820152606401610b8c565b5f836001600160a01b0316836040515f6040518083038185875af1925050503d805f8114610ecd576040519150601f19603f3d011682016040523d82523d5f602084013e610ed2565b606091505b5050905080610d405760405162461bcd60e51b815260206004820152601960248201527f57697468647261773a207472616e73666572206661696c6564000000000000006044820152606401610b8c565b600360209081525f928352604080842090915290825290208054610f46906133b9565b80601f0160208091040260200160405190810160405280929190818152602001828054610f72906133b9565b8015610fbd5780601f10610f9457610100808354040283529160200191610fbd565b820191905f5260205f20905b815481529060010190602001808311610fa057829003601f168201915b505050505081565b610fcd611e8a565b600b610fda828483613460565b507ff9c7803e94e0d3c02900d8a90893a6d5e90dd04d32a4cfe825520f82bf9f32f6600b60405161100b9190613519565b60405180910390a15050565b5f610a79826118c7565b611029611e8a565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197906020015b60405180910390a150565b5f6001600160a01b0382166110a8576040516322718ad960e21b81525f6004820152602401610b8c565b506001600160a01b03165f9081526008602052604090205490565b6110cb611e8a565b6110d45f611f6e565b565b6001600160a01b03811630145b949350505050565b5f918252600c602090815260408084206001600160a01b0393909316845291905290205460ff1690565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a661113f81611def565b610daf8284611fbd565b606060068054610a8e906133b9565b610b41338383611fd6565b61116e848484610cbd565b610d403385858585612074565b611183611e8a565b610b4161119082846135a0565b61219b565b63ffffffff84165f90815260036020908152604080832061ffff871684529091528120805460609291906111c8906133b9565b80601f01602080910402602001604051908101604052809291908181526020018280546111f4906133b9565b801561123f5780601f106112165761010080835404028352916020019161123f565b820191905f5260205f20905b81548152906001019060200180831161122257829003601f168201915b5050505050905080515f0361128d5783838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152509294506110e39350505050565b5f83900361129c5790506110e3565b60028310611319576112e284848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061229c92505050565b806112f08460028188613678565b604051602001611302939291906136b6565b6040516020818303038152906040529150506110e3565b8383604051639a6d49cd60e01b8152600401610b8c9291906136fc565b5f5b8181101561143957368383838181106113535761135361370f565b90506020028101906113659190613723565b90506113976113776020830183613289565b602083013563ffffffff919091165f908152600160205260409020541490565b6113a15750611431565b3063d045a0dc60c08301358360a08101356113c0610100830183613742565b6113d1610100890160e08a01612ff4565b6113df6101208a018a613742565b6040518963ffffffff1660e01b81526004016114019796959493929190613798565b5f604051808303818588803b158015611418575f5ffd5b505af115801561142a573d5f5f3e3d5ffd5b5050505050505b600101611338565b50336001600160a01b0316638e9e70996040518163ffffffff1660e01b81526004015f60405180830381865afa158015611475573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261149c919081019061381d565b604051638351eea760e01b8152600401610b8c9190612cc2565b5f516020613c8f5f395f51905f526114cd81611def565b50600d805460ff1916911515919091179055565b604080518082019091525f80825260208201525f5f6114ff85611afd565b909250905061151c6115146020870187613289565b8383876122c8565b95945050505050565b5f818152600760205260409020546060906001600160a01b03166115a35760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610b8c565b5f6115ac61239d565b51116115c65760405180602001604052805f815250610a79565b6115ce61239d565b6115d7836123ac565b6040516020016115e8929190613891565b60405160208183030381529060405292915050565b611605611e8a565b60405163ca5eb5e160e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e1906024015f604051808303815f87803b158015611665575f5ffd5b505af1158015611677573d5f5f3e3d5ffd5b5050505050565b33301461169e5760405163029a949d60e31b815260040160405180910390fd5b610bfc87878787878787610bed565b6116b5611e8a565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776090602001611073565b5f828152600c602052604090206001015461171d81611def565b610d408383611f03565b6001600160a01b039182165f908152600a6020908152604080832093909416825291909152205460ff1690565b61175c611e8a565b6001600160a01b03811661178557604051631e4fbdf760e01b81525f6004820152602401610b8c565b61178e81611f6e565b50565b5f516020613c8f5f395f51905f526117a881611def565b6040516370a0823160e01b815230600482015282905f906001600160a01b038316906370a0823190602401602060405180830381865afa1580156117ee573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061181291906138bb565b90505f811161185b5760405162461bcd60e51b81526020600482015260156024820152744e6f20746f6b656e7320746f20776974686472617760581b6044820152606401610b8c565b610d406001600160a01b038316338361243b565b5f6020820180359060019083906118869086613289565b63ffffffff16815260208101919091526040015f20541492915050565b5f6001600160e01b03198216637965db0b60e01b1480610a795750610a798261249a565b5f818152600760205260408120546001600160a01b031680610a7957604051637e27328960e01b815260048101849052602401610b8c565b610daf83838360016124e9565b63ffffffff81165f9081526001602052604081205480610a795760405163f6ff4fb760e01b815263ffffffff84166004820152602401610b8c565b5f61195861195587876125ed565b90565b90505f611965878761260b565b905061197e828261197960208d018d613289565b61261a565b6040861115611a3b575f6119b761199b60608c0160408d016138d2565b6119a860208d018d613289565b6119b28b8b612624565b61266e565b604051633e5ac80960e11b81529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690637cb5901290611a0c9086908d905f9087906004016138ed565b5f604051808303815f87803b158015611a23575f5ffd5b505af1158015611a35573d5f5f3e3d5ffd5b50505050505b6001600160a01b038216887f7883fa30ea56937810e36990b0bbb8d629d0cf59f68baf8431ff657cebe7eef5611a7460208d018d613289565b6040805163ffffffff9092168252602082018690520160405180910390a3505050505050505050565b611aa682611017565b6001600160a01b0316836001600160a01b031614611af45782611ac883611017565b604051634342715b60e11b81526001600160a01b03928316600482015291166024820152604401610b8c565b610daf8261269d565b6060806020830135611b2257604051631e4ec46b60e01b815260040160405180910390fd5b5f611b7660208501356040860135611b3d6080880188613742565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506126d592505050565b90935090505f81611b88576001611b8b565b60025b9050611bab611b9d6020870187613289565b826108ce6060890189613742565b6004549093506001600160a01b03168015611c2f5760405163043a78eb60e01b81526001600160a01b0382169063043a78eb90611bee9088908890600401613927565b602060405180830381865afa158015611c09573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c2d919061394b565b505b505050915091565b611c3f612c24565b5f611c4c845f015161273a565b602085015190915015611c6657611c668460200151612761565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632637a450826040518060a001604052808b63ffffffff168152602001611cb68c61190c565b81526020018a81526020018981526020015f8960200151111515815250866040518463ffffffff1660e01b8152600401611cf1929190613966565b60806040518083038185885af1158015611d0d573d5f5f3e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611d329190613a0d565b979650505050505050565b5f80611d565f516020613c8f5f395f51905f52336110eb565b5f858152600760205260409020549091506001600160a01b0316600d5490925060ff168015611d8d57506001600160a01b03821615155b8015611d97575080155b15611de45760405162461bcd60e51b815260206004820152601e60248201527f5472616e7366657273206172652063757272656e746c79206c6f636b656400006044820152606401610b8c565b61151c858585612840565b61178e8133612932565b5f611e0483836110eb565b611e83575f838152600c602090815260408083206001600160a01b03861684529091529020805460ff19166001179055611e3b3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610a79565b505f610a79565b5f546001600160a01b031633146110d45760405163118cdaa760e01b8152336004820152602401610b8c565b63ffffffff82165f81815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910161100b565b5f611f0e83836110eb565b15611e83575f838152600c602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610a79565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610b41828260405180602001604052805f81525061296b565b6001600160a01b03821661200857604051630b61174360e31b81526001600160a01b0383166004820152602401610b8c565b6001600160a01b038381165f818152600a6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b1561167757604051630a85bd0160e11b81526001600160a01b0384169063150b7a02906120b6908890889087908790600401613a57565b6020604051808303815f875af19250505080156120f0575060408051601f3d908101601f191682019092526120ed91810190613a89565b60015b612157573d80801561211d576040519150601f19603f3d011682016040523d82523d5f602084013e612122565b606091505b5080515f0361214f57604051633250574960e11b81526001600160a01b0385166004820152602401610b8c565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b1461219357604051633250574960e11b81526001600160a01b0385166004820152602401610b8c565b505050505050565b5f5b815181101561226c576121cc8282815181106121bb576121bb61370f565b60200260200101516040015161229c565b8181815181106121de576121de61370f565b60200260200101516040015160035f8484815181106121ff576121ff61370f565b60200260200101515f015163ffffffff1663ffffffff1681526020019081526020015f205f8484815181106122365761223661370f565b60200260200101516020015161ffff1661ffff1681526020019081526020015f2090816122639190613aa4565b5060010161219d565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b674816040516110739190613b5e565b600281015161ffff8116600314610b415781604051639a6d49cd60e01b8152600401610b8c9190612cc2565b604080518082019091525f80825260208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddc28c586040518060a001604052808863ffffffff16815260200161232a8961190c565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b815260040161235f929190613966565b6040805180830381865afa158015612379573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061151c9190613bec565b6060600b8054610a8e906133b9565b60605f6123b883612982565b60010190505f816001600160401b038111156123d6576123d66130aa565b6040519080825280601f01601f191660200182016040528015612400576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461240a57509392505050565b6040516001600160a01b03838116602483015260448201839052610daf91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050612a59565b5f6001600160e01b031982166380ac58cd60e01b14806124ca57506001600160e01b03198216635b5e139f60e01b145b80610a7957506301ffc9a760e01b6001600160e01b0319831614610a79565b80806124fd57506001600160a01b03821615155b156125be575f61250c846118c7565b90506001600160a01b038316158015906125385750826001600160a01b0316816001600160a01b031614155b801561254b57506125498184611727565b155b156125745760405163a9fbf51f60e01b81526001600160a01b0384166004820152602401610b8c565b81156125bc5783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b50505f90815260096020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b5f6125fb6020828486613678565b61260491613c06565b9392505050565b5f6125fb604060208486613678565b610daf8383612ac5565b60606126338260408186613678565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929695505050505050565b606083838360405160200161268593929190613c23565b60405160208183030381529060405290509392505050565b5f6126a95f835f611d3d565b90506001600160a01b038116610b4157604051637e27328960e01b815260048101839052602401610b8c565b8051606090151580612709576040805160208101879052908101859052606001604051602081830303815290604052612730565b848433856040516020016127209493929190613c56565b6040516020818303038152906040525b9150935093915050565b5f81341461275d576040516304fb820960e51b8152346004820152602401610b8c565b5090565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127be573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127e29190613c73565b90506001600160a01b03811661280b576040516329b99a9560e11b815260040160405180910390fd5b610b416001600160a01b038216337f000000000000000000000000000000000000000000000000000000000000000085612b26565b5f828152600760205260408120546001600160a01b039081169083161561286c5761286c818486612b5f565b6001600160a01b038116156128a6576128875f855f5f6124e9565b6001600160a01b0381165f90815260086020526040902080545f190190555b6001600160a01b038516156128d4576001600160a01b0385165f908152600860205260409020805460010190555b5f8481526007602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b61293c82826110eb565b610b415760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610b8c565b6129758383612ac5565b610daf335f858585612074565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106129c05772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef810000000083106129ec576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612a0a57662386f26fc10000830492506010015b6305f5e1008310612a22576305f5e100830492506008015b6127108310612a3657612710830492506004015b60648310612a48576064830492506002015b600a8310610a795760010192915050565b5f5f60205f8451602086015f885af180612a78576040513d5f823e3d81fd5b50505f513d91508115612a8f578060011415612a9c565b6001600160a01b0384163b155b15610d4057604051635274afe760e01b81526001600160a01b0385166004820152602401610b8c565b6001600160a01b038216612aee57604051633250574960e11b81525f6004820152602401610b8c565b5f612afa83835f611d3d565b90506001600160a01b03811615610daf576040516339e3563760e11b81525f6004820152602401610b8c565b6040516001600160a01b038481166024830152838116604483015260648201839052610d409186918216906323b872dd90608401612468565b612b6a838383612bc3565b610daf576001600160a01b038316612b9857604051637e27328960e01b815260048101829052602401610b8c565b60405163177e802f60e01b81526001600160a01b038316600482015260248101829052604401610b8c565b5f6001600160a01b038316158015906110e35750826001600160a01b0316846001600160a01b03161480612bfc5750612bfc8484611727565b806110e35750505f908152600960205260409020546001600160a01b03908116911614919050565b60405180606001604052805f81526020015f6001600160401b03168152602001612c5f60405180604001604052805f81526020015f81525090565b905290565b6001600160e01b03198116811461178e575f5ffd5b5f60208284031215612c89575f5ffd5b813561260481612c64565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6126046020830184612c94565b5f60208284031215612ce4575f5ffd5b5035919050565b6001600160a01b038116811461178e575f5ffd5b5f5f60408385031215612d10575f5ffd5b8235612d1b81612ceb565b946020939093013593505050565b5f60608284031215612d39575f5ffd5b50919050565b5f5f83601f840112612d4f575f5ffd5b5081356001600160401b03811115612d65575f5ffd5b602083019150836020828501011115612d7c575f5ffd5b9250929050565b5f5f5f5f5f5f5f60e0888a031215612d99575f5ffd5b612da38989612d29565b96506060880135955060808801356001600160401b03811115612dc4575f5ffd5b612dd08a828b01612d3f565b90965094505060a0880135612de481612ceb565b925060c08801356001600160401b03811115612dfe575f5ffd5b612e0a8a828b01612d3f565b989b979a50959850939692959293505050565b5f60c08284031215612d39575f5ffd5b5f5f5f8385036080811215612e40575f5ffd5b84356001600160401b03811115612e55575f5ffd5b612e6187828801612e1d565b9450506040601f1982011215612e75575f5ffd5b506020840191506060840135612e8a81612ceb565b809150509250925092565b5f608082019050825182526001600160401b0360208401511660208301526040830151612ecf604084018280518252602090810151910152565b5092915050565b5f5f5f60608486031215612ee8575f5ffd5b8335612ef381612ceb565b92506020840135612f0381612ceb565b929592945050506040919091013590565b5f5f60408385031215612f25575f5ffd5b823591506020830135612f3781612ceb565b809150509250929050565b803563ffffffff81168114612f55575f5ffd5b919050565b5f5f60408385031215612f6b575f5ffd5b612d1b83612f42565b803561ffff81168114612f55575f5ffd5b5f5f60408385031215612f96575f5ffd5b612f9f83612f42565b9150612fad60208401612f74565b90509250929050565b5f5f60208385031215612fc7575f5ffd5b82356001600160401b03811115612fdc575f5ffd5b612fe885828601612d3f565b90969095509350505050565b5f60208284031215613004575f5ffd5b813561260481612ceb565b5f5f5f5f60a08587031215613022575f5ffd5b61302c8686612d29565b935060608501356001600160401b03811115613046575f5ffd5b61305287828801612d3f565b909450925050608085013561306681612ceb565b939692955090935050565b801515811461178e575f5ffd5b5f5f6040838503121561308f575f5ffd5b823561309a81612ceb565b91506020830135612f3781613071565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b03811182821017156130e0576130e06130aa565b60405290565b604051606081016001600160401b03811182821017156130e0576130e06130aa565b604051601f8201601f191681016001600160401b0381118282101715613130576131306130aa565b604052919050565b5f6001600160401b03821115613150576131506130aa565b50601f01601f191660200190565b5f82601f83011261316d575f5ffd5b813561318061317b82613138565b613108565b818152846020838601011115613194575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f5f608085870312156131c3575f5ffd5b84356131ce81612ceb565b935060208501356131de81612ceb565b92506040850135915060608501356001600160401b038111156131ff575f5ffd5b61320b8782880161315e565b91505092959194509250565b5f5f83601f840112613227575f5ffd5b5081356001600160401b0381111561323d575f5ffd5b6020830191508360208260051b8501011115612d7c575f5ffd5b5f5f60208385031215613268575f5ffd5b82356001600160401b0381111561327d575f5ffd5b612fe885828601613217565b5f60208284031215613299575f5ffd5b61260482612f42565b5f5f5f5f606085870312156132b5575f5ffd5b6132be85612f42565b93506132cc60208601612f74565b925060408501356001600160401b038111156132e6575f5ffd5b6132f287828801612d3f565b95989497509550505050565b5f6020828403121561330e575f5ffd5b813561260481613071565b5f5f6040838503121561332a575f5ffd5b82356001600160401b0381111561333f575f5ffd5b61334b85828601612e1d565b9250506020830135612f3781613071565b815181526020808301519082015260408101610a79565b5f5f60408385031215613384575f5ffd5b823561338f81612ceb565b91506020830135612f3781612ceb565b5f606082840312156133af575f5ffd5b6126048383612d29565b600181811c908216806133cd57607f821691505b602082108103612d3957634e487b7160e01b5f52602260045260245ffd5b5f60408284031280156133fc575f5ffd5b506134056130be565b823581526020928301359281019290925250919050565b601f821115610daf57805f5260205f20601f840160051c810160208510156134415750805b601f840160051c820191505b81811015611677575f815560010161344d565b6001600160401b03831115613477576134776130aa565b61348b8361348583546133b9565b8361341c565b5f601f8411600181146134bc575f85156134a55750838201355b5f19600387901b1c1916600186901b178355611677565b5f83815260208120601f198716915b828110156134eb57868501358255602094850194600190920191016134cb565b5086821015613507575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b602081525f5f835461352a816133b9565b806020860152600182165f8114613548576001811461356457613595565b60ff1983166040870152604082151560051b8701019350613595565b865f5260205f205f5b8381101561358c5781548882016040015260019091019060200161356d565b87016040019450505b509195945050505050565b5f6001600160401b038311156135b8576135b86130aa565b8260051b6135c860208201613108565b848152908301906020810190368311156135e0575f5ffd5b845b8381101561366e5780356001600160401b038111156135ff575f5ffd5b86016060368290031215613611575f5ffd5b6136196130e6565b61362282612f42565b815261363060208301612f74565b602082015260408201356001600160401b0381111561364d575f5ffd5b6136593682850161315e565b604083015250845250602092830192016135e2565b5095945050505050565b5f5f85851115613686575f5ffd5b83861115613692575f5ffd5b5050820193919092039150565b5f81518060208401855e5f93019283525090919050565b5f6136c1828661369f565b838582375f930192835250909392505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f6110e36020830184866136d4565b634e487b7160e01b5f52603260045260245ffd5b5f823561013e19833603018112613738575f5ffd5b9190910192915050565b5f5f8335601e19843603018112613757575f5ffd5b8301803591506001600160401b03821115613770575f5ffd5b602001915036819003821315612d7c575f5ffd5b6001600160401b038116811461178e575f5ffd5b63ffffffff6137a689612f42565b168152602088810135908201525f60408901356137c281613784565b6001600160401b03811660408401525087606083015260e060808301526137ed60e0830187896136d4565b6001600160a01b03861660a084015282810360c084015261380f8185876136d4565b9a9950505050505050505050565b5f6020828403121561382d575f5ffd5b81516001600160401b03811115613842575f5ffd5b8201601f81018413613852575f5ffd5b805161386061317b82613138565b818152856020838501011115613874575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b5f6138a561389f838661369f565b8461369f565b64173539b7b760d91b8152600501949350505050565b5f602082840312156138cb575f5ffd5b5051919050565b5f602082840312156138e2575f5ffd5b813561260481613784565b60018060a01b038516815283602082015261ffff83166040820152608060608201525f61391d6080830184612c94565b9695505050505050565b604081525f6139396040830185612c94565b828103602084015261151c8185612c94565b5f6020828403121561395b575f5ffd5b815161260481613071565b6040815263ffffffff8351166040820152602083015160608201525f604084015160a0608084015261399b60e0840182612c94565b90506060850151603f198483030160a08501526139b88282612c94565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b5f604082840312156139ee575f5ffd5b6139f66130be565b825181526020928301519281019290925250919050565b5f6080828403128015613a1e575f5ffd5b50613a276130e6565b825181526020830151613a3981613784565b6020820152613a4b84604085016139de565b60408201529392505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f9061391d90830184612c94565b5f60208284031215613a99575f5ffd5b815161260481612c64565b81516001600160401b03811115613abd57613abd6130aa565b613ad181613acb84546133b9565b8461341c565b6020601f821160018114613b03575f8315613aec5750848201515b5f19600385901b1c1916600184901b178455611677565b5f84815260208120601f198516915b82811015613b325787850151825560209485019460019092019101613b12565b5084821015613b4f57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015613be057603f19878603018452815163ffffffff815116865261ffff60208201511660208701526040810151905060606040870152613bca6060870182612c94565b9550506020938401939190910190600101613b84565b50929695505050505050565b5f60408284031215613bfc575f5ffd5b61260483836139de565b80356020831015610a79575f19602084900360031b1b1692915050565b60c084901b6001600160c01b031916815260e083901b6001600160e01b03191660088201525f61151c600c83018461369f565b8481528360208201528260408201525f61391d606083018461369f565b5f60208284031215613c83575f5ffd5b815161260481612ceb56fea49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a26469706673582212206afcdb1df37b3cc6998421d9d825966a3555bd85faca898b519142e430195edb64736f6c634300081e00339f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6a49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177500000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000001a44076050125825900e736c501f859c50fe728c000000000000000000000000fc4689c37b164618f0d2bb75fc39f29775c2fe39000000000000000000000000fc4689c37b164618f0d2bb75fc39f29775c2fe39000000000000000000000000fc4689c37b164618f0d2bb75fc39f29775c2fe3900000000000000000000000000000000000000000000000000000000000000064461656d6f6e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003444d4e0000000000000000000000000000000000000000000000000000000000