0 txs
460 calls
constructor
constructor(address _factoryUpgradeGate, uint256 _mintFeeAmount, address _mintFeeRecipient, address _protocolRewards)
functions
balanceOf
viewfunction balanceOf(address owner) view returns (uint256)
computeTotalReward
purefunction computeTotalReward(uint256 mintPrice, uint256 quantity) pure returns (uint256)
config
viewfunction config() view returns (address metadataRenderer, uint64 editionSize, uint16 royaltyBPS, address fundsRecipient, bool isSoulbound)
contractURI
viewfunction contractURI() view returns (string)
contractVersion
purefunction contractVersion() pure returns (string)
createReferral
viewfunction createReferral() view returns (address)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
factoryUpgradeGate
viewfunction factoryUpgradeGate() view returns (address)
feeForAmount
viewfunction feeForAmount(uint256 quantity) view returns (address recipient, uint256 fee)
firstMinter
viewfunction firstMinter() view returns (address)
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)
isAdmin
viewfunction isAdmin(address user) view returns (bool)
isApprovedForAll
viewfunction isApprovedForAll(address nftOwner, address operator) view returns (bool)
metadataRenderer
viewfunction metadataRenderer() view returns (address)
mintedPerAddress
viewfunction mintedPerAddress(address minter) view returns (tuple)
MINTER_ROLE
viewfunction MINTER_ROLE() view returns (bytes32)
name
viewfunction name() view returns (string)
owner
viewfunction owner() view returns (address)
ownerOf
viewfunction ownerOf(uint256 tokenId) view returns (address)
presaleMintsByAddress
viewfunction presaleMintsByAddress(address) view returns (uint256)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
royaltyInfo
viewfunction royaltyInfo(uint256, uint256 _salePrice) view returns (address receiver, uint256 royaltyAmount)
saleDetails
viewfunction saleDetails() view returns (tuple)
SALES_MANAGER_ROLE
viewfunction SALES_MANAGER_ROLE() view returns (bytes32)
salesConfig
viewfunction salesConfig() view returns (uint104 publicSalePrice, uint32 maxSalePurchasePerAddress, uint64 publicSaleStart, uint64 publicSaleEnd, uint64 presaleStart, uint64 presaleEnd, bytes32 presaleMerkleRoot)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
symbol
viewfunction symbol() view returns (string)
tokenURI
viewfunction tokenURI(uint256 tokenId) view returns (string)
totalSupply
viewfunction totalSupply() view returns (uint256)
adminMint
nonpayablefunction adminMint(address recipient, uint256 quantity) returns (uint256)
adminMintAirdrop
nonpayablefunction adminMintAirdrop(address[] recipients) returns (uint256)
approve
nonpayablefunction approve(address to, uint256 tokenId)
burn
nonpayablefunction burn(uint256 tokenId)
callMetadataRenderer
nonpayablefunction callMetadataRenderer(bytes data) returns (bytes)
finalizeOpenEdition
nonpayablefunction finalizeOpenEdition()
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(string _contractName, string _contractSymbol, address _initialOwner, address _fundsRecipient, uint64 _editionSize, uint16 _royaltyBPS, bytes[] _setupCalls, address _metadataRenderer, bytes _metadataRendererInit, bool _isSoulbound, address _createReferral)
multicall
nonpayablefunction multicall(bytes[] data) returns (bytes[] results)
purchase
payablefunction purchase(uint256 quantity) payable returns (uint256)
purchasePresale
payablefunction purchasePresale(uint256 quantity, uint256 maxQuantity, uint256 pricePerToken, bytes32[] merkleProof) payable returns (uint256)
purchasePresaleWithComment
payablefunction purchasePresaleWithComment(uint256 quantity, uint256 maxQuantity, uint256 pricePerToken, bytes32[] merkleProof, string comment) payable returns (uint256)
purchasePresaleWithRewards
payablefunction purchasePresaleWithRewards(uint256 quantity, uint256 maxQuantity, uint256 pricePerToken, bytes32[] merkleProof, string comment, address mintReferral) payable returns (uint256)
purchaseWithComment
payablefunction purchaseWithComment(uint256 quantity, string comment) payable returns (uint256)
purchaseWithRewards
payablefunction purchaseWithRewards(address recipient, uint256 quantity, string comment, address mintReferral) payable returns (uint256)
reduceSupply
nonpayablefunction reduceSupply(uint64 _newEditionSize)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address account)
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)
setApprovalForAll
nonpayablefunction setApprovalForAll(address operator, bool approved)
setFundsRecipient
nonpayablefunction setFundsRecipient(address newRecipientAddress)
setMetadataRenderer
nonpayablefunction setMetadataRenderer(address newRenderer, bytes setupRenderer)
setOwner
nonpayablefunction setOwner(address newOwner)
setSaleConfiguration
nonpayablefunction setSaleConfiguration(uint104 publicSalePrice, uint32 maxSalePurchasePerAddress, uint64 publicSaleStart, uint64 publicSaleEnd, uint64 presaleStart, uint64 presaleEnd, bytes32 presaleMerkleRoot)
setSoulbound
nonpayablefunction setSoulbound(bool _isSoulbound)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 tokenId)
updateCreateReferral
nonpayablefunction updateCreateReferral(address recipient)
upgradeTo
nonpayablefunction upgradeTo(address newImplementation)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
withdraw
nonpayablefunction withdraw()
events
AdminChanged
event AdminChanged(address previousAdmin, address newAdmin)
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)
BeaconUpgraded
event BeaconUpgraded(address indexed beacon)
CollectionSizeReduced
event CollectionSizeReduced(address indexed changedBy, uint64 newSize)
FundsReceived
event FundsReceived(address indexed source, uint256 amount)
FundsRecipientChanged
event FundsRecipientChanged(address indexed newAddress, address indexed changedBy)
FundsWithdrawn
event FundsWithdrawn(address indexed withdrawnBy, address indexed withdrawnTo, uint256 amount, address feeRecipient, uint256 feeAmount)
Initialized
event Initialized(uint8 version)
MetadataUpdate
event MetadataUpdate(uint256 _tokenId)
MintComment
event MintComment(address indexed sender, address indexed tokenContract, uint256 indexed tokenId, uint256 quantity, string comment)
MintFeePayout
event MintFeePayout(uint256 mintFeeAmount, address mintFeeRecipient, bool success)
OpenMintFinalized
event OpenMintFinalized(address indexed sender, uint256 numberOfMints)
OwnerCanceled
event OwnerCanceled(address indexed previousOwner, address indexed potentialNewOwner)
OwnerPending
event OwnerPending(address indexed previousOwner, address indexed potentialNewOwner)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
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)
Sale
event Sale(uint8 phase, address indexed to, uint256 indexed quantity, uint256 indexed pricePerToken, uint256 firstPurchasedTokenId)
SalesConfigChanged
event SalesConfigChanged(address indexed changedBy)
SoulboundStatusChanged
event SoulboundStatusChanged(bool isSoulbound, address changedBy)
Transfer
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
UpdatedMetadataRenderer
event UpdatedMetadataRenderer(address sender, address renderer)
Upgraded
event Upgraded(address indexed implementation)
errors
Access_MissingRoleOrAdmin
error Access_MissingRoleOrAdmin(bytes32 role)
Access_OnlyAdmin
error Access_OnlyAdmin()
Access_WithdrawNotAllowed
error Access_WithdrawNotAllowed()
Admin_InvalidCollectionSize
error Admin_InvalidCollectionSize()
Admin_InvalidUpgradeAddress
error Admin_InvalidUpgradeAddress(address proposedAddress)
Admin_UnableToFinalizeNotOpenEdition
error Admin_UnableToFinalizeNotOpenEdition()
ApprovalCallerNotOwnerNorApproved
error ApprovalCallerNotOwnerNorApproved()
ApprovalQueryForNonexistentToken
error ApprovalQueryForNonexistentToken()
ApprovalToCurrentOwner
error ApprovalToCurrentOwner()
ApproveToCaller
error ApproveToCaller()
BalanceQueryForZeroAddress
error BalanceQueryForZeroAddress()
CREATOR_FUNDS_RECIPIENT_NOT_SET
error CREATOR_FUNDS_RECIPIENT_NOT_SET()
ExternalMetadataRenderer_CallFailed
error ExternalMetadataRenderer_CallFailed()
INVALID_ADDRESS_ZERO
error INVALID_ADDRESS_ZERO()
INVALID_ETH_AMOUNT
error INVALID_ETH_AMOUNT()
InvalidMintSchedule
error InvalidMintSchedule()
MarketFilterDAOAddressNotSupportedForChain
error MarketFilterDAOAddressNotSupportedForChain()
Mint_SoldOut
error Mint_SoldOut()
MintFee_FundsSendFailure
error MintFee_FundsSendFailure()
MintToZeroAddress
error MintToZeroAddress()
MintZeroQuantity
error MintZeroQuantity()
ONLY_CREATE_REFERRAL
error ONLY_CREATE_REFERRAL()
ONLY_OWNER
error ONLY_OWNER()
ONLY_PENDING_OWNER
error ONLY_PENDING_OWNER()
OperatorNotAllowed
error OperatorNotAllowed(address operator)
OwnerQueryForNonexistentToken
error OwnerQueryForNonexistentToken()
Presale_Inactive
error Presale_Inactive()
Presale_MerkleNotApproved
error Presale_MerkleNotApproved()
Presale_TooManyForAddress
error Presale_TooManyForAddress()
ProtocolRewards_WithdrawSendFailure
error ProtocolRewards_WithdrawSendFailure()
Purchase_TooManyForAddress
error Purchase_TooManyForAddress()
Purchase_WrongPrice
error Purchase_WrongPrice(uint256 correctPrice)
RemoteOperatorFilterRegistryCallFailed
error RemoteOperatorFilterRegistryCallFailed()
Sale_Inactive
error Sale_Inactive()
Setup_RoyaltyPercentageTooHigh
error Setup_RoyaltyPercentageTooHigh(uint16 maxRoyaltyBPS)
Transfer_NotAllowed
error Transfer_NotAllowed()
TransferCallerNotOwnerNorApproved
error TransferCallerNotOwnerNorApproved()
TransferFromIncorrectOwner
error TransferFromIncorrectOwner()
TransferToNonERC721ReceiverImplementer
error TransferToNonERC721ReceiverImplementer()
TransferToZeroAddress
error TransferToZeroAddress()
URIQueryForNonexistentToken
error URIQueryForNonexistentToken()
Withdraw_FundsSendFailure
error Withdraw_FundsSendFailure()
creation bytecode
0x6101c03461030e57601f615b2238819003918201601f1916830191906001600160401b0383118484101761031257816080928592604095865283398101031261030e578151916001600160a01b0390818416840361030e5760208101519083810151928084169182850361030e576060015190811680910361030e573060805280158015610306575b6102f55760c05260a052600860e05261010093620334508552610120937ff0887ba65ee2024ea881d91b74c2450ef19e1557f03bed3ea9f16b037cbe2dc98552610140907f5ebbf78043a2215b522b1366a193ec74dd1f54e441e841a87b9653246a9c49a682525f5460ff8160081c1615908180926102e8575b80156102d1575b156102765760ff1981166001175f5581610264575b506101609384526101809485526101a095865261022c575b51946157fb96876103278839608051878181611037015281816118e50152611a17015260a05187818161504101528181615071015261509a015260c05187615007015260e0518781816147ad01526149a30152518681816113fa0152614bcc0152518581816122a7015281816127530152612ab70152518481816108cc015281816114cb0152818161152b015281816127f101528181612a5a01528181612c9701526137d9015251838181610c06015281816110d801526119860152518281816115a80152818161210f01528181612944015281816139e701528181613cd00152614b760152518181816115d00152614b9c0152f35b61ff00195f54165f557f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986020825160018152a1610136565b61ffff1916610101175f90815561011e565b825162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608490fd5b50303b1580156101095750600160ff821614610109565b50600160ff821610610102565b8451632d87658960e01b8152600490fd5b508115610088565b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610022575b3615610018575f80fd5b61002061390e565b005b5f3560e01c806301ffc9a71461040157806303ee2733146103fc57806306fdde03146103f7578063081812fc146103f2578063095ea7b3146103ed57806309cf81c7146103e857806310a7eb5d146103e357806313af4035146103de57806318160ddd146103d95780631d2c0b38146103d457806323b872dd146103cf578063248a9ca3146103ca57806324d7806c146103c557806325024a2b146103c057806325eb54c6146103bb5780632a55205a146103b65780632e706b5a146103b15780632f2ff15d146103ac5780633474a4a6146103a757806336568abe146103a25780633659cfe61461039d5780633bcdcc87146103985780633ccfd60b1461039357806341e96eb11461038e57806341ef421a1461038957806342842e0e1461038457806342966c681461037f5780634f1ef2861461037a57806352d1902d1461037557806361fea7681461037057806362bf43f01461036b5780636352211e14610366578063703199701461036157806370a082311461035c57806379502c55146103575780638b338c7c146103525780638da5cb5b1461034d57806391d148541461034857806395d89b4114610343578063a0a8e4601461033e578063a217fddf14610339578063a22cb46514610334578063a457c6731461032f578063ac9650d81461032a578063ae6e787514610325578063b88d4fde14610320578063b8ae5a2c1461031b578063b9e7a58414610316578063bac9991214610311578063c87b56dd1461030c578063d445b97814610307578063d539139314610302578063d547741f146102fd578063df30e54b146102f8578063e08cd626146102f3578063e26bd343146102ee578063e58306f9146102e9578063e8a3d485146102e4578063e985e9c5146102df578063efef39a1146102da578063ff47a7c3146102d55763ffdb71630361000e57612cfa565b612c61565b612bfd565b612b96565b612b20565b612a7d565b612a43565b612854565b6127b7565b612776565b61273c565b61264e565b6125ad565b6124ea565b6123e5565b612277565b612212565b611fae565b611f34565b611edd565b611e2f565b611dfd565b611db8565b611d13565b611ccc565b611ca3565b611c3f565b611be3565b611b86565b611b5d565b611b2d565b611b04565b611ac8565b611a05565b6118a4565b611665565b611604565b61158d565b6114fe565b611366565b6112bb565b611010565b610f7a565b610e69565b610d08565b610c69565b610c35565b610bf1565b610b56565b610ad5565b610aa7565b610a6f565b6109cf565b6109aa565b61094f565b610892565b61085c565b610776565b610718565b61063c565b61053b565b61041c565b6001600160e01b031981160361041857565b5f80fd5b346104185760203660031901126104185761048660043561043c81610406565b63ffffffff60e01b16637965db0b60e01b81149081156104ce575b81156104bd575b81156104ac575b811561049b575b811561048a575b5060405190151581529081906020820190565b0390f35b630d4ae22960e11b1490505f610473565b632483248360e11b8114915061046c565b63152a902d60e11b81149150610465565b638da5cb5b60e01b8114915061045e565b90506380ac58cd60e01b811480156104fe575b80156104ee575b90610457565b506301ffc9a760e01b81146104e8565b50635b5e139f60e01b81146104e1565b9181601f84011215610418578235916001600160401b038311610418576020838186019501011161041857565b6040366003190112610418576004356001600160401b036024358181116104185761056a90369060040161050e565b92909161057561393c565b60655482015f1901908183116105f5576101605460a01c16106105e35761059a613992565b156105d1576105b16105b79261048694369161126a565b906139d4565b6105c1600160fb55565b6040519081529081906020820190565b60405163f12dcc7f60e01b8152600490fd5b604051630717c51360e41b8152600490fd5b612d6a565b5f91031261041857565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b906020610639928181520190610604565b90565b34610418575f366003190112610418576040515f60675461065c81612d8b565b808452906020906001908181169081156106ee5750600114610695575b6104868561068981870382611201565b60405191829182610628565b60675f90815293507f9787eeb91fe3101235e4a76063c7023ecb40f923f97916639c598592fa30d6ae5b8385106106db5750505050810160200161068982610486610679565b80548686018401529382019381016106bf565b8695506104869693506020925061068994915060ff191682840152151560051b8201019293610679565b34610418576020366003190112610418576020610736600435612dc3565b6040516001600160a01b039091168152f35b6001600160a01b0381160361041857565b6044359061076682610748565b565b610144359061076682610748565b346104185760403660031901126104185760043561079381610748565b602435906001600160a01b03806107a984614676565b51169082169181831461084a5781330361080e575b5f848152606b6020526040902080546001600160a01b0319166001600160a01b039092169190911790557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9255f80a4005b6001600160a01b0382165f908152606c6020908152604080832033845290915290205460ff166107be576040516367d9dca160e11b8152600490fd5b60405163250fdee360e21b8152600490fd5b34610418575f36600319011261041857610167546040516001600160a01b039091168152602090f35b6064359061076682610748565b34610418576020366003190112610418576004356108af81610748565b335f9081525f8051602061574683398151915260205260409020547f00000000000000000000000000000000000000000000000000000000000000009060ff161561012d81610925575b506109075761002082612dfd565b6040516333ba055f60e21b81526004810191909152602490fd5b0390fd5b5f8381526020918252604080822033835290925220610949915060ff905b54161590565b5f6108f9565b346104185760203660031901126104185760043561096c81610748565b335f9081525f80516020615746833981519152602052604090205460ff16156109985761002090613ba3565b6040516302bd6bd160e01b8152600490fd5b34610418575f3660031901126104185760655460665460405191035f19018152602090f35b34610418575f3660031901126104185760e0610162546001600160401b036101635490610164549181604051946001600160681b038116865263ffffffff8160681c16602087015260881c1660408501528181166060850152818160401c16608085015260801c1660a083015260c0820152f35b606090600319011261041857600435610a5b81610748565b90602435610a6881610748565b9060443590565b3461041857610a7d36610a43565b9060ff6101615460a01c16610a955761002092614c0b565b604051633518113960e01b8152600490fd5b34610418576020366003190112610418576004355f5261012d6020526020600160405f200154604051908152f35b3461041857602036600319011261041857602060ff610b1a600435610af981610748565b5f805261012d845260405f209060018060a01b03165f5260205260405f2090565b54166040519015158152f35b9181601f84011215610418578235916001600160401b038311610418576020808501948460051b01011161041857565b6080366003190112610418576004356001600160401b0360643581811161041857610b85903690600401610b26565b929091610b9061393c565b60655482015f1901908183116105f5576101605460a01c16106105e357610bb5613bee565b15610bdf57610486926105b79260405192610bcf846111cb565b5f84526044359060243590613c81565b604051634af69e0d60e11b8152600490fd5b34610418575f366003190112610418576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b34610418576040366003190112610418576040610c53602435612e58565b82516001600160a01b0390921682526020820152f35b60a0366003190112610418576004356001600160401b0360643581811161041857610c98903690600401610b26565b60849391933583811161041857610cb390369060040161050e565b949093610cbe61393c565b60655484015f1901908185116105f5576101605460a01c16106105e357610ce3613bee565b15610bdf57610cfa6105b79461048696369161126a565b926044359060243590613c81565b3461041857604036600319011261041857602435600435610d2882610748565b805f5261012d80602052610d42600160405f200154613e0e565b5f828152602082815260408083206001600160a01b038716845290915290205460ff1615610d6c57005b5f828152602091825260408082206001600160a01b038616835290925220805460ff1916600117905533916001600160a01b0316907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d5f80a4005b8151151581526101608101929160208181015115159083015260408101516040830152610e04606082015160608401906001600160401b03169052565b6080818101516001600160401b03169083015260a0818101516001600160401b03169083015260c0818101516001600160401b03169083015260e081015160e08301526101008082015190830152610120808201519083015261014080910151910152565b34610418575f36600319011261041857610e81612e8e565b50610486610e8d613992565b610e95613bee565b61016254906001600160401b039163ffffffff610163549161016454610f52865f196065540195610ef2610ed6610160546001600160401b039060a01c1690565b98610ee9610ee2611222565b9c15158d52565b151560208c0152565b6001600160681b03851660408b01526001600160401b03608886901c83161660608b01526001600160401b038183161660808b01526001600160401b03604082901c83161660a08b015260801c1660c08901906001600160401b03169052565b60e087015260681c166101008501526101208401521661014082015260405191829182610dc7565b3461041857604036600319011261041857602435610f9781610748565b336001600160a01b03821603610fb35761002090600435614052565b60405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608490fd5b346104185760203660031901126104185760043561102d81610748565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169061106530831415612ef0565b611081815f805160206157268339815191525416928314612f51565b335f9081525f80516020615746833981519152602052604090205460ff161561099857604051637399583360e01b81526001600160a01b038481166004830152929092166024830152602090829060449082905f907f0000000000000000000000000000000000000000000000000000000000000000165af1908115611172575f91611143575b5015611120576100209061111a612fb2565b906141ab565b604051633bcafdf560e21b81526001600160a01b03919091166004820152602490fd5b611165915060203d60201161116b575b61115d8183611201565b8101906140da565b5f611108565b503d611153565b61361e565b60e4359061076682610748565b634e487b7160e01b5f52604160045260245ffd5b606081019081106001600160401b038211176111b357604052565b611184565b6001600160401b0381116111b357604052565b602081019081106001600160401b038211176111b357604052565b604081019081106001600160401b038211176111b357604052565b90601f801991011681019081106001600160401b038211176111b357604052565b6040519061016082018281106001600160401b038211176111b357604052565b6040519061076682611198565b6001600160401b0381116111b357601f01601f191660200190565b9291926112768261124f565b916112846040519384611201565b829481845281830111610418578281602093845f960137010152565b9080601f83011215610418578160206106399335910161126a565b34610418576040366003190112610418576004356112d881610748565b6024356001600160401b038111610418576112f79036906004016112a0565b335f9081525f80516020615746833981519152602052604090205460ff161561099857816113486040927f046c5d913c35948c3e0e44c3599eb14bf33b73f141fa8bb282b300414998b8689461444e565b81513381526001600160a01b039091166020820152a16100206145f0565b34610418575f3660031901126104185761137e61393c565b5f805261012d602052476113c16113bd6113b6335f805160206157468339815191525b9060018060a01b03165f5260205260405f2090565b5460ff1690565b1590565b806114bb575b8061149c575b61148a576101615f808080856113f86113ec875460018060a01b031690565b6001600160a01b031690565b7f0000000000000000000000000000000000000000000000000000000000000000f1611422612fe3565b50156114785754604080519283525f60208401819052908301526001600160a01b03169033907f8a95554e4c9dcaaf33f247387f2ee77390780487d3365e3a804788791a1df50090606090a3610020600160fb55565b6040516339debd5b60e01b8152600490fd5b604051631dab829b60e01b8152600490fd5b50610161546114b3906001600160a01b03166113ec565b3314156113cd565b506114f96113bd6113b6336113a17f00000000000000000000000000000000000000000000000000000000000000005f5261012d60205260405f2090565b6113c7565b34610418575f36600319011261041857335f9081525f8051602061574683398151915260205260409020547f00000000000000000000000000000000000000000000000000000000000000009060ff161561012d81611565575b506109075761002061303d565b5f8381526020918252604080822033835290925220611587915060ff90610943565b5f611558565b346104185760203660031901126104185760406115cc6004357f0000000000000000000000000000000000000000000000000000000000000000612e45565b81517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020810191909152f35b346104185761161236610a43565b60ff6101615460a01c16610a95576040519161162d836111cb565b5f835261163b828286614c0b565b803b61164357005b61164c936151e1565b1561165357005b6040516368d2bf6b60e11b8152600490fd5b346104185760203660031901126104185760043561168281614676565b80516001600160a01b03908116908190338214801561187d575b8015611869575b15611857575f936116b48387613b57565b6001600160a01b0383165f908152606a6020526040902061175c906117126116f56116e683546001600160401b031690565b5f19016001600160401b031690565b825467ffffffffffffffff19166001600160401b03909116178255565b80546117349060801c6001600160401b03165b6001016001600160401b031690565b815467ffffffffffffffff60801b191660809190911b67ffffffffffffffff60801b16179055565b6117b0611771875f52606960205260405f2090565b80546001600160a01b0319166001600160a01b03861617815561179d6001600160401b03421682613012565b805460ff60e01b1916600160e01b179055565b600186016117c6815f52606960205260405f2090565b80549093166001600160a01b031615611803575b505050505f805160206157868339815191528280a46100206117fe60665460010190565b606655565b60655403611812575b806117da565b81546001600160a01b0319166001600160a01b0390931692909217815561184f91611849906020905b01516001600160401b031690565b90613012565b5f808061180c565b604051632ce44b5f60e11b8152600490fd5b50336118776113ec87612dc3565b146116a3565b5061189f6113b6336113a18560018060a01b03165f52606c60205260405f2090565b61169c565b6040366003190112610418576004356118bc81610748565b6024356001600160401b038111610418576118db9036906004016112a0565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169061191330831415612ef0565b61192f815f805160206157268339815191525416928314612f51565b335f9081525f80516020615746833981519152602052604090205460ff161561099857604051637399583360e01b81526001600160a01b038581166004830152929092166024830152602090829060449082905f907f0000000000000000000000000000000000000000000000000000000000000000165af1908115611172575f916119e6575b50156119c5576100209161427d565b604051633bcafdf560e21b81526001600160a01b0383166004820152602490fd5b6119ff915060203d60201161116b5761115d8183611201565b5f6119b6565b34610418575f366003190112610418577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163003611a5d576040515f805160206157268339815191528152602090f35b60405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608490fd5b3461041857602036600319011261041857600435611ae581610748565b60018060a01b03165f52610165602052602060405f2054604051908152f35b34610418575f36600319011261041857610166546040516001600160a01b039091168152602090f35b346104185760203660031901126104185760206001600160a01b03611b53600435614676565b5116604051908152f35b34610418575f36600319011261041857610160546040516001600160a01b039091168152602090f35b3461041857602036600319011261041857600435611ba381610748565b6001600160a01b03168015611bd1575f52606a60205260206001600160401b0360405f205416604051908152f35b6040516323d3ad8160e21b8152600490fd5b34610418575f3660031901126104185760a06101605460ff600180841b03610161549061ffff6040519482811686526001600160401b0381881c16602087015260e01c16604085015281166060840152831c1615156080820152f35b3461041857602036600319011261041857600435611c5c81610748565b610166546001600160a01b03163303611c915761016680546001600160a01b0319166001600160a01b03909216919091179055005b604051632afb0ecf60e01b8152600490fd5b34610418575f3660031901126104185761015f546040516001600160a01b039091168152602090f35b3461041857604036600319011261041857602060ff610b1a602435611cf081610748565b6004355f5261012d845260405f209060018060a01b03165f5260205260405f2090565b34610418575f366003190112610418576040515f606854611d3381612d8b565b808452906020906001908181169081156106ee5750600114611d5f576104868561068981870382611201565b60685f90815293507fa2153420d844928b4421650203c77babc8b33d7f2e7b450e2966db0c220977535b838510611da55750505050810160200161068982610486610679565b8054868601840152938201938101611d89565b34610418575f36600319011261041857610486604051611dd7816111e6565b60058152640c8b8c8b8d60da1b6020820152604051918291602083526020830190610604565b34610418575f3660031901126104185760206040515f8152f35b8015150361041857565b610124359061076682611e17565b3461041857604036600319011261041857600435611e4c81610748565b602435611e5881611e17565b6001600160a01b03821691338314611ecb57335f908152606c602090815260408083206001600160a01b039094168352929052209015159060ff1981541660ff83161790556040519081527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a3005b60405163b06307db60e01b8152600490fd5b34610418576040366003190112610418576020611efe602435600435612e45565b604051908152f35b602060031982011261041857600435906001600160401b03821161041857611f3091600401610b26565b9091565b3461041857611f4b611f4536611f06565b9061314e565b60405160209160208201926020835281518094526040830193602060408260051b8601019301915f955b828710611f825785850386f35b909192938280611f9e600193603f198a82030186528851610604565b9601920196019592919092611f75565b60c03660031901126104185760048035602435604435606435936001600160401b039485811161041857611fe59036908301610b26565b91909360843587811161041857611fff90369084016112a0565b9260a4359761200d89610748565b61201561393c565b60655488015f1901908189116105f5576101605460a01c16106122015761203a613bee565b156121f0576113bd6120ad91610164546120a86040996120998a8c516120918161208360208201948d3387604091949392606082019560018060a01b0316825260208201520152565b03601f198101835282611201565b519020613c1c565b60208151910120933691613c33565b614de9565b6121e157335f908152610165602052604090206120cb878254612d7e565b9055335f9081526101656020526040902054116121d357506101615461048695612136916001600160a01b031680156121cc575b610166546001600160a01b0316907f0000000000000000000000000000000000000000000000000000000000000000868934614fc7565b6121408433614998565b6121518461214c614ab1565b613647565b9384928185515f805160206157a683398151915233918061217e8982919060206040840193600181520152565b0390a481516121a3575b505050612195600160fb55565b519081529081906020820190565b5f805160206157668339815191528451806121c130953395836139bd565b0390a4815f80612188565b50306120ff565b835163a7b32bb160e01b8152fd5b5083516342db872960e11b8152fd5b604051634af69e0d60e11b81528390fd5b604051630717c51360e41b81528390fd5b346104185760803660031901126104185760043561222f81610748565b60243561223b81610748565b6044356064356001600160401b0381116104185761225d9036906004016112a0565b9160ff6101615460a01c16610a955761163b828286614c0b565b346104185761228536611f06565b335f9081525f80516020615746833981519152602052604090819020549091907f00000000000000000000000000000000000000000000000000000000000000009060ff161561012d816123c3575b506123ac5750606554905f1981830181018083116105f5576001600160401b036101605460a01c161061239b5782828101935b848110612329576104868661231a614ab1565b90519081529081906020820190565b8181039084821015612396575f6001809360051b8a013561234981610748565b612352816147a2565b5f805160206157a683398151915261238d8861236c614ab1565b01928c51918291868060a01b03169482919060206040840193600381520152565b0390a401612307565b6130e5565b8351630717c51360e41b8152600490fd5b6024908351906333ba055f60e21b82526004820152fd5b5f8381526020918252858120338252909152604081205460ff161591506122d4565b34610418576020366003190112610418576004356001600160401b038111610418576124159036906004016112a0565b335f9081525f80516020615746833981519152602052604090205460ff1615610998576101605481515f92839260209091019083906001600160a01b03165af161245d612fe3565b901561246f57610486906106896145f0565b6040516397e71ac360e01b8152600490fd5b608435906001600160401b038216820361041857565b600435906001600160401b038216820361041857565b606435906001600160401b038216820361041857565b60a435906001600160401b038216820361041857565b60a4359061ffff8216820361041857565b3461041857610160366003190112610418576001600160401b036004358181116104185761251c9036906004016112a0565b602435828111610418576125349036906004016112a0565b61253c610759565b612544610885565b61254c612481565b6125546124d9565b9060c4358781116104185761256d903690600401610b26565b929091612578611177565b9461010435998a11610418576125956100209a36906004016112a0565b9661259e611e21565b986125a7610768565b9a6131e1565b34610418576020366003190112610418576004356125ca81613b1e565b1561263c576101605460405163c87b56dd60e01b815260048101929092525f90829060249082906001600160a01b03165afa801561117257610486915f9161261a575b5060405191829182610628565b61263691503d805f833e61262e8183611201565b8101906135f9565b5f61260d565b604051630a14c4b560e41b8152600490fd5b346104185760203660031901126104185761048660043561266e81610748565b612676613629565b506001600160a01b0381165f908152610165602081815260408084208054606a84529482902054939092529293926126ff926126f3926126e3926126c892901c6001600160401b0316905b5490613647565b6001600160a01b039094165f908152606a6020526040902090565b5460401c6001600160401b031690565b6001600160401b031690565b91612708611242565b9283526020830152604082015260405191829182919091604080606083019480518452602081015160208501520151910152565b34610418575f3660031901126104185760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346104185760403660031901126104185761002060243560043561279982610748565b805f5261012d6020526127b2600160405f200154613e0e565b614052565b34610418576020366003190112610418576004356127d481611e17565b335f9081525f8051602061574683398151915260205260409020547f00000000000000000000000000000000000000000000000000000000000000009060ff161561012d8161282c575b506109075761002082613654565b5f838152602091825260408082203383529092522061284e915060ff90610943565b5f61281e565b60803660031901126104185760043561286c81610748565b602435906001600160401b036044358181116104185761289090369060040161050e565b906064359261289e84610748565b6128a661393c565b60655486015f1901908187116105f5576101605460a01c16106105e3576128cb613992565b156105d1576128db91369161126a565b610162549363ffffffff6001600160681b0386169560681c1680151590816129fa575b506129e85761016154610486955f805160206157a6833981519152956001600160a01b03959192849261296b91881680156129e1575b610166546001600160a01b0316907f0000000000000000000000000000000000000000000000000000000000000000878734614fc7565b6129758282614998565b6129818261214c614ab1565b968796604051921691806129a089829190602060408401935f81520152565b0390a481516129b7575b5050506105c1600160fb55565b5f80516020615766833981519152604051806129d630953395836139bd565b0390a4805f806129aa565b5030612934565b604051630882ba5360e21b8152600490fd5b9050612a3c612a2883612a236126f36126e33360018060a01b03165f52606a60205260405f2090565b612d7e565b335f908152610165602052604090206126c1565b115f6128fe565b34610418575f3660031901126104185760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b3461041857604036600319011261041857600435612a9a81610748565b335f9081525f8051602061574683398151915260205260409020547f00000000000000000000000000000000000000000000000000000000000000009060ff161561012d81612af8575b50610907576104866105c1602435846136a6565b5f8381526020918252604080822033835290925220612b1a915060ff90610943565b5f612ae4565b34610418575f366003190112610418576101605460405163e8a3d48560e01b8152905f90829060049082906001600160a01b03165afa801561117257610486915f91612b7c575b50604051918291602083526020830190610604565b612b9091503d805f833e61262e8183611201565b5f612b67565b34610418576040366003190112610418576020612bf3600435612bb881610748565b60243590612bc582610748565b6001600160a01b039081165f908152606c60209081526040808320939094168252919091522060ff90541690565b6040519015158152f35b602036600319011261041857600435612c1461393c565b60655481015f19018082116105f5576001600160401b036101605460a01c16106105e357612c40613992565b156105d1576105b76104869160405190612c59826111cb565b5f82526139d4565b3461041857602036600319011261041857612c7a612497565b335f9081525f8051602061574683398151915260205260409020547f00000000000000000000000000000000000000000000000000000000000000009060ff161561012d81612cd2575b50610907576100208261371c565b5f8381526020918252604080822033835290925220612cf4915060ff90610943565b5f612cc4565b346104185760e0366003190112610418576004356001600160681b0381168103610418576024359063ffffffff8216820361041857604435916001600160401b03831683036104185761002092612d4f6124ad565b612d57612481565b91612d606124c3565b9360c435956137b9565b634e487b7160e01b5f52601160045260245ffd5b919082018092116105f557565b90600182811c92168015612db9575b6020831014612da557565b634e487b7160e01b5f52602260045260245ffd5b91607f1691612d9a565b612dcc81613b1e565b15612deb575f908152606b60205260409020546001600160a01b031690565b6040516333d1c03960e21b8152600490fd5b61016180546001600160a01b0319166001600160a01b0392909216918217905533907f70a7ea5c664ab9c21baf3da59bb2f1e1ca33557b08a0031fab4f1707674499515f80a3565b818102929181159184041417156105f557565b610161546001600160a01b031691908215612e8957612e856127109161ffff6101605460e01c1690612e45565b0490565b505f90565b6040519061016082018281106001600160401b038211176111b3576040525f610140838281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e082015282610100820152826101208201520152565b15612ef757565b60405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b6064820152608490fd5b15612f5857565b60405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b6064820152608490fd5b604051612fbe816111cb565b5f8152905f368137565b60405190612fd582611198565b602a82526040366020840137565b3d1561300d573d90612ff48261124f565b916130026040519384611201565b82523d5f602084013e565b606090565b805467ffffffffffffffff60a01b191660a09290921b67ffffffffffffffff60a01b16919091179055565b6001600160401b036101608180825460a01c16036130bc57606554610160805467ffffffffffffffff60a01b19165f1992909201841660a01b67ffffffffffffffff60a01b169190911790555460a01c166040519081527fb6cc1e876b8d7479c8afe025a58658b0f3c3ec5bd0f28cb4261326b162069bf860203392a2565b6040516339d0b02160e21b8152600490fd5b6001600160401b0381116111b35760051b60200190565b634e487b7160e01b5f52603260045260245ffd5b91908110156123965760051b81013590601e19813603018212156104185701908135916001600160401b038311610418576020018236038113610418579190565b80518210156123965760209160051b010190565b91909161315a836130ce565b6131676040519182611201565b838152601f19613176856130ce565b015f5b8181106131d057505080935f5b8181106131935750505050565b806131b46131ae6131a760019486896130f9565b369161126a565b3061477b565b6131be828661313a565b526131c9818561313a565b5001613186565b806060602080938601015201613179565b99979593919a98969492909a5f549b60ff8d60081c1615809d819e613302575b81156132e2575b50156132865761322c9b8d613223600160ff195f5416175f55565b61326f57613310565b61323257565b61324061ff00195f54165f55565b604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602090a1565b61328161010061ff00195f5416175f55565b613310565b60405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608490fd5b303b159150816132f4575b505f613208565b6001915060ff16145f6132ed565b600160ff8216109150613201565b999798999692969593949561333460ff5f5460081c1661332f81614ac2565b614ac2565b8051906001600160401b0382116111b35761335982613354606754612d8b565b615289565b602090816001601f851114613514575061340b946133ad61346f9c9b99956133a58661342d9b9761344f9e9b976133d5975f92613509575b50508160011b915f199060031b1c19161790565b606755615363565b6133b76001606555565b6133bf614b22565b6133c7614b32565b6133d081613f38565b613ba3565b806134e6575b5050610160805467ffffffffffffffff60a01b191660a09290921b67ffffffffffffffff60a01b16919091179055565b610160805461ffff60e01b191660e09290921b61ffff60e01b16919091179055565b61016180546001600160a01b0319166001600160a01b03909216919091179055565b610161805460ff60a01b191691151560a01b60ff60a01b16919091179055565b61138861ffff6134876101605461ffff9060e01c1690565b16116134cc57610766926001600160a01b0381166134a6575b5061444e565b61016680546001600160a01b0319166001600160a01b039092169190911790555f6134a0565b60405163334074c160e11b81526113886004820152602490fd5b6134f8916134f333613f38565b61314e565b5061350233613fc7565b5f806133db565b015190505f80613391565b60675f529190601f1984167f9787eeb91fe3101235e4a76063c7023ecb40f923f97916639c598592fa30d6ae935f905b82821061359b57505061346f9c9b999560018661344f9d9a966133d59661340b9b9661342d9e9a6133ad9710613583575b505050811b01606755615363565b01515f1960f88460031b161c191690555f8080613575565b80600186978294978701518155019601940190613544565b81601f82011215610418578051906135ca8261124f565b926135d86040519485611201565b8284526020838301011161041857815f9260208093018386015e8301015290565b906020828203126104185781516001600160401b0381116104185761063992016135b3565b6040513d5f823e3d90fd5b6040519061363682611198565b5f6040838281528260208201520152565b919082039182116105f557565b610161805460ff60a01b191691151560a081901b60ff60a01b16929092179055604080519182523360208301527fe4184dc6e007ed45e84f4b60429c521d141558dbfe3150be88c8110a4c19a5a491a1565b905f196065548201018082116105f5576001600160401b036101605460a01c16106105e3576136d58183614998565b6136dd614ab1565b8181039081116105f557604080516003815260208101929092525f936001600160a01b0316915f805160206157a68339815191529190a4610639614ab1565b610160546001600160401b03828116929160a01c1682108015906137ab575b61379957610160805467ffffffffffffffff60a01b191660a09290921b67ffffffffffffffff60a01b169190911790556040519081527f2913fed19d080c1a117561858eb9911bfe1c9e32b3ed5cd19a455065f568468160203392a2565b6040516314dc7f9360e21b8152600490fd5b506065545f1901821061373b565b335f9081525f8051602061574683398151915260205260409020549091907f00000000000000000000000000000000000000000000000000000000000000009060ff161561012d816138ec575b506138d45750610162805460689290921b63ffffffff60681b166001600160c81b03199092166001600160681b03909316929092171760889290921b67ffffffffffffffff60881b1691909117905561016380546001600160c01b0319166001600160401b039092169190911760409290921b67ffffffffffffffff60401b169190911760809290921b67ffffffffffffffff60801b169190911790556138ad9061016455565b337fc1ff5e4744ac8dd2b8027a10e3723b165975297501c71c4e7dcb8796d96375db5f80a2565b602490604051906333ba055f60e21b82526004820152fd5b5f838152602091825260408082203383529092522060ff91505416155f613806565b6040513481527f8e47b87b0ef542cdfa1659c551d88bad38aa7f452d2bbb349ab7530dfec8be8f60203392a2565b600260fb541461394d57600260fb55565b60405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606490fd5b6001600160401b03806101625460881c1642101590816139b0575090565b9050429061016354161190565b604090610639939281528160208201520190610604565b9061016254906001600160681b038216917f0000000000000000000000000000000000000000000000000000000000000000613a1985613a148387612d7e565b612e45565b3403613aee575060681c63ffffffff168015159081613abe575b506129e857613a428333614998565b613a4e8361214c614ab1565b928392613a5a82614b4d565b816040515f805160206157a6833981519152339180613a8489829190602060408401935f81520152565b0390a48151613a94575b50505090565b5f8051602061576683398151915260405180613ab330953395836139bd565b0390a4805f80613a8e565b9050613ae7612a2885612a236126f36126e33360018060a01b03165f52606a60205260405f2090565b115f613a33565b613aff85613a146109219387612d7e565b60405163350e0bcf60e11b815260048101919091529081906024820190565b80600111159081613b4b575b81613b33575090565b90505f52606960205260ff60405f205460e01c161590565b60655481109150613b2a565b5f818152606b6020526040812080546001600160a01b031916905590916001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258280a4565b61015f805490916001600160a01b039081169190829082167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a36001600160a01b031916179055565b610163546001600160401b039042828260401c1611159182613c0f57505090565b909150429160801c161190565b9060405191602083015260208252610766826111e6565b9291613c3e826130ce565b91613c4c6040519384611201565b829481845260208094019160051b810192831161041857905b828210613c725750505050565b81358152908301908301613c65565b91936113bd613cca91969496610164546120a86040996120998a8c516120918161208360208201948d3387604091949392606082019560018060a01b0316825260208201520152565b613dfd577f0000000000000000000000000000000000000000000000000000000000000000613cfd83613a148388612d7e565b3403613dcd5750335f90815261016560205260409020613d1e838254612d7e565b9055335f908152610165602052604090205411613dbc57613d3f8133614998565b613d4b8161214c614ab1565b938493613d5783614b4d565b8282515f805160206157a6833981519152339180613d818a82919060206040840193600181520152565b0390a48251613d92575b5050505090565b5f80516020615766833981519152905180613db030953395836139bd565b0390a4805f8080613d8b565b835163a7b32bb160e01b8152600490fd5b85613ddf84613a146109219489612d7e565b905163350e0bcf60e11b815260048101919091529081906024820190565b84516342db872960e11b8152600490fd5b5f81815261012d6020908152604080832033845290915290205460ff1615613e335750565b3390613e3d612fc8565b916030613e4984615442565b536078613e558461544f565b5360295b60018111613ef657610921613ec1613ede86612083613e8188613e7c891561547c565b6154c7565b613ebb604051958694613ebb602087016017907f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081520190565b90614e3a565b7001034b99036b4b9b9b4b733903937b6329607d1b815260110190565b60405162461bcd60e51b815291829160048301610628565b90600f811690601082101561239657613f33916f181899199a1a9b1b9c1cb0b131b232b360811b901a613f29848761545f565b5360041c91615470565b613e59565b6001600160a01b0381165f9081525f80516020615746833981519152602052604090205461012d9060ff1615613f6c575050565b5f808052602091825260408082206001600160a01b038516835290925220805460ff1916600117905533906001600160a01b03165f7f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4565b6001600160a01b0381165f9081525f80516020615746833981519152602052604090205461012d9060ff16613ffa575050565b5f808052602091825260408082206001600160a01b038516835290925220805460ff1916905533906001600160a01b03165f7ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b8180a4565b5f81815261012d602081815260408084206001600160a01b03871685529091529091205460ff1661408257505050565b5f828152602091825260408082206001600160a01b038616835290925220805460ff1916905533916001600160a01b0316907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b5f80a4565b90816020910312610418575161063981611e17565b90816020910312610418575190565b1561410557565b60405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608490fd5b60809060208152602e60208201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960408201526d6f6e206973206e6f74205555505360901b60608201520190565b906141d77f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1690565b156141e6575061076690614efe565b6040516352d1902d60e01b8152916020836004816001600160a01b0385165afa5f938161424c575b5061422c5760405162461bcd60e51b8152806109216004820161415c565b6142475f8051602061572683398151915261076694146140fe565b614e4c565b61426f91945060203d602011614276575b6142678183611201565b8101906140ef565b925f61420e565b503d61425d565b906142a97f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1690565b156142b8575061076690614efe565b6040516352d1902d60e01b8152916020836004816001600160a01b0385165afa5f938161431e575b506142fe5760405162461bcd60e51b8152806109216004820161415c565b6143195f8051602061572683398151915261076694146140fe565b614eac565b61433891945060203d602011614276576142678183611201565b925f6142e0565b919091608081840312610418578051916001600160401b0392838111610418578461436b9184016135b3565b93602083015184811161041857816143849185016135b3565b9360408401519081116104185760609161439f9185016135b3565b92015190565b90916143bc61063993604084526040840190610604565b916020818403910152610604565b94936144045f946143f66080956144129560018060a01b03168a5260a060208b015260a08a0190610604565b9088820360408a0152610604565b908682036060880152610604565b930152565b91614440906144326106399593606086526060860190610604565b908482036020860152610604565b916040818403910152610604565b61016080546001600160a01b0319166001600160a01b0383161790559080519081156145eb5760208061448593830101910161433f565b91939291600181036145115750906144a96144b79260405195869360208501614417565b03601f198101845283611201565b6001600160a01b0316803b15610418576040516342b53ffd60e11b8152915f9183918290849082906144ec9060048301610628565b03925af18015611172576144fe575b50565b8061450b610766926111b8565b806105fa565b91929091600214614523575b50505050565b60405190614539826144a98587602084016143a5565b6001600160a01b031690813b15610418575f61456991604051809381926342b53ffd60e11b835260048301610628565b038183865af18015611172576145d8575b5083511561451d57803b15610418576145ae935f8094604051968795869485936342495a9560e01b855230600486016143ca565b03925af18015611172576145c5575b80808061451d565b8061450b6145d2926111b8565b5f6145bd565b8061450b6145e5926111b8565b5f61457a565b505050565b6065545f19810180614600575050565b81106105f55760407f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c91815190600182526020820152a1565b9060405161464681611198565b91546001600160a01b038116835260a081901c6001600160401b0316602084015260e01c60ff1615156040830152565b61467e613629565b506001818082111561469d575b604051636f96cda160e11b8152600490fd5b60655481101561468b576146bc6146c1915f52606960205260405f2090565b614639565b6146d16113bd6040830151151590565b1561468b5780516001600160a01b031661472c575090815b6146f3578061468b565b5f19019061470c6146bc835f52606960205260405f2090565b8051614720906001600160a01b03166113ec565b61472c575090816146e9565b91505090565b6040519061473f82611198565b60278252660819985a5b195960ca1b6040837f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c60208201520152565b90610639915f8061478a614732565b93602081519101845af461479c612fe3565b91615557565b6001600160401b03917f00000000000000000000000000000000000000000000000000000000000000009190600190428516825b1561498b575b5f95858411156149845785945b606554976001600160a01b038216978815614973578715614961576148bb8489166148636148278660018060a01b03165f52606a60205260405f2090565b6148498361483c83546001600160401b031690565b016001600160401b031690565b6001600160401b03166001600160401b0319825416179055565b6001600160a01b0385165f908152606a60205260409020614894909161483c83546001600160401b039060401c1690565b67ffffffffffffffff60401b82549160401b169067ffffffffffffffff60401b1916179055565b6148f0836148d18c5f52606960205260405f2090565b80546001600160a01b0319166001600160a01b03909216919091179055565b61490b856149068c5f52606960205260405f2090565b613012565b878a019560015b15614936575b5f60018c019b8b5f5f805160206157868339815191528180a4614912565b868b1061491857949961495694995061214c919650979297969196606555565b9295909194956147d6565b60405163b562e8dd60e01b8152600490fd5b604051622e076360e81b8152600490fd5b83946147e9565b826147dc57509350505050565b6001600160401b03927f0000000000000000000000000000000000000000000000000000000000000000929042851660015b15614aa4575b5f9585841115614a9d5785945b606554976001600160a01b03821697881561497357871561496157614a1b8489166148636148278660018060a01b03165f52606a60205260405f2090565b614a31836148d18c5f52606960205260405f2090565b614a47856149068c5f52606960205260405f2090565b878a019560015b15614a72575b5f60018c019b8b5f5f805160206157868339815191528180a4614a4e565b868b10614a54579499614a9294995061214c919650979297969196606555565b9295909194956149ca565b83946149dd565b826149d057509350505050565b6065545f1981019081116105f55790565b15614ac957565b60405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608490fd5b61076660ff5f5460081c16614ac2565b614b4660ff5f5460081c1661332f81614ac2565b600160fb55565b6060614b9a7f6f8da53cfedb8cc4f7935c3629624e50b63053c93bb2cad246aa4d3a2ba7d4ce927f0000000000000000000000000000000000000000000000000000000000000000612e45565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165f80808085857f0000000000000000000000000000000000000000000000000000000000000000f190614bf5612fe3565b50604051928352602083015215156040820152a1565b614c1483614676565b80516001600160a01b038084169392918116849003614dd8578333148015614db1575b8015614d9d575b15611857578416938415614d8b57614cfc90614c5a8488613b57565b6001600160a01b0384165f908152606a60205260409020614c89906148496116e682546001600160401b031690565b6001600160a01b0381165f908152606a60205260409020614cb89061484961172582546001600160401b031690565b614cec614ccd885f52606960205260405f2090565b80546001600160a01b0319166001600160a01b03909316929092178255565b6001600160401b03421690613012565b6001850190614d13825f52606960205260405f2090565b8054909290614d2a906001600160a01b03166113ec565b15614d47575b505050505f805160206157868339815191525f80a4565b60655403614d56575b80614d30565b81546001600160a01b0319166001600160a01b03909316929092178155614d83916118499060209061183b565b5f8080614d50565b604051633a954ecd60e21b8152600490fd5b5033614dab6113ec88612dc3565b14614c3e565b50614dd36113b6336113a18660018060a01b03165f52606c60205260405f2090565b614c37565b60405162a1148160e81b8152600490fd5b929091905f915b8451831015614e3257614e03838661313a565b519081811015614e21575f52602052600160405f205b920191614df0565b905f52602052600160405f20614e19565b915092501490565b805191908290602001825e015f815290565b90614e5682614efe565b6001600160a01b0382167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2805115801590614ea5575b614e97575050565b6144fb915f8061478a614732565b505f614e8f565b90614eb682614efe565b6001600160a01b0382167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2805115801590614ef657614e97575050565b506001614e8f565b803b15614f32575f8051602061572683398151915280546001600160a01b0319166001600160a01b03909216919091179055565b60405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608490fd5b6040519060a082018281106001600160401b038211176111b3576040525f6080838281528260208201528260408201528260608201520152565b90919593949282614fd791612e45565b958692614fe2614f8d565b50816151715750500361515f57614ff884615690565b925b83516001600160a01b03957f000000000000000000000000000000000000000000000000000000000000000087169391929091908361515957505f905b80881661515357507f0000000000000000000000000000000000000000000000000000000000000000945b602087015197811661514d57507f0000000000000000000000000000000000000000000000000000000000000000955b6040810151907f00000000000000000000000000000000000000000000000000000000000000006080606083015192015191873b156104185760405163faa3516f60e01b81526001600160a01b039586166004820152602481019790975297841660448701526064860199909952968216608485015260a48401529590951660c4820181905260e4820193909352610104810192909252610124820192909252915f918391610144918391905af18015611172576144fe5750565b95615092565b94615062565b90615037565b604051633b78763760e21b8152600490fd5b6151879293509061518191612e45565b86612d7e565b0361515f57615195846155f0565b92614ffa565b90816020910312610418575161063981610406565b6001600160a01b03918216815291166020820152604081019190915260806060820181905261063992910190610604565b92602091615209935f604051809681958294630a85bd0160e11b9a8b855233600486016151b0565b03926001600160a01b03165af15f9181615258575b5061524a5761522b612fe3565b80519081615245576040516368d2bf6b60e11b8152600490fd5b602001fd5b6001600160e01b0319161490565b61527b91925060203d602011615282575b6152738183611201565b81019061519b565b905f61521e565b503d615269565b601f8111615295575050565b60675f527f9787eeb91fe3101235e4a76063c7023ecb40f923f97916639c598592fa30d6ae906020601f840160051c830193106152ec575b601f0160051c01905b8181106152e1575050565b5f81556001016152d6565b90915081906152cd565b601f8111615302575050565b60685f527fa2153420d844928b4421650203c77babc8b33d7f2e7b450e2966db0c22097753906020601f840160051c83019310615359575b601f0160051c01905b81811061534e575050565b5f8155600101615343565b909150819061533a565b9081516001600160401b0381116111b35761538881615383606854612d8b565b6152f6565b602080601f83116001146153bd575081906153b893945f926135095750508160011b915f199060031b1c19161790565b606855565b90601f198316946153ef60685f527fa2153420d844928b4421650203c77babc8b33d7f2e7b450e2966db0c2209775390565b925f905b87821061542a575050836001959610615412575b505050811b01606855565b01515f1960f88460031b161c191690555f8080615407565b806001859682949686015181550195019301906153f3565b8051156123965760200190565b8051600110156123965760210190565b908151811015612396570160200190565b80156105f5575f190190565b1561548357565b606460405162461bcd60e51b815260206004820152602060248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152fd5b60405190608082018281106001600160401b038211176111b35760405260428252606036602084013760306154fb83615442565b5360786155078361544f565b536041905b6001821161551f5761063991501561547c565b600f811690601082101561239657615551916f181899199a1a9b1b9c1cb0b131b232b360811b901a613f29848661545f565b9061550c565b919290156155b9575081511561556b575090565b3b156155745790565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606490fd5b8251909150156155cc5750805190602001fd5b60405162461bcd60e51b815260206004820152908190610921906024830190610604565b906155f9614f8d565b50615602614f8d565b5f8152602081019262989680845260408201936301c9c380855260608301915f835283956001821517156105f55760809361567d6156859261567d61568b965f8a526305f5e1008061565583518a612e45565b048252615663845189612e45565b048352615671855188615716565b85528951905190612d7e565b905190612d7e565b90613647565b910152565b90615699614f8d565b506156a2614f8d565b6302625a0092838252602082019062989680825260408301906301312d00825260608401955f875284968183029183830414831517156105f55761567d61568b9461567d6080976305f5e10061568596048a52615700815188615716565b815261570d835188615716565b83526156718551885b6305f5e10091612e8591612e4556fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca581b17bfc4d6578e300cafbf34fd2dc1fef0270d8c73f88a99dcde2859a6639b9490aee663998179ad13f9e1c1eb6189c71ad1a9ec87f33ad2766f98d9a268addf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5e919294758cbf0f3230715d1ebcec4030fcb02ebddaeb9e2e0ef4b4560d3015a2646970667358221220004618c9cb4084b4b5c113445f98c79d7e568213661465bfee3c6893f896690564736f6c6343000819003300000000000000000000000035cdf8569cbcbd6719ec861b0487c3c217082ddf000000000000000000000000000000000000000000000000000110d9316ec0000000000000000000000000002730b29acbbcd34a59b720338e8d06619fd71aca0000000000000000000000004c13392af76050fdc2f0601e9ac1dc3a0c823f87