More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 290 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 20745991 | 146 days ago | IN | 0 ETH | 0.00180553 | ||||
Withdraw | 12359324 | 1376 days ago | IN | 0 ETH | 0.01482315 | ||||
Claim | 12312502 | 1383 days ago | IN | 0 ETH | 0.0136494 | ||||
Claim | 12312401 | 1383 days ago | IN | 0 ETH | 0.01394404 | ||||
Claim | 12303316 | 1384 days ago | IN | 0 ETH | 0.01776978 | ||||
Claim | 12099148 | 1416 days ago | IN | 0 ETH | 0.0450888 | ||||
Claim | 11870885 | 1451 days ago | IN | 0 ETH | 0.028 | ||||
Claim | 11870840 | 1451 days ago | IN | 0 ETH | 0.0164 | ||||
Claim | 11804917 | 1461 days ago | IN | 0 ETH | 0.0345 | ||||
Claim | 11804890 | 1461 days ago | IN | 0 ETH | 0.00459 | ||||
Update Dev Addre... | 11789828 | 1463 days ago | IN | 0 ETH | 0.00433944 | ||||
Claim | 11711478 | 1476 days ago | IN | 0 ETH | 0.0367481 | ||||
Withdraw | 11691098 | 1479 days ago | IN | 0 ETH | 0.02522974 | ||||
Claim | 11677539 | 1481 days ago | IN | 0 ETH | 0.01922604 | ||||
Withdraw | 11666625 | 1482 days ago | IN | 0 ETH | 0.03327112 | ||||
Claim | 11666592 | 1482 days ago | IN | 0 ETH | 0.04362361 | ||||
Claim | 11666590 | 1482 days ago | IN | 0 ETH | 0.0468928 | ||||
Claim | 11664395 | 1483 days ago | IN | 0 ETH | 0.01821785 | ||||
Claim | 11654932 | 1484 days ago | IN | 0 ETH | 0.02091276 | ||||
Claim | 11646977 | 1485 days ago | IN | 0 ETH | 0.00144 | ||||
Claim | 11627594 | 1488 days ago | IN | 0 ETH | 0.02068748 | ||||
Withdraw | 11622546 | 1489 days ago | IN | 0 ETH | 0.02544724 | ||||
Claim | 11608093 | 1491 days ago | IN | 0 ETH | 0.02698368 | ||||
Claim | 11607325 | 1492 days ago | IN | 0 ETH | 0.02461662 | ||||
Claim | 11574588 | 1497 days ago | IN | 0 ETH | 0.01467264 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
OTEN_Farming
Compiler Version
v0.5.17+commit.d19bba13
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-11-23 */ pragma solidity ^0.5.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. * * _Available since v2.4.0._ */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * * _Available since v2.4.0._ */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * * _Available since v2.4.0._ */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } /** * @dev Interface of the ERC20 standard as defined in the EIP. Does not include * the optional functions; to access them see {ERC20Detailed}. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Optional functions from the ERC20 standard. */ contract ERC20Detailed is IERC20 { string private _name; string private _symbol; uint8 private _decimals; /** * @dev Sets the values for `name`, `symbol`, and `decimals`. All three of * these values are immutable: they can only be set once during * construction. */ constructor (string memory name, string memory symbol, uint8 decimals) public { _name = name; _symbol = symbol; _decimals = decimals; } /** * @dev Returns the name of the token. */ function name() public view returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view returns (uint8) { return _decimals; } } /** * @dev Collection of functions related to the address type, */ library Address { /** * @dev Returns true if `account` is a contract. * * This test is non-exhaustive, and there may be false-negatives: during the * execution of a contract's constructor, its address will be reported as * not containing a contract. * * > It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. */ function isContract(address account) internal view returns (bool) { // This method relies in extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } } /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. // A Solidity high level call has three parts: // 1. The target address is checked to verify it contains contract code // 2. The call itself is made, and success asserted // 3. The return value is decoded, which in turn checks the size of the returned data. // solhint-disable-next-line max-line-length require(address(token).isContract(), "SafeERC20: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = address(token).call(data); require(success, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } /** * @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]. * * _Since v2.5.0:_ this module is now much more gas efficient, given net gas * metering changes introduced in the Istanbul hardfork. */ contract ReentrancyGuard { bool private _notEntered; constructor () internal { // Storing an initial 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 percetange 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. _notEntered = true; } /** * @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 make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_notEntered, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _notEntered = false; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _notEntered = true; } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = msg.sender; _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(isOwner(), "Ownable: caller is not the owner"); _; } /** * @dev Returns true if the caller is the current owner. */ function isOwner() public view returns (bool) { return msg.sender == _owner; } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } contract OTEN_Farming is Ownable, ReentrancyGuard { using SafeMath for uint256; using SafeERC20 for IERC20; using SafeERC20 for ERC20Detailed; uint256 private _decimalConverter = 10**18; uint256 private _divRate = 10000; address private _DevAddress; struct PoolList{ IERC20 lptoken; IERC20 token; IERC20 tokenReward; uint256 rewardBlock; bool pollActive; uint256 rewardRemains; uint256 devFee; uint256 lockLP; uint256 lptotal; uint256 totalusers; uint256 totalpendingReward; uint256 poolLastBlockUpdate; uint256 stakeFee; uint256 withdrawFee; } struct UserList { uint256 blockStart; uint256 stakingAmount; uint256 lockedAmount; uint256 totalstakingAmount; uint256 pendingReward; uint256 claimReward; } struct PoolTemp { uint256 devFeeAmount; uint256 lockedAmount; uint256 stakeFeeAmount; uint256 withdrawFeeAmount; uint256 Amount; uint256 AmountWithFee; uint256 LPAmount; uint256 LPAmountWithFee; uint256 BlockStart; uint256 BlockEnd; uint256 TotalShare; uint256 TotalReward; uint256 totalpendingReward; uint256 TotalBlock; uint256 TotalRewardShare; uint256 BlockRemain; uint256 counter; uint256 counter2; address account; uint256 accountShare; uint256 accountReward; uint256 accountReward2; } PoolList[] public poolList; mapping(uint => address[]) private pooldatas; mapping (uint256 => mapping (address => UserList)) public userList; mapping(address => bool) public existingPools; constructor(address DevAddress) public Ownable() { _DevAddress = DevAddress; _initial_Pool(); } function _initial_Pool() internal{ // addPool(address _lptoken, address _token, address _tokenReward, uint256 _rewardBlock, uint256 _rewardRemains, uint256 _devFee, uint256 _lockLP); // OTEN/ETH // addPool(address _lptoken, address _token, address _tokenReward, uint256 _rewardBlock, uint256 _rewardRemains, uint256 _devFee, uint256 _lockLP); // GOTEN/ETH // addPool(address _lptoken, address _token, address _tokenReward, uint256 _rewardBlock, uint256 _rewardRemains, uint256 _devFee, uint256 _lockLP); // OTEN/GOTEN } function addPool(address _lptoken, address _token, address _tokenReward, uint256 _rewardBlock, uint256 _rewardRemains, uint256 _devFee, uint256 _lockLP, uint256 _stakeFee, uint256 _withdrawFee) external onlyOwner { require(existingPools[_lptoken] != true, "pool exists"); require(_devFee + _lockLP < 10000, "Total Fee & Locked Token can't be bigger than 100%"); poolList.push(PoolList( IERC20(_lptoken) , IERC20(_token) , IERC20(_tokenReward) , _rewardBlock , true , _rewardRemains , _devFee , _lockLP , 0 , 0 , 0 , 0 ,_stakeFee ,_withdrawFee )); existingPools[_lptoken] = true; } function stakeLP(uint256 _pid, uint256 _amount) external nonReentrant { PoolTemp memory temp; require(_amount > 0, "deposit something"); uint256 countPool = poolList.length; require(_pid < countPool, "Not a valid Pool"); _updatePool(_pid); require(poolList[_pid].pollActive == true, "pool closed"); if(userList[_pid][msg.sender].totalstakingAmount == 0){ poolList[_pid].totalusers += 1; pooldatas[_pid].push(msg.sender); } poolList[_pid].lptoken.safeTransferFrom(msg.sender, address(this), _amount); uint256 _stakeAmount = _amount; if(poolList[_pid].devFee > 0){ temp.devFeeAmount = (_amount * poolList[_pid].devFee) / _divRate; poolList[_pid].lptoken.safeTransfer(_DevAddress, temp.devFeeAmount); emit DevFee(msg.sender, address(poolList[_pid].lptoken), poolList[_pid].devFee, temp.devFeeAmount); _stakeAmount -= temp.devFeeAmount; } poolList[_pid].lptotal += _stakeAmount; if(poolList[_pid].lockLP > 0){ temp.lockedAmount = (_amount * poolList[_pid].lockLP) / _divRate; userList[_pid][msg.sender].lockedAmount += temp.lockedAmount; emit LockStaked(msg.sender, address(poolList[_pid].lptoken), poolList[_pid].lockLP, temp.lockedAmount); _stakeAmount -= temp.lockedAmount; } userList[_pid][msg.sender].stakingAmount += _stakeAmount; userList[_pid][msg.sender].totalstakingAmount += _stakeAmount + temp.lockedAmount; emit Staked(msg.sender, address(poolList[_pid].lptoken) ,_stakeAmount); } function _updatePool(uint256 _pid) internal { PoolTemp memory temp; temp.BlockStart = poolList[_pid].poolLastBlockUpdate + 1; temp.BlockEnd = block.number; if(temp.BlockStart > temp.BlockEnd){ temp.BlockStart = temp.BlockEnd; } temp.TotalBlock = temp.BlockEnd - temp.BlockStart; temp.TotalReward = 0; temp.totalpendingReward = poolList[_pid].totalpendingReward; temp.BlockRemain = temp.TotalBlock; if(poolList[_pid].totalusers > 0){ temp.TotalShare = percent(poolList[_pid].lptotal, _decimalConverter, 4); temp.TotalReward = temp.TotalBlock * poolList[_pid].rewardBlock * temp.TotalShare / _divRate; temp.totalpendingReward += temp.TotalReward; } if(temp.TotalReward > 0){ if(temp.totalpendingReward > poolList[_pid].rewardRemains){ poolList[_pid].pollActive = false; temp.totalpendingReward = poolList[_pid].rewardRemains; temp.BlockRemain = (poolList[_pid].rewardRemains - poolList[_pid].totalpendingReward) / (poolList[_pid].rewardBlock * temp.TotalShare / _divRate) / _decimalConverter; temp.TotalReward = temp.BlockRemain * poolList[_pid].rewardBlock; } temp.TotalRewardShare = temp.TotalReward; for(temp.counter = 0; temp.counter < pooldatas[_pid].length;temp.counter++){ temp.account = pooldatas[_pid][temp.counter]; if(temp.account != address(0)){ temp.accountShare = percent(userList[_pid][temp.account].totalstakingAmount, _decimalConverter, 4); temp.accountReward = temp.BlockRemain * (poolList[_pid].rewardBlock * temp.accountShare / _divRate); if(temp.TotalBlock > temp.BlockRemain){ temp.accountReward2 = poolList[_pid].rewardBlock * temp.accountShare / _divRate; if((temp.TotalRewardShare + temp.accountReward2) > temp.totalpendingReward) { temp.accountReward2 = temp.totalpendingReward - temp.TotalRewardShare; } temp.TotalRewardShare += temp.accountReward2; temp.accountReward += temp.accountReward2; } userList[_pid][temp.account].pendingReward += temp.accountReward; userList[_pid][temp.account].blockStart += block.number; } } } poolList[_pid].totalpendingReward = temp.totalpendingReward ; poolList[_pid].poolLastBlockUpdate = temp.BlockEnd; } function TotalPool() public view returns (uint256) { return poolList.length; } function pendingRewardsFromPool(uint256 _pid, address _user) public view returns (uint256) { PoolTemp memory temp; uint256 _pendingReward = 0; temp.BlockStart = poolList[_pid].poolLastBlockUpdate + 1; temp.BlockEnd = block.number; if(temp.BlockStart > temp.BlockEnd){ temp.BlockStart = temp.BlockEnd; } temp.TotalBlock = temp.BlockEnd - temp.BlockStart; temp.TotalReward = 0; temp.totalpendingReward = poolList[_pid].totalpendingReward; temp.BlockRemain = temp.TotalBlock; if(poolList[_pid].totalusers > 0){ temp.TotalShare = percent(poolList[_pid].lptotal, _decimalConverter, 4); temp.TotalReward = temp.TotalBlock * poolList[_pid].rewardBlock * temp.TotalShare / _divRate; temp.totalpendingReward += temp.TotalReward; } if(temp.TotalReward > 0){ if(temp.totalpendingReward > poolList[_pid].rewardRemains){ temp.totalpendingReward = poolList[_pid].rewardRemains; temp.BlockRemain = (poolList[_pid].rewardRemains - poolList[_pid].totalpendingReward) / (poolList[_pid].rewardBlock * temp.TotalShare / _divRate) / _decimalConverter; temp.TotalReward = temp.BlockRemain * poolList[_pid].rewardBlock; } temp.TotalRewardShare = temp.TotalReward; for(temp.counter = 0; temp.counter < pooldatas[_pid].length;temp.counter++){ temp.account = pooldatas[_pid][temp.counter]; if(temp.account != address(0)){ temp.accountShare = percent(userList[_pid][temp.account].totalstakingAmount, _decimalConverter, 4); temp.accountReward = temp.BlockRemain * (poolList[_pid].rewardBlock * temp.accountShare / _divRate); if(temp.TotalBlock > temp.BlockRemain){ temp.accountReward2 = poolList[_pid].rewardBlock * temp.accountShare / _divRate; if((temp.TotalRewardShare + temp.accountReward2) > temp.totalpendingReward) { temp.accountReward2 = temp.totalpendingReward - temp.TotalRewardShare; } temp.TotalRewardShare += temp.accountReward2; temp.accountReward += temp.accountReward2; } if(temp.account == _user){ _pendingReward = userList[_pid][temp.account].pendingReward + temp.accountReward; } } } } return _pendingReward; } function claim(uint256 _pid) public nonReentrant { PoolTemp memory temp; uint256 countPool = poolList.length; require(_pid < countPool, "Not a valid Pool"); _updatePool(_pid); temp.Amount = userList[_pid][msg.sender].pendingReward; require(temp.Amount > 0, "not have claimable reward"); temp.AmountWithFee = temp.Amount; if(poolList[_pid].stakeFee > 0){ temp.stakeFeeAmount = (temp.Amount * poolList[_pid].stakeFee) / _divRate; poolList[_pid].tokenReward.safeTransfer(_DevAddress, temp.stakeFeeAmount); emit ClaimFee(msg.sender, address(poolList[_pid].tokenReward), poolList[_pid].stakeFee, temp.stakeFeeAmount); temp.AmountWithFee -= temp.stakeFeeAmount; } if(temp.AmountWithFee > 0){ poolList[_pid].tokenReward.safeTransfer(msg.sender, temp.AmountWithFee); poolList[_pid].rewardRemains -= temp.Amount; userList[_pid][msg.sender].claimReward += temp.Amount; poolList[_pid].totalpendingReward -= temp.Amount; userList[_pid][msg.sender].pendingReward -= temp.Amount; userList[_pid][msg.sender].blockStart = block.number; emit ClaimReward(msg.sender, address(poolList[_pid].tokenReward) ,temp.AmountWithFee); } userList[_pid][msg.sender].blockStart = block.number; } function withdraw(uint256 _pid) public nonReentrant { PoolTemp memory temp; uint256 countPool = poolList.length; require(_pid < countPool, "Not a valid Pool"); require(userList[_pid][msg.sender].stakingAmount > 0, "not have withdrawn balance"); _updatePool(_pid); temp.Amount = userList[_pid][msg.sender].pendingReward; temp.AmountWithFee = temp.Amount; temp.LPAmount = userList[_pid][msg.sender].stakingAmount; temp.LPAmountWithFee = temp.LPAmount; if(poolList[_pid].stakeFee > 0){ temp.stakeFeeAmount = (temp.Amount * poolList[_pid].stakeFee) / _divRate; poolList[_pid].tokenReward.safeTransfer(_DevAddress, temp.stakeFeeAmount); emit ClaimFee(msg.sender, address(poolList[_pid].tokenReward), poolList[_pid].stakeFee, temp.stakeFeeAmount); temp.AmountWithFee -= temp.stakeFeeAmount; } if(temp.AmountWithFee > 0){ poolList[_pid].tokenReward.safeTransfer(msg.sender, temp.AmountWithFee); poolList[_pid].rewardRemains -= temp.Amount; userList[_pid][msg.sender].claimReward += temp.Amount; poolList[_pid].totalpendingReward -= temp.Amount; userList[_pid][msg.sender].pendingReward -= temp.Amount; userList[_pid][msg.sender].blockStart = block.number; emit ClaimReward(msg.sender, address(poolList[_pid].lptoken) ,temp.AmountWithFee); } if(poolList[_pid].withdrawFee > 0){ temp.withdrawFeeAmount = (temp.LPAmount * poolList[_pid].withdrawFee) / _divRate; poolList[_pid].lptoken.safeTransfer(_DevAddress, temp.withdrawFeeAmount); emit DevFee(msg.sender, address(poolList[_pid].lptoken), poolList[_pid].withdrawFee, temp.withdrawFeeAmount); temp.LPAmountWithFee -= temp.withdrawFeeAmount; } poolList[_pid].lptoken.safeTransfer(msg.sender, temp.LPAmountWithFee); userList[_pid][msg.sender].stakingAmount -= temp.LPAmount; userList[_pid][msg.sender].totalstakingAmount -= temp.LPAmount; poolList[_pid].lptotal -= temp.LPAmount; emit Withdraw(msg.sender, address(poolList[_pid].lptoken) ,temp.LPAmountWithFee); if(userList[_pid][msg.sender].totalstakingAmount == 0){ poolList[_pid].totalusers -= 1; if(poolList[_pid].totalusers > 0){ for(uint256 i = 0; i < pooldatas[_pid].length; i++) { if(pooldatas[_pid][i] == msg.sender){ delete pooldatas[_pid][i]; i = pooldatas[_pid].length; } } } else { delete pooldatas[_pid]; } } } function emergencyWithdraw(uint256 _pid) public nonReentrant { PoolTemp memory temp; uint256 countPool = poolList.length; require(_pid < countPool, "Not a valid Pool"); require(userList[_pid][msg.sender].stakingAmount > 0, "not have balance"); _updatePool(_pid); temp.Amount = userList[_pid][msg.sender].pendingReward; temp.LPAmount = userList[_pid][msg.sender].stakingAmount; temp.LPAmountWithFee = temp.LPAmount; if(poolList[_pid].withdrawFee > 0){ temp.withdrawFeeAmount = (temp.LPAmount * poolList[_pid].withdrawFee) / _divRate; poolList[_pid].lptoken.safeTransfer(_DevAddress, temp.withdrawFeeAmount); emit DevFee(msg.sender, address(poolList[_pid].lptoken), poolList[_pid].withdrawFee, temp.withdrawFeeAmount); temp.LPAmountWithFee -= temp.withdrawFeeAmount; } poolList[_pid].lptoken.safeTransfer(msg.sender, temp.LPAmountWithFee); poolList[_pid].totalpendingReward -= temp.Amount; userList[_pid][msg.sender].pendingReward = 0; userList[_pid][msg.sender].stakingAmount -= temp.LPAmount; userList[_pid][msg.sender].totalstakingAmount -= temp.LPAmount; userList[_pid][msg.sender].blockStart = block.number; poolList[_pid].lptotal -= temp.LPAmount; emit EmergencyWithdraw(msg.sender, address(poolList[_pid].lptoken) ,temp.LPAmountWithFee); if(userList[_pid][msg.sender].totalstakingAmount == 0){ poolList[_pid].totalusers -= 1; if(poolList[_pid].totalusers > 0){ for(uint256 i = 0; i < pooldatas[_pid].length; i++) { if(pooldatas[_pid][i] == msg.sender){ delete pooldatas[_pid][i]; i = pooldatas[_pid].length; } } } else { delete pooldatas[_pid]; } } } function percent(uint numerator, uint denominator, uint precision) internal pure returns(uint quotient) { uint _numerator = numerator * 10 ** (precision+1); uint _quotient = ((_numerator / denominator) + 5) / 10; return ( _quotient); } function updateReward(uint _pid, uint256 _rewardBlock) external onlyOwner { uint256 countPool = poolList.length; require(_pid < countPool, "Not a valid Pool"); _updatePool(_pid); poolList[_pid].rewardBlock = _rewardBlock; } function updatePoolFee(uint _pid, uint256 _devFee, uint256 _lockLP, uint256 _stakeFee, uint256 _withdrawFee) external onlyOwner { uint256 countPool = poolList.length; require(_pid < countPool, "Not a valid Pool"); require(_devFee + _lockLP < 10000, "Total Fee & Locked Token can't be bigger than 100%"); _updatePool(_pid); poolList[_pid].devFee = _devFee; poolList[_pid].lockLP = _lockLP; poolList[_pid].stakeFee = _stakeFee; poolList[_pid].withdrawFee = _withdrawFee; } function addRewardSupply(uint _pid, uint256 _addAmount) external onlyOwner { uint256 countPool = poolList.length; require(_pid < countPool, "Not a valid Pool"); _updatePool(_pid); poolList[_pid].rewardRemains += _addAmount; poolList[_pid].pollActive = true; } function decreaseRewardSupply(uint _pid, uint256 _decreaseAmount) external onlyOwner { uint256 countPool = poolList.length; require(_pid < countPool, "Not a valid Pool"); _updatePool(_pid); require(poolList[_pid].rewardRemains - poolList[_pid].totalpendingReward > _decreaseAmount, "Cant Decrease Reward Remains"); poolList[_pid].rewardRemains -= _decreaseAmount; } function updateDevAddress(address DevAddress) external onlyOwner { _DevAddress = DevAddress; } event Staked(address indexed user, address lptoken, uint256 amount); event LockStaked(address indexed user, address lptoken, uint256 fee, uint256 amount); event DevFee(address indexed user, address lptoken, uint256 fee, uint256 amount); event ClaimReward(address indexed user, address tokenReward, uint256 amount); event ClaimFee(address indexed user, address tokenReward, uint256 fee, uint256 amount); event Withdraw(address indexed user, address lptoken, uint256 amount); event EmergencyWithdraw(address indexed user, address lptoken, uint256 amount); }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"DevAddress","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address","name":"tokenReward","type":"address"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ClaimFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address","name":"tokenReward","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ClaimReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address","name":"lptoken","type":"address"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"DevFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address","name":"lptoken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address","name":"lptoken","type":"address"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LockStaked","type":"event"},{"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":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address","name":"lptoken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address","name":"lptoken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"constant":true,"inputs":[],"name":"TotalPool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_lptoken","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_tokenReward","type":"address"},{"internalType":"uint256","name":"_rewardBlock","type":"uint256"},{"internalType":"uint256","name":"_rewardRemains","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_lockLP","type":"uint256"},{"internalType":"uint256","name":"_stakeFee","type":"uint256"},{"internalType":"uint256","name":"_withdrawFee","type":"uint256"}],"name":"addPool","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_addAmount","type":"uint256"}],"name":"addRewardSupply","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"claim","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_decreaseAmount","type":"uint256"}],"name":"decreaseRewardSupply","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"existingPools","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"pendingRewardsFromPool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolList","outputs":[{"internalType":"contract IERC20","name":"lptoken","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"contract IERC20","name":"tokenReward","type":"address"},{"internalType":"uint256","name":"rewardBlock","type":"uint256"},{"internalType":"bool","name":"pollActive","type":"bool"},{"internalType":"uint256","name":"rewardRemains","type":"uint256"},{"internalType":"uint256","name":"devFee","type":"uint256"},{"internalType":"uint256","name":"lockLP","type":"uint256"},{"internalType":"uint256","name":"lptotal","type":"uint256"},{"internalType":"uint256","name":"totalusers","type":"uint256"},{"internalType":"uint256","name":"totalpendingReward","type":"uint256"},{"internalType":"uint256","name":"poolLastBlockUpdate","type":"uint256"},{"internalType":"uint256","name":"stakeFee","type":"uint256"},{"internalType":"uint256","name":"withdrawFee","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"stakeLP","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"DevAddress","type":"address"}],"name":"updateDevAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_lockLP","type":"uint256"},{"internalType":"uint256","name":"_stakeFee","type":"uint256"},{"internalType":"uint256","name":"_withdrawFee","type":"uint256"}],"name":"updatePoolFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_rewardBlock","type":"uint256"}],"name":"updateReward","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"userList","outputs":[{"internalType":"uint256","name":"blockStart","type":"uint256"},{"internalType":"uint256","name":"stakingAmount","type":"uint256"},{"internalType":"uint256","name":"lockedAmount","type":"uint256"},{"internalType":"uint256","name":"totalstakingAmount","type":"uint256"},{"internalType":"uint256","name":"pendingReward","type":"uint256"},{"internalType":"uint256","name":"claimReward","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052670de0b6b3a76400006001556127106002553480156200002357600080fd5b506040516200519038038062005190833981810160405260208110156200004957600080fd5b81019080805190602001909291905050506000339050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506001600060146101000a81548160ff02191690831515021790555080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001676200016e60201b60201c565b5062000170565b565b61501080620001806000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c80638d64e236116100a257806397bc4e5c1161007157806397bc4e5c146104f8578063b371aa4e14610530578063eda836b8146105b5578063f2fde38b14610676578063f9ce8217146106ba57610116565b80638d64e236146103d45780638da5cb5b1461042a5780638f32d59b1461047457806393fcd2911461049657610116565b8063379607f5116100e9578063379607f5146102de57806349ed393c1461030c5780635312ea8e146103445780637bd486b314610372578063850337621461039057610116565b80630b50cd3e1461011b5780632a48235b146101535780632e1a7d4d1461027857806332f37387146102a6575b600080fd5b6101516004803603604081101561013157600080fd5b810190808035906020019092919080359060200190929190505050610716565b005b61017f6004803603602081101561016957600080fd5b8101908080359060200190929190505050610840565b604051808f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018c81526020018b1515151581526020018a81526020018981526020018881526020018781526020018681526020018581526020018481526020018381526020018281526020019e50505050505050505050505050505060405180910390f35b6102a46004803603602081101561028e57600080fd5b8101908080359060200190929190505050610926565b005b6102dc600480360360408110156102bc57600080fd5b8101908080359060200190929190803590602001909291905050506116c2565b005b61030a600480360360208110156102f457600080fd5b8101908080359060200190929190505050611fe4565b005b6103426004803603604081101561032257600080fd5b81019080803590602001909291908035906020019092919050505061271c565b005b6103706004803603602081101561035a57600080fd5b8101908080359060200190929190505050612902565b005b61037a6132c2565b6040518082815260200191505060405180910390f35b6103d2600480360360208110156103a657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506132cf565b005b610428600480360360a08110156103ea57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919050505061338d565b005b61043261357f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61047c6135a8565b604051808215151515815260200191505060405180910390f35b6104e2600480360360408110156104ac57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506135ff565b6040518082815260200191505060405180910390f35b61052e6004803603604081101561050e57600080fd5b810190808035906020019092919080359060200190929190505050613bb5565b005b61057c6004803603604081101561054657600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613d1f565b60405180878152602001868152602001858152602001848152602001838152602001828152602001965050505050505060405180910390f35b61067460048036036101208110156105cc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190505050613d68565b005b6106b86004803603602081101561068c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061419e565b005b6106fc600480360360208110156106d057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614224565b604051808215151515815260200191505060405180910390f35b61071e6135a8565b610790576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600480549050905080831061080f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4e6f7420612076616c696420506f6f6c0000000000000000000000000000000081525060200191505060405180910390fd5b61081883614244565b816004848154811061082657fe5b90600052602060002090600e020160030181905550505050565b6004818154811061084d57fe5b90600052602060002090600e02016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030154908060040160009054906101000a900460ff169080600501549080600601549080600701549080600801549080600901549080600a01549080600b01549080600c01549080600d015490508e565b600060149054906101000a900460ff166109a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60008060146101000a81548160ff0219169083151502179055506109ca614e56565b60006004805490509050808310610a49576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4e6f7420612076616c696420506f6f6c0000000000000000000000000000000081525060200191505060405180910390fd5b60006006600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015411610b12576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f6e6f7420686176652077697468647261776e2062616c616e636500000000000081525060200191505060405180910390fd5b610b1b83614244565b6006600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206004015482608001818152505081608001518260a00181815250506006600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101548260c00181815250508160c001518260e0018181525050600060048481548110610c0057fe5b90600052602060002090600e0201600c01541115610ddf5760025460048481548110610c2857fe5b90600052602060002090600e0201600c015483608001510281610c4757fe5b04826040018181525050610ce0600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040015160048681548110610c8957fe5b90600052602060002090600e020160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166148a89092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167fa5a56e24e8cbe4c43434b9fd1d71f3567e9897e6b194f6d0d2e0d638bc9aa05a60048581548110610d2557fe5b90600052602060002090600e020160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660048681548110610d6457fe5b90600052602060002090600e0201600c01548560400151604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a281604001518260a00181815103915081815250505b60008260a0015111156110a057610e59338360a0015160048681548110610e0257fe5b90600052602060002090600e020160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166148a89092919063ffffffff16565b816080015160048481548110610e6b57fe5b90600052602060002090600e02016005016000828254039250508190555081608001516006600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160008282540192505081905550816080015160048481548110610f0057fe5b90600052602060002090600e0201600a016000828254039250508190555081608001516006600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160008282540392505081905550436006600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055503373ffffffffffffffffffffffffffffffffffffffff167f7e77f685b38c861064cb08f2776eb5dfd3c82f652ed9f21221b8c53b75628e516004858154811061102057fe5b90600052602060002090600e020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168460a00151604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a25b6000600484815481106110af57fe5b90600052602060002090600e0201600d0154111561128e57600254600484815481106110d757fe5b90600052602060002090600e0201600d01548360c0015102816110f657fe5b0482606001818152505061118f600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683606001516004868154811061113857fe5b90600052602060002090600e020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166148a89092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167fa8211c588276c67876338858b1dac368f2e19e8401de7fbbf05c43265b2747ed600485815481106111d457fe5b90600052602060002090600e020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004868154811061121357fe5b90600052602060002090600e0201600d01548560600151604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a281606001518260e00181815103915081815250505b6112fb338360e00151600486815481106112a457fe5b90600052602060002090600e020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166148a89092919063ffffffff16565b8160c001516006600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101600082825403925050819055508160c001516006600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301600082825403925050819055508160c00151600484815481106113d757fe5b90600052602060002090600e0201600801600082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb6004858154811061143a57fe5b90600052602060002090600e020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168460e00151604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a260006006600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015414156116a25760016004848154811061152457fe5b90600052602060002090600e02016009016000828254039250508190555060006004848154811061155157fe5b90600052602060002090600e02016009015411156116815760008090505b600560008581526020019081526020016000208054905081101561167b573373ffffffffffffffffffffffffffffffffffffffff166005600086815260200190815260200160002082815481106115c257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561166e5760056000858152602001908152602001600020818154811061162757fe5b9060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600560008581526020019081526020016000208054905090505b808060010191505061156f565b506116a1565b6005600084815260200190815260200160002060006116a09190614f13565b5b5b50506001600060146101000a81548160ff02191690831515021790555050565b600060149054906101000a900460ff16611744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60008060146101000a81548160ff021916908315150217905550611766614e56565b600082116117dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6465706f73697420736f6d657468696e6700000000000000000000000000000081525060200191505060405180910390fd5b6000600480549050905080841061185b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4e6f7420612076616c696420506f6f6c0000000000000000000000000000000081525060200191505060405180910390fd5b61186484614244565b600115156004858154811061187557fe5b90600052602060002090600e020160040160009054906101000a900460ff16151514611909576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f706f6f6c20636c6f73656400000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006006600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301541415611a0a5760016004858154811061197457fe5b90600052602060002090600e020160090160008282540192505081905550600560008581526020019081526020016000203390806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505b611a7533308560048881548110611a1d57fe5b90600052602060002090600e020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614979909392919063ffffffff16565b6000839050600060048681548110611a8957fe5b90600052602060002090600e0201600601541115611c595760025460048681548110611ab157fe5b90600052602060002090600e020160060154850281611acc57fe5b04836000018181525050611b65600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846000015160048881548110611b0e57fe5b90600052602060002090600e020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166148a89092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167fa8211c588276c67876338858b1dac368f2e19e8401de7fbbf05c43265b2747ed60048781548110611baa57fe5b90600052602060002090600e020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660048881548110611be957fe5b90600052602060002090600e0201600601548660000151604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a28260000151810390505b8060048681548110611c6757fe5b90600052602060002090600e020160080160008282540192505081905550600060048681548110611c9457fe5b90600052602060002090600e0201600701541115611e3a5760025460048681548110611cbc57fe5b90600052602060002090600e020160070154850281611cd757fe5b0483602001818152505082602001516006600087815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201600082825401925050819055503373ffffffffffffffffffffffffffffffffffffffff167f5d4f188cf82cfc6d16a44b0bc85d5841282c17f7a5e2e5f3df04df05c476015760048781548110611d8b57fe5b90600052602060002090600e020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660048881548110611dca57fe5b90600052602060002090600e0201600701548660200151604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a28260200151810390505b806006600087815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160008282540192505081905550826020015181016006600087815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301600082825401925050819055503373ffffffffffffffffffffffffffffffffffffffff167f5dac0c1b1112564a045ba943c9d50270893e8e826c49be8e7073adc713ab7bd760048781548110611f4757fe5b90600052602060002090600e020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a25050506001600060146101000a81548160ff0219169083151502179055505050565b600060149054906101000a900460ff16612066576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60008060146101000a81548160ff021916908315150217905550612088614e56565b60006004805490509050808310612107576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4e6f7420612076616c696420506f6f6c0000000000000000000000000000000081525060200191505060405180910390fd5b61211083614244565b6006600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206004015482608001818152505060008260800151116121e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f6e6f74206861766520636c61696d61626c65207265776172640000000000000081525060200191505060405180910390fd5b81608001518260a001818152505060006004848154811061220457fe5b90600052602060002090600e0201600c015411156123e3576002546004848154811061222c57fe5b90600052602060002090600e0201600c01548360800151028161224b57fe5b048260400181815250506122e4600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683604001516004868154811061228d57fe5b90600052602060002090600e020160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166148a89092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167fa5a56e24e8cbe4c43434b9fd1d71f3567e9897e6b194f6d0d2e0d638bc9aa05a6004858154811061232957fe5b90600052602060002090600e020160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004868154811061236857fe5b90600052602060002090600e0201600c01548560400151604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a281604001518260a00181815103915081815250505b60008260a0015111156126a45761245d338360a001516004868154811061240657fe5b90600052602060002090600e020160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166148a89092919063ffffffff16565b81608001516004848154811061246f57fe5b90600052602060002090600e02016005016000828254039250508190555081608001516006600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206005016000828254019250508190555081608001516004848154811061250457fe5b90600052602060002090600e0201600a016000828254039250508190555081608001516006600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160008282540392505081905550436006600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055503373ffffffffffffffffffffffffffffffffffffffff167f7e77f685b38c861064cb08f2776eb5dfd3c82f652ed9f21221b8c53b75628e516004858154811061262457fe5b90600052602060002090600e020160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168460a00151604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a25b436006600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555050506001600060146101000a81548160ff02191690831515021790555050565b6127246135a8565b612796576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60006004805490509050808310612815576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4e6f7420612076616c696420506f6f6c0000000000000000000000000000000081525060200191505060405180910390fd5b61281e83614244565b816004848154811061282c57fe5b90600052602060002090600e0201600a01546004858154811061284b57fe5b90600052602060002090600e02016005015403116128d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f43616e74204465637265617365205265776172642052656d61696e730000000081525060200191505060405180910390fd5b81600484815481106128df57fe5b90600052602060002090600e020160050160008282540392505081905550505050565b600060149054906101000a900460ff16612984576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60008060146101000a81548160ff0219169083151502179055506129a6614e56565b60006004805490509050808310612a25576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4e6f7420612076616c696420506f6f6c0000000000000000000000000000000081525060200191505060405180910390fd5b60006006600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015411612aee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f6e6f7420686176652062616c616e63650000000000000000000000000000000081525060200191505060405180910390fd5b612af783614244565b6006600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401548260800181815250506006600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101548260c00181815250508160c001518260e0018181525050600060048481548110612bce57fe5b90600052602060002090600e0201600d01541115612dad5760025460048481548110612bf657fe5b90600052602060002090600e0201600d01548360c001510281612c1557fe5b04826060018181525050612cae600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836060015160048681548110612c5757fe5b90600052602060002090600e020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166148a89092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167fa8211c588276c67876338858b1dac368f2e19e8401de7fbbf05c43265b2747ed60048581548110612cf357fe5b90600052602060002090600e020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660048681548110612d3257fe5b90600052602060002090600e0201600d01548560600151604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a281606001518260e00181815103915081815250505b612e1a338360e0015160048681548110612dc357fe5b90600052602060002090600e020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166148a89092919063ffffffff16565b816080015160048481548110612e2c57fe5b90600052602060002090600e0201600a016000828254039250508190555060006006600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401819055508160c001516006600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101600082825403925050819055508160c001516006600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160008282540392505081905550436006600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055508160c0015160048481548110612fd757fe5b90600052602060002090600e0201600801600082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff167ff24ef89f38eadc1bde50701ad6e4d6d11a2dc24f7cf834a486991f38833285046004858154811061303a57fe5b90600052602060002090600e020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168460e00151604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a260006006600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015414156132a25760016004848154811061312457fe5b90600052602060002090600e02016009016000828254039250508190555060006004848154811061315157fe5b90600052602060002090600e02016009015411156132815760008090505b600560008581526020019081526020016000208054905081101561327b573373ffffffffffffffffffffffffffffffffffffffff166005600086815260200190815260200160002082815481106131c257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561326e5760056000858152602001908152602001600020818154811061322757fe5b9060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600560008581526020019081526020016000208054905090505b808060010191505061316f565b506132a1565b6005600084815260200190815260200160002060006132a09190614f13565b5b5b50506001600060146101000a81548160ff02191690831515021790555050565b6000600480549050905090565b6132d76135a8565b613349576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6133956135a8565b613407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60006004805490509050808610613486576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4e6f7420612076616c696420506f6f6c0000000000000000000000000000000081525060200191505060405180910390fd5b612710848601106134e2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180614f806032913960400191505060405180910390fd5b6134eb86614244565b84600487815481106134f957fe5b90600052602060002090600e020160060181905550836004878154811061351c57fe5b90600052602060002090600e020160070181905550826004878154811061353f57fe5b90600052602060002090600e0201600c0181905550816004878154811061356257fe5b90600052602060002090600e0201600d0181905550505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b6000613609614e56565b600080905060016004868154811061361d57fe5b90600052602060002090600e0201600b015401826101000181815250504382610120018181525050816101200151826101000151111561366857816101200151826101000181815250505b81610100015182610120015103826101a00181815250506000826101600181815250506004858154811061369857fe5b90600052602060002090600e0201600a015482610180018181525050816101a00151826101e00181815250506000600486815481106136d357fe5b90600052602060002090600e020160090154111561377a57613717600486815481106136fb57fe5b90600052602060002090600e0201600801546001546004614a7f565b826101400181815250506002548261014001516004878154811061373757fe5b90600052602060002090600e020160030154846101a0015102028161375857fe5b0482610160018181525050816101600151826101800181815101915081815250505b60008261016001511115613baa576004858154811061379557fe5b90600052602060002090600e020160050154826101800151111561389a57600485815481106137c057fe5b90600052602060002090600e02016005015482610180018181525050600154600254836101400151600488815481106137f557fe5b90600052602060002090600e020160030154028161380f57fe5b046004878154811061381d57fe5b90600052602060002090600e0201600a01546004888154811061383c57fe5b90600052602060002090600e020160050154038161385657fe5b048161385e57fe5b04826101e00181815250506004858154811061387657fe5b90600052602060002090600e020160030154826101e0015102826101600181815250505b816101600151826101c00181815250506000826102000181815250505b60056000868152602001908152602001600020805490508261020001511015613ba95760056000868152602001908152602001600020826102000151815481106138fd57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682610240019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600073ffffffffffffffffffffffffffffffffffffffff1682610240015173ffffffffffffffffffffffffffffffffffffffff1614613b93576139ff60066000878152602001908152602001600020600084610240015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301546001546004614a7f565b8261026001818152505060025482610260015160048781548110613a1f57fe5b90600052602060002090600e0201600301540281613a3957fe5b04826101e001510282610280018181525050816101e00151826101a001511115613af65760025482610260015160048781548110613a7357fe5b90600052602060002090600e0201600301540281613a8d57fe5b04826102a0018181525050816101800151826102a00151836101c00151011115613ac957816101c0015182610180015103826102a00181815250505b816102a00151826101c0018181510191508181525050816102a00151826102800181815101915081815250505b8373ffffffffffffffffffffffffffffffffffffffff1682610240015173ffffffffffffffffffffffffffffffffffffffff161415613b925781610280015160066000878152602001908152602001600020600084610240015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401540190505b5b81610200018051809190600101815250506138b7565b5b809250505092915050565b613bbd6135a8565b613c2f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60006004805490509050808310613cae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4e6f7420612076616c696420506f6f6c0000000000000000000000000000000081525060200191505060405180910390fd5b613cb783614244565b8160048481548110613cc557fe5b90600052602060002090600e020160050160008282540192505081905550600160048481548110613cf257fe5b90600052602060002090600e020160040160006101000a81548160ff021916908315150217905550505050565b6006602052816000526040600020602052806000526040600020600091509150508060000154908060010154908060020154908060030154908060040154908060050154905086565b613d706135a8565b613de2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60011515600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415613ea9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f706f6f6c2065786973747300000000000000000000000000000000000000000081525060200191505060405180910390fd5b61271083850110613f05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180614f806032913960400191505060405180910390fd5b6004604051806101c001604052808b73ffffffffffffffffffffffffffffffffffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff16815260200188815260200160011515815260200187815260200186815260200185815260200160008152602001600081526020016000815260200160008152602001848152602001838152509080600181540180825580915050906001820390600052602060002090600e02016000909192909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506060820151816003015560808201518160040160006101000a81548160ff02191690831515021790555060a0820151816005015560c0820151816006015560e082015181600701556101008201518160080155610120820151816009015561014082015181600a015561016082015181600b015561018082015181600c01556101a082015181600d01555050506001600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050505050505050565b6141a66135a8565b614218576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61422181614ab4565b50565b60076020528060005260406000206000915054906101000a900460ff1681565b61424c614e56565b60016004838154811061425b57fe5b90600052602060002090600e0201600b01540181610100018181525050438161012001818152505080610120015181610100015111156142a657806101200151816101000181815250505b80610100015181610120015103816101a0018181525050600081610160018181525050600482815481106142d657fe5b90600052602060002090600e0201600a015481610180018181525050806101a00151816101e001818152505060006004838154811061431157fe5b90600052602060002090600e02016009015411156143b8576143556004838154811061433957fe5b90600052602060002090600e0201600801546001546004614a7f565b816101400181815250506002548161014001516004848154811061437557fe5b90600052602060002090600e020160030154836101a0015102028161439657fe5b0481610160018181525050806101600151816101800181815101915081815250505b6000816101600151111561485457600482815481106143d357fe5b90600052602060002090600e020160050154816101800151111561450f5760006004838154811061440057fe5b90600052602060002090600e020160040160006101000a81548160ff0219169083151502179055506004828154811061443557fe5b90600052602060002090600e020160050154816101800181815250506001546002548261014001516004858154811061446a57fe5b90600052602060002090600e020160030154028161448457fe5b046004848154811061449257fe5b90600052602060002090600e0201600a0154600485815481106144b157fe5b90600052602060002090600e02016005015403816144cb57fe5b04816144d357fe5b04816101e0018181525050600482815481106144eb57fe5b90600052602060002090600e020160030154816101e0015102816101600181815250505b806101600151816101c00181815250506000816102000181815250505b6005600083815260200190815260200160002080549050816102000151101561485357600560008381526020019081526020016000208161020001518154811061457257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681610240019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600073ffffffffffffffffffffffffffffffffffffffff1681610240015173ffffffffffffffffffffffffffffffffffffffff161461483d5761467460066000848152602001908152602001600020600083610240015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301546001546004614a7f565b816102600181815250506002548161026001516004848154811061469457fe5b90600052602060002090600e02016003015402816146ae57fe5b04816101e001510281610280018181525050806101e00151816101a00151111561476b57600254816102600151600484815481106146e857fe5b90600052602060002090600e020160030154028161470257fe5b04816102a0018181525050806101800151816102a00151826101c0015101111561473e57806101c0015181610180015103816102a00181815250505b806102a00151816101c0018181510191508181525050806102a00151816102800181815101915081815250505b80610280015160066000848152602001908152602001600020600083610240015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401600082825401925050819055504360066000848152602001908152602001600020600083610240015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600082825401925050819055505b806102000180518091906001018152505061452c565b5b8061018001516004838154811061486757fe5b90600052602060002090600e0201600a01819055508061012001516004838154811061488f57fe5b90600052602060002090600e0201600b01819055505050565b614974838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb905060e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050614bf8565b505050565b614a79848573ffffffffffffffffffffffffffffffffffffffff166323b872dd905060e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050614bf8565b50505050565b60008060018301600a0a850290506000600a6005868481614a9c57fe5b040181614aa557fe5b04905080925050509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415614b3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614f5a6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b614c178273ffffffffffffffffffffffffffffffffffffffff16614e43565b614c89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740081525060200191505060405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b60208310614cd85780518252602082019150602081019050602083039250614cb5565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614d3a576040519150601f19603f3d011682016040523d82523d6000602084013e614d3f565b606091505b509150915081614db7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656481525060200191505060405180910390fd5b600081511115614e3d57808060200190516020811015614dd657600080fd5b8101908080519060200190929190505050614e3c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614fb2602a913960400191505060405180910390fd5b5b50505050565b600080823b905060008111915050919050565b604051806102c00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081525090565b5080546000825590600052602060002090810190614f319190614f34565b50565b614f5691905b80821115614f52576000816000905550600101614f3a565b5090565b9056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373546f74616c204665652026204c6f636b656420546f6b656e2063616e277420626520626967676572207468616e20313030255361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a72315820513651096f6c4282e1979d025d9061182d1e8024c6b933ec77546e1df979a8e264736f6c63430005110032000000000000000000000000564b8ad93064ff1535538e4cc35f3cdb2241c1a6
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101165760003560e01c80638d64e236116100a257806397bc4e5c1161007157806397bc4e5c146104f8578063b371aa4e14610530578063eda836b8146105b5578063f2fde38b14610676578063f9ce8217146106ba57610116565b80638d64e236146103d45780638da5cb5b1461042a5780638f32d59b1461047457806393fcd2911461049657610116565b8063379607f5116100e9578063379607f5146102de57806349ed393c1461030c5780635312ea8e146103445780637bd486b314610372578063850337621461039057610116565b80630b50cd3e1461011b5780632a48235b146101535780632e1a7d4d1461027857806332f37387146102a6575b600080fd5b6101516004803603604081101561013157600080fd5b810190808035906020019092919080359060200190929190505050610716565b005b61017f6004803603602081101561016957600080fd5b8101908080359060200190929190505050610840565b604051808f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018c81526020018b1515151581526020018a81526020018981526020018881526020018781526020018681526020018581526020018481526020018381526020018281526020019e50505050505050505050505050505060405180910390f35b6102a46004803603602081101561028e57600080fd5b8101908080359060200190929190505050610926565b005b6102dc600480360360408110156102bc57600080fd5b8101908080359060200190929190803590602001909291905050506116c2565b005b61030a600480360360208110156102f457600080fd5b8101908080359060200190929190505050611fe4565b005b6103426004803603604081101561032257600080fd5b81019080803590602001909291908035906020019092919050505061271c565b005b6103706004803603602081101561035a57600080fd5b8101908080359060200190929190505050612902565b005b61037a6132c2565b6040518082815260200191505060405180910390f35b6103d2600480360360208110156103a657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506132cf565b005b610428600480360360a08110156103ea57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919050505061338d565b005b61043261357f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61047c6135a8565b604051808215151515815260200191505060405180910390f35b6104e2600480360360408110156104ac57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506135ff565b6040518082815260200191505060405180910390f35b61052e6004803603604081101561050e57600080fd5b810190808035906020019092919080359060200190929190505050613bb5565b005b61057c6004803603604081101561054657600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613d1f565b60405180878152602001868152602001858152602001848152602001838152602001828152602001965050505050505060405180910390f35b61067460048036036101208110156105cc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190505050613d68565b005b6106b86004803603602081101561068c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061419e565b005b6106fc600480360360208110156106d057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614224565b604051808215151515815260200191505060405180910390f35b61071e6135a8565b610790576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600480549050905080831061080f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4e6f7420612076616c696420506f6f6c0000000000000000000000000000000081525060200191505060405180910390fd5b61081883614244565b816004848154811061082657fe5b90600052602060002090600e020160030181905550505050565b6004818154811061084d57fe5b90600052602060002090600e02016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030154908060040160009054906101000a900460ff169080600501549080600601549080600701549080600801549080600901549080600a01549080600b01549080600c01549080600d015490508e565b600060149054906101000a900460ff166109a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60008060146101000a81548160ff0219169083151502179055506109ca614e56565b60006004805490509050808310610a49576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4e6f7420612076616c696420506f6f6c0000000000000000000000000000000081525060200191505060405180910390fd5b60006006600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015411610b12576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f6e6f7420686176652077697468647261776e2062616c616e636500000000000081525060200191505060405180910390fd5b610b1b83614244565b6006600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206004015482608001818152505081608001518260a00181815250506006600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101548260c00181815250508160c001518260e0018181525050600060048481548110610c0057fe5b90600052602060002090600e0201600c01541115610ddf5760025460048481548110610c2857fe5b90600052602060002090600e0201600c015483608001510281610c4757fe5b04826040018181525050610ce0600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040015160048681548110610c8957fe5b90600052602060002090600e020160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166148a89092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167fa5a56e24e8cbe4c43434b9fd1d71f3567e9897e6b194f6d0d2e0d638bc9aa05a60048581548110610d2557fe5b90600052602060002090600e020160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660048681548110610d6457fe5b90600052602060002090600e0201600c01548560400151604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a281604001518260a00181815103915081815250505b60008260a0015111156110a057610e59338360a0015160048681548110610e0257fe5b90600052602060002090600e020160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166148a89092919063ffffffff16565b816080015160048481548110610e6b57fe5b90600052602060002090600e02016005016000828254039250508190555081608001516006600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160008282540192505081905550816080015160048481548110610f0057fe5b90600052602060002090600e0201600a016000828254039250508190555081608001516006600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160008282540392505081905550436006600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055503373ffffffffffffffffffffffffffffffffffffffff167f7e77f685b38c861064cb08f2776eb5dfd3c82f652ed9f21221b8c53b75628e516004858154811061102057fe5b90600052602060002090600e020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168460a00151604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a25b6000600484815481106110af57fe5b90600052602060002090600e0201600d0154111561128e57600254600484815481106110d757fe5b90600052602060002090600e0201600d01548360c0015102816110f657fe5b0482606001818152505061118f600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683606001516004868154811061113857fe5b90600052602060002090600e020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166148a89092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167fa8211c588276c67876338858b1dac368f2e19e8401de7fbbf05c43265b2747ed600485815481106111d457fe5b90600052602060002090600e020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004868154811061121357fe5b90600052602060002090600e0201600d01548560600151604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a281606001518260e00181815103915081815250505b6112fb338360e00151600486815481106112a457fe5b90600052602060002090600e020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166148a89092919063ffffffff16565b8160c001516006600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101600082825403925050819055508160c001516006600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301600082825403925050819055508160c00151600484815481106113d757fe5b90600052602060002090600e0201600801600082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb6004858154811061143a57fe5b90600052602060002090600e020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168460e00151604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a260006006600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015414156116a25760016004848154811061152457fe5b90600052602060002090600e02016009016000828254039250508190555060006004848154811061155157fe5b90600052602060002090600e02016009015411156116815760008090505b600560008581526020019081526020016000208054905081101561167b573373ffffffffffffffffffffffffffffffffffffffff166005600086815260200190815260200160002082815481106115c257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561166e5760056000858152602001908152602001600020818154811061162757fe5b9060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600560008581526020019081526020016000208054905090505b808060010191505061156f565b506116a1565b6005600084815260200190815260200160002060006116a09190614f13565b5b5b50506001600060146101000a81548160ff02191690831515021790555050565b600060149054906101000a900460ff16611744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60008060146101000a81548160ff021916908315150217905550611766614e56565b600082116117dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6465706f73697420736f6d657468696e6700000000000000000000000000000081525060200191505060405180910390fd5b6000600480549050905080841061185b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4e6f7420612076616c696420506f6f6c0000000000000000000000000000000081525060200191505060405180910390fd5b61186484614244565b600115156004858154811061187557fe5b90600052602060002090600e020160040160009054906101000a900460ff16151514611909576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f706f6f6c20636c6f73656400000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006006600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301541415611a0a5760016004858154811061197457fe5b90600052602060002090600e020160090160008282540192505081905550600560008581526020019081526020016000203390806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505b611a7533308560048881548110611a1d57fe5b90600052602060002090600e020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614979909392919063ffffffff16565b6000839050600060048681548110611a8957fe5b90600052602060002090600e0201600601541115611c595760025460048681548110611ab157fe5b90600052602060002090600e020160060154850281611acc57fe5b04836000018181525050611b65600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846000015160048881548110611b0e57fe5b90600052602060002090600e020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166148a89092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167fa8211c588276c67876338858b1dac368f2e19e8401de7fbbf05c43265b2747ed60048781548110611baa57fe5b90600052602060002090600e020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660048881548110611be957fe5b90600052602060002090600e0201600601548660000151604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a28260000151810390505b8060048681548110611c6757fe5b90600052602060002090600e020160080160008282540192505081905550600060048681548110611c9457fe5b90600052602060002090600e0201600701541115611e3a5760025460048681548110611cbc57fe5b90600052602060002090600e020160070154850281611cd757fe5b0483602001818152505082602001516006600087815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201600082825401925050819055503373ffffffffffffffffffffffffffffffffffffffff167f5d4f188cf82cfc6d16a44b0bc85d5841282c17f7a5e2e5f3df04df05c476015760048781548110611d8b57fe5b90600052602060002090600e020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660048881548110611dca57fe5b90600052602060002090600e0201600701548660200151604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a28260200151810390505b806006600087815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160008282540192505081905550826020015181016006600087815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301600082825401925050819055503373ffffffffffffffffffffffffffffffffffffffff167f5dac0c1b1112564a045ba943c9d50270893e8e826c49be8e7073adc713ab7bd760048781548110611f4757fe5b90600052602060002090600e020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a25050506001600060146101000a81548160ff0219169083151502179055505050565b600060149054906101000a900460ff16612066576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60008060146101000a81548160ff021916908315150217905550612088614e56565b60006004805490509050808310612107576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4e6f7420612076616c696420506f6f6c0000000000000000000000000000000081525060200191505060405180910390fd5b61211083614244565b6006600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206004015482608001818152505060008260800151116121e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f6e6f74206861766520636c61696d61626c65207265776172640000000000000081525060200191505060405180910390fd5b81608001518260a001818152505060006004848154811061220457fe5b90600052602060002090600e0201600c015411156123e3576002546004848154811061222c57fe5b90600052602060002090600e0201600c01548360800151028161224b57fe5b048260400181815250506122e4600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683604001516004868154811061228d57fe5b90600052602060002090600e020160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166148a89092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167fa5a56e24e8cbe4c43434b9fd1d71f3567e9897e6b194f6d0d2e0d638bc9aa05a6004858154811061232957fe5b90600052602060002090600e020160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004868154811061236857fe5b90600052602060002090600e0201600c01548560400151604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a281604001518260a00181815103915081815250505b60008260a0015111156126a45761245d338360a001516004868154811061240657fe5b90600052602060002090600e020160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166148a89092919063ffffffff16565b81608001516004848154811061246f57fe5b90600052602060002090600e02016005016000828254039250508190555081608001516006600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206005016000828254019250508190555081608001516004848154811061250457fe5b90600052602060002090600e0201600a016000828254039250508190555081608001516006600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160008282540392505081905550436006600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055503373ffffffffffffffffffffffffffffffffffffffff167f7e77f685b38c861064cb08f2776eb5dfd3c82f652ed9f21221b8c53b75628e516004858154811061262457fe5b90600052602060002090600e020160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168460a00151604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a25b436006600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555050506001600060146101000a81548160ff02191690831515021790555050565b6127246135a8565b612796576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60006004805490509050808310612815576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4e6f7420612076616c696420506f6f6c0000000000000000000000000000000081525060200191505060405180910390fd5b61281e83614244565b816004848154811061282c57fe5b90600052602060002090600e0201600a01546004858154811061284b57fe5b90600052602060002090600e02016005015403116128d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f43616e74204465637265617365205265776172642052656d61696e730000000081525060200191505060405180910390fd5b81600484815481106128df57fe5b90600052602060002090600e020160050160008282540392505081905550505050565b600060149054906101000a900460ff16612984576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60008060146101000a81548160ff0219169083151502179055506129a6614e56565b60006004805490509050808310612a25576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4e6f7420612076616c696420506f6f6c0000000000000000000000000000000081525060200191505060405180910390fd5b60006006600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015411612aee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f6e6f7420686176652062616c616e63650000000000000000000000000000000081525060200191505060405180910390fd5b612af783614244565b6006600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401548260800181815250506006600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101548260c00181815250508160c001518260e0018181525050600060048481548110612bce57fe5b90600052602060002090600e0201600d01541115612dad5760025460048481548110612bf657fe5b90600052602060002090600e0201600d01548360c001510281612c1557fe5b04826060018181525050612cae600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836060015160048681548110612c5757fe5b90600052602060002090600e020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166148a89092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167fa8211c588276c67876338858b1dac368f2e19e8401de7fbbf05c43265b2747ed60048581548110612cf357fe5b90600052602060002090600e020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660048681548110612d3257fe5b90600052602060002090600e0201600d01548560600151604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a281606001518260e00181815103915081815250505b612e1a338360e0015160048681548110612dc357fe5b90600052602060002090600e020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166148a89092919063ffffffff16565b816080015160048481548110612e2c57fe5b90600052602060002090600e0201600a016000828254039250508190555060006006600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401819055508160c001516006600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101600082825403925050819055508160c001516006600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160008282540392505081905550436006600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055508160c0015160048481548110612fd757fe5b90600052602060002090600e0201600801600082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff167ff24ef89f38eadc1bde50701ad6e4d6d11a2dc24f7cf834a486991f38833285046004858154811061303a57fe5b90600052602060002090600e020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168460e00151604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a260006006600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015414156132a25760016004848154811061312457fe5b90600052602060002090600e02016009016000828254039250508190555060006004848154811061315157fe5b90600052602060002090600e02016009015411156132815760008090505b600560008581526020019081526020016000208054905081101561327b573373ffffffffffffffffffffffffffffffffffffffff166005600086815260200190815260200160002082815481106131c257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561326e5760056000858152602001908152602001600020818154811061322757fe5b9060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600560008581526020019081526020016000208054905090505b808060010191505061316f565b506132a1565b6005600084815260200190815260200160002060006132a09190614f13565b5b5b50506001600060146101000a81548160ff02191690831515021790555050565b6000600480549050905090565b6132d76135a8565b613349576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6133956135a8565b613407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60006004805490509050808610613486576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4e6f7420612076616c696420506f6f6c0000000000000000000000000000000081525060200191505060405180910390fd5b612710848601106134e2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180614f806032913960400191505060405180910390fd5b6134eb86614244565b84600487815481106134f957fe5b90600052602060002090600e020160060181905550836004878154811061351c57fe5b90600052602060002090600e020160070181905550826004878154811061353f57fe5b90600052602060002090600e0201600c0181905550816004878154811061356257fe5b90600052602060002090600e0201600d0181905550505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b6000613609614e56565b600080905060016004868154811061361d57fe5b90600052602060002090600e0201600b015401826101000181815250504382610120018181525050816101200151826101000151111561366857816101200151826101000181815250505b81610100015182610120015103826101a00181815250506000826101600181815250506004858154811061369857fe5b90600052602060002090600e0201600a015482610180018181525050816101a00151826101e00181815250506000600486815481106136d357fe5b90600052602060002090600e020160090154111561377a57613717600486815481106136fb57fe5b90600052602060002090600e0201600801546001546004614a7f565b826101400181815250506002548261014001516004878154811061373757fe5b90600052602060002090600e020160030154846101a0015102028161375857fe5b0482610160018181525050816101600151826101800181815101915081815250505b60008261016001511115613baa576004858154811061379557fe5b90600052602060002090600e020160050154826101800151111561389a57600485815481106137c057fe5b90600052602060002090600e02016005015482610180018181525050600154600254836101400151600488815481106137f557fe5b90600052602060002090600e020160030154028161380f57fe5b046004878154811061381d57fe5b90600052602060002090600e0201600a01546004888154811061383c57fe5b90600052602060002090600e020160050154038161385657fe5b048161385e57fe5b04826101e00181815250506004858154811061387657fe5b90600052602060002090600e020160030154826101e0015102826101600181815250505b816101600151826101c00181815250506000826102000181815250505b60056000868152602001908152602001600020805490508261020001511015613ba95760056000868152602001908152602001600020826102000151815481106138fd57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682610240019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600073ffffffffffffffffffffffffffffffffffffffff1682610240015173ffffffffffffffffffffffffffffffffffffffff1614613b93576139ff60066000878152602001908152602001600020600084610240015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301546001546004614a7f565b8261026001818152505060025482610260015160048781548110613a1f57fe5b90600052602060002090600e0201600301540281613a3957fe5b04826101e001510282610280018181525050816101e00151826101a001511115613af65760025482610260015160048781548110613a7357fe5b90600052602060002090600e0201600301540281613a8d57fe5b04826102a0018181525050816101800151826102a00151836101c00151011115613ac957816101c0015182610180015103826102a00181815250505b816102a00151826101c0018181510191508181525050816102a00151826102800181815101915081815250505b8373ffffffffffffffffffffffffffffffffffffffff1682610240015173ffffffffffffffffffffffffffffffffffffffff161415613b925781610280015160066000878152602001908152602001600020600084610240015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401540190505b5b81610200018051809190600101815250506138b7565b5b809250505092915050565b613bbd6135a8565b613c2f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60006004805490509050808310613cae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4e6f7420612076616c696420506f6f6c0000000000000000000000000000000081525060200191505060405180910390fd5b613cb783614244565b8160048481548110613cc557fe5b90600052602060002090600e020160050160008282540192505081905550600160048481548110613cf257fe5b90600052602060002090600e020160040160006101000a81548160ff021916908315150217905550505050565b6006602052816000526040600020602052806000526040600020600091509150508060000154908060010154908060020154908060030154908060040154908060050154905086565b613d706135a8565b613de2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60011515600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415613ea9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f706f6f6c2065786973747300000000000000000000000000000000000000000081525060200191505060405180910390fd5b61271083850110613f05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180614f806032913960400191505060405180910390fd5b6004604051806101c001604052808b73ffffffffffffffffffffffffffffffffffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff16815260200188815260200160011515815260200187815260200186815260200185815260200160008152602001600081526020016000815260200160008152602001848152602001838152509080600181540180825580915050906001820390600052602060002090600e02016000909192909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506060820151816003015560808201518160040160006101000a81548160ff02191690831515021790555060a0820151816005015560c0820151816006015560e082015181600701556101008201518160080155610120820151816009015561014082015181600a015561016082015181600b015561018082015181600c01556101a082015181600d01555050506001600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050505050505050565b6141a66135a8565b614218576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61422181614ab4565b50565b60076020528060005260406000206000915054906101000a900460ff1681565b61424c614e56565b60016004838154811061425b57fe5b90600052602060002090600e0201600b01540181610100018181525050438161012001818152505080610120015181610100015111156142a657806101200151816101000181815250505b80610100015181610120015103816101a0018181525050600081610160018181525050600482815481106142d657fe5b90600052602060002090600e0201600a015481610180018181525050806101a00151816101e001818152505060006004838154811061431157fe5b90600052602060002090600e02016009015411156143b8576143556004838154811061433957fe5b90600052602060002090600e0201600801546001546004614a7f565b816101400181815250506002548161014001516004848154811061437557fe5b90600052602060002090600e020160030154836101a0015102028161439657fe5b0481610160018181525050806101600151816101800181815101915081815250505b6000816101600151111561485457600482815481106143d357fe5b90600052602060002090600e020160050154816101800151111561450f5760006004838154811061440057fe5b90600052602060002090600e020160040160006101000a81548160ff0219169083151502179055506004828154811061443557fe5b90600052602060002090600e020160050154816101800181815250506001546002548261014001516004858154811061446a57fe5b90600052602060002090600e020160030154028161448457fe5b046004848154811061449257fe5b90600052602060002090600e0201600a0154600485815481106144b157fe5b90600052602060002090600e02016005015403816144cb57fe5b04816144d357fe5b04816101e0018181525050600482815481106144eb57fe5b90600052602060002090600e020160030154816101e0015102816101600181815250505b806101600151816101c00181815250506000816102000181815250505b6005600083815260200190815260200160002080549050816102000151101561485357600560008381526020019081526020016000208161020001518154811061457257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681610240019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600073ffffffffffffffffffffffffffffffffffffffff1681610240015173ffffffffffffffffffffffffffffffffffffffff161461483d5761467460066000848152602001908152602001600020600083610240015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301546001546004614a7f565b816102600181815250506002548161026001516004848154811061469457fe5b90600052602060002090600e02016003015402816146ae57fe5b04816101e001510281610280018181525050806101e00151816101a00151111561476b57600254816102600151600484815481106146e857fe5b90600052602060002090600e020160030154028161470257fe5b04816102a0018181525050806101800151816102a00151826101c0015101111561473e57806101c0015181610180015103816102a00181815250505b806102a00151816101c0018181510191508181525050806102a00151816102800181815101915081815250505b80610280015160066000848152602001908152602001600020600083610240015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401600082825401925050819055504360066000848152602001908152602001600020600083610240015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600082825401925050819055505b806102000180518091906001018152505061452c565b5b8061018001516004838154811061486757fe5b90600052602060002090600e0201600a01819055508061012001516004838154811061488f57fe5b90600052602060002090600e0201600b01819055505050565b614974838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb905060e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050614bf8565b505050565b614a79848573ffffffffffffffffffffffffffffffffffffffff166323b872dd905060e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050614bf8565b50505050565b60008060018301600a0a850290506000600a6005868481614a9c57fe5b040181614aa557fe5b04905080925050509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415614b3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614f5a6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b614c178273ffffffffffffffffffffffffffffffffffffffff16614e43565b614c89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740081525060200191505060405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b60208310614cd85780518252602082019150602081019050602083039250614cb5565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614d3a576040519150601f19603f3d011682016040523d82523d6000602084013e614d3f565b606091505b509150915081614db7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656481525060200191505060405180910390fd5b600081511115614e3d57808060200190516020811015614dd657600080fd5b8101908080519060200190929190505050614e3c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614fb2602a913960400191505060405180910390fd5b5b50505050565b600080823b905060008111915050919050565b604051806102c00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081525090565b5080546000825590600052602060002090810190614f319190614f34565b50565b614f5691905b80821115614f52576000816000905550600101614f3a565b5090565b9056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373546f74616c204665652026204c6f636b656420546f6b656e2063616e277420626520626967676572207468616e20313030255361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a72315820513651096f6c4282e1979d025d9061182d1e8024c6b933ec77546e1df979a8e264736f6c63430005110032
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000564b8ad93064ff1535538e4cc35f3cdb2241c1a6
-----Decoded View---------------
Arg [0] : DevAddress (address): 0x564b8ad93064Ff1535538e4cc35f3cDB2241c1a6
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000564b8ad93064ff1535538e4cc35f3cdb2241c1a6
Deployed Bytecode Sourcemap
18703:17052:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18703:17052:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33629:245;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;33629:245:0;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20108:26;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20108:26:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29138:2483;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;29138:2483:0;;;;;;;;;;;;;;;;;:::i;:::-;;21630:1557;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;21630:1557:0;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27840:1291;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;27840:1291:0;;;;;;;;;;;;;;;;;:::i;:::-;;34680:396;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;34680:396:0;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31627:1742;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;31627:1742:0;;;;;;;;;;;;;;;;;:::i;:::-;;25504:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35082:99;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;35082:99:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;33880:504;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;33880:504:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17639:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;18005:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;25596:2238;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;25596:2238:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34390:284;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;34390:284:0;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20189:66;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20189:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20961:663;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;20961:663:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18252:109;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18252:109:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;20259:45;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20259:45:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;33629:245;17851:9;:7;:9::i;:::-;17843:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33708:17;33728:8;:15;;;;33708:35;;33763:9;33756:4;:16;33748:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33802:17;33814:4;33802:11;:17::i;:::-;33857:12;33828:8;33837:4;33828:14;;;;;;;;;;;;;;;;;;:26;;:41;;;;17908:1;33629:245;;:::o;20108:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29138:2483::-;16441:11;;;;;;;;;;;16433:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16580:5;16566:11;;:19;;;;;;;;;;;;;;;;;;29195:20;;:::i;:::-;29224:17;29244:8;:15;;;;29224:35;;29279:9;29272:4;:16;29264:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29365:1;29322:8;:14;29331:4;29322:14;;;;;;;;;;;:26;29337:10;29322:26;;;;;;;;;;;;;;;:40;;;:44;29314:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29407:17;29419:4;29407:11;:17::i;:::-;29447:8;:14;29456:4;29447:14;;;;;;;;;;;:26;29462:10;29447:26;;;;;;;;;;;;;;;:40;;;29433:4;:11;;:54;;;;;29513:4;:11;;;29492:4;:18;;:32;;;;;29545:8;:14;29554:4;29545:14;;;;;;;;;;;:26;29560:10;29545:26;;;;;;;;;;;;;;;:40;;;29529:4;:13;;:56;;;;;29613:4;:13;;;29590:4;:20;;:36;;;;;29664:1;29638:8;29647:4;29638:14;;;;;;;;;;;;;;;;;;:23;;;:27;29635:365;;;29736:8;;29709;29718:4;29709:14;;;;;;;;;;;;;;;;;;:23;;;29695:4;:11;;;:37;29694:50;;;;;;29672:4;:19;;:72;;;;;29750:73;29790:11;;;;;;;;;;;29803:4;:19;;;29750:8;29759:4;29750:14;;;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;:39;;;;:73;;;;;:::i;:::-;29848:10;29839:103;;;29868:8;29877:4;29868:14;;;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;29897:8;29906:4;29897:14;;;;;;;;;;;;;;;;;;:23;;;29922:4;:19;;;29839:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29975:4;:19;;;29953:4;:18;;:41;;;;;;;;;;;29635:365;30032:1;30011:4;:18;;;:22;30008:487;;;30040:71;30080:10;30092:4;:18;;;30040:8;30049:4;30040:14;;;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;:39;;;;:71;;;;;:::i;:::-;30154:4;:11;;;30122:8;30131:4;30122:14;;;;;;;;;;;;;;;;;;:28;;;:43;;;;;;;;;;;30213:4;:11;;;30171:8;:14;30180:4;30171:14;;;;;;;;;;;:26;30186:10;30171:26;;;;;;;;;;;;;;;:38;;;:53;;;;;;;;;;;30267:4;:11;;;30230:8;30239:4;30230:14;;;;;;;;;;;;;;;;;;:33;;;:48;;;;;;;;;;;30328:4;:11;;;30284:8;:14;30293:4;30284:14;;;;;;;;;;;:26;30299:10;30284:26;;;;;;;;;;;;;;;:40;;;:55;;;;;;;;;;;30385:12;30345:8;:14;30354:4;30345:14;;;;;;;;;;;:26;30360:10;30345:26;;;;;;;;;;;;;;;:37;;:52;;;;30425:10;30413:76;;;30445:8;30454:4;30445:14;;;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;30470:4;:18;;;30413:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;30008:487;30535:1;30506:8;30515:4;30506:14;;;;;;;;;;;;;;;;;;:26;;;:30;30503:380;;;30615:8;;30585;30594:4;30585:14;;;;;;;;;;;;;;;;;;:26;;;30569:4;:13;;;:42;30568:55;;;;;;30543:4;:22;;:80;;;;;30629:72;30665:11;;;;;;;;;;;30678:4;:22;;;30629:8;30638:4;30629:14;;;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;:35;;;;:72;;;;;:::i;:::-;30724:10;30717:103;;;30744:8;30753:4;30744:14;;;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;30769:8;30778:4;30769:14;;;;;;;;;;;;;;;;;;:26;;;30797:4;:22;;;30717:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30855:4;:22;;;30831:4;:20;;:46;;;;;;;;;;;30503:380;30891:69;30927:10;30939:4;:20;;;30891:8;30900:4;30891:14;;;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;:35;;;;:69;;;;;:::i;:::-;31013:4;:13;;;30969:8;:14;30978:4;30969:14;;;;;;;;;;;:26;30984:10;30969:26;;;;;;;;;;;;;;;:40;;;:57;;;;;;;;;;;31080:4;:13;;;31031:8;:14;31040:4;31031:14;;;;;;;;;;;:26;31046:10;31031:26;;;;;;;;;;;;;;;:45;;;:62;;;;;;;;;;;31130:4;:13;;;31104:8;31113:4;31104:14;;;;;;;;;;;;;;;;;;:22;;;:39;;;;;;;;;;;31166:10;31157:75;;;31186:8;31195:4;31186:14;;;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;31211:4;:20;;;31157:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;31293:1;31244:8;:14;31253:4;31244:14;;;;;;;;;;;:26;31259:10;31244:26;;;;;;;;;;;;;;;:45;;;:50;31241:374;;;31330:1;31301:8;31310:4;31301:14;;;;;;;;;;;;;;;;;;:25;;;:30;;;;;;;;;;;31369:1;31340:8;31349:4;31340:14;;;;;;;;;;;;;;;;;;:25;;;:30;31337:270;;;31382:9;31394:1;31382:13;;31378:181;31401:9;:15;31411:4;31401:15;;;;;;;;;;;:22;;;;31397:1;:26;31378:181;;;31463:10;31441:32;;:9;:15;31451:4;31441:15;;;;;;;;;;;31457:1;31441:18;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;31438:114;;;31490:9;:15;31500:4;31490:15;;;;;;;;;;;31506:1;31490:18;;;;;;;;;;;;;;;;31483:25;;;;;;;;;;;31521:9;:15;31531:4;31521:15;;;;;;;;;;;:22;;;;31517:26;;31438:114;31425:3;;;;;;;31378:181;;;;31337:270;;;31585:9;:15;31595:4;31585:15;;;;;;;;;;;;31578:22;;;;:::i;:::-;31337:270;31241:374;16598:1;;16760:4;16746:11;;:18;;;;;;;;;;;;;;;;;;29138:2483;:::o;21630:1557::-;16441:11;;;;;;;;;;;16433:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16580:5;16566:11;;:19;;;;;;;;;;;;;;;;;;21709:20;;:::i;:::-;21756:1;21746:7;:11;21738:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21788:17;21808:8;:15;;;;21788:35;;21843:9;21836:4;:16;21828:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21882:17;21894:4;21882:11;:17::i;:::-;21947:4;21918:33;;:8;21927:4;21918:14;;;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;:33;;;21910:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22028:1;21979:8;:14;21988:4;21979:14;;;;;;;;;;;:26;21994:10;21979:26;;;;;;;;;;;;;;;:45;;;:50;21976:134;;;22065:1;22036:8;22045:4;22036:14;;;;;;;;;;;;;;;;;;:25;;;:30;;;;;;;;;;;22072:9;:15;22082:4;22072:15;;;;;;;;;;;22093:10;22072:32;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;22072:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21976:134;22118:75;22158:10;22178:4;22185:7;22118:8;22127:4;22118:14;;;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;:39;;;;:75;;;;;;:::i;:::-;22198:20;22221:7;22198:30;;22264:1;22240:8;22249:4;22240:14;;;;;;;;;;;;;;;;;;:21;;;:25;22237:331;;;22328:8;;22303;22312:4;22303:14;;;;;;;;;;;;;;;;;;:21;;;22293:7;:31;22292:44;;;;;;22272:4;:17;;:64;;;;;22342:67;22378:11;;;;;;;;;;;22391:4;:17;;;22342:8;22351:4;22342:14;;;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;:35;;;;:67;;;;;:::i;:::-;22432:10;22425:93;;;22452:8;22461:4;22452:14;;;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;22477:8;22486:4;22477:14;;;;;;;;;;;;;;;;;;:21;;;22500:4;:17;;;22425:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22545:4;:17;;;22529:33;;;;22237:331;22600:12;22574:8;22583:4;22574:14;;;;;;;;;;;;;;;;;;:22;;;:38;;;;;;;;;;;22648:1;22624:8;22633:4;22624:14;;;;;;;;;;;;;;;;;;:21;;;:25;22621:328;;;22712:8;;22687;22696:4;22687:14;;;;;;;;;;;;;;;;;;:21;;;22677:7;:31;22676:44;;;;;;22656:4;:17;;:64;;;;;22774:4;:17;;;22731:8;:14;22740:4;22731:14;;;;;;;;;;;:26;22746:10;22731:26;;;;;;;;;;;;;;;:39;;;:60;;;;;;;;;;;22813:10;22802:97;;;22833:8;22842:4;22833:14;;;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;22858:8;22867:4;22858:14;;;;;;;;;;;;;;;;;;:21;;;22881:4;:17;;;22802:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22926:4;:17;;;22910:33;;;;22621:328;23005:12;22961:8;:14;22970:4;22961:14;;;;;;;;;;;:26;22976:10;22961:26;;;;;;;;;;;;;;;:40;;;:56;;;;;;;;;;;23086:4;:17;;;23071:12;:32;23022:8;:14;23031:4;23022:14;;;;;;;;;;;:26;23037:10;23022:26;;;;;;;;;;;;;;;:45;;;:81;;;;;;;;;;;23124:10;23117:65;;;23144:8;23153:4;23144:14;;;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;23169:12;23117:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;16598:1;;;16760:4;16746:11;;:18;;;;;;;;;;;;;;;;;;21630:1557;;:::o;27840:1291::-;16441:11;;;;;;;;;;;16433:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16580:5;16566:11;;:19;;;;;;;;;;;;;;;;;;27894:20;;:::i;:::-;27923:17;27943:8;:15;;;;27923:35;;27978:9;27971:4;:16;27963:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28017:17;28029:4;28017:11;:17::i;:::-;28057:8;:14;28066:4;28057:14;;;;;;;;;;;:26;28072:10;28057:26;;;;;;;;;;;;;;;:40;;;28043:4;:11;;:54;;;;;28124:1;28110:4;:11;;;:15;28102:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28181:4;:11;;;28160:4;:18;;:32;;;;;28230:1;28204:8;28213:4;28204:14;;;;;;;;;;;;;;;;;;:23;;;:27;28201:365;;;28302:8;;28275;28284:4;28275:14;;;;;;;;;;;;;;;;;;:23;;;28261:4;:11;;;:37;28260:50;;;;;;28238:4;:19;;:72;;;;;28316:73;28356:11;;;;;;;;;;;28369:4;:19;;;28316:8;28325:4;28316:14;;;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;:39;;;;:73;;;;;:::i;:::-;28414:10;28405:103;;;28434:8;28443:4;28434:14;;;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;28463:8;28472:4;28463:14;;;;;;;;;;;;;;;;;;:23;;;28488:4;:19;;;28405:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28541:4;:19;;;28519:4;:18;;:41;;;;;;;;;;;28201:365;28600:1;28579:4;:18;;;:22;28576:486;;;28608:71;28648:10;28660:4;:18;;;28608:8;28617:4;28608:14;;;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;:39;;;;:71;;;;;:::i;:::-;28722:4;:11;;;28690:8;28699:4;28690:14;;;;;;;;;;;;;;;;;;:28;;;:43;;;;;;;;;;;28781:4;:11;;;28739:8;:14;28748:4;28739:14;;;;;;;;;;;:26;28754:10;28739:26;;;;;;;;;;;;;;;:38;;;:53;;;;;;;;;;;28835:4;:11;;;28798:8;28807:4;28798:14;;;;;;;;;;;;;;;;;;:33;;;:48;;;;;;;;;;;28896:4;:11;;;28852:8;:14;28861:4;28852:14;;;;;;;;;;;:26;28867:10;28852:26;;;;;;;;;;;;;;;:40;;;:55;;;;;;;;;;;28953:12;28913:8;:14;28922:4;28913:14;;;;;;;;;;;:26;28928:10;28913:26;;;;;;;;;;;;;;;:37;;:52;;;;28988:10;28976:80;;;29008:8;29017:4;29008:14;;;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;29037:4;:18;;;28976:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;28576:486;29110:12;29070:8;:14;29079:4;29070:14;;;;;;;;;;;:26;29085:10;29070:26;;;;;;;;;;;;;;;:37;;:52;;;;16598:1;;16760:4;16746:11;;:18;;;;;;;;;;;;;;;;;;27840:1291;:::o;34680:396::-;17851:9;:7;:9::i;:::-;17843:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34770:17;34790:8;:15;;;;34770:35;;34825:9;34818:4;:16;34810:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34864:17;34876:4;34864:11;:17::i;:::-;34965:15;34929:8;34938:4;34929:14;;;;;;;;;;;;;;;;;;:33;;;34898:8;34907:4;34898:14;;;;;;;;;;;;;;;;;;:28;;;:64;:82;34890:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35056:15;35024:8;35033:4;35024:14;;;;;;;;;;;;;;;;;;:28;;;:47;;;;;;;;;;;17908:1;34680:396;;:::o;31627:1742::-;16441:11;;;;;;;;;;;16433:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16580:5;16566:11;;:19;;;;;;;;;;;;;;;;;;31693:20;;:::i;:::-;31722:17;31742:8;:15;;;;31722:35;;31777:9;31770:4;:16;31762:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31863:1;31820:8;:14;31829:4;31820:14;;;;;;;;;;;:26;31835:10;31820:26;;;;;;;;;;;;;;;:40;;;:44;31812:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31894:17;31906:4;31894:11;:17::i;:::-;31934:8;:14;31943:4;31934:14;;;;;;;;;;;:26;31949:10;31934:26;;;;;;;;;;;;;;;:40;;;31920:4;:11;;:54;;;;;31995:8;:14;32004:4;31995:14;;;;;;;;;;;:26;32010:10;31995:26;;;;;;;;;;;;;;;:40;;;31979:4;:13;;:56;;;;;32063:4;:13;;;32040:4;:20;;:36;;;;;32117:1;32088:8;32097:4;32088:14;;;;;;;;;;;;;;;;;;:26;;;:30;32085:380;;;32197:8;;32167;32176:4;32167:14;;;;;;;;;;;;;;;;;;:26;;;32151:4;:13;;;:42;32150:55;;;;;;32125:4;:22;;:80;;;;;32211:72;32247:11;;;;;;;;;;;32260:4;:22;;;32211:8;32220:4;32211:14;;;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;:35;;;;:72;;;;;:::i;:::-;32306:10;32299:103;;;32326:8;32335:4;32326:14;;;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;32351:8;32360:4;32351:14;;;;;;;;;;;;;;;;;;:26;;;32379:4;:22;;;32299:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32437:4;:22;;;32413:4;:20;;:46;;;;;;;;;;;32085:380;32473:69;32509:10;32521:4;:20;;;32473:8;32482:4;32473:14;;;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;:35;;;;:69;;;;;:::i;:::-;32588:4;:11;;;32551:8;32560:4;32551:14;;;;;;;;;;;;;;;;;;:33;;;:48;;;;;;;;;;;32647:1;32604:8;:14;32613:4;32604:14;;;;;;;;;;;:26;32619:10;32604:26;;;;;;;;;;;;;;;:40;;:44;;;;32697:4;:13;;;32653:8;:14;32662:4;32653:14;;;;;;;;;;;:26;32668:10;32653:26;;;;;;;;;;;;;;;:40;;;:57;;;;;;;;;;;32764:4;:13;;;32715:8;:14;32724:4;32715:14;;;;;;;;;;;:26;32730:10;32715:26;;;;;;;;;;;;;;;:45;;;:62;;;;;;;;;;;32822:12;32782:8;:14;32791:4;32782:14;;;;;;;;;;;:26;32797:10;32782:26;;;;;;;;;;;;;;;:37;;:52;;;;32871:4;:13;;;32845:8;32854:4;32845:14;;;;;;;;;;;;;;;;;;:22;;;:39;;;;;;;;;;;32916:10;32898:84;;;32936:8;32945:4;32936:14;;;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;32961:4;:20;;;32898:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;33043:1;32994:8;:14;33003:4;32994:14;;;;;;;;;;;:26;33009:10;32994:26;;;;;;;;;;;;;;;:45;;;:50;32991:374;;;33080:1;33051:8;33060:4;33051:14;;;;;;;;;;;;;;;;;;:25;;;:30;;;;;;;;;;;33119:1;33090:8;33099:4;33090:14;;;;;;;;;;;;;;;;;;:25;;;:30;33087:270;;;33132:9;33144:1;33132:13;;33128:181;33151:9;:15;33161:4;33151:15;;;;;;;;;;;:22;;;;33147:1;:26;33128:181;;;33213:10;33191:32;;:9;:15;33201:4;33191:15;;;;;;;;;;;33207:1;33191:18;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;33188:114;;;33240:9;:15;33250:4;33240:15;;;;;;;;;;;33256:1;33240:18;;;;;;;;;;;;;;;;33233:25;;;;;;;;;;;33271:9;:15;33281:4;33271:15;;;;;;;;;;;:22;;;;33267:26;;33188:114;33175:3;;;;;;;33128:181;;;;33087:270;;;33335:9;:15;33345:4;33335:15;;;;;;;;;;;;33328:22;;;;:::i;:::-;33087:270;32991:374;16598:1;;16760:4;16746:11;;:18;;;;;;;;;;;;;;;;;;31627:1742;:::o;25504:83::-;25546:7;25567:8;:15;;;;25560:22;;25504:83;:::o;35082:99::-;17851:9;:7;:9::i;:::-;17843:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35166:10;35152:11;;:24;;;;;;;;;;;;;;;;;;35082:99;:::o;33880:504::-;17851:9;:7;:9::i;:::-;17843:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34013:17;34033:8;:15;;;;34013:35;;34068:9;34061:4;:16;34053:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34131:5;34121:7;34111;:17;:25;34103:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34200:17;34212:4;34200:11;:17::i;:::-;34250:7;34226:8;34235:4;34226:14;;;;;;;;;;;;;;;;;;:21;;:31;;;;34286:7;34262:8;34271:4;34262:14;;;;;;;;;;;;;;;;;;:21;;:31;;;;34324:9;34298:8;34307:4;34298:14;;;;;;;;;;;;;;;;;;:23;;:35;;;;34367:12;34338:8;34347:4;34338:14;;;;;;;;;;;;;;;;;;:26;;:41;;;;17908:1;33880:504;;;;;:::o;17639:79::-;17677:7;17704:6;;;;;;;;;;;17697:13;;17639:79;:::o;18005:92::-;18045:4;18083:6;;;;;;;;;;;18069:20;;:10;:20;;;18062:27;;18005:92;:::o;25596:2238::-;25678:7;25692:20;;:::i;:::-;25721:22;25746:1;25721:26;;25811:1;25774:8;25783:4;25774:14;;;;;;;;;;;;;;;;;;:34;;;:38;25756:4;:15;;:56;;;;;25833:12;25817:4;:13;;:28;;;;;25871:4;:13;;;25853:4;:15;;;:31;25850:78;;;25909:4;:13;;;25891:4;:15;;:31;;;;;25850:78;25966:4;:15;;;25950:4;:13;;;:31;25932:4;:15;;:49;;;;;26005:1;25986:4;:16;;:20;;;;;26037:8;26046:4;26037:14;;;;;;;;;;;;;;;;;;:33;;;26011:4;:23;;:59;;;;;26094:4;:15;;;26075:4;:16;;:34;;;;;26147:1;26119:8;26128:4;26119:14;;;;;;;;;;;;;;;;;;:25;;;:29;26116:263;;;26173:53;26181:8;26190:4;26181:14;;;;;;;;;;;;;;;;;;:22;;;26205:17;;26224:1;26173:7;:53::i;:::-;26155:4;:15;;:71;;;;;26316:8;;26298:4;:15;;;26269:8;26278:4;26269:14;;;;;;;;;;;;;;;;;;:26;;;26251:4;:15;;;:44;:62;:73;;;;;;26232:4;:16;;:92;;;;;26357:4;:16;;;26330:4;:23;;:43;;;;;;;;;;;26116:263;26407:1;26388:4;:16;;;:20;26385:1415;;;26444:8;26453:4;26444:14;;;;;;;;;;;;;;;;;;:28;;;26418:4;:23;;;:54;26415:369;;;26506:8;26515:4;26506:14;;;;;;;;;;;;;;;;;;:28;;;26480:4;:23;;:54;;;;;26689:17;;26677:8;;26659:4;:15;;;26630:8;26639:4;26630:14;;;;;;;;;;;;;;;;;;:26;;;:44;:55;;;;;;26592:8;26601:4;26592:14;;;;;;;;;;;;;;;;;;:33;;;26561:8;26570:4;26561:14;;;;;;;;;;;;;;;;;;:28;;;:64;26560:126;;;;;;:146;;;;;;26541:4;:16;;:165;;;;;26751:8;26760:4;26751:14;;;;;;;;;;;;;;;;;;:26;;;26732:4;:16;;;:45;26713:4;:16;;:64;;;;;26415:369;26818:4;:16;;;26794:4;:21;;:40;;;;;26864:1;26849:4;:12;;:16;;;;;26845:947;26882:9;:15;26892:4;26882:15;;;;;;;;;;;:22;;;;26867:4;:12;;;:37;26845:947;;;26942:9;:15;26952:4;26942:15;;;;;;;;;;;26958:4;:12;;;26942:29;;;;;;;;;;;;;;;;;;;;;;;;;26927:4;:12;;:44;;;;;;;;;;;27005:1;26981:26;;:4;:12;;;:26;;;26978:808;;27036:78;27044:8;:14;27053:4;27044:14;;;;;;;;;;;:28;27059:4;:12;;;27044:28;;;;;;;;;;;;;;;:47;;;27093:17;;27112:1;27036:7;:78::i;:::-;27016:4;:17;;:98;;;;;27212:8;;27192:4;:17;;;27163:8;27172:4;27163:14;;;;;;;;;;;;;;;;;;:26;;;:46;:57;;;;;;27143:4;:16;;;:78;27122:4;:18;;:99;;;;;27252:4;:16;;;27234:4;:15;;;:34;27231:411;;;27349:8;;27329:4;:17;;;27300:8;27309:4;27300:14;;;;;;;;;;;;;;;;;;:26;;;:46;:57;;;;;;27278:4;:19;;:79;;;;;27417:4;:23;;;27394:4;:19;;;27370:4;:21;;;:43;27369:71;27366:165;;;27500:4;:21;;;27474:4;:23;;;:47;27452:4;:19;;:69;;;;;27366:165;27564:4;:19;;;27539:4;:21;;:44;;;;;;;;;;;27614:4;:19;;;27592:4;:18;;:41;;;;;;;;;;;27231:411;27675:5;27659:21;;:4;:12;;;:21;;;27656:123;;;27752:4;:18;;;27707:8;:14;27716:4;27707:14;;;;;;;;;;;:28;27722:4;:12;;;27707:28;;;;;;;;;;;;;;;:42;;;:63;27690:80;;27656:123;26978:808;26905:4;:12;;:14;;;;;;;;;;;26845:947;;;26385:1415;27815:14;27808:21;;;;25596:2238;;;;:::o;34390:284::-;17851:9;:7;:9::i;:::-;17843:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34470:17;34490:8;:15;;;;34470:35;;34525:9;34518:4;:16;34510:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34564:17;34576:4;34564:11;:17::i;:::-;34622:10;34590:8;34599:4;34590:14;;;;;;;;;;;;;;;;;;:28;;;:42;;;;;;;;;;;34665:4;34637:8;34646:4;34637:14;;;;;;;;;;;;;;;;;;:25;;;:32;;;;;;;;;;;;;;;;;;17908:1;34390:284;;:::o;20189:66::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20961:663::-;17851:9;:7;:9::i;:::-;17843:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21214:4;21187:31;;:13;:23;21201:8;21187:23;;;;;;;;;;;;;;;;;;;;;;;;;:31;;;;21179:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21267:5;21257:7;21247;:17;:25;21239:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21336:8;21350:227;;;;;;;;21371:8;21350:227;;;;;;21394:6;21350:227;;;;;;21415:12;21350:227;;;;;;21435:12;21350:227;;;;21454:4;21350:227;;;;;;21465:14;21350:227;;;;21486:7;21350:227;;;;21500:7;21350:227;;;;21514:1;21350:227;;;;21522:1;21350:227;;;;21530:1;21350:227;;;;21538:1;21350:227;;;;21545:9;21350:227;;;;21560:12;21350:227;;;21336:242;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;21336:242:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21615:4;21589:13;:23;21603:8;21589:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;20961:663;;;;;;;;;:::o;18252:109::-;17851:9;:7;:9::i;:::-;17843:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18325:28;18344:8;18325:18;:28::i;:::-;18252:109;:::o;20259:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;23194:2303::-;23243:20;;:::i;:::-;23327:1;23290:8;23299:4;23290:14;;;;;;;;;;;;;;;;;;:34;;;:38;23272:4;:15;;:56;;;;;23349:12;23333:4;:13;;:28;;;;;23387:4;:13;;;23369:4;:15;;;:31;23366:78;;;23425:4;:13;;;23407:4;:15;;:31;;;;;23366:78;23482:4;:15;;;23466:4;:13;;;:31;23448:4;:15;;:49;;;;;23521:1;23502:4;:16;;:20;;;;;23553:8;23562:4;23553:14;;;;;;;;;;;;;;;;;;:33;;;23527:4;:23;;:59;;;;;23610:4;:15;;;23591:4;:16;;:34;;;;;23665:1;23637:8;23646:4;23637:14;;;;;;;;;;;;;;;;;;:25;;;:29;23634:263;;;23691:53;23699:8;23708:4;23699:14;;;;;;;;;;;;;;;;;;:22;;;23723:17;;23742:1;23691:7;:53::i;:::-;23673:4;:15;;:71;;;;;23834:8;;23816:4;:15;;;23787:8;23796:4;23787:14;;;;;;;;;;;;;;;;;;:26;;;23769:4;:15;;;:44;:62;:73;;;;;;23750:4;:16;;:92;;;;;23875:4;:16;;;23848:4;:23;;:43;;;;;;;;;;;23634:263;23927:1;23908:4;:16;;;:20;23905:1460;;;23964:8;23973:4;23964:14;;;;;;;;;;;;;;;;;;:28;;;23938:4;:23;;;:54;23935:409;;;24028:5;24000:8;24009:4;24000:14;;;;;;;;;;;;;;;;;;:25;;;:33;;;;;;;;;;;;;;;;;;24066:8;24075:4;24066:14;;;;;;;;;;;;;;;;;;:28;;;24040:4;:23;;:54;;;;;24249:17;;24237:8;;24219:4;:15;;;24190:8;24199:4;24190:14;;;;;;;;;;;;;;;;;;:26;;;:44;:55;;;;;;24152:8;24161:4;24152:14;;;;;;;;;;;;;;;;;;:33;;;24121:8;24130:4;24121:14;;;;;;;;;;;;;;;;;;:28;;;:64;24120:126;;;;;;:146;;;;;;24101:4;:16;;:165;;;;;24311:8;24320:4;24311:14;;;;;;;;;;;;;;;;;;:26;;;24292:4;:16;;;:45;24273:4;:16;;:64;;;;;23935:409;24378:4;:16;;;24354:4;:21;;:40;;;;;24424:1;24409:4;:12;;:16;;;;;24405:952;24442:9;:15;24452:4;24442:15;;;;;;;;;;;:22;;;;24427:4;:12;;;:37;24405:952;;;24502:9;:15;24512:4;24502:15;;;;;;;;;;;24518:4;:12;;;24502:29;;;;;;;;;;;;;;;;;;;;;;;;;24487:4;:12;;:44;;;;;;;;;;;24565:1;24541:26;;:4;:12;;;:26;;;24538:813;;24596:78;24604:8;:14;24613:4;24604:14;;;;;;;;;;;:28;24619:4;:12;;;24604:28;;;;;;;;;;;;;;;:47;;;24653:17;;24672:1;24596:7;:78::i;:::-;24576:4;:17;;:98;;;;;24772:8;;24752:4;:17;;;24723:8;24732:4;24723:14;;;;;;;;;;;;;;;;;;:26;;;:46;:57;;;;;;24703:4;:16;;;:78;24682:4;:18;;:99;;;;;24812:4;:16;;;24794:4;:15;;;:34;24791:411;;;24909:8;;24889:4;:17;;;24860:8;24869:4;24860:14;;;;;;;;;;;;;;;;;;:26;;;:46;:57;;;;;;24838:4;:19;;:79;;;;;24977:4;:23;;;24954:4;:19;;;24930:4;:21;;;:43;24929:71;24926:165;;;25060:4;:21;;;25034:4;:23;;;:47;25012:4;:19;;:69;;;;;24926:165;25124:4;:19;;;25099:4;:21;;:44;;;;;;;;;;;25174:4;:19;;;25152:4;:18;;:41;;;;;;;;;;;24791:411;25262:4;:18;;;25216:8;:14;25225:4;25216:14;;;;;;;;;;;:28;25231:4;:12;;;25216:28;;;;;;;;;;;;;;;:42;;;:64;;;;;;;;;;;25331:12;25288:8;:14;25297:4;25288:14;;;;;;;;;;;:28;25303:4;:12;;;25288:28;;;;;;;;;;;;;;;:39;;;:55;;;;;;;;;;;24538:813;24465:4;:12;;:14;;;;;;;;;;;24405:952;;;23905:1460;25409:4;:23;;;25373:8;25382:4;25373:14;;;;;;;;;;;;;;;;;;:33;;:59;;;;25475:4;:13;;;25438:8;25447:4;25438:14;;;;;;;;;;;;;;;;;;:34;;:50;;;;23194:2303;;:::o;11329:176::-;11412:85;11431:5;11461;:14;;;:23;;;;11486:2;11490:5;11438:58;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;11438:58:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;11438:58:0;11412:18;:85::i;:::-;11329:176;;;:::o;11513:204::-;11614:95;11633:5;11663;:18;;;:27;;;;11692:4;11698:2;11702:5;11640:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;11640:68:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;11640:68:0;11614:18;:95::i;:::-;11513:204;;;;:::o;33375:248::-;33464:13;33484:15;33532:1;33522:9;:11;33515:2;:19;33503:9;:31;33484:50;;33539:14;33592:2;33587:1;33572:11;33559:10;:24;;;;;;33558:30;33557:37;;;;;;33539:55;;33608:9;33599:19;;;;33375:248;;;;;:::o;18467:229::-;18561:1;18541:22;;:8;:22;;;;18533:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18651:8;18622:38;;18643:6;;;;;;;;;;;18622:38;;;;;;;;;;;;18680:8;18671:6;;:17;;;;;;;;;;;;;;;;;;18467:229;:::o;13368:1114::-;13972:27;13980:5;13972:25;;;:27::i;:::-;13964:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14109:12;14123:23;14158:5;14150:19;;14170:4;14150:25;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;14150:25:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;14108:67:0;;;;14194:7;14186:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14275:1;14255:10;:17;:21;14251:224;;;14397:10;14386:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14386:30:0;;;;;;;;;;;;;;;;14378:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14251:224;13368:1114;;;;:::o;10340:422::-;10400:4;10608:12;10719:7;10707:20;10699:28;;10753:1;10746:4;:8;10739:15;;;10340:422;;;:::o;18703:17052::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
bzzr://513651096f6c4282e1979d025d9061182d1e8024c6b933ec77546e1df979a8e2
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.