4 txs
6 calls
constructor
constructor(address defaultAdmin, address mintee)
functions
allowForcedTransfers
viewfunction allowForcedTransfers() view returns (bool)
balanceOf
viewfunction balanceOf(address owner) view returns (uint256)
CLOCK_MODE
viewfunction CLOCK_MODE() view returns (string)
clock
viewfunction clock() view returns (uint48)
COUNCIL_GOVERNOR_ROLE
viewfunction COUNCIL_GOVERNOR_ROLE() view returns (bytes32)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
delegates
viewfunction delegates(address account) view returns (address)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
forcedTransferCooldown
viewfunction forcedTransferCooldown() view returns (uint256)
getApproved
viewfunction getApproved(uint256 tokenId) view returns (address)
getPastTotalSupply
viewfunction getPastTotalSupply(uint256 timepoint) view returns (uint256)
getPastVotes
viewfunction getPastVotes(address account, uint256 timepoint) view returns (uint256)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getRoleMember
viewfunction getRoleMember(bytes32 role, uint256 index) view returns (address)
getRoleMemberCount
viewfunction getRoleMemberCount(bytes32 role) view returns (uint256)
getRoleMembers
viewfunction getRoleMembers(bytes32 role) view returns (address[])
getVotes
viewfunction getVotes(address account) view returns (uint256)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
ipfsHash
viewfunction ipfsHash() view returns (string)
isApprovedForAll
viewfunction isApprovedForAll(address owner, address operator) view returns (bool)
lastForcedTransfer
viewfunction lastForcedTransfer() view returns (uint256)
name
viewfunction name() view returns (string)
nonces
viewfunction nonces(address owner) view returns (uint256)
ownerOf
viewfunction ownerOf(uint256 tokenId) view returns (address)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
symbol
viewfunction symbol() view returns (string)
tokenMetadata
viewfunction tokenMetadata(uint256 tokenId) view returns (string)
tokenURI
viewfunction tokenURI(uint256 tokenId) view returns (string)
transferHook
viewfunction transferHook() view returns (address)
approve
nonpayablefunction approve(address to, uint256 tokenId)
burn
nonpayablefunction burn(uint256 tokenId)
delegate
nonpayablefunction delegate(address delegatee)
delegateBySig
nonpayablefunction delegateBySig(address delegatee, uint256 nonce, uint256 expiry, uint8 v, bytes32 r, bytes32 s)
forcedTransfer
nonpayablefunction forcedTransfer(address to, uint256 councilNumber)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
increaseForcedTransferCooldown
nonpayablefunction increaseForcedTransferCooldown(uint256 _cooldown)
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)
setallowForcedTransfers
nonpayablefunction setallowForcedTransfers(bool _allowed)
setApprovalForAll
nonpayablefunction setApprovalForAll(address operator, bool approved)
setIpfsHash
nonpayablefunction setIpfsHash(string _newIpfsHash)
setTokenName
nonpayablefunction setTokenName(uint256 councilNumber, string name)
setTokenNameByCouncil
nonpayablefunction setTokenNameByCouncil(uint256 councilNumber, string name)
setTransferHook
nonpayablefunction setTransferHook(address _transferHook)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 tokenId)
events
allowForcedTransfersChanged
event allowForcedTransfersChanged(bool newValue)
Approval
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
ApprovalForAll
event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
CouncilTransfer
event CouncilTransfer(address indexed from, address indexed to, uint256 indexed tokenId)
DelegateChanged
event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate)
DelegateVotesChanged
event DelegateVotesChanged(address indexed delegate, uint256 previousVotes, uint256 newVotes)
EIP712DomainChanged
event EIP712DomainChanged()
ForcedTransferCooldownIncreased
event ForcedTransferCooldownIncreased(uint256 oldCooldown, uint256 newCooldown)
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)
TokenNameSet
event TokenNameSet(uint256 indexed tokenId, string name)
Transfer
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
CheckpointUnorderedInsertion
error CheckpointUnorderedInsertion()
CooldownMustBeGreaterThanCurrent
error CooldownMustBeGreaterThanCurrent()
ECDSAInvalidSignature
error ECDSAInvalidSignature()
ECDSAInvalidSignatureLength
error ECDSAInvalidSignatureLength(uint256 length)
ECDSAInvalidSignatureS
error ECDSAInvalidSignatureS(bytes32 s)
ERC5805FutureLookup
error ERC5805FutureLookup(uint256 timepoint, uint48 clock)
ERC6372InconsistentClock
error ERC6372InconsistentClock()
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)
ForcedTransferCooldownNotExpired
error ForcedTransferCooldownNotExpired()
ForcedTransfersNotAllowed
error ForcedTransfersNotAllowed()
InvalidAccountNonce
error InvalidAccountNonce(address account, uint256 currentNonce)
InvalidCouncilNumber
error InvalidCouncilNumber()
InvalidShortString
error InvalidShortString()
NameTooLong
error NameTooLong()
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
StringTooLong
error StringTooLong(string str)
VotesExpiredSignature
error VotesExpiredSignature(uint256 expiry)
creation bytecode
0x6101c0604052603b61016081815290614aef61018039600e906100229082610e43565b50612710600f556301e133806013556014805460ff19166001179055348015610049575f80fd5b50604051614b4a380380614b4a83398101604081905261006891610f18565b604080518082018252600f8082526e149959dd5b185c8810dbdd5b98da5b608a1b60208084018290528451808601865260018152603160f81b8183015285518087018752938452838201929092528451808601909552600785526610d3d55390d25360ca1b9085015291925f6100de8382610e43565b5060016100eb8282610e43565b506100fb915083905060066101ea565b6101205261010a8160076101ea565b61014052815160208084019190912060e052815190820120610100524660a05261019660e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b60805250503060c0526101a95f8361021c565b505f5b60188110156101de57600f80545f91826101c583610f5d565b9091555090506101d58382610250565b506001016101ac565b5050426012555061108c565b5f602083511015610205576101fe83610273565b9050610216565b816102108482610e43565b5060ff90505b92915050565b5f8061022884846102b9565b90508015610249575f848152600d602052604090206102479084610364565b505b9392505050565b61026f828260405180602001604052805f81525061037860201b60201c565b5050565b5f80829050601f815111156102a6578260405163305a27a960e01b815260040161029d9190610fa3565b60405180910390fd5b80516102b182610fb5565b179392505050565b5f828152600c602090815260408083206001600160a01b038516845290915281205460ff1661035d575f838152600c602090815260408083206001600160a01b03861684529091529020805460ff191660011790556103153390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610216565b505f610216565b5f610249836001600160a01b038416610394565b61038283836103d9565b61038f335f85858561043a565b505050565b5f81815260018301602052604081205461035d57508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610216565b6001600160a01b03821661040257604051633250574960e11b81525f600482015260240161029d565b5f61040e838383610562565b90506001600160a01b0381161561038f576040516339e3563760e11b81525f600482015260240161029d565b6001600160a01b0383163b1561055b57604051630a85bd0160e11b81526001600160a01b0384169063150b7a029061047c908890889087908790600401610fd8565b6020604051808303815f875af19250505080156104b6575060408051601f3d908101601f191682019092526104b391810190611014565b60015b61051d573d8080156104e3576040519150601f19603f3d011682016040523d82523d5f602084013e6104e8565b606091505b5080515f0361051557604051633250574960e11b81526001600160a01b038516600482015260240161029d565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b1461055957604051633250574960e11b81526001600160a01b038516600482015260240161029d565b505b5050505050565b5f828152600260205260408120546001600160a01b03168161058586868661060c565b6010549091506001600160a01b0316156106035760105460405163c71aa77960e01b81526001600160a01b0384811660048301528881166024830152604482018890529091169063c71aa779906064015f604051808303815f87803b1580156105ec575f80fd5b505af11580156105fe573d5f803e3d5ffd5b505050505b95945050505050565b5f8061061985858561062f565b905061062781866001610721565b949350505050565b5f828152600260205260408120546001600160a01b039081169083161561065b5761065b8184866107a9565b6001600160a01b03811615610695576106765f85818061080d565b6001600160a01b0381165f90815260036020526040902080545f190190555b6001600160a01b038516156106c3576001600160a01b0385165f908152600360205260409020805460010190555b5f8481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b6001600160a01b03831661074f5761074c600b61139461092f60201b176107478461093a565b610971565b50505b6001600160a01b03821661077857610775600b61139f6109a660201b176107478461093a565b50505b6001600160a01b038381165f9081526009602052604080822054858416835291205461038f929182169116836109b1565b6107b4838383610b01565b61038f576001600160a01b0383166107e257604051637e27328960e01b81526004810182905260240161029d565b60405163177e802f60e01b81526001600160a01b03831660048201526024810182905260440161029d565b808061082157506001600160a01b03821615155b15610900575f61083084610b81565b90506001600160a01b0383161580159061085c5750826001600160a01b0316816001600160a01b031614155b801561088d57506001600160a01b038082165f9081526005602090815260408083209387168352929052205460ff16155b156108b65760405163a9fbf51f60e01b81526001600160a01b038416600482015260240161029d565b81156108fe5783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b50505f90815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b5f610249828461103b565b5f6001600160d01b0382111561096d576040516306dfcc6560e41b815260d060048201526024810183905260440161029d565b5090565b5f8061099961097e610bb9565b61099161098a88610bc7565b868860201c565b879190610c0e565b915091505b935093915050565b5f610249828461105a565b816001600160a01b0316836001600160a01b0316141580156109d257505f81115b1561038f576001600160a01b03831615610a6a576001600160a01b0383165f908152600a6020908152604082208291610a1891906109a6901b61139f176107478661093a565b6001600160d01b031691506001600160d01b03169150846001600160a01b03165f80516020614b2a8339815191528383604051610a5f929190918252602082015260400190565b60405180910390a250505b6001600160a01b0382161561038f576001600160a01b0382165f908152600a6020908152604082208291610aab919061092f901b611394176107478661093a565b6001600160d01b031691506001600160d01b03169150836001600160a01b03165f80516020614b2a8339815191528383604051610af2929190918252602082015260400190565b60405180910390a25050505050565b5f6001600160a01b038316158015906106275750826001600160a01b0316846001600160a01b03161480610b5957506001600160a01b038085165f9081526005602090815260408083209387168352929052205460ff165b806106275750505f908152600460205260409020546001600160a01b03908116911614919050565b5f818152600260205260408120546001600160a01b03168061021657604051637e27328960e01b81526004810184905260240161029d565b5f610bc2610c1b565b905090565b80545f908015610c0657610bed83610be0600184611079565b5f91825260209091200190565b54660100000000000090046001600160d01b0316610249565b5f9392505050565b5f80610999858585610c25565b5f610bc243610d81565b82545f9081908015610d24575f610c4187610be0600185611079565b805490915065ffffffffffff80821691660100000000000090046001600160d01b0316908816821115610c8757604051632520601d60e01b815260040160405180910390fd5b8765ffffffffffff168265ffffffffffff1603610cc357825465ffffffffffff1666010000000000006001600160d01b03891602178355610d16565b6040805180820190915265ffffffffffff808a1682526001600160d01b03808a1660208085019182528d54600181018f555f8f815291909120945191519092166601000000000000029216919091179101555b945085935061099e92505050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a555f8a815291822095519251909316660100000000000002919093161792019190915590508161099e565b5f65ffffffffffff82111561096d576040516306dfcc6560e41b8152603060048201526024810183905260440161029d565b634e487b7160e01b5f52604160045260245ffd5b600181811c90821680610ddb57607f821691505b602082108103610df957634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561038f57805f5260205f20601f840160051c81016020851015610e245750805b601f840160051c820191505b8181101561055b575f8155600101610e30565b81516001600160401b03811115610e5c57610e5c610db3565b610e7081610e6a8454610dc7565b84610dff565b6020601f821160018114610ea2575f8315610e8b5750848201515b5f19600385901b1c1916600184901b17845561055b565b5f84815260208120601f198516915b82811015610ed15787850151825560209485019460019092019101610eb1565b5084821015610eee57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b80516001600160a01b0381168114610f13575f80fd5b919050565b5f8060408385031215610f29575f80fd5b610f3283610efd565b9150610f4060208401610efd565b90509250929050565b634e487b7160e01b5f52601160045260245ffd5b5f60018201610f6e57610f6e610f49565b5060010190565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6102496020830184610f75565b80516020808301519190811015610df9575f1960209190910360031b1b16919050565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f9061100a90830184610f75565b9695505050505050565b5f60208284031215611024575f80fd5b81516001600160e01b031981168114610249575f80fd5b6001600160d01b03818116838216019081111561021657610216610f49565b6001600160d01b03828116828216039081111561021657610216610f49565b8181038181111561021657610216610f49565b60805160a05160c05160e051610100516101205161014051613a126110dd5f395f61180901525f6117dc01525f61252001525f6124f801525f61245301525f61247d01525f6124a70152613a125ff3fe608060405234801561000f575f80fd5b5060043610610304575f3560e01c80637ecebe001161019d578063a22cb465116100e8578063ca15c87311610093578063d547741f1161006e578063d547741f146106e4578063e985e9c5146106f7578063eac7a60214610732575f80fd5b8063ca15c873146106ab578063cd65cda6146106be578063cdb0e89e146106d1575f80fd5b8063c3cda520116100c3578063c3cda5201461067d578063c623674f14610690578063c87b56dd14610698575f80fd5b8063a22cb46514610637578063a3246ad31461064a578063b88d4fde1461066a575f80fd5b80639010d07c1161014857806395d89b411161012357806395d89b41146106155780639ab24eb01461061d578063a217fddf14610630575f80fd5b80639010d07c146105ab57806391d14854146105be57806391ddadf4146105f6575f80fd5b806382bc7bc91161017857806382bc7bc91461056a57806384b0196e1461057d5780638e539e8c14610598575f80fd5b80637ecebe00146105265780637f2dc61c1461054e578063805b6dc314610561575f80fd5b8063384c73071161025d5780634e3b62ec116102085780636352211e116101e35780636352211e146104ed5780636914db601461050057806370a0823114610513575f80fd5b80634e3b62ec1461049c578063587cde1e146104af5780635c19a95c146104da575f80fd5b806342966c681161023857806342966c681461045a5780634571ea7c1461046d5780634bf5d7e914610494575f80fd5b8063384c7307146104215780633a46b1a81461043457806342842e0e14610447575f80fd5b8063095ea7b3116102bd5780632bd617f8116102985780632bd617f8146103e85780632f2ff15d146103fb57806336568abe1461040e575f80fd5b8063095ea7b31461039257806323b872dd146103a5578063248a9ca3146103b8575f80fd5b806306fdde03116102ed57806306fdde031461033d57806307ebca5e14610352578063081812fc14610367575f80fd5b806301ffc9a714610308578063049a340d14610330575b5f80fd5b61031b610316366004612f81565b61073b565b60405190151581526020015b60405180910390f35b60145461031b9060ff1681565b61034561074b565b6040516103279190612fca565b610365610360366004612ff7565b6107da565b005b61037a61037536600461301f565b610972565b6040516001600160a01b039091168152602001610327565b6103656103a0366004612ff7565b610999565b6103656103b3366004613036565b6109a8565b6103da6103c636600461301f565b5f908152600c602052604090206001015490565b604051908152602001610327565b6103656103f6366004613119565b610a31565b61036561040936600461315d565b610aeb565b61036561041c36600461315d565b610b0f565b61036561042f366004613196565b610b60565b6103da610442366004612ff7565b610bd2565b610365610455366004613036565b610c0c565b61036561046836600461301f565b610c26565b6103da7fcb7e46aad5d2fda5cd87b47cbd408f8815fcedd80f751b98b79b4fe62a8e749e81565b610345610c31565b6103656104aa3660046131af565b610cc2565b61037a6104bd3660046131e1565b6001600160a01b039081165f908152600960205260409020541690565b6103656104e83660046131e1565b610cf8565b61037a6104fb36600461301f565b610d03565b61034561050e36600461301f565b610d0d565b6103da6105213660046131e1565b610e7f565b6103da6105343660046131e1565b6001600160a01b03165f9081526008602052604090205490565b61036561055c3660046131e1565b610edd565b6103da60135481565b60105461037a906001600160a01b031681565b610585610f37565b60405161032797969594939291906131fa565b6103da6105a636600461301f565b610f95565b61037a6105b93660046132ac565b610fb9565b61031b6105cc36600461315d565b5f918252600c602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6105fe610fd7565b60405165ffffffffffff9091168152602001610327565b610345610fe5565b6103da61062b3660046131e1565b610ff4565b6103da5f81565b6103656106453660046132cc565b611014565b61065d61065836600461301f565b61101f565b60405161032791906132f4565b61036561067836600461333f565b611038565b61036561068b3660046133b6565b611050565b610345611125565b6103456106a636600461301f565b6111b1565b6103da6106b936600461301f565b6111ea565b6103656106cc36600461301f565b611200565b6103656106df366004613119565b6112ab565b6103656106f236600461315d565b611370565b61031b610705366004613411565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205460ff1690565b6103da60125481565b5f610745826113aa565b92915050565b60605f805461075990613439565b80601f016020809104026020016040519081016040528092919081815260200182805461078590613439565b80156107d05780601f106107a7576101008083540402835291602001916107d0565b820191905f5260205f20905b8154815290600101906020018083116107b357829003601f168201915b5050505050905090565b7fcb7e46aad5d2fda5cd87b47cbd408f8815fcedd80f751b98b79b4fe62a8e749e610804816113e7565b5f61081183612710613485565b9050600f54811061083557604051630e28c39b60e01b815260040160405180910390fd5b60145460ff16610871576040517f425433d900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841661089f57604051633250574960e11b81525f60048201526024015b60405180910390fd5b5f6012541180156108be57506013546012546108bb9190613485565b42105b156108f5576040517f9ffd209f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61090185835f6113f4565b90506001600160a01b03811661092d57604051637e27328960e01b815260048101839052602401610896565b4260125560405182906001600160a01b0380881691908416907f2ca978ba5c70c0339bebb6c14eac8b1db3acb5279fb02e1be98e004dd5e9805e905f90a45050505050565b5f61097c826114b7565b505f828152600460205260409020546001600160a01b0316610745565b6109a48282336114ef565b5050565b6001600160a01b0382166109d157604051633250574960e11b81525f6004820152602401610896565b5f6109dd8383336113f4565b9050836001600160a01b0316816001600160a01b031614610a2b576040516364283d7b60e01b81526001600160a01b0380861660048301526024820184905282166044820152606401610896565b50505050565b7fcb7e46aad5d2fda5cd87b47cbd408f8815fcedd80f751b98b79b4fe62a8e749e610a5b816113e7565b5f610a6884612710613485565b9050600f548110610a8c57604051630e28c39b60e01b815260040160405180910390fd5b610a95836114fc565b5f818152601160205260409020610aac84826134dc565b50807f12eaf3f3916d89f3c309726b8ae46295fd61d13f086e7c92fe4745c70bd523d484604051610add9190612fca565b60405180910390a250505050565b5f828152600c6020526040902060010154610b05816113e7565b610a2b8383611538565b6001600160a01b0381163314610b51576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b5b828261156b565b505050565b7fcb7e46aad5d2fda5cd87b47cbd408f8815fcedd80f751b98b79b4fe62a8e749e610b8a816113e7565b6014805460ff19168315159081179091556040519081527f2b44d3d8b60bd62c59841cce8684192eb6704f615433608cd3e3a48c7fe5ee3a9060200160405180910390a15050565b5f610bfc610bdf83611596565b6001600160a01b0385165f908152600a60205260409020906115fd565b6001600160d01b03169392505050565b610b5b83838360405180602001604052805f815250611038565b6109a45f82336113f4565b6060610c3b6116b0565b65ffffffffffff16610c4b610fd7565b65ffffffffffff1614610c8a576040517f6ff0714000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b7fcb7e46aad5d2fda5cd87b47cbd408f8815fcedd80f751b98b79b4fe62a8e749e610cec816113e7565b600e610b5b83826134dc565b336109a481836116ba565b5f610745826114b7565b6060610d18826114b7565b505f610d2661271084613597565b5f84815260116020526040812080549293509091610d4390613439565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6f90613439565b8015610dba5780601f10610d9157610100808354040283529160200191610dba565b820191905f5260205f20905b815481529060010190602001808311610d9d57829003601f168201915b5050505050905080515f03610df857610dd282611738565b604051602001610de291906135c1565b6040516020818303038152906040529050610e25565b610e0182611738565b81604051602001610e139291906135f2565b60405160208183030381529060405290505b5f600e610e3186611738565b604051602001610e42929190613653565b60405160208183030381529060405290508181604051602001610e6692919061374a565b6040516020818303038152906040529350505050919050565b5f6001600160a01b038216610ec2576040517f89c62b640000000000000000000000000000000000000000000000000000000081525f6004820152602401610896565b506001600160a01b03165f9081526003602052604090205490565b7fcb7e46aad5d2fda5cd87b47cbd408f8815fcedd80f751b98b79b4fe62a8e749e610f07816113e7565b506010805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b5f6060805f805f6060610f486117d5565b610f50611802565b604080515f808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b5f610faa610fa283611596565b600b906115fd565b6001600160d01b031692915050565b5f828152600d60205260408120610fd0908361182f565b9392505050565b5f610fe06116b0565b905090565b60606001805461075990613439565b6001600160a01b0381165f908152600a60205260408120610faa9061183a565b6109a4338383611874565b5f818152600d602052604090206060906107459061192b565b6110438484846109a8565b610a2b3385858585611937565b8342111561108d576040517f4683af0e00000000000000000000000000000000000000000000000000000000815260048101859052602401610896565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b0388169181019190915260608101869052608081018590525f90611106906110fe9060a00160405160208183030381529060405280519060200120611a5f565b858585611aa6565b90506111128187611ad2565b61111c81886116ba565b50505050505050565b600e805461113290613439565b80601f016020809104026020016040519081016040528092919081815260200182805461115e90613439565b80156111a95780601f10611180576101008083540402835291602001916111a9565b820191905f5260205f20905b81548152906001019060200180831161118c57829003601f168201915b505050505081565b60606111c46111bf83610d0d565b611b3d565b6040516020016111d4919061384c565b6040516020818303038152906040529050919050565b5f818152600d6020526040812061074590611b63565b7fcb7e46aad5d2fda5cd87b47cbd408f8815fcedd80f751b98b79b4fe62a8e749e61122a816113e7565b6013548211611265576040517f7d13c72800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601380549083905560408051828152602081018590527f5a7a6e032b3cd6072b59faa9ced7a0388fb041294cf942c29c4fcb142ca84e35910160405180910390a1505050565b5f6112b883612710613485565b9050336112c482610d03565b6001600160a01b0316146113125733816112dd83610d03565b6040516364283d7b60e01b81526001600160a01b03938416600482015260248101929092529091166044820152606401610896565b61131b826114fc565b5f81815260116020526040902061133283826134dc565b50807f12eaf3f3916d89f3c309726b8ae46295fd61d13f086e7c92fe4745c70bd523d4836040516113639190612fca565b60405180910390a2505050565b5f828152600c602052604090206001015461138a816113e7565b610a2b838361156b565b5f610fd0828461387d565b5f610fd0828461389c565b5f6001600160e01b031982167f5a05180f000000000000000000000000000000000000000000000000000000001480610745575061074582611b6c565b6113f18133611ba9565b50565b5f828152600260205260408120546001600160a01b031681611417868686611c16565b6010549091506001600160a01b0316156114ae576010546040517fc71aa7790000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528881166024830152604482018890529091169063c71aa779906064015f604051808303815f87803b158015611497575f80fd5b505af11580156114a9573d5f803e3d5ffd5b505050505b95945050505050565b5f818152600260205260408120546001600160a01b03168061074557604051637e27328960e01b815260048101849052602401610896565b610b5b8383836001611c39565b600c815111156113f1576040517f680b6caf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f806115448484611d81565b90508015610fd0575f848152600d602052604090206115639084611e2c565b509392505050565b5f806115778484611e40565b90508015610fd0575f848152600d602052604090206115639084611ec5565b5f806115a0610fd7565b90508065ffffffffffff1683106115f4576040517fecd3f81e0000000000000000000000000000000000000000000000000000000081526004810184905265ffffffffffff82166024820152604401610896565b610fd083611ed9565b81545f9081816005811115611659575f61161684611f0f565b6116209085613597565b5f8881526020902090915081015465ffffffffffff908116908716101561164957809150611657565b611654816001613485565b92505b505b5f61166687878585612074565b905080156116a35761168a8761167d600184613597565b5f91825260209091200190565b54660100000000000090046001600160d01b03166116a5565b5f5b979650505050505050565b5f610fe043611ed9565b6001600160a01b038281165f81815260096020526040808220805486861673ffffffffffffffffffffffffffffffffffffffff19821681179092559151919094169392849290917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4610b5b8183611733866120cb565b6120d5565b60605f6117448361223e565b60010190505f8167ffffffffffffffff81111561176357611763613070565b6040519080825280601f01601f19166020018201604052801561178d576020820181803683370190505b5090508181016020015b5f19017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461179757509392505050565b6060610fe07f0000000000000000000000000000000000000000000000000000000000000000600661231f565b6060610fe07f0000000000000000000000000000000000000000000000000000000000000000600761231f565b5f610fd083836123c8565b80545f90801561186c576118538361167d600184613597565b54660100000000000090046001600160d01b0316610fd0565b5f9392505050565b6001600160a01b0382166118bf576040517f5b08ba180000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610896565b6001600160a01b038381165f81815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b60605f610fd0836123ee565b6001600160a01b0383163b15611a5857604051630a85bd0160e11b81526001600160a01b0384169063150b7a02906119799088908890879087906004016138cf565b6020604051808303815f875af19250505080156119b3575060408051601f3d908101601f191682019092526119b09181019061390f565b60015b611a1a573d8080156119e0576040519150601f19603f3d011682016040523d82523d5f602084013e6119e5565b606091505b5080515f03611a1257604051633250574960e11b81526001600160a01b0385166004820152602401610896565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b14611a5657604051633250574960e11b81526001600160a01b0385166004820152602401610896565b505b5050505050565b5f610745611a6b612447565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b5f805f80611ab688888888612570565b925092509250611ac68282612638565b50909695505050505050565b6001600160a01b0382165f908152600860205260409020805460018101909155818114610b5b576040517f752d88c00000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260248101829052604401610896565b60606107458260405180606001604052806040815260200161399d60409139600161273b565b5f610745825490565b5f6001600160e01b031982167f7965db0b0000000000000000000000000000000000000000000000000000000014806107455750610745826128b5565b5f828152600c602090815260408083206001600160a01b038516845290915290205460ff166109a4576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401610896565b5f80611c2385858561294f565b9050611c3181866001612a4e565b949350505050565b8080611c4d57506001600160a01b03821615155b15611d45575f611c5c846114b7565b90506001600160a01b03831615801590611c885750826001600160a01b0316816001600160a01b031614155b8015611cb957506001600160a01b038082165f9081526005602090815260408083209387168352929052205460ff16155b15611cfb576040517fa9fbf51f0000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610896565b8115611d435783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b50505f908152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b5f828152600c602090815260408083206001600160a01b038516845290915281205460ff16611e25575f838152600c602090815260408083206001600160a01b03861684529091529020805460ff19166001179055611ddd3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610745565b505f610745565b5f610fd0836001600160a01b038416612ac3565b5f828152600c602090815260408083206001600160a01b038516845290915281205460ff1615611e25575f838152600c602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610745565b5f610fd0836001600160a01b038416612b08565b5f65ffffffffffff821115611f0b576040516306dfcc6560e41b81526030600482015260248101839052604401610896565b5090565b5f60018211611f1c575090565b8160017001000000000000000000000000000000008210611f425760809190911c9060401b5b680100000000000000008210611f5d5760409190911c9060201b5b6401000000008210611f745760209190911c9060101b5b620100008210611f895760109190911c9060081b5b6101008210611f9d5760089190911c9060041b5b60108210611fb05760049190911c9060021b5b60048210611fbc5760011b5b600302600190811c90818581611fd457611fd46138bb565b048201901c90506001818581611fec57611fec6138bb565b048201901c90506001818581612004576120046138bb565b048201901c9050600181858161201c5761201c6138bb565b048201901c90506001818581612034576120346138bb565b048201901c9050600181858161204c5761204c6138bb565b048201901c905061206b818581612065576120656138bb565b04821190565b90039392505050565b5f5b81831015611563575f6120898484612beb565b5f8781526020902090915065ffffffffffff86169082015465ffffffffffff1611156120b7578092506120c5565b6120c2816001613485565b93505b50612076565b5f61074582610e7f565b816001600160a01b0316836001600160a01b0316141580156120f657505f81115b15610b5b576001600160a01b0383161561219d576001600160a01b0383165f908152600a6020526040812081906121389061139f61213386612c05565b612c38565b6001600160d01b031691506001600160d01b03169150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051612192929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615610b5b576001600160a01b0382165f908152600a6020526040812081906121d59061139461213386612c05565b6001600160d01b031691506001600160d01b03169150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724838360405161222f929190918252602082015260400190565b60405180910390a25050505050565b5f807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612286577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106122b2576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106122d057662386f26fc10000830492506010015b6305f5e10083106122e8576305f5e100830492506008015b61271083106122fc57612710830492506004015b6064831061230e576064830492506002015b600a83106107455760010192915050565b606060ff83146123395761233283612c70565b9050610745565b81805461234590613439565b80601f016020809104026020016040519081016040528092919081815260200182805461237190613439565b80156123bc5780601f10612393576101008083540402835291602001916123bc565b820191905f5260205f20905b81548152906001019060200180831161239f57829003601f168201915b50505050509050610745565b5f825f0182815481106123dd576123dd61392a565b905f5260205f200154905092915050565b6060815f0180548060200260200160405190810160405280929190818152602001828054801561243b57602002820191905f5260205f20905b815481526020019060010190808311612427575b50505050509050919050565b5f306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561249f57507f000000000000000000000000000000000000000000000000000000000000000046145b156124c957507f000000000000000000000000000000000000000000000000000000000000000090565b610fe0604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156125a957505f9150600390508261262e565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156125fa573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661262557505f92506001915082905061262e565b92505f91508190505b9450945094915050565b5f82600381111561264b5761264b61393e565b03612654575050565b60018260038111156126685761266861393e565b0361269f576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028260038111156126b3576126b361393e565b036126ed576040517ffce698f700000000000000000000000000000000000000000000000000000000815260048101829052602401610896565b60038260038111156127015761270161393e565b036109a4576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401610896565b606083515f03612759575060408051602081019091525f8152610fd0565b5f826127895760038551600461276f9190613952565b61277a906002613485565b6127849190613969565b6127ae565b6003855160026127999190613485565b6127a39190613969565b6127ae906004613952565b90505f8167ffffffffffffffff8111156127ca576127ca613070565b6040519080825280601f01601f1916602001820160405280156127f4576020820181803683370190505b509050600185016020820187885189016020810180515f82525b82841015612869576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f811687015186535060018501945061280e565b905250508515611ac65760038851066001811461288d57600281146128a0576128a8565b603d6001830353603d60028303536128a8565b603d60018303535b5050909695505050505050565b5f6001600160e01b031982167f80ac58cd00000000000000000000000000000000000000000000000000000000148061291757506001600160e01b031982167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061074557507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b0319831614610745565b5f828152600260205260408120546001600160a01b039081169083161561297b5761297b818486612cad565b6001600160a01b038116156129b5576129965f855f80611c39565b6001600160a01b0381165f90815260036020526040902080545f190190555b6001600160a01b038516156129e3576001600160a01b0385165f908152600360205260409020805460010190555b5f84815260026020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b6001600160a01b038316612a7057612a6d600b61139461213384612c05565b50505b6001600160a01b038216612a9257612a8f600b61139f61213384612c05565b50505b6001600160a01b038381165f90815260096020526040808220548584168352912054610b5b929182169116836120d5565b5f818152600183016020526040812054611e2557508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610745565b5f8181526001830160205260408120548015612be2575f612b2a600183613597565b85549091505f90612b3d90600190613597565b9050808214612b9c575f865f018281548110612b5b57612b5b61392a565b905f5260205f200154905080875f018481548110612b7b57612b7b61392a565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080612bad57612bad613988565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610745565b5f915050610745565b5f612bf96002848418613969565b610fd090848416613485565b5f6001600160d01b03821115611f0b576040516306dfcc6560e41b815260d0600482015260248101839052604401610896565b5f80612c63612c45610fd7565b612c5b612c518861183a565b868863ffffffff16565b879190612d2a565b915091505b935093915050565b60605f612c7c83612d37565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b612cb8838383612d77565b610b5b576001600160a01b038316612ce657604051637e27328960e01b815260048101829052602401610896565b6040517f177e802f0000000000000000000000000000000000000000000000000000000081526001600160a01b038316600482015260248101829052604401610896565b5f80612c63858585612df7565b5f60ff8216601f811115610745576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6001600160a01b03831615801590611c315750826001600160a01b0316846001600160a01b03161480612dcf57506001600160a01b038085165f9081526005602090815260408083209387168352929052205460ff165b80611c315750505f908152600460205260409020546001600160a01b03908116911614919050565b82545f9081908015612f0f575f612e138761167d600185613597565b805490915065ffffffffffff80821691660100000000000090046001600160d01b0316908816821115612e72576040517f2520601d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8765ffffffffffff168265ffffffffffff1603612eae57825465ffffffffffff1666010000000000006001600160d01b03891602178355612f01565b6040805180820190915265ffffffffffff808a1682526001600160d01b03808a1660208085019182528d54600181018f555f8f815291909120945191519092166601000000000000029216919091179101555b9450859350612c6892505050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a555f8a8152918220955192519093166601000000000000029190931617920191909155905081612c68565b6001600160e01b0319811681146113f1575f80fd5b5f60208284031215612f91575f80fd5b8135610fd081612f6c565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610fd06020830184612f9c565b80356001600160a01b0381168114612ff2575f80fd5b919050565b5f8060408385031215613008575f80fd5b61301183612fdc565b946020939093013593505050565b5f6020828403121561302f575f80fd5b5035919050565b5f805f60608486031215613048575f80fd5b61305184612fdc565b925061305f60208501612fdc565b929592945050506040919091013590565b634e487b7160e01b5f52604160045260245ffd5b5f8067ffffffffffffffff84111561309e5761309e613070565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156130cd576130cd613070565b6040528381529050808284018510156130e4575f80fd5b838360208301375f60208583010152509392505050565b5f82601f83011261310a575f80fd5b610fd083833560208501613084565b5f806040838503121561312a575f80fd5b82359150602083013567ffffffffffffffff811115613147575f80fd5b613153858286016130fb565b9150509250929050565b5f806040838503121561316e575f80fd5b8235915061317e60208401612fdc565b90509250929050565b80358015158114612ff2575f80fd5b5f602082840312156131a6575f80fd5b610fd082613187565b5f602082840312156131bf575f80fd5b813567ffffffffffffffff8111156131d5575f80fd5b611c31848285016130fb565b5f602082840312156131f1575f80fd5b610fd082612fdc565b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201525f61323460e0830189612f9c565b82810360408401526132468189612f9c565b606084018890526001600160a01b038716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b8181101561329b57835183526020938401939092019160010161327d565b50909b9a5050505050505050505050565b5f80604083850312156132bd575f80fd5b50508035926020909101359150565b5f80604083850312156132dd575f80fd5b6132e683612fdc565b915061317e60208401613187565b602080825282518282018190525f918401906040840190835b818110156133345783516001600160a01b031683526020938401939092019160010161330d565b509095945050505050565b5f805f8060808587031215613352575f80fd5b61335b85612fdc565b935061336960208601612fdc565b925060408501359150606085013567ffffffffffffffff81111561338b575f80fd5b8501601f8101871361339b575f80fd5b6133aa87823560208401613084565b91505092959194509250565b5f805f805f8060c087890312156133cb575f80fd5b6133d487612fdc565b95506020870135945060408701359350606087013560ff811681146133f7575f80fd5b9598949750929560808101359460a0909101359350915050565b5f8060408385031215613422575f80fd5b61342b83612fdc565b915061317e60208401612fdc565b600181811c9082168061344d57607f821691505b60208210810361346b57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561074557610745613471565b601f821115610b5b57805f5260205f20601f840160051c810160208510156134bd5750805b601f840160051c820191505b81811015611a58575f81556001016134c9565b815167ffffffffffffffff8111156134f6576134f6613070565b61350a816135048454613439565b84613498565b6020601f82116001811461353c575f83156135255750848201515b5f19600385901b1c1916600184901b178455611a58565b5f84815260208120601f198516915b8281101561356b578785015182556020948501946001909201910161354b565b508482101561358857868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b8181038181111561074557610745613471565b5f81518060208401855e5f93019283525090919050565b7f4d656d626572202300000000000000000000000000000000000000000000000081525f610fd060088301846135aa565b7f230000000000000000000000000000000000000000000000000000000000000081525f61362360018301856135aa565b7f200000000000000000000000000000000000000000000000000000000000000081526114ae60018201856135aa565b7f697066733a2f2f0000000000000000000000000000000000000000000000000081525f80845461368381613439565b60018216801561369a57600181146136b5576136e8565b60ff19831660078701526007821515830287010193506136e8565b875f5260205f205f5b838110156136dd578154888201600701526001909101906020016136be565b505060078287010193505b50507f2f0000000000000000000000000000000000000000000000000000000000000082525061371b60018201856135aa565b7f2e706e6700000000000000000000000000000000000000000000000000000000815260040195945050505050565b7f7b226e616d65223a22000000000000000000000000000000000000000000000081525f61377b60098301856135aa565b7f222c00000000000000000000000000000000000000000000000000000000000081527f226465736372697074696f6e223a22412064697374696e67756973686564206d60028201527f656d626572206f662074686520636f756e63696c222c0000000000000000000060228201527f22696d616765223a220000000000000000000000000000000000000000000000603882015261381d60418201856135aa565b7f227d000000000000000000000000000000000000000000000000000000000000815260020195945050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081525f610fd0601d8301846135aa565b6001600160d01b03818116838216019081111561074557610745613471565b6001600160d01b03828116828216039081111561074557610745613471565b634e487b7160e01b5f52601260045260245ffd5b6001600160a01b03851681526001600160a01b0384166020820152826040820152608060608201525f6139056080830184612f9c565b9695505050505050565b5f6020828403121561391f575f80fd5b8151610fd081612f6c565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b808202811582820484141761074557610745613471565b5f8261398357634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603160045260245ffdfe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa26469706673582212203884331bdf1a2cd6601f6f7e5187ff4a873f36fb83b3c87ba27aec588c30cbe864736f6c634300081a00336261667962656967786b6b7466716263656a706c726861376e756762347963367a79733235746e636979616632716d7272756b616b6d706c793765dec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724000000000000000000000000b4005db54adecf669babc3efb19b9b7e3978ebc2000000000000000000000000b4005db54adecf669babc3efb19b9b7e3978ebc2