653 txs
654 calls
constructor
constructor(address _keyTokenAddress, address _paymentTokenAddress, address _treasuryAddress)
functions
addressFees
viewfunction addressFees(address) view returns (uint256)
ADMIN_ROLE
viewfunction ADMIN_ROLE() view returns (bytes32)
balanceOf
viewfunction balanceOf(address _account, address _keyAddress) view returns (uint256)
burnableAddresses
viewfunction burnableAddresses(address) view returns (bool)
burnableFees
viewfunction burnableFees(address) view returns (uint256)
CREATOR_ROLE
viewfunction CREATOR_ROLE() view returns (bytes32)
creatorBurnFeePercent
viewfunction creatorBurnFeePercent() view returns (uint256)
creatorFeePercent
viewfunction creatorFeePercent() view returns (uint256)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
exists
viewfunction exists(address _keyAddress) view returns (bool)
FUNDS_ROLE
viewfunction FUNDS_ROLE() view returns (bytes32)
getBuyPrice
viewfunction getBuyPrice(uint256 id, uint256 amount) view returns (uint256)
getBuyPriceAfterFee
viewfunction getBuyPriceAfterFee(uint256 id, uint256 amount) view returns (uint256)
getCreatorBurnFee
viewfunction getCreatorBurnFee(address _keyAddress, uint256 _amount) view returns (uint256)
getCreatorFee
viewfunction getCreatorFee(uint256 _amount) view returns (uint256)
getFee
viewfunction getFee(uint256 _price) view returns (uint256)
getReferralFee
viewfunction getReferralFee(address _referralAddress, uint256 _amount) view returns (uint256)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getSellPrice
viewfunction getSellPrice(uint256 id, uint256 amount) view returns (uint256)
getSellPriceAfterFee
viewfunction getSellPriceAfterFee(uint256 id, uint256 amount) view returns (uint256)
getTreasuryBurnFee
viewfunction getTreasuryBurnFee(uint256 _amount) view returns (uint256)
getTreasuryFee
viewfunction getTreasuryFee(uint256 _amount) view returns (uint256)
getXPrice
viewfunction getXPrice(uint256 supply, uint256 amount) view returns (uint256)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
keyTokenAddress
viewfunction keyTokenAddress() view returns (address)
keyTokenDenominator
viewfunction keyTokenDenominator() view returns (uint256)
paused
viewfunction paused() view returns (bool)
PAUSER_ROLE
viewfunction PAUSER_ROLE() view returns (bytes32)
paymentTokenAddress
viewfunction paymentTokenAddress() view returns (address)
paymentTokenDecimals
viewfunction paymentTokenDecimals() view returns (uint8)
referralAddresses
viewfunction referralAddresses(address) view returns (address)
referralFeePercent
viewfunction referralFeePercent() view returns (uint256)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
totalFeePercent
viewfunction totalFeePercent() view returns (uint256)
totalSupply
viewfunction totalSupply(address _keyAddress) view returns (uint256)
treasuryAddress
viewfunction treasuryAddress() view returns (address)
treasuryBurnFeePercent
viewfunction treasuryBurnFeePercent() view returns (uint256)
treasuryFeePercent
viewfunction treasuryFeePercent() view returns (uint256)
treasuryFees
viewfunction treasuryFees() view returns (uint256)
buyKey
nonpayablefunction buyKey(address keyAddress, uint256 amount, uint256 maximumPrice)
claimBurnableFees
nonpayablefunction claimBurnableFees(address _address)
claimFees
nonpayablefunction claimFees()
claimTreasuryFees
nonpayablefunction claimTreasuryFees()
createKey
nonpayablefunction createKey(address referrerAddress)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
pause
nonpayablefunction pause()
renounceRole
nonpayablefunction renounceRole(bytes32 role, address account)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
sellKey
nonpayablefunction sellKey(address keyAddress, uint256 amount, uint256 minimumPrice)
setBurnableAddress
nonpayablefunction setBurnableAddress(address _address, bool _active)
setBurnPercent
nonpayablefunction setBurnPercent(uint256 _creatorBurnFeePercent, uint256 _treasuryBurnFeePercent)
setFeePercent
nonpayablefunction setFeePercent(uint256 _creatorFeePercent, uint256 _referrelFeePercent, uint256 _treasuryFeePercent)
setTreasuryAddress
nonpayablefunction setTreasuryAddress(address _address)
unpause
nonpayablefunction unpause()
events
BurnableAddressChanged
event BurnableAddressChanged(address creator, bool enabled)
BurnableFeesClaimed
event BurnableFeesClaimed(address sender, address creator, uint256 amount)
BurnFeeChanged
event BurnFeeChanged(uint256 creatorBurnFee, uint256 treasuryBurnFee)
Buy
event Buy(address indexed sender, address creator, uint256 amount, uint256 price, uint256 fee, address referrer, uint256 supply, uint256 balance)
Created
event Created(address indexed sender, address creator, address referrer)
FeeChanged
event FeeChanged(uint256 creatorFee, uint256 treasuryFee, uint256 referralFee)
FeesClaimed
event FeesClaimed(address sender, uint256 amount)
Paused
event Paused(address account)
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)
Sell
event Sell(address indexed sender, address creator, uint256 amount, uint256 price, uint256 fee, address referrer, uint256 supply, uint256 balance)
TreasuryChanged
event TreasuryChanged(address treasurer)
TreasuryFeesClaimed
event TreasuryFeesClaimed(address sender, address treasury, uint256 amount)
Unpaused
event Unpaused(address account)
errors
No errors.
creation bytecode
0x60e06040526103e86009556103e8600a55611388600b55611388600c55611388600d55611388600e553480156200003557600080fd5b50604051620034363803806200343683398101604081905262000058916200037c565b6000805460ff1916905560016002556001600160a01b038316620000c35760405162461bcd60e51b815260206004820152601960248201527f496e76616c6964204b657920546f6b656e20416464726573730000000000000060448201526064015b60405180910390fd5b6001600160a01b0382166200011b5760405162461bcd60e51b815260206004820152601d60248201527f496e76616c6964205061796d656e7420546f6b656e20416464726573730000006044820152606401620000ba565b6001600160a01b038116620001735760405162461bcd60e51b815260206004820152601860248201527f496e76616c6964205472656173757279204164647265737300000000000000006044820152606401620000ba565b62000180600033620002d6565b620001ac7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a33620002d6565b620001d87fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533620002d6565b620002047f7840a44bf6bbc1b45786ad46ece0694a9179b33e609d4ac4a51e6466e1f664c233620002d6565b620002307f828634d95e775031b9ff576b159a8509d3053581a8c9c4d7d86899e0afcd882f33620002d6565b6001600160a01b03808416608052821660a08190526040805163313ce56760e01b8152905163313ce567916004808201926020929091908290030181865afa15801562000281573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a79190620003c6565b60ff1660c052600780546001600160a01b0319166001600160a01b039290921691909117905550620003f29050565b60008281526001602090815260408083206001600160a01b038516845290915290205460ff166200035b5760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45b5050565b80516001600160a01b03811681146200037757600080fd5b919050565b6000806000606084860312156200039257600080fd5b6200039d846200035f565b9250620003ad602085016200035f565b9150620003bd604085016200035f565b90509250925092565b600060208284031215620003d957600080fd5b815160ff81168114620003eb57600080fd5b9392505050565b60805160a05160c051612fb26200048460003960008181610436015261246b01526000818161067201528181610b660152818161122b0152818161153b0152818161193f0152611a240152600081816103b501528181610bd801528181611097015281816112fd015281816114ca015281816117d701528181611af401528181611d220152611de30152612fb26000f3fe608060405234801561001057600080fd5b50600436106103625760003560e01c80639a67430f116101c8578063d294f09311610104578063f13e267d116100a2578063f6a3d24e1161007c578063f6a3d24e146107e9578063f7888aec146107fc578063fcee45f41461080f578063fe3281bb1461082257600080fd5b8063f13e267d146107bb578063f1af9d3f146107c3578063f67ed65d146107d657600080fd5b8063e63ab1e9116100de578063e63ab1e91461074f578063eaad63e914610776578063eaff45921461077f578063ec5c48691461079257600080fd5b8063d294f09314610721578063d547741f14610729578063e4dc2aa41461073c57600080fd5b8063c157253d11610171578063c8b0d5261161014b578063c8b0d526146106e0578063ca54f06d146106f3578063cd9c712114610706578063d1ba24e71461071957600080fd5b8063c157253d146106a7578063c164def5146106ba578063c5f956af146106cd57600080fd5b8063a636ca51116101a2578063a636ca511461065a578063afb18fe71461066d578063b5ab8e661461069457600080fd5b80639a67430f146106225780639b87ab6d1461062b578063a217fddf1461065257600080fd5b80634c53aedf116102a25780636fca3a6d116102405780638aeda25a1161021a5780638aeda25a1461059c5780638dc12991146105c357806391d14854146105d65780639477d85d1461060f57600080fd5b80636fca3a6d1461054d57806375b238fc1461056d5780638456cb591461059457600080fd5b80635c975abb1161027c5780635c975abb146104fc5780635e741e7a146105075780636605bfda146105275780636ac3f2541461053a57600080fd5b80634c53aedf146104e157806353613dd3146104ea5780635c75dcbc146104f357600080fd5b8063325cd7961161030f5780633f3dd8ab116102e95780633f3dd8ab146104905780633f4ba83a146104b357806345e11236146104bb57806349da1d2c146104ce57600080fd5b8063325cd7961461043157806336568abe1461046a5780633b0b6cd41461047d57600080fd5b806313c9440b1161034057806313c9440b146103ef578063248a9ca3146103f85780632f2ff15d1461041c57600080fd5b806301ffc9a714610367578063063a741f1461038f5780630c62b4d2146103b0575b600080fd5b61037a6103753660046129d7565b61082b565b60405190151581526020015b60405180910390f35b6103a261039d366004612a19565b6108c4565b604051908152602001610386565b6103d77f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610386565b6103a2600a5481565b6103a2610406366004612a3b565b6000908152600160208190526040909120015490565b61042f61042a366004612a70565b6108f3565b005b6104587f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff9091168152602001610386565b61042f610478366004612a70565b61091e565b6103a261048b366004612a9c565b6109af565b61037a61049e366004612ac6565b60056020526000908152604090205460ff1681565b61042f6109f9565b6103a26104c9366004612a3b565b610a2e565b61042f6104dc366004612ae1565b610a4b565b6103a2600e5481565b6103a2600b5481565b6103a2600c5481565b60005460ff1661037a565b6103a2610515366004612ac6565b60046020526000908152604090205481565b61042f610535366004612ac6565b610cd4565b61042f610548366004612b14565b610dc2565b6103a261055b366004612ac6565b60036020526000908152604090205481565b6103a27fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b61042f610f12565b6103a27f828634d95e775031b9ff576b159a8509d3053581a8c9c4d7d86899e0afcd882f81565b61042f6105d1366004612a19565b610f44565b61037a6105e4366004612a70565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6103a261061d366004612a19565b61105b565b6103a260085481565b6103a27f7840a44bf6bbc1b45786ad46ece0694a9179b33e609d4ac4a51e6466e1f664c281565b6103a2600081565b61042f610668366004612ac6565b61117b565b6103d77f000000000000000000000000000000000000000000000000000000000000000081565b6103a26106a2366004612a9c565b611298565b6103a26106b5366004612a19565b6112c1565b61042f6106c8366004612ae1565b61137c565b6007546103d7906001600160a01b031681565b61042f6106ee366004612b4e565b6115e7565b61042f610701366004612ac6565b61168b565b6103a2610714366004612a19565b611889565b61042f6118af565b61042f6119b1565b61042f610737366004612a70565b611a8f565b6103a261074a366004612ac6565b611ab5565b6103a27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6103a260095481565b6103a261078d366004612a3b565b611b67565b6103d76107a0366004612ac6565b6006602052600090815260409020546001600160a01b031681565b6103a2600a81565b6103a26107d1366004612a3b565b611b7a565b6103a26107e4366004612a19565b611b8d565b61037a6107f7366004612ac6565b611ce3565b6103a261080a366004612b85565b611d95565b6103a261081d366004612a3b565b611e4f565b6103a2600d5481565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806108be57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000806108d184846112c1565b905060006108de82611e4f565b90506108ea8183612bde565b95945050505050565b6000828152600160208190526040909120015461090f81611e62565b6109198383611e6c565b505050565b6001600160a01b03811633146109a15760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084015b60405180910390fd5b6109ab8282611f11565b5050565b6001600160a01b03821660009081526005602052604081205460ff166109d7575060006108be565b612710600d54836109e89190612bf1565b6109f29190612c37565b9392505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a2381611e62565b610a2b611fb2565b50565b6000612710600e5483610a419190612bf1565b6108be9190612c37565b610a53612022565b610a5b612077565b610a6483611ce3565b610ab05760405162461bcd60e51b815260206004820152601260248201527f4b657920446f6573204e6f7420457869737400000000000000000000000000006044820152606401610998565b6001600160a01b0383166000610ac682856112c1565b90506000610ad382611e4f565b90506000610ae18284612bde565b905084811115610b335760405162461bcd60e51b815260206004820152600d60248201527f496e76616c6964205072696365000000000000000000000000000000000000006044820152606401610998565b6001600160a01b0380881660009081526006602052604090205416610b598389836120ce565b610b8e6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163330856121f3565b6040517f731133e9000000000000000000000000000000000000000000000000000000008152336004820152602481018690526044810188905260806064820152600060848201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063731133e99060a401600060405180830381600087803b158015610c2457600080fd5b505af1158015610c38573d6000803e3d6000fd5b505050506000610c4789611ab5565b90506000610c55338b611d95565b604080516001600160a01b038d81168252602082018d905291810189905260608101889052908516608082015260a0810184905260c0810182905290915033907ff061bac16c96f8d4bc5ff33fc65ea72a89b8880ab5f5f48c7eb6d809a7d950969060e0015b60405180910390a2505050505050506109196001600255565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610cfe81611e62565b6001600160a01b038216610d545760405162461bcd60e51b815260206004820152600f60248201527f496e76616c6964204164647265737300000000000000000000000000000000006044820152606401610998565b600780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0384169081179091556040519081527fc714d22a2f08b695f81e7c707058db484aa5b4d6b4c9fd64beb10fe85832f608906020015b60405180910390a15050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610dec81611e62565b612710610df98386612bde565b14610e6c5760405162461bcd60e51b815260206004820152602160248201527f496e76616c69642043726561746f7220616e642054726561737572792046656560448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610998565b81831115610ebc5760405162461bcd60e51b815260206004820152601460248201527f496e76616c696420526566657272616c204665650000000000000000000000006044820152606401610998565b600b849055600a839055600c82905560408051858152602081018490529081018490527f91c52d7e3437bc917e155cb9a0148c1ec719a07f87330f08c8522cfb7f99bae69060600160405180910390a150505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610f3c81611e62565b610a2b6122c8565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610f6e81611e62565b612710831115610fc05760405162461bcd60e51b815260206004820152601860248201527f496e76616c69642043726561746f72204275726e2046656500000000000000006044820152606401610998565b6127108211156110125760405162461bcd60e51b815260206004820152601960248201527f496e76616c6964205472656173757279204275726e20466565000000000000006044820152606401610998565b600d839055600e82905560408051848152602081018490527f1ad180dc6c73a702f095378bdf3146c1e741d97fc1b6c4c128ecfa22506e402c91015b60405180910390a1505050565b6040517fbd85b0390000000000000000000000000000000000000000000000000000000081526004810183905260009081906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063bd85b03990602401602060405180830381865afa1580156110de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111029190612c4b565b9050600083821161111457600061111e565b61111e8483612c64565b9050600a8110156111715760405162461bcd60e51b815260206004820152600e60248201527f496e76616c696420416d6f756e740000000000000000000000000000000000006044820152606401610998565b6108ea8185611b8d565b7f7840a44bf6bbc1b45786ad46ece0694a9179b33e609d4ac4a51e6466e1f664c26111a581611e62565b6001600160a01b0382166000908152600360205260409020548061120b5760405162461bcd60e51b815260206004820152601160248201527f496e73756666696369656e7420466565730000000000000000000000000000006044820152606401610998565b6001600160a01b03808416600090815260036020526040812055611252907f0000000000000000000000000000000000000000000000000000000000000000163383612323565b604080513381526001600160a01b03851660208201529081018290527f53eefaab2890b7f8e34d1395dc7d7075a6c5323515c67e68f2aaedb03633cf3d9060600161104e565b60006001600160a01b0383166112b0575060006108be565b612710600a54836109e89190612bf1565b6040517fbd85b0390000000000000000000000000000000000000000000000000000000081526004810183905260009081906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063bd85b03990602401602060405180830381865afa158015611344573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113689190612c4b565b90506113748184611b8d565b949350505050565b611384612022565b61138c612077565b816113973385611d95565b10156113e55760405162461bcd60e51b815260206004820152601360248201527f496e73756666696369656e7420416d6f756e74000000000000000000000000006044820152606401610998565b6001600160a01b03831660006113fb828561105b565b9050600061140882611e4f565b905060006114168284612c64565b9050848110156114685760405162461bcd60e51b815260206004820152600d60248201527f496e76616c6964205072696365000000000000000000000000000000000000006044820152606401610998565b6001600160a01b038088166000908152600660205260409020541661148e8389836120ce565b6040517ff5298aca00000000000000000000000000000000000000000000000000000000815233600482015260248101869052604481018890527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f5298aca90606401600060405180830381600087803b15801561151657600080fd5b505af115801561152a573d6000803e3d6000fd5b506115649250506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690503384612323565b600061156f89611ab5565b9050600061157d338b611d95565b604080516001600160a01b038d81168252602082018d905291810189905260608101889052908516608082015260a0810184905260c0810182905290915033907f6615f7338640fc82ffeeb62a21ecb8972aa6d76eb184265a18401347a207ffce9060e001610cbb565b7f828634d95e775031b9ff576b159a8509d3053581a8c9c4d7d86899e0afcd882f61161181611e62565b6001600160a01b03831660008181526005602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168615159081179091558251938452908301527f6dae844c2e44d034093598af79b7d2f33b8d71ac37a251d4117491d6d8cea707910161104e565b611693612022565b61169b612077565b336001600160a01b038216036116f35760405162461bcd60e51b815260206004820152601060248201527f496e76616c6964205265666572726572000000000000000000000000000000006044820152606401610998565b6116fc33611ce3565b156117495760405162461bcd60e51b815260206004820152601260248201527f4b657920416c72656164792045786973747300000000000000000000000000006044820152606401610998565b33600081815260066020526040812080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038516179055906040517f731133e900000000000000000000000000000000000000000000000000000000815233600482015260248101829052600a604482015260806064820152600060848201529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063731133e99060a401600060405180830381600087803b15801561182357600080fd5b505af1158015611837573d6000803e3d6000fd5b505060408051338082526001600160a01b038716602083015293507f454b0172f64812df0cd504c2bd7df7aab8ff328a54d946b4bd0fa7c527adf9cc92500160405180910390a250610a2b6001600255565b600080611896848461105b565b905060006118a382611e4f565b90506108ea8183612c64565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756118d981611e62565b600854806119295760405162461bcd60e51b815260206004820152601160248201527f496e73756666696369656e7420466565730000000000000000000000000000006044820152606401610998565b6000600855600754611968906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116911683612323565b600754604080513381526001600160a01b03909216602083015281018290527f3168227b399ac3bb7a0b03aa680a05942422e10cdf0d5699160b188d53e553af90606001610db6565b3360009081526004602052604090205480611a0e5760405162461bcd60e51b815260206004820152601160248201527f496e73756666696369656e7420466565730000000000000000000000000000006044820152606401610998565b33600081815260046020526040812055611a53907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169083612323565b60408051338152602081018390527f9493e5bbe4e8e0ac67284469a2d677403d0378a85a59e341d3abc433d0d9a209910160405180910390a150565b60008281526001602081905260409091200154611aab81611e62565b6109198383611f11565b6000806001600160a01b0383166040517fbd85b039000000000000000000000000000000000000000000000000000000008152600481018290529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063bd85b03990602401602060405180830381865afa158015611b43573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f29190612c4b565b6000612710600c5483610a419190612bf1565b6000612710600b5483610a419190612bf1565b600080611b9b600a85612c37565b90506000600a611bab8587612bde565b611bb59190612c37565b90506000611bc483600161236c565b9050818303611bed57600a611bd98683612bf1565b611be39190612c37565b93505050506108be565b6000600a611bfb8189612c77565b611c0690600a612c64565b611c109190612c77565b90506000600a611c20888a612bde565b611c2a9190612c77565b90506000611c3985600161236c565b90506000611c88600a6001611c4e828e612bde565b611c589190612c64565b611c629190612c37565b600a85611c6f888e612c64565b611c799190612c64565b611c839190612c37565b61236c565b90506000600a611c988688612bf1565b611ca29190612c37565b90506000600a611cb28686612bf1565b611cbc9190612c37565b905080611cc98385612bde565b611cd39190612bde565b9c9b505050505050505050505050565b6000806001600160a01b0383166040517f4f558e79000000000000000000000000000000000000000000000000000000008152600481018290529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690634f558e7990602401602060405180830381865afa158015611d71573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f29190612c8b565b6000806001600160a01b0383166040517efdd58e0000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018390529192507f00000000000000000000000000000000000000000000000000000000000000009091169062fdd58e90604401602060405180830381865afa158015611e2b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113749190612c4b565b600061271060095483610a419190612bf1565b610a2b81336124bf565b60008281526001602090815260408083206001600160a01b038516845290915290205460ff166109ab5760008281526001602081815260408084206001600160a01b038616808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b60008281526001602090815260408083206001600160a01b038516845290915290205460ff16156109ab5760008281526001602090815260408083206001600160a01b038516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b611fba612552565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60005460ff16156120755760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610998565b565b60028054036120c85760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610998565b60028055565b60006120da8285611298565b905060006120e785611b7a565b905060006120f585836109af565b905060008361210388611b67565b61210d9190612c64565b9050600061211a82610a2e565b9050816008600082825461212e9190612bde565b90915550506001600160a01b0387166000908152600460205260408120805486929061215b908490612bde565b90915550506001600160a01b03861660009081526004602052604081208054879290612188908490612bde565b90915550506001600160a01b038716600090815260036020526040812080548592906121b5908490612bde565b90915550506007546001600160a01b0316600090815260036020526040812080548392906121e4908490612bde565b90915550505050505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526122c29085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526125a4565b50505050565b6122d0612022565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586120053390565b6040516001600160a01b0383166024820152604481018290526109199084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401612240565b60008083156123c7576006612382600186612c64565b61238d906002612bf1565b612398906001612bde565b856123a4600182612c64565b6123ae9190612bf1565b6123b89190612bf1565b6123c29190612c37565b6123ca565b60005b90506000841580156123dc5750836001145b61245157600660016123ee8688612bde565b6123f89190612c64565b612403906002612bf1565b61240e906001612bde565b6124188688612bde565b6001612424888a612bde565b61242e9190612c64565b6124389190612bf1565b6124429190612bf1565b61244c9190612c37565b612454565b60005b905060006124628383612c64565b905060006124917f0000000000000000000000000000000000000000000000000000000000000000600a612dc8565b9050607d61249f8284612bf1565b6124aa90600a612bf1565b6124b49190612c37565b979650505050505050565b60008281526001602090815260408083206001600160a01b038516845290915290205460ff166109ab576124f281612689565b6124fd83602061269b565b60405160200161250e929190612dfb565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262461bcd60e51b825261099891600401612e7c565b60005460ff166120755760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610998565b60006125f9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166128c49092919063ffffffff16565b80519091501561091957808060200190518101906126179190612c8b565b6109195760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610998565b60606108be6001600160a01b03831660145b606060006126aa836002612bf1565b6126b5906002612bde565b67ffffffffffffffff8111156126cd576126cd612ecd565b6040519080825280601f01601f1916602001820160405280156126f7576020820181803683370190505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061272e5761272e612efc565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061279157612791612efc565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006127cd846002612bf1565b6127d8906001612bde565b90505b6001811115612875577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061281957612819612efc565b1a60f81b82828151811061282f5761282f612efc565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c9361286e81612f2b565b90506127db565b5083156109f25760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610998565b6060611374848460008585600080866001600160a01b031685876040516128eb9190612f60565b60006040518083038185875af1925050503d8060008114612928576040519150601f19603f3d011682016040523d82523d6000602084013e61292d565b606091505b50915091506124b487838387606083156129a85782516000036129a1576001600160a01b0385163b6129a15760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610998565b5081611374565b61137483838151156129bd5781518083602001fd5b8060405162461bcd60e51b81526004016109989190612e7c565b6000602082840312156129e957600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146109f257600080fd5b60008060408385031215612a2c57600080fd5b50508035926020909101359150565b600060208284031215612a4d57600080fd5b5035919050565b80356001600160a01b0381168114612a6b57600080fd5b919050565b60008060408385031215612a8357600080fd5b82359150612a9360208401612a54565b90509250929050565b60008060408385031215612aaf57600080fd5b612ab883612a54565b946020939093013593505050565b600060208284031215612ad857600080fd5b6109f282612a54565b600080600060608486031215612af657600080fd5b612aff84612a54565b95602085013595506040909401359392505050565b600080600060608486031215612b2957600080fd5b505081359360208301359350604090920135919050565b8015158114610a2b57600080fd5b60008060408385031215612b6157600080fd5b612b6a83612a54565b91506020830135612b7a81612b40565b809150509250929050565b60008060408385031215612b9857600080fd5b612ba183612a54565b9150612a9360208401612a54565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156108be576108be612baf565b80820281158282048414176108be576108be612baf565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082612c4657612c46612c08565b500490565b600060208284031215612c5d57600080fd5b5051919050565b818103818111156108be576108be612baf565b600082612c8657612c86612c08565b500690565b600060208284031215612c9d57600080fd5b81516109f281612b40565b600181815b80851115612d0157817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115612ce757612ce7612baf565b80851615612cf457918102915b93841c9390800290612cad565b509250929050565b600082612d18575060016108be565b81612d25575060006108be565b8160018114612d3b5760028114612d4557612d61565b60019150506108be565b60ff841115612d5657612d56612baf565b50506001821b6108be565b5060208310610133831016604e8410600b8410161715612d84575081810a6108be565b612d8e8383612ca8565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115612dc057612dc0612baf565b029392505050565b60006109f260ff841683612d09565b60005b83811015612df2578181015183820152602001612dda565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612e33816017850160208801612dd7565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351612e70816028840160208801612dd7565b01602801949350505050565b6020815260008251806020840152612e9b816040850160208701612dd7565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081612f3a57612f3a612baf565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60008251612f72818460208701612dd7565b919091019291505056fea26469706673582212201d579be5864a4e3face84145701a4669d383459a03f5b263b791879eb0b3b48064736f6c634300081300330000000000000000000000006f64255526ba4c7fd40fa169c626b5bc673b95f7000000000000000000000000a026ad2ceda16ca5fc28fd3c72f99e2c332c8a26000000000000000000000000b25bd261805e8f56fe1bfd8d5e95ff86d0a847e4