Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
0x60806040 | 11422451 | 1414 days ago | IN | 0 ETH | 0.08605578 |
Loading...
Loading
Contract Name:
PRDZstaking
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-12-10 */ pragma solidity 0.6.12; // SPDX-License-Identifier: No License /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } /** * @dev Library for managing * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive * types. * * Sets have the following properties: * * - Elements are added, removed, and checked for existence in constant time * (O(1)). * - Elements are enumerated in O(n). No guarantees are made on the ordering. * * ``` * contract Example { * // Add the library methods * using EnumerableSet for EnumerableSet.AddressSet; * * // Declare a set state variable * EnumerableSet.AddressSet private mySet; * } * ``` * * As of v3.0.0, only sets of type `address` (`AddressSet`) and `uint256` * (`UintSet`) are supported. */ library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping (bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement. bytes32 lastvalue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastvalue; // Update the index for the moved value set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { require(set._values.length > index, "EnumerableSet: index out of bounds"); return set._values[index]; } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(value))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(value))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(value))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint256(_at(set._inner, index))); } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } interface Token { function transferFrom(address, address, uint) external returns (bool); function transfer(address, uint) external returns (bool); } contract PRDZstaking is Ownable { using SafeMath for uint; using EnumerableSet for EnumerableSet.AddressSet; event RewardsTransferred(address holder, uint amount); // PRDZ token contract address address public constant tokenAddress = 0x4e085036A1b732cBe4FfB1C12ddfDd87E7C3664d; // reward rate 80.00% per year uint public constant rewardRate = 8000; uint public constant scoreRate = 1000; uint public constant rewardInterval = 365 days; uint public constant scoreInterval = 3 days; uint public scoreEth = 11340; // unstaking fee 2.00 percent uint public constant unstakingFeeRate = 250; // unstaking possible after 72 hours uint public constant cliffTime = 72 hours; uint public totalClaimedRewards = 0; uint public totalStakedToken = 0; EnumerableSet.AddressSet private holders; mapping (address => uint) public depositedTokens; mapping (address => uint) public stakingTime; mapping (address => uint) public lastClaimedTime; mapping (address => uint) public totalEarnedTokens; mapping (address => uint) public totalScore; mapping (address => uint) public lastScoreTime; function updateAccount(address account) private { uint pendingDivs = getPendingDivs(account); if (pendingDivs > 0) { require(Token(tokenAddress).transfer(account, pendingDivs), "Could not transfer tokens."); totalEarnedTokens[account] = totalEarnedTokens[account].add(pendingDivs); totalClaimedRewards = totalClaimedRewards.add(pendingDivs); emit RewardsTransferred(account, pendingDivs); } lastClaimedTime[account] = now; } function updateScore(address _holder) private { lastScoreTime[_holder] = now ; } function getScoreEth(address _holder) public view returns (uint) { uint timeDiff = 0 ; if(lastScoreTime[_holder] > 0){ timeDiff = now.sub(lastScoreTime[_holder]).div(2); } uint stakedAmount = depositedTokens[_holder]; uint score = stakedAmount .mul(scoreRate) .mul(timeDiff) .div(scoreInterval) .div(1e4); uint eth = score.div(scoreEth); return eth; } function getStakingScore(address _holder) public view returns (uint) { uint timeDiff = 0 ; if(lastScoreTime[_holder] > 0){ timeDiff = now.sub(lastScoreTime[_holder]).div(2); } uint stakedAmount = depositedTokens[_holder]; uint score = stakedAmount .mul(scoreRate) .mul(timeDiff) .div(scoreInterval) .div(1e4); return score; } function getPendingDivs(address _holder) public view returns (uint) { if (!holders.contains(_holder)) return 0; if (depositedTokens[_holder] == 0) return 0; uint timeDiff = now.sub(lastClaimedTime[_holder]); uint stakedAmount = depositedTokens[_holder]; uint pendingDivs = stakedAmount .mul(rewardRate) .mul(timeDiff) .div(rewardInterval) .div(1e4); return pendingDivs; } function getNumberOfHolders() public view returns (uint) { return holders.length(); } function getTotalStaked() public view returns (uint) { return totalStakedToken; } function stake(uint amountToStake) public { require(amountToStake > 0, "Cannot deposit 0 Tokens"); require(Token(tokenAddress).transferFrom(msg.sender, address(this), amountToStake), "Insufficient Token Allowance"); updateAccount(msg.sender); updateScore(msg.sender); depositedTokens[msg.sender] = depositedTokens[msg.sender].add(amountToStake); totalStakedToken = totalStakedToken.add(amountToStake); if (!holders.contains(msg.sender)) { holders.add(msg.sender); stakingTime[msg.sender] = now; } } function OldStake(address _holder , uint amountToStake , uint stakeTime) public onlyOwner { require(amountToStake.mul(1e18) > 0, "Cannot deposit 0 Tokens"); require(Token(tokenAddress).transferFrom(_holder, address(this), amountToStake.mul(1e18)), "Insufficient Token Allowance"); updateAccount(_holder); lastScoreTime[_holder] = stakeTime ; totalStakedToken = totalStakedToken.add(amountToStake); depositedTokens[_holder] = depositedTokens[_holder].add(amountToStake.mul(1e18)); if (!holders.contains(_holder)) { holders.add(_holder); stakingTime[_holder] = stakeTime; } } function unstake(uint amountToWithdraw) public { require(depositedTokens[msg.sender] >= amountToWithdraw, "Invalid amount to withdraw"); updateAccount(msg.sender); uint fee = amountToWithdraw.mul(unstakingFeeRate).div(1e4); uint amountAfterFee = amountToWithdraw.sub(fee); require(Token(tokenAddress).transfer(owner, fee), "Could not transfer withdraw fee."); require(Token(tokenAddress).transfer(msg.sender, amountAfterFee), "Could not transfer tokens."); totalStakedToken = totalStakedToken.sub(amountAfterFee); uint timeDiff = 0 ; if(lastScoreTime[msg.sender] > 0){ timeDiff = now.sub(lastScoreTime[msg.sender]).div(2); } uint score = amountAfterFee .mul(scoreRate) .mul(timeDiff) .div(scoreInterval) .div(1e4); uint eth = score.div(scoreEth); msg.sender.transfer(eth); lastScoreTime[msg.sender] = now; depositedTokens[msg.sender] = depositedTokens[msg.sender].sub(amountToWithdraw); if (holders.contains(msg.sender) && depositedTokens[msg.sender] == 0) { holders.remove(msg.sender); } } function claimReward() public { updateAccount(msg.sender); } function withdraw() public onlyOwner{ msg.sender.transfer(address(this).balance); } function claimScoreEth() public { uint timeDiff = 0 ; if(lastScoreTime[msg.sender] > 0){ timeDiff = now.sub(lastScoreTime[msg.sender]).div(2); } uint stakedAmount = depositedTokens[msg.sender]; uint score = stakedAmount .mul(scoreRate) .mul(timeDiff) .div(scoreInterval) .div(1e4); uint eth = score.div(scoreEth); msg.sender.transfer(eth); lastScoreTime[msg.sender] = now; } uint private constant stakingAndDaoTokens = 84000000000000000000000; function getStakingAndDaoAmount() public view returns (uint) { if (totalClaimedRewards >= stakingAndDaoTokens) { return 0; } uint remaining = stakingAndDaoTokens.sub(totalClaimedRewards); return remaining; } function deposit() payable public { // nothing to do! } function updateScoreEth(uint _amount) public onlyOwner { scoreEth = _amount ; } // function to allow admin to claim *other* ERC20 tokens sent to this contract (by mistake) function transferAnyERC20Tokens(address _tokenAddr, address _to, uint _amount) public onlyOwner { if (_tokenAddr == tokenAddress) { if (_amount > getStakingAndDaoAmount()) { revert(); } totalClaimedRewards = totalClaimedRewards.add(_amount); } Token(_tokenAddr).transfer(_to, _amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardsTransferred","type":"event"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"},{"internalType":"uint256","name":"amountToStake","type":"uint256"},{"internalType":"uint256","name":"stakeTime","type":"uint256"}],"name":"OldStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimScoreEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cliffTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"depositedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"}],"name":"getPendingDivs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"}],"name":"getScoreEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStakingAndDaoAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"}],"name":"getStakingScore","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastClaimedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastScoreTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"scoreEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"scoreInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"scoreRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountToStake","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakingTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalClaimedRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalEarnedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalScore","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStakedToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferAnyERC20Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountToWithdraw","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unstakingFeeRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"updateScoreEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052612c4c6001556000600255600060035534801561002057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506128ad806100706000396000f3fe6080604052600436106101ee5760003560e01c806393bcb5a31161010d578063c326bf4f116100a0578063d0e30db01161006f578063d0e30db014610921578063d578ceab1461092b578063d816c7d514610956578063f2fde38b14610981578063f3f91fa0146109d2576101ee565b8063c326bf4f1461083b578063c7c09074146108a0578063cb6d8ee6146108cb578063ce40453d146108f6576101ee565b8063a84e9dee116100dc578063a84e9dee14610759578063a967b72c146107be578063b88a802f146107f9578063bec4de3f14610810576101ee565b806393bcb5a31461066157806398896d10146106785780639d76ea58146106dd578063a694fc3a1461071e576101ee565b80634b3d36c7116101855780637b0a47ee116101545780637b0a47ee1461052b57806384eda6621461055657806387285587146105bb5780638da5cb5b14610620576101ee565b80634b3d36c714610381578063583d42fd146103e65780636270cd181461044b5780636a395ccb146104b0576101ee565b8063308feec3116101c1578063308feec3146102af57806335d8f62f146102da5780633a5ec6531461033f5780633ccfd60b1461036a576101ee565b80630917e776146101f35780630f1a64441461021e578063268cab49146102495780632e17de7814610274575b600080fd5b3480156101ff57600080fd5b50610208610a37565b6040518082815260200191505060405180910390f35b34801561022a57600080fd5b50610233610a41565b6040518082815260200191505060405180910390f35b34801561025557600080fd5b5061025e610a48565b6040518082815260200191505060405180910390f35b34801561028057600080fd5b506102ad6004803603602081101561029757600080fd5b8101908080359060200190929190505050610a91565b005b3480156102bb57600080fd5b506102c46110f1565b6040518082815260200191505060405180910390f35b3480156102e657600080fd5b50610329600480360360208110156102fd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611102565b6040518082815260200191505060405180910390f35b34801561034b57600080fd5b50610354611276565b6040518082815260200191505060405180910390f35b34801561037657600080fd5b5061037f61127d565b005b34801561038d57600080fd5b506103e4600480360360608110156103a457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919050505061131e565b005b3480156103f257600080fd5b506104356004803603602081101561040957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116fe565b6040518082815260200191505060405180910390f35b34801561045757600080fd5b5061049a6004803603602081101561046e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611716565b6040518082815260200191505060405180910390f35b3480156104bc57600080fd5b50610529600480360360608110156104d357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061172e565b005b34801561053757600080fd5b506105406118b0565b6040518082815260200191505060405180910390f35b34801561056257600080fd5b506105a56004803603602081101561057957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118b6565b6040518082815260200191505060405180910390f35b3480156105c757600080fd5b5061060a600480360360208110156105de57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118ce565b6040518082815260200191505060405180910390f35b34801561062c57600080fd5b50610635611a28565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561066d57600080fd5b50610676611a4c565b005b34801561068457600080fd5b506106c76004803603602081101561069b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c3f565b6040518082815260200191505060405180910390f35b3480156106e957600080fd5b506106f2611dae565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561072a57600080fd5b506107576004803603602081101561074157600080fd5b8101908080359060200190929190505050611dc6565b005b34801561076557600080fd5b506107a86004803603602081101561077c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120c3565b6040518082815260200191505060405180910390f35b3480156107ca57600080fd5b506107f7600480360360208110156107e157600080fd5b81019080803590602001909291905050506120db565b005b34801561080557600080fd5b5061080e61213d565b005b34801561081c57600080fd5b50610825612148565b6040518082815260200191505060405180910390f35b34801561084757600080fd5b5061088a6004803603602081101561085e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612150565b6040518082815260200191505060405180910390f35b3480156108ac57600080fd5b506108b5612168565b6040518082815260200191505060405180910390f35b3480156108d757600080fd5b506108e061216e565b6040518082815260200191505060405180910390f35b34801561090257600080fd5b5061090b612174565b6040518082815260200191505060405180910390f35b61092961217a565b005b34801561093757600080fd5b5061094061217c565b6040518082815260200191505060405180910390f35b34801561096257600080fd5b5061096b612182565b6040518082815260200191505060405180910390f35b34801561098d57600080fd5b506109d0600480360360208110156109a457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612187565b005b3480156109de57600080fd5b50610a21600480360360208110156109f557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506122d6565b6040518082815260200191505060405180910390f35b6000600354905090565b6203f48081565b60006911c9a62d04ed0c80000060025410610a665760009050610a8e565b6000610a876002546911c9a62d04ed0c8000006122ee90919063ffffffff16565b9050809150505b90565b80600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610b46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f496e76616c696420616d6f756e7420746f20776974686472617700000000000081525060200191505060405180910390fd5b610b4f33612305565b6000610b79612710610b6b60fa8561259b90919063ffffffff16565b6125ca90919063ffffffff16565b90506000610b9082846122ee90919063ffffffff16565b9050734e085036a1b732cbe4ffb1c12ddfdd87e7c3664d73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610c3757600080fd5b505af1158015610c4b573d6000803e3d6000fd5b505050506040513d6020811015610c6157600080fd5b8101908080519060200190929190505050610ce4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f436f756c64206e6f74207472616e73666572207769746864726177206665652e81525060200191505060405180910390fd5b734e085036a1b732cbe4ffb1c12ddfdd87e7c3664d73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610d6957600080fd5b505af1158015610d7d573d6000803e3d6000fd5b505050506040513d6020811015610d9357600080fd5b8101908080519060200190929190505050610e16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f436f756c64206e6f74207472616e7366657220746f6b656e732e00000000000081525060200191505060405180910390fd5b610e2b816003546122ee90919063ffffffff16565b600381905550600080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115610ee257610edf6002610ed1600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054426122ee90919063ffffffff16565b6125ca90919063ffffffff16565b90505b6000610f34612710610f266203f480610f1886610f0a6103e88a61259b90919063ffffffff16565b61259b90919063ffffffff16565b6125ca90919063ffffffff16565b6125ca90919063ffffffff16565b90506000610f4d600154836125ca90919063ffffffff16565b90503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610f95573d6000803e3d6000fd5b5042600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061102c86600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122ee90919063ffffffff16565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506110833360046125e390919063ffffffff16565b80156110ce57506000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b156110e9576110e733600461261390919063ffffffff16565b505b505050505050565b60006110fd6004612643565b905090565b600080600090506000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156111b9576111b660026111a8600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054426122ee90919063ffffffff16565b6125ca90919063ffffffff16565b90505b6000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600061124f6127106112416203f480611233876112256103e88961259b90919063ffffffff16565b61259b90919063ffffffff16565b6125ca90919063ffffffff16565b6125ca90919063ffffffff16565b90506000611268600154836125ca90919063ffffffff16565b905080945050505050919050565b6203f48081565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112d557600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561131b573d6000803e3d6000fd5b50565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461137657600080fd5b6000611393670de0b6b3a76400008461259b90919063ffffffff16565b11611406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616e6e6f74206465706f736974203020546f6b656e7300000000000000000081525060200191505060405180910390fd5b734e085036a1b732cbe4ffb1c12ddfdd87e7c3664d73ffffffffffffffffffffffffffffffffffffffff166323b872dd8430611453670de0b6b3a76400008761259b90919063ffffffff16565b6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156114c357600080fd5b505af11580156114d7573d6000803e3d6000fd5b505050506040513d60208110156114ed57600080fd5b8101908080519060200190929190505050611570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f496e73756666696369656e7420546f6b656e20416c6c6f77616e63650000000081525060200191505060405180910390fd5b61157983612305565b80600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506115d28260035461265890919063ffffffff16565b6003819055506116446115f6670de0b6b3a76400008461259b90919063ffffffff16565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461265890919063ffffffff16565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061169b8360046125e390919063ffffffff16565b6116f9576116b383600461267490919063ffffffff16565b5080600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b60076020528060005260406000206000915090505481565b60096020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461178657600080fd5b734e085036a1b732cbe4ffb1c12ddfdd87e7c3664d73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156117fe576117d6610a48565b8111156117e257600080fd5b6117f78160025461265890919063ffffffff16565b6002819055505b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561186f57600080fd5b505af1158015611883573d6000803e3d6000fd5b505050506040513d602081101561189957600080fd5b810190808051906020019092919050505050505050565b611f4081565b600a6020528060005260406000206000915090505481565b600080600090506000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611985576119826002611974600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054426122ee90919063ffffffff16565b6125ca90919063ffffffff16565b90505b6000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000611a1b612710611a0d6203f4806119ff876119f16103e88961259b90919063ffffffff16565b61259b90919063ffffffff16565b6125ca90919063ffffffff16565b6125ca90919063ffffffff16565b9050809350505050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611afd57611afa6002611aec600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054426122ee90919063ffffffff16565b6125ca90919063ffffffff16565b90505b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000611b93612710611b856203f480611b7787611b696103e88961259b90919063ffffffff16565b61259b90919063ffffffff16565b6125ca90919063ffffffff16565b6125ca90919063ffffffff16565b90506000611bac600154836125ca90919063ffffffff16565b90503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611bf4573d6000803e3d6000fd5b5042600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505050565b6000611c558260046125e390919063ffffffff16565b611c625760009050611da9565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415611cb35760009050611da9565b6000611d07600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054426122ee90919063ffffffff16565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000611da0612710611d926301e13380611d8487611d76611f408961259b90919063ffffffff16565b61259b90919063ffffffff16565b6125ca90919063ffffffff16565b6125ca90919063ffffffff16565b90508093505050505b919050565b734e085036a1b732cbe4ffb1c12ddfdd87e7c3664d81565b60008111611e3c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616e6e6f74206465706f736974203020546f6b656e7300000000000000000081525060200191505060405180910390fd5b734e085036a1b732cbe4ffb1c12ddfdd87e7c3664d73ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611edf57600080fd5b505af1158015611ef3573d6000803e3d6000fd5b505050506040513d6020811015611f0957600080fd5b8101908080519060200190929190505050611f8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f496e73756666696369656e7420546f6b656e20416c6c6f77616e63650000000081525060200191505060405180910390fd5b611f9533612305565b611f9e336126a4565b611ff081600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461265890919063ffffffff16565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506120488160035461265890919063ffffffff16565b6003819055506120623360046125e390919063ffffffff16565b6120c05761207a33600461267490919063ffffffff16565b5042600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b50565b600b6020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461213357600080fd5b8060018190555050565b61214633612305565b565b6301e1338081565b60066020528060005260406000206000915090505481565b6103e881565b60035481565b60015481565b565b60025481565b60fa81565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146121df57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561221957600080fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60086020528060005260406000206000915090505481565b6000828211156122fa57fe5b818303905092915050565b600061231082611c3f565b9050600081111561255357734e085036a1b732cbe4ffb1c12ddfdd87e7c3664d73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156123a057600080fd5b505af11580156123b4573d6000803e3d6000fd5b505050506040513d60208110156123ca57600080fd5b810190808051906020019092919050505061244d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f436f756c64206e6f74207472616e7366657220746f6b656e732e00000000000081525060200191505060405180910390fd5b61249f81600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461265890919063ffffffff16565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506124f78160025461265890919063ffffffff16565b6002819055507f586b2e63a21a7a4e1402e36f48ce10cb1ec94684fea254c186b76d1f98ecf1308282604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15b42600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600080828402905060008414806125ba5750828482816125b757fe5b04145b6125c057fe5b8091505092915050565b6000808284816125d657fe5b0490508091505092915050565b600061260b836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6126eb565b905092915050565b600061263b836000018373ffffffffffffffffffffffffffffffffffffffff1660001b61270e565b905092915050565b6000612651826000016127f6565b9050919050565b60008082840190508381101561266a57fe5b8091505092915050565b600061269c836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612807565b905092915050565b42600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b600080836001016000848152602001908152602001600020541415905092915050565b600080836001016000848152602001908152602001600020549050600081146127ea576000600182039050600060018660000180549050039050600086600001828154811061275957fe5b906000526020600020015490508087600001848154811061277657fe5b90600052602060002001819055506001830187600101600083815260200190815260200160002081905550866000018054806127ae57fe5b600190038181906000526020600020016000905590558660010160008781526020019081526020016000206000905560019450505050506127f0565b60009150505b92915050565b600081600001805490509050919050565b600061281383836126eb565b61286c578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050612871565b600090505b9291505056fea26469706673582212204eaa97c65eedfc92e6fd953cd98e609b17e1a9820f277366b49b3369d4262a4964736f6c634300060c0033
Deployed Bytecode
0x6080604052600436106101ee5760003560e01c806393bcb5a31161010d578063c326bf4f116100a0578063d0e30db01161006f578063d0e30db014610921578063d578ceab1461092b578063d816c7d514610956578063f2fde38b14610981578063f3f91fa0146109d2576101ee565b8063c326bf4f1461083b578063c7c09074146108a0578063cb6d8ee6146108cb578063ce40453d146108f6576101ee565b8063a84e9dee116100dc578063a84e9dee14610759578063a967b72c146107be578063b88a802f146107f9578063bec4de3f14610810576101ee565b806393bcb5a31461066157806398896d10146106785780639d76ea58146106dd578063a694fc3a1461071e576101ee565b80634b3d36c7116101855780637b0a47ee116101545780637b0a47ee1461052b57806384eda6621461055657806387285587146105bb5780638da5cb5b14610620576101ee565b80634b3d36c714610381578063583d42fd146103e65780636270cd181461044b5780636a395ccb146104b0576101ee565b8063308feec3116101c1578063308feec3146102af57806335d8f62f146102da5780633a5ec6531461033f5780633ccfd60b1461036a576101ee565b80630917e776146101f35780630f1a64441461021e578063268cab49146102495780632e17de7814610274575b600080fd5b3480156101ff57600080fd5b50610208610a37565b6040518082815260200191505060405180910390f35b34801561022a57600080fd5b50610233610a41565b6040518082815260200191505060405180910390f35b34801561025557600080fd5b5061025e610a48565b6040518082815260200191505060405180910390f35b34801561028057600080fd5b506102ad6004803603602081101561029757600080fd5b8101908080359060200190929190505050610a91565b005b3480156102bb57600080fd5b506102c46110f1565b6040518082815260200191505060405180910390f35b3480156102e657600080fd5b50610329600480360360208110156102fd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611102565b6040518082815260200191505060405180910390f35b34801561034b57600080fd5b50610354611276565b6040518082815260200191505060405180910390f35b34801561037657600080fd5b5061037f61127d565b005b34801561038d57600080fd5b506103e4600480360360608110156103a457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919050505061131e565b005b3480156103f257600080fd5b506104356004803603602081101561040957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116fe565b6040518082815260200191505060405180910390f35b34801561045757600080fd5b5061049a6004803603602081101561046e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611716565b6040518082815260200191505060405180910390f35b3480156104bc57600080fd5b50610529600480360360608110156104d357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061172e565b005b34801561053757600080fd5b506105406118b0565b6040518082815260200191505060405180910390f35b34801561056257600080fd5b506105a56004803603602081101561057957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118b6565b6040518082815260200191505060405180910390f35b3480156105c757600080fd5b5061060a600480360360208110156105de57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118ce565b6040518082815260200191505060405180910390f35b34801561062c57600080fd5b50610635611a28565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561066d57600080fd5b50610676611a4c565b005b34801561068457600080fd5b506106c76004803603602081101561069b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c3f565b6040518082815260200191505060405180910390f35b3480156106e957600080fd5b506106f2611dae565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561072a57600080fd5b506107576004803603602081101561074157600080fd5b8101908080359060200190929190505050611dc6565b005b34801561076557600080fd5b506107a86004803603602081101561077c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120c3565b6040518082815260200191505060405180910390f35b3480156107ca57600080fd5b506107f7600480360360208110156107e157600080fd5b81019080803590602001909291905050506120db565b005b34801561080557600080fd5b5061080e61213d565b005b34801561081c57600080fd5b50610825612148565b6040518082815260200191505060405180910390f35b34801561084757600080fd5b5061088a6004803603602081101561085e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612150565b6040518082815260200191505060405180910390f35b3480156108ac57600080fd5b506108b5612168565b6040518082815260200191505060405180910390f35b3480156108d757600080fd5b506108e061216e565b6040518082815260200191505060405180910390f35b34801561090257600080fd5b5061090b612174565b6040518082815260200191505060405180910390f35b61092961217a565b005b34801561093757600080fd5b5061094061217c565b6040518082815260200191505060405180910390f35b34801561096257600080fd5b5061096b612182565b6040518082815260200191505060405180910390f35b34801561098d57600080fd5b506109d0600480360360208110156109a457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612187565b005b3480156109de57600080fd5b50610a21600480360360208110156109f557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506122d6565b6040518082815260200191505060405180910390f35b6000600354905090565b6203f48081565b60006911c9a62d04ed0c80000060025410610a665760009050610a8e565b6000610a876002546911c9a62d04ed0c8000006122ee90919063ffffffff16565b9050809150505b90565b80600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610b46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f496e76616c696420616d6f756e7420746f20776974686472617700000000000081525060200191505060405180910390fd5b610b4f33612305565b6000610b79612710610b6b60fa8561259b90919063ffffffff16565b6125ca90919063ffffffff16565b90506000610b9082846122ee90919063ffffffff16565b9050734e085036a1b732cbe4ffb1c12ddfdd87e7c3664d73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610c3757600080fd5b505af1158015610c4b573d6000803e3d6000fd5b505050506040513d6020811015610c6157600080fd5b8101908080519060200190929190505050610ce4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f436f756c64206e6f74207472616e73666572207769746864726177206665652e81525060200191505060405180910390fd5b734e085036a1b732cbe4ffb1c12ddfdd87e7c3664d73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610d6957600080fd5b505af1158015610d7d573d6000803e3d6000fd5b505050506040513d6020811015610d9357600080fd5b8101908080519060200190929190505050610e16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f436f756c64206e6f74207472616e7366657220746f6b656e732e00000000000081525060200191505060405180910390fd5b610e2b816003546122ee90919063ffffffff16565b600381905550600080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115610ee257610edf6002610ed1600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054426122ee90919063ffffffff16565b6125ca90919063ffffffff16565b90505b6000610f34612710610f266203f480610f1886610f0a6103e88a61259b90919063ffffffff16565b61259b90919063ffffffff16565b6125ca90919063ffffffff16565b6125ca90919063ffffffff16565b90506000610f4d600154836125ca90919063ffffffff16565b90503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610f95573d6000803e3d6000fd5b5042600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061102c86600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122ee90919063ffffffff16565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506110833360046125e390919063ffffffff16565b80156110ce57506000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b156110e9576110e733600461261390919063ffffffff16565b505b505050505050565b60006110fd6004612643565b905090565b600080600090506000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156111b9576111b660026111a8600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054426122ee90919063ffffffff16565b6125ca90919063ffffffff16565b90505b6000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600061124f6127106112416203f480611233876112256103e88961259b90919063ffffffff16565b61259b90919063ffffffff16565b6125ca90919063ffffffff16565b6125ca90919063ffffffff16565b90506000611268600154836125ca90919063ffffffff16565b905080945050505050919050565b6203f48081565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112d557600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561131b573d6000803e3d6000fd5b50565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461137657600080fd5b6000611393670de0b6b3a76400008461259b90919063ffffffff16565b11611406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616e6e6f74206465706f736974203020546f6b656e7300000000000000000081525060200191505060405180910390fd5b734e085036a1b732cbe4ffb1c12ddfdd87e7c3664d73ffffffffffffffffffffffffffffffffffffffff166323b872dd8430611453670de0b6b3a76400008761259b90919063ffffffff16565b6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156114c357600080fd5b505af11580156114d7573d6000803e3d6000fd5b505050506040513d60208110156114ed57600080fd5b8101908080519060200190929190505050611570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f496e73756666696369656e7420546f6b656e20416c6c6f77616e63650000000081525060200191505060405180910390fd5b61157983612305565b80600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506115d28260035461265890919063ffffffff16565b6003819055506116446115f6670de0b6b3a76400008461259b90919063ffffffff16565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461265890919063ffffffff16565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061169b8360046125e390919063ffffffff16565b6116f9576116b383600461267490919063ffffffff16565b5080600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b60076020528060005260406000206000915090505481565b60096020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461178657600080fd5b734e085036a1b732cbe4ffb1c12ddfdd87e7c3664d73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156117fe576117d6610a48565b8111156117e257600080fd5b6117f78160025461265890919063ffffffff16565b6002819055505b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561186f57600080fd5b505af1158015611883573d6000803e3d6000fd5b505050506040513d602081101561189957600080fd5b810190808051906020019092919050505050505050565b611f4081565b600a6020528060005260406000206000915090505481565b600080600090506000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611985576119826002611974600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054426122ee90919063ffffffff16565b6125ca90919063ffffffff16565b90505b6000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000611a1b612710611a0d6203f4806119ff876119f16103e88961259b90919063ffffffff16565b61259b90919063ffffffff16565b6125ca90919063ffffffff16565b6125ca90919063ffffffff16565b9050809350505050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611afd57611afa6002611aec600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054426122ee90919063ffffffff16565b6125ca90919063ffffffff16565b90505b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000611b93612710611b856203f480611b7787611b696103e88961259b90919063ffffffff16565b61259b90919063ffffffff16565b6125ca90919063ffffffff16565b6125ca90919063ffffffff16565b90506000611bac600154836125ca90919063ffffffff16565b90503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611bf4573d6000803e3d6000fd5b5042600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505050565b6000611c558260046125e390919063ffffffff16565b611c625760009050611da9565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415611cb35760009050611da9565b6000611d07600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054426122ee90919063ffffffff16565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000611da0612710611d926301e13380611d8487611d76611f408961259b90919063ffffffff16565b61259b90919063ffffffff16565b6125ca90919063ffffffff16565b6125ca90919063ffffffff16565b90508093505050505b919050565b734e085036a1b732cbe4ffb1c12ddfdd87e7c3664d81565b60008111611e3c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616e6e6f74206465706f736974203020546f6b656e7300000000000000000081525060200191505060405180910390fd5b734e085036a1b732cbe4ffb1c12ddfdd87e7c3664d73ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611edf57600080fd5b505af1158015611ef3573d6000803e3d6000fd5b505050506040513d6020811015611f0957600080fd5b8101908080519060200190929190505050611f8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f496e73756666696369656e7420546f6b656e20416c6c6f77616e63650000000081525060200191505060405180910390fd5b611f9533612305565b611f9e336126a4565b611ff081600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461265890919063ffffffff16565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506120488160035461265890919063ffffffff16565b6003819055506120623360046125e390919063ffffffff16565b6120c05761207a33600461267490919063ffffffff16565b5042600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b50565b600b6020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461213357600080fd5b8060018190555050565b61214633612305565b565b6301e1338081565b60066020528060005260406000206000915090505481565b6103e881565b60035481565b60015481565b565b60025481565b60fa81565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146121df57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561221957600080fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60086020528060005260406000206000915090505481565b6000828211156122fa57fe5b818303905092915050565b600061231082611c3f565b9050600081111561255357734e085036a1b732cbe4ffb1c12ddfdd87e7c3664d73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156123a057600080fd5b505af11580156123b4573d6000803e3d6000fd5b505050506040513d60208110156123ca57600080fd5b810190808051906020019092919050505061244d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f436f756c64206e6f74207472616e7366657220746f6b656e732e00000000000081525060200191505060405180910390fd5b61249f81600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461265890919063ffffffff16565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506124f78160025461265890919063ffffffff16565b6002819055507f586b2e63a21a7a4e1402e36f48ce10cb1ec94684fea254c186b76d1f98ecf1308282604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15b42600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600080828402905060008414806125ba5750828482816125b757fe5b04145b6125c057fe5b8091505092915050565b6000808284816125d657fe5b0490508091505092915050565b600061260b836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6126eb565b905092915050565b600061263b836000018373ffffffffffffffffffffffffffffffffffffffff1660001b61270e565b905092915050565b6000612651826000016127f6565b9050919050565b60008082840190508381101561266a57fe5b8091505092915050565b600061269c836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612807565b905092915050565b42600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b600080836001016000848152602001908152602001600020541415905092915050565b600080836001016000848152602001908152602001600020549050600081146127ea576000600182039050600060018660000180549050039050600086600001828154811061275957fe5b906000526020600020015490508087600001848154811061277657fe5b90600052602060002001819055506001830187600101600083815260200190815260200160002081905550866000018054806127ae57fe5b600190038181906000526020600020016000905590558660010160008781526020019081526020016000206000905560019450505050506127f0565b60009150505b92915050565b600081600001805490509050919050565b600061281383836126eb565b61286c578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050612871565b600090505b9291505056fea26469706673582212204eaa97c65eedfc92e6fd953cd98e609b17e1a9820f277366b49b3369d4262a4964736f6c634300060c0033
Deployed Bytecode Sourcemap
10029:8699:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13883:95;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10771:41;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17788:261;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15357:1448;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13774:99;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11971:628;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10539:43;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16899:105;;;;;;;;;;;;;:::i;:::-;;14636:711;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11020:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11126:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18350:375;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10391:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11183:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12610:562;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9060:20;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17015:681;;;;;;;;;;;;;:::i;:::-;;13190:572;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10261:81;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;13996:621;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11233:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18138:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16817:74;;;;;;;;;;;;;:::i;:::-;;10486:46;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10965:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10436:37;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10867:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10595:28;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18057:69;;;:::i;:::-;;10825:35;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10673:43;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9679:178;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11071:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13883:95;13930:4;13954:16;;13947:23;;13883:95;:::o;10771:41::-;10804:8;10771:41;:::o;17788:261::-;17843:4;17752:23;17864:19;;:42;17860:83;;17930:1;17923:8;;;;17860:83;17953:14;17970:44;17994:19;;17752:23;17970;;:44;;;;:::i;:::-;17953:61;;18032:9;18025:16;;;17788:261;;:::o;15357:1448::-;15454:16;15423:15;:27;15439:10;15423:27;;;;;;;;;;;;;;;;:47;;15415:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15533:25;15547:10;15533:13;:25::i;:::-;15583:8;15594:47;15637:3;15594:38;10713:3;15594:16;:20;;:38;;;;:::i;:::-;:42;;:47;;;;:::i;:::-;15583:58;;15652:19;15674:25;15695:3;15674:16;:20;;:25;;;;:::i;:::-;15652:47;;10300:42;15728:28;;;15757:5;;;;;;;;;;15764:3;15728:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15720:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10300:42;15824:28;;;15853:10;15865:14;15824:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15816:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15941:36;15962:14;15941:16;;:20;;:36;;;;:::i;:::-;15922:16;:55;;;;16002:13;16065:1;16037:13;:25;16051:10;16037:25;;;;;;;;;;;;;;;;:29;16034:127;;;16093:41;16132:1;16093:34;16101:13;:25;16115:10;16101:25;;;;;;;;;;;;;;;;16093:3;:7;;:34;;;;:::i;:::-;:38;;:41;;;;:::i;:::-;16082:52;;16034:127;16183:10;16196:191;16383:3;16196:152;10576:6;16196:103;16290:8;16196:59;10469:4;16196:14;:48;;:59;;;;:::i;:::-;:93;;:103;;;;:::i;:::-;:137;;:152;;;;:::i;:::-;:186;;:191;;;;:::i;:::-;16183:204;;16438:8;16449:19;16459:8;;16449:5;:9;;:19;;;;:::i;:::-;16438:30;;16489:10;:19;;:24;16509:3;16489:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16557:3;16529:13;:25;16543:10;16529:25;;;;;;;;;;;;;;;:31;;;;16605:49;16637:16;16605:15;:27;16621:10;16605:27;;;;;;;;;;;;;;;;:31;;:49;;;;:::i;:::-;16575:15;:27;16591:10;16575:27;;;;;;;;;;;;;;;:79;;;;16679:28;16696:10;16679:7;:16;;:28;;;;:::i;:::-;:64;;;;;16742:1;16711:15;:27;16727:10;16711:27;;;;;;;;;;;;;;;;:32;16679:64;16675:123;;;16760:26;16775:10;16760:7;:14;;:26;;;;:::i;:::-;;16675:123;15357:1448;;;;;;:::o;13774:99::-;13825:4;13849:16;:7;:14;:16::i;:::-;13842:23;;13774:99;:::o;11971:628::-;12030:4;12050:13;12066:1;12050:17;;12110:1;12085:13;:22;12099:7;12085:22;;;;;;;;;;;;;;;;:26;12082:121;;;12138:38;12174:1;12138:31;12146:13;:22;12160:7;12146:22;;;;;;;;;;;;;;;;12138:3;:7;;:31;;;;:::i;:::-;:35;;:38;;;;:::i;:::-;12127:49;;12082:121;12219:17;12239:15;:24;12255:7;12239:24;;;;;;;;;;;;;;;;12219:44;;12296:10;12309:189;12494:3;12309:150;10576:6;12309:101;12401:8;12309:57;10469:4;12309:12;:46;;:57;;;;:::i;:::-;:91;;:101;;;;:::i;:::-;:135;;:150;;;;:::i;:::-;:184;;:189;;;;:::i;:::-;12296:202;;12518:8;12529:19;12539:8;;12529:5;:9;;:19;;;;:::i;:::-;12518:30;;12576:3;12569:10;;;;;;11971:628;;;:::o;10539:43::-;10576:6;10539:43;:::o;16899:105::-;9490:5;;;;;;;;;;9476:19;;:10;:19;;;9468:28;;;;;;16954:10:::1;:19;;:42;16974:21;16954:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;16899:105::o:0;14636:711::-;9490:5;;;;;;;;;;9476:19;;:10;:19;;;9468:28;;;;;;14771:1:::1;14745:23;14763:4;14745:13;:17;;:23;;;;:::i;:::-;:27;14737:63;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;10300:42;14819:32;;;14852:7;14869:4;14876:23;14894:4;14876:13;:17;;:23;;;;:::i;:::-;14819:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;14811:122;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;14954:22;14968:7;14954:13;:22::i;:::-;15012:9;14987:13;:22;15001:7;14987:22;;;;;;;;;;;;;;;:34;;;;15055:35;15076:13;15055:16;;:20;;:35;;;;:::i;:::-;15036:16;:54;;;;15140:53;15169:23;15187:4;15169:13;:17;;:23;;;;:::i;:::-;15140:15;:24;15156:7;15140:24;;;;;;;;;;;;;;;;:28;;:53;;;;:::i;:::-;15113:15;:24;15129:7;15113:24;;;;;;;;;;;;;;;:80;;;;15219:25;15236:7;15219;:16;;:25;;;;:::i;:::-;15214:126;;15261:20;15273:7;15261;:11;;:20;;;;:::i;:::-;;15319:9;15296:11;:20;15308:7;15296:20;;;;;;;;;;;;;;;:32;;;;15214:126;14636:711:::0;;;:::o;11020:44::-;;;;;;;;;;;;;;;;;:::o;11126:50::-;;;;;;;;;;;;;;;;;:::o;18350:375::-;9490:5;;;;;;;;;;9476:19;;:10;:19;;;9468:28;;;;;;10300:42:::1;18461:26;;:10;:26;;;18457:210;;;18518:24;:22;:24::i;:::-;18508:7;:34;18504:83;;;18563:8;::::0;::::1;18504:83;18623:32;18647:7;18623:19;;:23;;:32;;;;:::i;:::-;18601:19;:54;;;;18457:210;18683:10;18677:26;;;18704:3;18709:7;18677:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;18350:375:::0;;;:::o;10391:38::-;10425:4;10391:38;:::o;11183:43::-;;;;;;;;;;;;;;;;;:::o;12610:562::-;12673:4;12693:13;12709:1;12693:17;;12753:1;12728:13;:22;12742:7;12728:22;;;;;;;;;;;;;;;;:26;12725:121;;;12781:38;12817:1;12781:31;12789:13;:22;12803:7;12789:22;;;;;;;;;;;;;;;;12781:3;:7;;:31;;;;:::i;:::-;:35;;:38;;;;:::i;:::-;12770:49;;12725:121;12862:17;12882:15;:24;12898:7;12882:24;;;;;;;;;;;;;;;;12862:44;;12939:10;12952:189;13137:3;12952:150;10576:6;12952:101;13044:8;12952:57;10469:4;12952:12;:46;;:57;;;;:::i;:::-;:91;;:101;;;;:::i;:::-;:135;;:150;;;;:::i;:::-;:184;;:189;;;;:::i;:::-;12939:202;;13159:5;13152:12;;;;;12610:562;;;:::o;9060:20::-;;;;;;;;;;;;:::o;17015:681::-;17059:13;17122:1;17094:13;:25;17108:10;17094:25;;;;;;;;;;;;;;;;:29;17091:127;;;17150:41;17189:1;17150:34;17158:13;:25;17172:10;17158:25;;;;;;;;;;;;;;;;17150:3;:7;;:34;;;;:::i;:::-;:38;;:41;;;;:::i;:::-;17139:52;;17091:127;17234:17;17254:15;:27;17270:10;17254:27;;;;;;;;;;;;;;;;17234:47;;17314:10;17327:189;17512:3;17327:150;10576:6;17327:101;17419:8;17327:57;10469:4;17327:12;:46;;:57;;;;:::i;:::-;:91;;:101;;;;:::i;:::-;:135;;:150;;;;:::i;:::-;:184;;:189;;;;:::i;:::-;17314:202;;17567:8;17578:19;17588:8;;17578:5;:9;;:19;;;;:::i;:::-;17567:30;;17618:10;:19;;:24;17638:3;17618:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17685:3;17657:13;:25;17671:10;17657:25;;;;;;;;;;;;;;;:31;;;;17015:681;;;;:::o;13190:572::-;13252:4;13274:25;13291:7;13274;:16;;:25;;;;:::i;:::-;13269:40;;13308:1;13301:8;;;;13269:40;13352:1;13324:15;:24;13340:7;13324:24;;;;;;;;;;;;;;;;:29;13320:43;;;13362:1;13355:8;;;;13320:43;13376:13;13392:33;13400:15;:24;13416:7;13400:24;;;;;;;;;;;;;;;;13392:3;:7;;:33;;;;:::i;:::-;13376:49;;13436:17;13456:15;:24;13472:7;13456:24;;;;;;;;;;;;;;;;13436:44;;13501:16;13520:191;13707:3;13520:152;10524:8;13520:102;13613:8;13520:58;10425:4;13520:12;:46;;:58;;;;:::i;:::-;:92;;:102;;;;:::i;:::-;:136;;:152;;;;:::i;:::-;:186;;:191;;;;:::i;:::-;13501:210;;13743:11;13736:18;;;;;13190:572;;;;:::o;10261:81::-;10300:42;10261:81;:::o;13996:621::-;14073:1;14057:13;:17;14049:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10300:42;14121:32;;;14154:10;14174:4;14181:13;14121:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14113:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14249:25;14263:10;14249:13;:25::i;:::-;14285:23;14297:10;14285:11;:23::i;:::-;14359:46;14391:13;14359:15;:27;14375:10;14359:27;;;;;;;;;;;;;;;;:31;;:46;;;;:::i;:::-;14329:15;:27;14345:10;14329:27;;;;;;;;;;;;;;;:76;;;;14435:35;14456:13;14435:16;;:20;;:35;;;;:::i;:::-;14416:16;:54;;;;14486:28;14503:10;14486:7;:16;;:28;;;;:::i;:::-;14481:129;;14531:23;14543:10;14531:7;:11;;:23;;;;:::i;:::-;;14595:3;14569:11;:23;14581:10;14569:23;;;;;;;;;;;;;;;:29;;;;14481:129;13996:621;:::o;11233:46::-;;;;;;;;;;;;;;;;;:::o;18138:97::-;9490:5;;;;;;;;;;9476:19;;:10;:19;;;9468:28;;;;;;18219:7:::1;18208:8;:18;;;;18138:97:::0;:::o;16817:74::-;16858:25;16872:10;16858:13;:25::i;:::-;16817:74::o;10486:46::-;10524:8;10486:46;:::o;10965:48::-;;;;;;;;;;;;;;;;;:::o;10436:37::-;10469:4;10436:37;:::o;10867:32::-;;;;:::o;10595:28::-;;;;:::o;18057:69::-;:::o;10825:35::-;;;;:::o;10673:43::-;10713:3;10673:43;:::o;9679:178::-;9490:5;;;;;;;;;;9476:19;;:10;:19;;;9468:28;;;;;;9776:1:::1;9756:22;;:8;:22;;;;9748:31;;;::::0;::::1;;9819:8;9791:37;;9812:5;::::0;::::1;;;;;;;;9791:37;;;;;;;;;;;;9843:8;9835:5;::::0;:16:::1;;;;;;;;;;;;;;;;;;9679:178:::0;:::o;11071:48::-;;;;;;;;;;;;;;;;;:::o;614:113::-;672:7;700:1;695;:6;;688:14;;;;720:1;716;:5;709:12;;614:113;;;;:::o;11292:517::-;11351:16;11370:23;11385:7;11370:14;:23::i;:::-;11351:42;;11422:1;11408:11;:15;11404:357;;;10300:42;11448:28;;;11477:7;11486:11;11448:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11440:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11573:43;11604:11;11573:17;:26;11591:7;11573:26;;;;;;;;;;;;;;;;:30;;:43;;;;:::i;:::-;11544:17;:26;11562:7;11544:26;;;;;;;;;;;;;;;:72;;;;11653:36;11677:11;11653:19;;:23;;:36;;;;:::i;:::-;11631:19;:58;;;;11709:40;11728:7;11737:11;11709:40;;;;;;;;;;;;;;;;;;;;;;;;;;11404:357;11798:3;11771:15;:24;11787:7;11771:24;;;;;;;;;;;;;;;:30;;;;11292:517;;:::o;185:147::-;243:7;259:9;275:1;271;:5;259:17;;295:1;290;:6;:20;;;;309:1;304;300;:5;;;;;;:10;290:20;283:28;;;;325:1;318:8;;;185:147;;;;:::o;338:270::-;396:7;487:9;503:1;499;:5;;;;;;487:17;;601:1;594:8;;;338:270;;;;:::o;6375:158::-;6455:4;6479:46;6489:3;:10;;6517:5;6509:14;;6501:23;;6479:9;:46::i;:::-;6472:53;;6375:158;;;;:::o;6140:149::-;6213:4;6237:44;6245:3;:10;;6273:5;6265:14;;6257:23;;6237:7;:44::i;:::-;6230:51;;6140:149;;;;:::o;6619:117::-;6682:7;6709:19;6717:3;:10;;6709:7;:19::i;:::-;6702:26;;6619:117;;;:::o;733:133::-;791:7;807:9;823:1;819;:5;807:17;;843:1;838;:6;;831:14;;;;859:1;852:8;;;733:133;;;;:::o;5821:143::-;5891:4;5915:41;5920:3;:10;;5948:5;5940:14;;5932:23;;5915:4;:41::i;:::-;5908:48;;5821:143;;;;:::o;11823:141::-;11925:3;11900:13;:22;11914:7;11900:22;;;;;;;;;;;;;;;:28;;;;11823:141;:::o;4695:129::-;4768:4;4815:1;4792:3;:12;;:19;4805:5;4792:19;;;;;;;;;;;;:24;;4785:31;;4695:129;;;;:::o;3065:1544::-;3131:4;3249:18;3270:3;:12;;:19;3283:5;3270:19;;;;;;;;;;;;3249:40;;3320:1;3306:10;:15;3302:1300;;3668:21;3705:1;3692:10;:14;3668:38;;3721:17;3762:1;3741:3;:11;;:18;;;;:22;3721:42;;4008:17;4028:3;:11;;4040:9;4028:22;;;;;;;;;;;;;;;;4008:42;;4174:9;4145:3;:11;;4157:13;4145:26;;;;;;;;;;;;;;;:38;;;;4293:1;4277:13;:17;4251:3;:12;;:23;4264:9;4251:23;;;;;;;;;;;:43;;;;4403:3;:11;;:17;;;;;;;;;;;;;;;;;;;;;;;;4498:3;:12;;:19;4511:5;4498:19;;;;;;;;;;;4491:26;;;4541:4;4534:11;;;;;;;;3302:1300;4585:5;4578:12;;;3065:1544;;;;;:::o;4910:109::-;4966:7;4993:3;:11;;:18;;;;4986:25;;4910:109;;;:::o;2475:414::-;2538:4;2560:21;2570:3;2575:5;2560:9;:21::i;:::-;2555:327;;2598:3;:11;;2615:5;2598:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2781:3;:11;;:18;;;;2759:3;:12;;:19;2772:5;2759:19;;;;;;;;;;;:40;;;;2821:4;2814:11;;;;2555:327;2865:5;2858:12;;2475:414;;;;;:::o
Swarm Source
ipfs://4eaa97c65eedfc92e6fd953cd98e609b17e1a9820f277366b49b3369d4262a49
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.