Contract 0x464a1c3a3e7079759e564a33191843fe2f1433a2 11
Contract Overview
My Name Tag:
Not Available
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Contract Name:
StakingV1
Compiler Version
v0.8.4+commit.c7e474f2
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.4; import "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol"; import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; import "@openzeppelin/contracts/security/Pausable.sol"; interface IRealm { function ownerOf(uint256 _realmId) external view returns (address owner); function isApprovedForAll(address owner, address operator) external returns (bool); function safeTransferFrom( address from, address to, uint256 tokenId ) external; } interface IData { function addGoldSupply(uint256 _realmId, uint256 _gold) external; function data(uint256 _realmId, uint256 _type) external returns (uint256); function gold(uint256 _realmId) external returns (uint256); function add( uint256 _realmId, uint256 _type, uint256 _amount ) external; function remove( uint256 _realmId, uint256 _type, uint256 _amount ) external; } interface IStructure { function add( uint256 _realmId, uint256 _type, uint256 _amount ) external; function data(uint256 _realmId, uint256 _type) external returns (uint256); } interface IResource { function add( uint256 _realmId, uint256 _resourceId, uint256 _amount ) external; } interface IManager { function isAdmin(address addr) external view returns (bool); } interface IRand { function retrieve(uint256 salt) external view returns (uint256); } contract StakingV1 is IERC721Receiver, ReentrancyGuard, Pausable { //======================================= // Immutables //======================================= IRealm public immutable REALM; IData public immutable DATA; IStructure public immutable STRUCTURE; IResource public immutable RESOURCE; IManager public immutable MANAGER; //======================================= // Constants //======================================= uint256 public constant TIER_1 = 7; uint256 public constant TIER_2 = 3; uint256 public constant MAX_COLLECT = 5; //======================================= // Structs //======================================= struct Staker { address staker; uint256 resourceId; uint256 stakedAt; } //======================================= // Mappings //======================================= mapping(uint256 => Staker) public stakers; mapping(uint256 => uint256) public collected; //======================================= // Arrays //======================================= uint256[] public bonusProbability = [40, 85, 95, 100]; uint256[] public resourceProbability = [ 40, 52, 62, 72, 77, 82, 87, 91, 94, 97, 100 ]; uint256[] public cultureIds = [0, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]; uint256[] public techIds = [0, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27]; uint256[] public foodIds = [0, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37]; //======================================= // Randomizer //======================================= IRand public randomizer; //======================================= // EVENTS //======================================= event Staked(uint256 realmId, uint256 resourceId); event Unstaked(uint256 realmId); event Build(uint256 realmId); event Collected(uint256 realmId); event CollectedWithResourceId(uint256 realmId, uint256 resourceId); event DataAdded( uint256 realmId, uint256 resourceId, uint256 resource, uint256 structure, uint256 tier, uint256 bonus, uint256 multipler, uint256 amount ); event ResourceChanged(uint256 realmId, uint256 resourceId); //======================================= // MODIFIER //======================================= modifier onlyStaker(uint256 _realmId) { // Check that sender is staker _onlyStaker(_realmId); _; } modifier onlyAdmin() { // Check if admin require(MANAGER.isAdmin(msg.sender), "Manager: Not an Admin"); _; } //======================================= // Constructor //======================================= constructor( address _realm, address _data, address _structure, address _resource, address _manager, address _rand ) { REALM = IRealm(_realm); DATA = IData(_data); STRUCTURE = IStructure(_structure); RESOURCE = IResource(_resource); MANAGER = IManager(_manager); randomizer = IRand(_rand); } //======================================= // External //======================================= function stake(uint256 _realmId, uint256 _resourceId) external nonReentrant whenNotPaused { // Create staker Staker storage staker = stakers[_realmId]; staker.staker = msg.sender; staker.resourceId = _resourceId; staker.stakedAt = block.timestamp; // Add staker to staked mapping stakers[_realmId] = staker; // Initialize collected collected[_realmId] = block.timestamp; // Transfer Realm to contract REALM.safeTransferFrom(msg.sender, address(this), _realmId); emit Staked(_realmId, _resourceId); } function unstake(uint256 _realmId) external nonReentrant onlyStaker(_realmId) { Staker storage staker = stakers[_realmId]; // Reset staker staker.staker = address(0); staker.resourceId = 0; staker.stakedAt = 0; // Transfer Realm back to owner REALM.safeTransferFrom(address(this), msg.sender, _realmId); emit Unstaked(_realmId); } function unstakeAndBuild(uint256 _realmId) external nonReentrant whenNotPaused onlyStaker(_realmId) { Staker storage staker = stakers[_realmId]; // Get days elapsed since last collection uint256 collectedDaysElapsed = _collectedDaysElapsed(_realmId); // Check if days elapsed are greater than 0 if (collectedDaysElapsed > 0) { // Collect _collectData(_realmId, collectedDaysElapsed, staker); } // Build _build(_realmId); // Reset staker staker.staker = address(0); staker.resourceId = 0; staker.stakedAt = 0; // Transfer Realm back to owner REALM.safeTransferFrom(address(this), msg.sender, _realmId); emit Unstaked(_realmId); } function collect(uint256 _realmId) external nonReentrant whenNotPaused onlyStaker(_realmId) { // Collect _collect(_realmId); emit Collected(_realmId); } function collect(uint256 _realmId, uint256 _resourceId) external nonReentrant whenNotPaused onlyStaker(_realmId) { // Collect _collect(_realmId); // Update staker resourceId stakers[_realmId].resourceId = _resourceId; emit CollectedWithResourceId(_realmId, _resourceId); } function changeResource(uint256 _realmId, uint256 _resourceId) external nonReentrant whenNotPaused onlyStaker(_realmId) { // Update collected timestamp collected[_realmId] = block.timestamp; // Update resourceId on staker stakers[_realmId].resourceId = _resourceId; emit ResourceChanged(_realmId, _resourceId); } //======================================= // Admin //======================================= function pause() external onlyAdmin { _pause(); } function unpause() external onlyAdmin { _unpause(); } function setRandomizer(address _addr) external onlyAdmin { randomizer = IRand(_addr); } //======================================= // ERC721 //======================================= function onERC721Received( address, // _operator, address, //_from, uint256, // _tokenId, bytes calldata //_data ) external pure override returns (bytes4) { return IERC721Receiver.onERC721Received.selector; } //======================================= // Internal //======================================= function _collect(uint256 _realmId) internal { Staker memory staker = stakers[_realmId]; // Get days elapsed since last collection uint256 collectedDaysElapsed = _collectedDaysElapsed(_realmId); // Check that days elapsed is greater than 0 require(collectedDaysElapsed > 0, "Staking: Nothing to collect"); // collect _collectData(_realmId, collectedDaysElapsed, staker); // Update collected timestamp collected[_realmId] = block.timestamp; } function _collectData( uint256 _realmId, uint256 _daysMultiplier, Staker memory staker ) internal { // Check that days multiplier doesn't exceed max collect if (_daysMultiplier > 5) { _daysMultiplier = MAX_COLLECT; } // Get stake multipliers (uint256 tier1, uint256 tier2) = _builtMultipliers(_realmId); // Get random amount uint256 amount = _rarity(staker.stakedAt, bonusProbability) + 1; if (staker.resourceId == 0) { // Add gold _addData( _realmId, 0, DATA.gold(_realmId), STRUCTURE.data(_realmId, 0), amount, tier1, _daysMultiplier ); } else if (staker.resourceId == 1) { // Add food _addData( _realmId, 1, 0, STRUCTURE.data(_realmId, 1), amount, tier2, _daysMultiplier ); } else if (staker.resourceId == 3) { // Add Culture _addData( _realmId, 3, 0, STRUCTURE.data(_realmId, 2), amount, tier2, _daysMultiplier ); } else if (staker.resourceId == 5) { // Add Technology _addData( _realmId, 5, 0, STRUCTURE.data(_realmId, 3), amount, tier2, _daysMultiplier ); } } function _addData( uint256 _realmId, uint256 _resourceId, uint256 _resource, uint256 _structure, uint256 _amount, uint256 _tier, uint256 _multiplier ) internal { // Check that there is something to add if (_tier == 0 && _structure == 0) return; // Calculate resource amount uint256 amount = (_resource + _structure + _tier + _amount) * _multiplier; // Add data DATA.add(_realmId, _resourceId, amount); // Add collectibles _addCollectibles(_realmId, _resourceId); emit DataAdded( _realmId, _resourceId, _resource, _structure, _tier, _amount, _multiplier, amount ); } function _addCollectibles(uint256 _realmId, uint256 _resourceId) internal { // If resource is Gold then return if (_resourceId == 0) return; uint256 id; if (_resourceId == 1) { id = foodIds[_rarity(_resourceId, resourceProbability)]; } else if (_resourceId == 3) { id = cultureIds[_rarity(_resourceId, resourceProbability)]; } else if (_resourceId == 5) { id = techIds[_rarity(_resourceId, resourceProbability)]; } // Resturn if resource ID is 0 if (id == 0) return; // Add resources RESOURCE.add(_realmId, id, 1); } function _build(uint256 _realmId) internal { // Get built multipliers for both tiers (uint256 tier1, uint256 tier2) = _builtMultipliers(_realmId); // City STRUCTURE.add(_realmId, 0, tier1); // Farm STRUCTURE.add(_realmId, 1, tier2); // Aquarium STRUCTURE.add(_realmId, 2, tier2); // Research Lab STRUCTURE.add(_realmId, 3, tier2); // Add to Gold supply DATA.addGoldSupply(_realmId, tier1); emit Build(_realmId); } function _builtMultipliers(uint256 _realmId) internal view returns (uint256, uint256) { uint256 multiplier = _stakedDaysElapsed(_realmId); return (multiplier / TIER_1, multiplier / TIER_2); } function _collectedDaysElapsed(uint256 _realmId) internal view returns (uint256) { return _daysElapsed(collected[_realmId]); } function _stakedDaysElapsed(uint256 _realmId) internal view returns (uint256) { return _daysElapsed(stakers[_realmId].stakedAt); } function _daysElapsed(uint256 _time) internal view returns (uint256) { if (block.timestamp <= _time) { return 0; } return (block.timestamp - _time) / (24 * 60 * 60); } function _rarity(uint256 _salt, uint256[] memory probability) internal view returns (uint256) { uint256 rand = uint256( keccak256( abi.encodePacked( block.number, block.timestamp, randomizer.retrieve(_salt) ) ) ) % 100; uint256 j = 0; for (; j < probability.length; j++) { if (rand <= probability[j]) { break; } } return j; } function _onlyStaker(uint256 _realmId) internal view { require( stakers[_realmId].staker == msg.sender, "Staking: You did not stake this realm" ); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (security/Pausable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } }, "libraries": {} }
[{"inputs":[{"internalType":"address","name":"_realm","type":"address"},{"internalType":"address","name":"_data","type":"address"},{"internalType":"address","name":"_structure","type":"address"},{"internalType":"address","name":"_resource","type":"address"},{"internalType":"address","name":"_manager","type":"address"},{"internalType":"address","name":"_rand","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"realmId","type":"uint256"}],"name":"Build","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"realmId","type":"uint256"}],"name":"Collected","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"realmId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"resourceId","type":"uint256"}],"name":"CollectedWithResourceId","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"realmId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"resourceId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"resource","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"structure","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tier","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bonus","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"multipler","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"DataAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"realmId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"resourceId","type":"uint256"}],"name":"ResourceChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"realmId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"resourceId","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"realmId","type":"uint256"}],"name":"Unstaked","type":"event"},{"inputs":[],"name":"DATA","outputs":[{"internalType":"contract IData","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MANAGER","outputs":[{"internalType":"contract IManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_COLLECT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REALM","outputs":[{"internalType":"contract IRealm","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESOURCE","outputs":[{"internalType":"contract IResource","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STRUCTURE","outputs":[{"internalType":"contract IStructure","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TIER_1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TIER_2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"bonusProbability","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_realmId","type":"uint256"},{"internalType":"uint256","name":"_resourceId","type":"uint256"}],"name":"changeResource","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_realmId","type":"uint256"}],"name":"collect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_realmId","type":"uint256"},{"internalType":"uint256","name":"_resourceId","type":"uint256"}],"name":"collect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"collected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"cultureIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"foodIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"randomizer","outputs":[{"internalType":"contract IRand","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"resourceProbability","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setRandomizer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_realmId","type":"uint256"},{"internalType":"uint256","name":"_resourceId","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakers","outputs":[{"internalType":"address","name":"staker","type":"address"},{"internalType":"uint256","name":"resourceId","type":"uint256"},{"internalType":"uint256","name":"stakedAt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"techIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_realmId","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_realmId","type":"uint256"}],"name":"unstakeAndBuild","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6101a06040526028610120908152605561014052605f610160526064610180526200002e906004908162000278565b5060408051610160810182526028815260346020820152603e9181019190915260486060820152604d6080820152605260a0820152605760c0820152605b60e0820152605e610100820152606161012082015260646101408201526200009990600590600b62000278565b5060408051610160810182526000815260086020820152600991810191909152600a6060820152600b60808201819052600c60a0830152600d60c0830152600e60e0830152600f61010083015260106101208301526011610140830152620001049160069162000278565b50604080516101608101825260008152601260208201526013918101919091526014606082015260156080820152601660a0820152601760c0820152601860e08201526019610100820152601a610120820152601b6101408201526200016f90600790600b62000278565b50604080516101608101825260008152601c602080830191909152601d92820192909252601e6060820152601f608082015260a0810191909152602160c0820152602260e0820152602361010082015260246101208201526025610140820152620001df90600890600b62000278565b50348015620001ed57600080fd5b506040516200220938038062002209833981016040819052620002109162000301565b60016000819055805460ff19169055606095861b6001600160601b031990811660805294861b851660a05292851b841660c05290841b831660e05290921b1661010052600980546001600160a01b0319166001600160a01b0390921691909117905562000381565b828054828255906000526020600020908101928215620002bb579160200282015b82811115620002bb578251829060ff1690559160200191906001019062000299565b50620002c9929150620002cd565b5090565b5b80821115620002c95760008155600101620002ce565b80516001600160a01b0381168114620002fc57600080fd5b919050565b60008060008060008060c087890312156200031a578182fd5b6200032587620002e4565b95506200033560208801620002e4565b94506200034560408801620002e4565b93506200035560608801620002e4565b92506200036560808801620002e4565b91506200037560a08801620002e4565b90509295509295509295565b60805160601c60a05160601c60c05160601c60e05160601c6101005160601c611db66200045360003960008181610250015281816105f0015281816108f50152610b260152600081816102a60152611a8f01526000818161027701528181610fc20152818161109101528181611154015281816111c10152818161122d015281816112b30152818161133b01526113c30152600081816101d901528181610f070152818161144401526117d80152600081816103590152818161053c015281816107960152610a6e0152611db66000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c806377e840ed116100f9578063b028d9bd11610097578063cfa6f82711610071578063cfa6f827146103f2578063de85b0d214610405578063f10fb58414610418578063fd5e6dd11461042b57600080fd5b8063b028d9bd146103b9578063ca84ebf6146103cc578063ce3f865f146103df57600080fd5b80637b3449c6116100d35780637b3449c61461038e57806382039945146103a15780638456cb59146103a95780639dd58485146103b157600080fd5b806377e840ed1461033457806379604a17146103545780637b0472f01461037b57600080fd5b80632b3ed84e116101665780634e61b382116101405780634e61b382146102e5578063547fce7c146102f85780635c975abb1461030b578063767bcab51461032157600080fd5b80632b3ed84e146102a15780632e17de78146102c85780633f4ba83a146102dd57600080fd5b8063073d3f69146101ae5780630c0fd886146101d4578063150b7a02146102135780631b2df8501461024b5780631b62a26b146102725780631d2a056114610299575b600080fd5b6101c16101bc366004611be2565b61048a565b6040519081526020015b60405180910390f35b6101fb7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101cb565b610232610221366004611b2c565b630a85bd0160e11b95945050505050565b6040516001600160e01b031990911681526020016101cb565b6101fb7f000000000000000000000000000000000000000000000000000000000000000081565b6101fb7f000000000000000000000000000000000000000000000000000000000000000081565b6101c1600381565b6101fb7f000000000000000000000000000000000000000000000000000000000000000081565b6102db6102d6366004611be2565b6104ab565b005b6102db6105db565b6102db6102f3366004611be2565b610698565b6102db610306366004611c12565b610836565b60015460ff1660405190151581526020016101cb565b6102db61032f366004611b0b565b6108e0565b6101c1610342366004611be2565b60036020526000908152604090205481565b6101fb7f000000000000000000000000000000000000000000000000000000000000000081565b6102db610389366004611c12565b6109b5565b6101c161039c366004611be2565b610b01565b6101c1600581565b6102db610b11565b6101c1600781565b6101c16103c7366004611be2565b610bcc565b6101c16103da366004611be2565b610bdc565b6102db6103ed366004611be2565b610bec565b6102db610400366004611c12565b610c86565b6101c1610413366004611be2565b610d2f565b6009546101fb906001600160a01b031681565b610465610439366004611be2565b60026020819052600091825260409091208054600182015491909201546001600160a01b039092169183565b604080516001600160a01b0390941684526020840192909252908201526060016101cb565b6004818154811061049a57600080fd5b600091825260209091200154905081565b600260005414156104d75760405162461bcd60e51b81526004016104ce90611c5d565b60405180910390fd5b6002600055806104e681610d3f565b600082815260026020819052604080832080546001600160a01b031916815560018101849055918201929092559051632142170760e11b8152306004820152336024820152604481018490526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906342842e0e90606401600060405180830381600087803b15801561058057600080fd5b505af1158015610594573d6000803e3d6000fd5b505050507f11725367022c3ff288940f4b5473aa61c2da6a24af7363a1128ee2401e8983b2836040516105c991815260200190565b60405180910390a15050600160005550565b604051630935e01b60e21b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906324d7806c9060240160206040518083038186803b15801561063a57600080fd5b505afa15801561064e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106729190611bc2565b61068e5760405162461bcd60e51b81526004016104ce90611c94565b610696610db6565b565b600260005414156106bb5760405162461bcd60e51b81526004016104ce90611c5d565b600260005560015460ff16156106e35760405162461bcd60e51b81526004016104ce90611c33565b806106ed81610d3f565b60008281526002602052604081209061070584610e49565b90508015610747576040805160608101825283546001600160a01b03168152600184015460208201526002840154918101919091526107479085908390610e67565b610750846111f8565b81546001600160a01b03191682556000600183018190556002830155604051632142170760e11b8152306004820152336024820152604481018590526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906342842e0e90606401600060405180830381600087803b1580156107da57600080fd5b505af11580156107ee573d6000803e3d6000fd5b505050507f11725367022c3ff288940f4b5473aa61c2da6a24af7363a1128ee2401e8983b28460405161082391815260200190565b60405180910390a1505060016000555050565b600260005414156108595760405162461bcd60e51b81526004016104ce90611c5d565b600260005560015460ff16156108815760405162461bcd60e51b81526004016104ce90611c33565b8161088b81610d3f565b6000838152600360209081526040808320429055600282529182902060010184905581518581529081018490527f8227d266a95a66123134db77083bdd41dc137c89c4af2d8e3807fbd01a7d814a91016105c9565b604051630935e01b60e21b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906324d7806c9060240160206040518083038186803b15801561093f57600080fd5b505afa158015610953573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109779190611bc2565b6109935760405162461bcd60e51b81526004016104ce90611c94565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b600260005414156109d85760405162461bcd60e51b81526004016104ce90611c5d565b600260005560015460ff1615610a005760405162461bcd60e51b81526004016104ce90611c33565b6000828152600260208181526040808420805460018201879055429482018590556001600160a01b0319908116339182161781178255600390935293819020929092559051632142170760e11b81526004810191909152306024820152604481018490526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906342842e0e90606401600060405180830381600087803b158015610ab257600080fd5b505af1158015610ac6573d6000803e3d6000fd5b505060408051868152602081018690527f925435fa7e37e5d9555bb18ce0d62bb9627d0846942e58e5291e9a2dded462ed93500190506105c9565b6007818154811061049a57600080fd5b604051630935e01b60e21b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906324d7806c9060240160206040518083038186803b158015610b7057600080fd5b505afa158015610b84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba89190611bc2565b610bc45760405162461bcd60e51b81526004016104ce90611c94565b6106966114e8565b6005818154811061049a57600080fd5b6006818154811061049a57600080fd5b60026000541415610c0f5760405162461bcd60e51b81526004016104ce90611c5d565b600260005560015460ff1615610c375760405162461bcd60e51b81526004016104ce90611c33565b80610c4181610d3f565b610c4a8261153e565b6040518281527f278111f058fcc15883749957935fb9630ea32a108dd40081364d762353441ccb9060200160405180910390a150506001600055565b60026000541415610ca95760405162461bcd60e51b81526004016104ce90611c5d565b600260005560015460ff1615610cd15760405162461bcd60e51b81526004016104ce90611c33565b81610cdb81610d3f565b610ce48361153e565b60008381526002602090815260409182902060010184905581518581529081018490527fb32ca7c02df8baee6d206c5ee948ff09143d5c6f1615eb6423d3d5d0ba6fceee91016105c9565b6008818154811061049a57600080fd5b6000818152600260205260409020546001600160a01b03163314610db35760405162461bcd60e51b815260206004820152602560248201527f5374616b696e673a20596f7520646964206e6f74207374616b652074686973206044820152647265616c6d60d81b60648201526084016104ce565b50565b60015460ff16610dff5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016104ce565b6001805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600081815260036020526040812054610e61906115f7565b92915050565b6005821115610e7557600591505b600080610e8185611620565b915091506000610ee584604001516004805480602002602001604051908101604052809291908181526020018280548015610edb57602002820191906000526020600020905b815481526020019060010190808311610ec7575b5050505050611650565b610ef0906001611cc3565b90508360200151600014156110535761104e8660007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166320c69e568a6040518263ffffffff1660e01b8152600401610f5391815260200190565b602060405180830381600087803b158015610f6d57600080fd5b505af1158015610f81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa59190611bfa565b6040516328b9de8f60e11b8152600481018b9052600060248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635173bd1e90604401602060405180830381600087803b15801561100e57600080fd5b505af1158015611022573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110469190611bfa565b85888b61176e565b6111f0565b836020015160011415611116576040516328b9de8f60e11b81526004810187905260016024820181905261104e918891906000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635173bd1e906044015b602060405180830381600087803b1580156110d657600080fd5b505af11580156110ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110e9190611bfa565b85878b61176e565b836020015160031415611183576040516328b9de8f60e11b8152600481018790526002602482015261104e9087906003906000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635173bd1e906044016110bc565b8360200151600514156111f0576040516328b9de8f60e11b815260048101879052600360248201526111f09087906005906000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635173bd1e906044016110bc565b505050505050565b60008061120483611620565b604051631417ed1b60e21b815260048101869052600060248201526044810183905291935091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063505fb46c90606401600060405180830381600087803b15801561127957600080fd5b505af115801561128d573d6000803e3d6000fd5b5050604051631417ed1b60e21b81526004810186905260016024820152604481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316925063505fb46c9150606401600060405180830381600087803b15801561130157600080fd5b505af1158015611315573d6000803e3d6000fd5b5050604051631417ed1b60e21b81526004810186905260026024820152604481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316925063505fb46c9150606401600060405180830381600087803b15801561138957600080fd5b505af115801561139d573d6000803e3d6000fd5b5050604051631417ed1b60e21b81526004810186905260036024820152604481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316925063505fb46c9150606401600060405180830381600087803b15801561141157600080fd5b505af1158015611425573d6000803e3d6000fd5b50506040516370f053c960e01b815260048101869052602481018590527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031692506370f053c99150604401600060405180830381600087803b15801561149257600080fd5b505af11580156114a6573d6000803e3d6000fd5b505050507f898976461822d775c98e0f8f205c19b8a52e69e8140f7238d6e671b0d62a9798836040516114db91815260200190565b60405180910390a1505050565b60015460ff161561150b5760405162461bcd60e51b81526004016104ce90611c33565b6001805460ff1916811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e2c565b6000818152600260208181526040808420815160608101835281546001600160a01b0316815260018201549381019390935290920154918101919091529061158583610e49565b9050600081116115d75760405162461bcd60e51b815260206004820152601b60248201527f5374616b696e673a204e6f7468696e6720746f20636f6c6c656374000000000060448201526064016104ce565b6115e2838284610e67565b50506000908152600360205260409020429055565b600081421161160857506000919050565b620151806116168342611d0e565b610e619190611cdb565b600080600061162e846118b6565b905061163b600782611cdb565b611646600383611cdb565b9250925050915091565b600954604051638f88708b60e01b8152600481018490526000918291606491439142916001600160a01b031690638f88708b9060240160206040518083038186803b15801561169e57600080fd5b505afa1580156116b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d69190611bfa565b60408051602081019490945283019190915260608201526080016040516020818303038152906040528051906020012060001c6117139190611d40565b905060005b83518110156117665783818151811061174157634e487b7160e01b600052603260045260246000fd5b6020026020010151821161175457611766565b8061175e81611d25565b915050611718565b949350505050565b8115801561177a575083155b15611784576118ad565b6000818484611793888a611cc3565b61179d9190611cc3565b6117a79190611cc3565b6117b19190611cef565b604051631417ed1b60e21b8152600481018a905260248101899052604481018290529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063505fb46c90606401600060405180830381600087803b15801561182457600080fd5b505af1158015611838573d6000803e3d6000fd5b5050505061184688886118d1565b6040805189815260208101899052908101879052606081018690526080810184905260a0810185905260c0810183905260e081018290527f160c24405fa1a87e80632ea854c17b689e341ad9fc279fbd2429c7b73a3959b5906101000160405180910390a1505b50505050505050565b600081815260026020819052604082200154610e61906115f7565b806118da575050565b6000816001141561196f57600861193f836005805480602002602001604051908101604052809291908181526020018280548015610edb5760200282019190600052602060002090815481526020019060010190808311610ec7575050505050611650565b8154811061195d57634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050611a61565b81600314156119d257600661193f836005805480602002602001604051908101604052809291908181526020018280548015610edb5760200282019190600052602060002090815481526020019060010190808311610ec7575050505050611650565b8160051415611a61576007611a35836005805480602002602001604051908101604052809291908181526020018280548015610edb5760200282019190600052602060002090815481526020019060010190808311610ec7575050505050611650565b81548110611a5357634e487b7160e01b600052603260045260246000fd5b906000526020600020015490505b80611a6b57505050565b604051631417ed1b60e21b81526004810184905260248101829052600160448201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063505fb46c90606401600060405180830381600087803b158015611adb57600080fd5b505af11580156118ad573d6000803e3d6000fd5b80356001600160a01b0381168114611b0657600080fd5b919050565b600060208284031215611b1c578081fd5b611b2582611aef565b9392505050565b600080600080600060808688031215611b43578081fd5b611b4c86611aef565b9450611b5a60208701611aef565b935060408601359250606086013567ffffffffffffffff80821115611b7d578283fd5b818801915088601f830112611b90578283fd5b813581811115611b9e578384fd5b896020828501011115611baf578384fd5b9699959850939650602001949392505050565b600060208284031215611bd3578081fd5b81518015158114611b25578182fd5b600060208284031215611bf3578081fd5b5035919050565b600060208284031215611c0b578081fd5b5051919050565b60008060408385031215611c24578182fd5b50508035926020909101359150565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526015908201527426b0b730b3b2b91d102737ba1030b71020b236b4b760591b604082015260600190565b60008219821115611cd657611cd6611d54565b500190565b600082611cea57611cea611d6a565b500490565b6000816000190483118215151615611d0957611d09611d54565b500290565b600082821015611d2057611d20611d54565b500390565b6000600019821415611d3957611d39611d54565b5060010190565b600082611d4f57611d4f611d6a565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fdfea2646970667358221220d96958bfc0e88fe1f9d8481a0fc7ee08ce8c5a3071dea2747c195a8ecebf1a6964736f6c634300080400330000000000000000000000004de95c1e202102e22e801590c51d7b979f167fbb000000000000000000000000aae3a78ea8de1b89c64d5c64a26d5b1fc8f91496000000000000000000000000ac3b203e4b6555611a518d05483733b82156ca8a00000000000000000000000042e9b4353bddf972e7c962f3311f8fb30b08fe270000000000000000000000004e572433a3bfa336b6396d13afc9f69b58252861000000000000000000000000ddb6c9913ba10a1d4896894c77198f663007dfb0
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101a95760003560e01c806377e840ed116100f9578063b028d9bd11610097578063cfa6f82711610071578063cfa6f827146103f2578063de85b0d214610405578063f10fb58414610418578063fd5e6dd11461042b57600080fd5b8063b028d9bd146103b9578063ca84ebf6146103cc578063ce3f865f146103df57600080fd5b80637b3449c6116100d35780637b3449c61461038e57806382039945146103a15780638456cb59146103a95780639dd58485146103b157600080fd5b806377e840ed1461033457806379604a17146103545780637b0472f01461037b57600080fd5b80632b3ed84e116101665780634e61b382116101405780634e61b382146102e5578063547fce7c146102f85780635c975abb1461030b578063767bcab51461032157600080fd5b80632b3ed84e146102a15780632e17de78146102c85780633f4ba83a146102dd57600080fd5b8063073d3f69146101ae5780630c0fd886146101d4578063150b7a02146102135780631b2df8501461024b5780631b62a26b146102725780631d2a056114610299575b600080fd5b6101c16101bc366004611be2565b61048a565b6040519081526020015b60405180910390f35b6101fb7f000000000000000000000000aae3a78ea8de1b89c64d5c64a26d5b1fc8f9149681565b6040516001600160a01b0390911681526020016101cb565b610232610221366004611b2c565b630a85bd0160e11b95945050505050565b6040516001600160e01b031990911681526020016101cb565b6101fb7f0000000000000000000000004e572433a3bfa336b6396d13afc9f69b5825286181565b6101fb7f000000000000000000000000ac3b203e4b6555611a518d05483733b82156ca8a81565b6101c1600381565b6101fb7f00000000000000000000000042e9b4353bddf972e7c962f3311f8fb30b08fe2781565b6102db6102d6366004611be2565b6104ab565b005b6102db6105db565b6102db6102f3366004611be2565b610698565b6102db610306366004611c12565b610836565b60015460ff1660405190151581526020016101cb565b6102db61032f366004611b0b565b6108e0565b6101c1610342366004611be2565b60036020526000908152604090205481565b6101fb7f0000000000000000000000004de95c1e202102e22e801590c51d7b979f167fbb81565b6102db610389366004611c12565b6109b5565b6101c161039c366004611be2565b610b01565b6101c1600581565b6102db610b11565b6101c1600781565b6101c16103c7366004611be2565b610bcc565b6101c16103da366004611be2565b610bdc565b6102db6103ed366004611be2565b610bec565b6102db610400366004611c12565b610c86565b6101c1610413366004611be2565b610d2f565b6009546101fb906001600160a01b031681565b610465610439366004611be2565b60026020819052600091825260409091208054600182015491909201546001600160a01b039092169183565b604080516001600160a01b0390941684526020840192909252908201526060016101cb565b6004818154811061049a57600080fd5b600091825260209091200154905081565b600260005414156104d75760405162461bcd60e51b81526004016104ce90611c5d565b60405180910390fd5b6002600055806104e681610d3f565b600082815260026020819052604080832080546001600160a01b031916815560018101849055918201929092559051632142170760e11b8152306004820152336024820152604481018490526001600160a01b037f0000000000000000000000004de95c1e202102e22e801590c51d7b979f167fbb16906342842e0e90606401600060405180830381600087803b15801561058057600080fd5b505af1158015610594573d6000803e3d6000fd5b505050507f11725367022c3ff288940f4b5473aa61c2da6a24af7363a1128ee2401e8983b2836040516105c991815260200190565b60405180910390a15050600160005550565b604051630935e01b60e21b81523360048201527f0000000000000000000000004e572433a3bfa336b6396d13afc9f69b582528616001600160a01b0316906324d7806c9060240160206040518083038186803b15801561063a57600080fd5b505afa15801561064e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106729190611bc2565b61068e5760405162461bcd60e51b81526004016104ce90611c94565b610696610db6565b565b600260005414156106bb5760405162461bcd60e51b81526004016104ce90611c5d565b600260005560015460ff16156106e35760405162461bcd60e51b81526004016104ce90611c33565b806106ed81610d3f565b60008281526002602052604081209061070584610e49565b90508015610747576040805160608101825283546001600160a01b03168152600184015460208201526002840154918101919091526107479085908390610e67565b610750846111f8565b81546001600160a01b03191682556000600183018190556002830155604051632142170760e11b8152306004820152336024820152604481018590526001600160a01b037f0000000000000000000000004de95c1e202102e22e801590c51d7b979f167fbb16906342842e0e90606401600060405180830381600087803b1580156107da57600080fd5b505af11580156107ee573d6000803e3d6000fd5b505050507f11725367022c3ff288940f4b5473aa61c2da6a24af7363a1128ee2401e8983b28460405161082391815260200190565b60405180910390a1505060016000555050565b600260005414156108595760405162461bcd60e51b81526004016104ce90611c5d565b600260005560015460ff16156108815760405162461bcd60e51b81526004016104ce90611c33565b8161088b81610d3f565b6000838152600360209081526040808320429055600282529182902060010184905581518581529081018490527f8227d266a95a66123134db77083bdd41dc137c89c4af2d8e3807fbd01a7d814a91016105c9565b604051630935e01b60e21b81523360048201527f0000000000000000000000004e572433a3bfa336b6396d13afc9f69b582528616001600160a01b0316906324d7806c9060240160206040518083038186803b15801561093f57600080fd5b505afa158015610953573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109779190611bc2565b6109935760405162461bcd60e51b81526004016104ce90611c94565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b600260005414156109d85760405162461bcd60e51b81526004016104ce90611c5d565b600260005560015460ff1615610a005760405162461bcd60e51b81526004016104ce90611c33565b6000828152600260208181526040808420805460018201879055429482018590556001600160a01b0319908116339182161781178255600390935293819020929092559051632142170760e11b81526004810191909152306024820152604481018490526001600160a01b037f0000000000000000000000004de95c1e202102e22e801590c51d7b979f167fbb16906342842e0e90606401600060405180830381600087803b158015610ab257600080fd5b505af1158015610ac6573d6000803e3d6000fd5b505060408051868152602081018690527f925435fa7e37e5d9555bb18ce0d62bb9627d0846942e58e5291e9a2dded462ed93500190506105c9565b6007818154811061049a57600080fd5b604051630935e01b60e21b81523360048201527f0000000000000000000000004e572433a3bfa336b6396d13afc9f69b582528616001600160a01b0316906324d7806c9060240160206040518083038186803b158015610b7057600080fd5b505afa158015610b84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba89190611bc2565b610bc45760405162461bcd60e51b81526004016104ce90611c94565b6106966114e8565b6005818154811061049a57600080fd5b6006818154811061049a57600080fd5b60026000541415610c0f5760405162461bcd60e51b81526004016104ce90611c5d565b600260005560015460ff1615610c375760405162461bcd60e51b81526004016104ce90611c33565b80610c4181610d3f565b610c4a8261153e565b6040518281527f278111f058fcc15883749957935fb9630ea32a108dd40081364d762353441ccb9060200160405180910390a150506001600055565b60026000541415610ca95760405162461bcd60e51b81526004016104ce90611c5d565b600260005560015460ff1615610cd15760405162461bcd60e51b81526004016104ce90611c33565b81610cdb81610d3f565b610ce48361153e565b60008381526002602090815260409182902060010184905581518581529081018490527fb32ca7c02df8baee6d206c5ee948ff09143d5c6f1615eb6423d3d5d0ba6fceee91016105c9565b6008818154811061049a57600080fd5b6000818152600260205260409020546001600160a01b03163314610db35760405162461bcd60e51b815260206004820152602560248201527f5374616b696e673a20596f7520646964206e6f74207374616b652074686973206044820152647265616c6d60d81b60648201526084016104ce565b50565b60015460ff16610dff5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016104ce565b6001805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600081815260036020526040812054610e61906115f7565b92915050565b6005821115610e7557600591505b600080610e8185611620565b915091506000610ee584604001516004805480602002602001604051908101604052809291908181526020018280548015610edb57602002820191906000526020600020905b815481526020019060010190808311610ec7575b5050505050611650565b610ef0906001611cc3565b90508360200151600014156110535761104e8660007f000000000000000000000000aae3a78ea8de1b89c64d5c64a26d5b1fc8f914966001600160a01b03166320c69e568a6040518263ffffffff1660e01b8152600401610f5391815260200190565b602060405180830381600087803b158015610f6d57600080fd5b505af1158015610f81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa59190611bfa565b6040516328b9de8f60e11b8152600481018b9052600060248201527f000000000000000000000000ac3b203e4b6555611a518d05483733b82156ca8a6001600160a01b031690635173bd1e90604401602060405180830381600087803b15801561100e57600080fd5b505af1158015611022573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110469190611bfa565b85888b61176e565b6111f0565b836020015160011415611116576040516328b9de8f60e11b81526004810187905260016024820181905261104e918891906000906001600160a01b037f000000000000000000000000ac3b203e4b6555611a518d05483733b82156ca8a1690635173bd1e906044015b602060405180830381600087803b1580156110d657600080fd5b505af11580156110ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110e9190611bfa565b85878b61176e565b836020015160031415611183576040516328b9de8f60e11b8152600481018790526002602482015261104e9087906003906000906001600160a01b037f000000000000000000000000ac3b203e4b6555611a518d05483733b82156ca8a1690635173bd1e906044016110bc565b8360200151600514156111f0576040516328b9de8f60e11b815260048101879052600360248201526111f09087906005906000906001600160a01b037f000000000000000000000000ac3b203e4b6555611a518d05483733b82156ca8a1690635173bd1e906044016110bc565b505050505050565b60008061120483611620565b604051631417ed1b60e21b815260048101869052600060248201526044810183905291935091507f000000000000000000000000ac3b203e4b6555611a518d05483733b82156ca8a6001600160a01b03169063505fb46c90606401600060405180830381600087803b15801561127957600080fd5b505af115801561128d573d6000803e3d6000fd5b5050604051631417ed1b60e21b81526004810186905260016024820152604481018490527f000000000000000000000000ac3b203e4b6555611a518d05483733b82156ca8a6001600160a01b0316925063505fb46c9150606401600060405180830381600087803b15801561130157600080fd5b505af1158015611315573d6000803e3d6000fd5b5050604051631417ed1b60e21b81526004810186905260026024820152604481018490527f000000000000000000000000ac3b203e4b6555611a518d05483733b82156ca8a6001600160a01b0316925063505fb46c9150606401600060405180830381600087803b15801561138957600080fd5b505af115801561139d573d6000803e3d6000fd5b5050604051631417ed1b60e21b81526004810186905260036024820152604481018490527f000000000000000000000000ac3b203e4b6555611a518d05483733b82156ca8a6001600160a01b0316925063505fb46c9150606401600060405180830381600087803b15801561141157600080fd5b505af1158015611425573d6000803e3d6000fd5b50506040516370f053c960e01b815260048101869052602481018590527f000000000000000000000000aae3a78ea8de1b89c64d5c64a26d5b1fc8f914966001600160a01b031692506370f053c99150604401600060405180830381600087803b15801561149257600080fd5b505af11580156114a6573d6000803e3d6000fd5b505050507f898976461822d775c98e0f8f205c19b8a52e69e8140f7238d6e671b0d62a9798836040516114db91815260200190565b60405180910390a1505050565b60015460ff161561150b5760405162461bcd60e51b81526004016104ce90611c33565b6001805460ff1916811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e2c565b6000818152600260208181526040808420815160608101835281546001600160a01b0316815260018201549381019390935290920154918101919091529061158583610e49565b9050600081116115d75760405162461bcd60e51b815260206004820152601b60248201527f5374616b696e673a204e6f7468696e6720746f20636f6c6c656374000000000060448201526064016104ce565b6115e2838284610e67565b50506000908152600360205260409020429055565b600081421161160857506000919050565b620151806116168342611d0e565b610e619190611cdb565b600080600061162e846118b6565b905061163b600782611cdb565b611646600383611cdb565b9250925050915091565b600954604051638f88708b60e01b8152600481018490526000918291606491439142916001600160a01b031690638f88708b9060240160206040518083038186803b15801561169e57600080fd5b505afa1580156116b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d69190611bfa565b60408051602081019490945283019190915260608201526080016040516020818303038152906040528051906020012060001c6117139190611d40565b905060005b83518110156117665783818151811061174157634e487b7160e01b600052603260045260246000fd5b6020026020010151821161175457611766565b8061175e81611d25565b915050611718565b949350505050565b8115801561177a575083155b15611784576118ad565b6000818484611793888a611cc3565b61179d9190611cc3565b6117a79190611cc3565b6117b19190611cef565b604051631417ed1b60e21b8152600481018a905260248101899052604481018290529091507f000000000000000000000000aae3a78ea8de1b89c64d5c64a26d5b1fc8f914966001600160a01b03169063505fb46c90606401600060405180830381600087803b15801561182457600080fd5b505af1158015611838573d6000803e3d6000fd5b5050505061184688886118d1565b6040805189815260208101899052908101879052606081018690526080810184905260a0810185905260c0810183905260e081018290527f160c24405fa1a87e80632ea854c17b689e341ad9fc279fbd2429c7b73a3959b5906101000160405180910390a1505b50505050505050565b600081815260026020819052604082200154610e61906115f7565b806118da575050565b6000816001141561196f57600861193f836005805480602002602001604051908101604052809291908181526020018280548015610edb5760200282019190600052602060002090815481526020019060010190808311610ec7575050505050611650565b8154811061195d57634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050611a61565b81600314156119d257600661193f836005805480602002602001604051908101604052809291908181526020018280548015610edb5760200282019190600052602060002090815481526020019060010190808311610ec7575050505050611650565b8160051415611a61576007611a35836005805480602002602001604051908101604052809291908181526020018280548015610edb5760200282019190600052602060002090815481526020019060010190808311610ec7575050505050611650565b81548110611a5357634e487b7160e01b600052603260045260246000fd5b906000526020600020015490505b80611a6b57505050565b604051631417ed1b60e21b81526004810184905260248101829052600160448201527f00000000000000000000000042e9b4353bddf972e7c962f3311f8fb30b08fe276001600160a01b03169063505fb46c90606401600060405180830381600087803b158015611adb57600080fd5b505af11580156118ad573d6000803e3d6000fd5b80356001600160a01b0381168114611b0657600080fd5b919050565b600060208284031215611b1c578081fd5b611b2582611aef565b9392505050565b600080600080600060808688031215611b43578081fd5b611b4c86611aef565b9450611b5a60208701611aef565b935060408601359250606086013567ffffffffffffffff80821115611b7d578283fd5b818801915088601f830112611b90578283fd5b813581811115611b9e578384fd5b896020828501011115611baf578384fd5b9699959850939650602001949392505050565b600060208284031215611bd3578081fd5b81518015158114611b25578182fd5b600060208284031215611bf3578081fd5b5035919050565b600060208284031215611c0b578081fd5b5051919050565b60008060408385031215611c24578182fd5b50508035926020909101359150565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526015908201527426b0b730b3b2b91d102737ba1030b71020b236b4b760591b604082015260600190565b60008219821115611cd657611cd6611d54565b500190565b600082611cea57611cea611d6a565b500490565b6000816000190483118215151615611d0957611d09611d54565b500290565b600082821015611d2057611d20611d54565b500390565b6000600019821415611d3957611d39611d54565b5060010190565b600082611d4f57611d4f611d6a565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fdfea2646970667358221220d96958bfc0e88fe1f9d8481a0fc7ee08ce8c5a3071dea2747c195a8ecebf1a6964736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000004de95c1e202102e22e801590c51d7b979f167fbb000000000000000000000000aae3a78ea8de1b89c64d5c64a26d5b1fc8f91496000000000000000000000000ac3b203e4b6555611a518d05483733b82156ca8a00000000000000000000000042e9b4353bddf972e7c962f3311f8fb30b08fe270000000000000000000000004e572433a3bfa336b6396d13afc9f69b58252861000000000000000000000000ddb6c9913ba10a1d4896894c77198f663007dfb0
-----Decoded View---------------
Arg [0] : _realm (address): 0x4de95c1E202102E22E801590C51D7B979f167FBB
Arg [1] : _data (address): 0xAae3A78EA8De1b89C64D5c64A26d5b1FC8F91496
Arg [2] : _structure (address): 0xAc3b203e4B6555611A518D05483733b82156CA8a
Arg [3] : _resource (address): 0x42E9b4353BddF972e7c962f3311F8fB30B08fE27
Arg [4] : _manager (address): 0x4E572433A3Bfa336b6396D13AfC9F69b58252861
Arg [5] : _rand (address): 0xddb6c9913Ba10a1D4896894C77198F663007dFB0
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000004de95c1e202102e22e801590c51d7b979f167fbb
Arg [1] : 000000000000000000000000aae3a78ea8de1b89c64d5c64a26d5b1fc8f91496
Arg [2] : 000000000000000000000000ac3b203e4b6555611a518d05483733b82156ca8a
Arg [3] : 00000000000000000000000042e9b4353bddf972e7c962f3311f8fb30b08fe27
Arg [4] : 0000000000000000000000004e572433a3bfa336b6396d13afc9f69b58252861
Arg [5] : 000000000000000000000000ddb6c9913ba10a1d4896894c77198f663007dfb0
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.