ERC-20
Source Code
Overview
Max Total Supply
116,799.365 POOL
Holders
102
Transfers
-
-
Market
Onchain Market Cap
-
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 8 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
| # | Exchange | Pair | Price | 24H Volume | % Volume |
|---|
Contract Name:
HEXPOOL
Compiler Version
v0.5.13+commit.5b0b510c
Contract Source Code (Solidity Multiple files format)
//HEXPOOL.sol
//
//
pragma solidity ^0.5.13;
import "./SafeMath.sol";
import "./IERC20.sol";
import "./HEX.sol";
////////////////////////////////////////////////
////////////////////EVENTS/////////////////////
//////////////////////////////////////////////
contract PoolEvents {
//when a user enters a pool
event PoolEntry(
address indexed user,//msg.sender
uint indexed heartValue,
uint indexed entryId,
uint poolId
);
//when a user exits a pool
event PoolExit(
address indexed user,//msg.sender
uint indexed heartValue,
uint indexed entryId,
uint poolId
);
//when a pool starts staking
event PoolStartStake(
uint heartValue,//always 150m
uint indexed dayLength,
uint indexed poolId,
uint hexStakeId
);
//when a pool ends stake
event PoolEndStake(
uint heartValue,//always 150m
uint indexed stakeProfit,
uint indexed dayLength,
uint indexed poolId,
uint hexStakeId
);
//when an ended stakes rewards are withdrawn
event Withdrawal(
address indexed user,
uint indexed heartValue
);
}
contract TokenEvents {
//when a user freezes tokens
event TokenFreeze(
address indexed user,
uint indexed value
);
//when a user unfreezes tokens
event TokenUnfreeze(
address indexed user,
uint indexed value
);
}
//////////////////////////////////////
//////////POOL TOKEN CONTRACT////////
////////////////////////////////////
contract POOL is IERC20, TokenEvents{
using SafeMath for uint256;
mapping (address => uint256) private _balances;
mapping (address => mapping (address => uint256)) private _allowances;
bool internal mintBlock;//stops any more tokens ever being minted once _totalSupply reaches _maxSupply - allows for burn rate to take full effect
uint256 internal _maxSupply = 10000000000000000000;// max supply @ 100B
uint256 internal _totalSupply;
string public constant name = "HEXPOOL";
string public constant symbol = "POOL";
uint public constant decimals = 8;
//BUDDY SYSTEM
uint public buddyDiv;
//FREEZING
uint public totalFrozen;
mapping (address => uint) public tokenFrozenBalances;//balance of POOL frozen mapped by user
/**
* @dev See {IERC20-totalSupply}.
*/
function totalSupply() public view returns (uint256) {
return _totalSupply;
}
/**
* @dev See {IERC20-balanceOf}.
*/
function balanceOf(address account) public view returns (uint256) {
return _balances[account];
}
/**
* @dev See {IERC20-transfer}.
*
* Requirements:
*
* - `recipient` cannot be the zero address.
* - the caller must have a balance of at least `amount`.
*/
function transfer(address recipient, uint256 amount) public returns (bool) {
_transfer(msg.sender, recipient, amount);
return true;
}
/**
* @dev See {IERC20-allowance}.
*/
function allowance(address owner, address spender) public view returns (uint256) {
return _allowances[owner][spender];
}
/**
* @dev See {IERC20-approve}.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(address spender, uint256 amount) public returns (bool) {
_approve(msg.sender, spender, amount);
return true;
}
/**
* @dev See {IERC20-transferFrom}.
*
* Emits an {Approval} event indicating the updated allowance. This is not
* required by the EIP. See the note at the beginning of {ERC20};
*
* Requirements:
* - `sender` and `recipient` cannot be the zero address.
* - `sender` must have a balance of at least `amount`.
* - the caller must have allowance for `sender`'s tokens of at least
* `amount`.
*/
function transferFrom(address sender, address recipient, uint256 amount) public returns (bool) {
_transfer(sender, recipient, amount);
_approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount, "ERC20: transfer amount exceeds allowance"));
return true;
}
/**
* @dev Atomically increases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
_approve(msg.sender, spender, _allowances[msg.sender][spender].add(addedValue));
return true;
}
/**
* @dev Atomically decreases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `spender` must have allowance for the caller of at least
* `subtractedValue`.
*/
function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {
_approve(msg.sender, spender, _allowances[msg.sender][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
return true;
}
/**
* @dev Moves tokens `amount` from `sender` to `recipient`.
*
* This is internal function is equivalent to {transfer}, and can be used to
* e.g. implement automatic token fees, slashing mechanisms, etc.
*
* Emits a {Transfer} event.
*
* Requirements:
*
* - `sender` cannot be the zero address.
* - `recipient` cannot be the zero address.
* - `sender` must have a balance of at least `amount`.
*/
function _transfer(address sender, address recipient, uint256 amount) internal {
require(sender != address(0), "ERC20: transfer from the zero address");
require(recipient != address(0), "ERC20: transfer to the zero address");
//1% burn rate
uint burnt = amount.div(100);
uint newAmt = amount.sub(burnt);
_balances[sender] = _balances[sender].sub(newAmt, "ERC20: transfer amount exceeds balance");
_balances[recipient] = _balances[recipient].add(newAmt);
_burn(sender, burnt);
emit Transfer(sender, recipient, newAmt);
}
/** @dev Creates `amount` tokens and assigns them to `account`, increasing
* the total supply.
*
* Emits a {Transfer} event with `from` set to the zero address.
*
* Requirements
*
* - `to` cannot be the zero address.
*/
function _mint(address account, uint256 amount) internal {
uint256 amt = amount;
require(account != address(0), "ERC20: mint to the zero address");
if(!mintBlock){
if(_totalSupply < _maxSupply){
if(_totalSupply.add(amt) > _maxSupply){
amt = _maxSupply.sub(_totalSupply);
_totalSupply = _maxSupply;
mintBlock = true;
}
else{
_totalSupply = _totalSupply.add(amt);
}
_balances[account] = _balances[account].add(amt);
emit Transfer(address(0), account, amt);
}
}
}
/**
* @dev Destroys `amount` tokens from `account`, reducing the
* total supply.
*
* Emits a {Transfer} event with `to` set to the zero address.
*
* Requirements
*
* - `account` cannot be the zero address.
* - `account` must have at least `amount` tokens.
*/
function _burn(address account, uint256 amount) internal {
require(account != address(0), "ERC20: burn from the zero address");
_balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
_totalSupply = _totalSupply.sub(amount);
emit Transfer(account, address(0), amount);
}
/**
* @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.
*
* This is internal function is equivalent to `approve`, and can be used to
* e.g. set automatic allowances for certain subsystems, etc.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `owner` cannot be the zero address.
* - `spender` cannot be the zero address.
*/
function _approve(address owner, address spender, uint256 amount) internal {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
/**
* @dev Destroys `amount` tokens from `account`.`amount` is then deducted
* from the caller's allowance.
*
* See {_burn} and {_approve}.
*/
function _burnFrom(address account, uint256 amount) internal {
_burn(account, amount);
_approve(account, msg.sender, _allowances[account][msg.sender].sub(amount, "ERC20: burn amount exceeds allowance"));
}
/**
* @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);//from address(0) for minting
/**
* @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);
//mint POOL to msg.sender
function mintPool(uint hearts)
internal
returns(bool)
{
uint amt = hearts.div(100);
address minter = msg.sender;
_mint(minter, amt);//mint POOL - 1% of total heart value before fees @ 10 POOL for 1000 HEX
return true;
}
////////////////////////////////////////////////////////
/////////////////PUBLIC FACING - POOL CONTROL//////////
//////////////////////////////////////////////////////
//freeze POOL to contract
function FreezeTokens(uint amt)
public
{
require(amt > 0, "zero input");
require(tokenBalance() >= amt, "Error: insufficient balance");//ensure user has enough funds
//update balances (allow for 1% burn)
tokenFrozenBalances[msg.sender] = tokenFrozenBalances[msg.sender].add(amt.sub(amt.div(100)));
totalFrozen = totalFrozen.add(amt.sub(amt.div(100)));
_transfer(msg.sender, address(this), amt);//make transfer and burn
emit TokenFreeze(msg.sender, amt);
}
//unfreeze POOL from contract
function UnfreezeTokens(uint amt)
public
{
require(amt > 0, "zero input");
require(tokenFrozenBalances[msg.sender] >= amt,"Error: unsufficient frozen balance");//ensure user has enough frozen funds
tokenFrozenBalances[msg.sender] = tokenFrozenBalances[msg.sender].sub(amt);//update balances
totalFrozen = totalFrozen.sub(amt);
_transfer(address(this), msg.sender, amt);//make transfer and burn
emit TokenUnfreeze(msg.sender, amt);
}
///////////////////////////////
////////VIEW ONLY//////////////
///////////////////////////////
//total POOL frozen in contract
function totalFrozenTokenBalance()
public
view
returns (uint256)
{
return totalFrozen;
}
//pool balance of caller
function tokenBalance()
public
view
returns (uint256)
{
return balanceOf(msg.sender);
}
}
contract HEXPOOL is POOL, PoolEvents {
///////////////////////////////////////////////////////////////////////
////////////////////////////////CONTRACT SETUP///////////////////////
////////////////////////////////////////////////////////////////////
using SafeMath for uint256;
HEX hexInterface;
//HEXPOOL
address payable constant hexAddress = 0x2b591e99afE9f32eAA6214f7B7629768c40Eeb39;
address payable devAddress;//set in constructor
address payable constant devAddress2 = 0xD30BC4859A79852157211E6db19dE159673a67E2;
uint constant fee = 100; //1%;
uint constant devFee = 2; // 50% of 1% @ 0.5%;
uint constant devFee2 = 4; // 25% of 1% @ 0.25%;
uint constant refFee = 4; // 25% of 1% @ 0.25%; - 100% goes to buddyDiv if no ref, 50% if ref;
uint public last_pool_entry_id;// pool entry id
uint public last_pool_id;// pool id
uint public last_stake_id;// stake id
uint public minEntryHearts;//minimum entry value
mapping (address => UserInfo) public users;
mapping (uint => EntryInfo) public entries;
mapping (uint => PoolInfo) public pools;
mapping (uint => uint) internal poolUserCount;
mapping (uint => uint[]) internal poolEntryIds;
mapping (address => uint[]) internal userEntryIds;
bool locked;
bool ready;
struct UserInfo {
uint totalHeartsEntered;
address userAddress;
}
struct EntryInfo {
uint heartValue;
uint poolId;
uint entryId;
address payable userAddress;
address payable refferer;
}
struct PoolInfo {
uint poolStakeThreshold;//hearts
uint poolStakeDayLength;
uint poolValue;//hearts
uint poolId;
uint poolType;
mapping (address => bool) poolParticipant;
mapping (address => uint) userHeartValue;
uint stakeId;
uint40 hexStakeId;
bool isStaking;
bool isActive;
uint256 poolStakeStartTimestamp;
uint stakeValue;
uint stakeProfit;
bool stakeEnded;
}
modifier onlyOwner {
require(msg.sender == devAddress, "notOwner");
_;
}
modifier canEnter(uint id, uint hearts) {
require(isPoolActive(id), "cannot enter, poolId not active");
require(id <= last_pool_id, "Error: poolId out of range");
require(hearts > minEntryHearts, "Error: value must be greater than minEntryHearts");
_;
}
modifier isReady {
require(ready, "cannot enter, pools not initialized");
_;
}
modifier synchronized {
require(!locked, "Sync lock");
locked = true;
_;
locked = false;
}
constructor() public {
devAddress = msg.sender;
hexInterface = HEX(hexAddress);
initializePools();
}
function() external payable {
require(false); //refunds any eth accidently sent to contract;
}
function initializePools()
internal
onlyOwner
{
require(!ready, "cannot reinitialize");
//create one of each pool on deployment
for(uint i = 0; i < 3; i++){
newPool(i, 0, address(0));
}
setMinEntry(100000000000);//1000 HEX @ contract launch, may change dependant on price.
ready = true;
}
///////////////////////////////////////////////////////////////////////
////////////////////////////////HEXPOOL CORE//////////////////////////
////////////////////////////////////////////////////////////////////
//creates a new pool - called on initializePools and when a poolValue reachs its poolStakeThreshold
function newPool(uint poolType, uint remainderHearts, address payable ref)
internal
returns (bool)
{
uint threshold;
uint dayLength;
if(poolType == 0){
threshold = 15000000000000000;//150M BPB @ 10% - 36 DAYS
dayLength = 36;//~1 month
}
else if(poolType == 1){
threshold = 15000000000000000;//150M BPB @ 10% - 365 DAYS
dayLength = 365;//1 year
}
else if(poolType == 2){
threshold = 15000000000000000;//150M BPB @ 10% - 3650 DAYS
dayLength = 3650;//10 years (max rewards)
}
else{
revert("invalid poolType");
}
uint id = _next_pool_id();
PoolInfo storage pool = pools[id];
pool.poolStakeThreshold = threshold;//hearts
pool.poolStakeDayLength = dayLength;
pool.poolValue = remainderHearts;//hearts
pool.poolId = id;
pool.poolType = poolType;
pool.isActive = true;
if(remainderHearts > 0){//update pool, user and entry data as the new pool now has 1 participant
poolUserCount[id]++;
pool.poolParticipant[msg.sender] = true;
pool.userHeartValue[msg.sender] = pool.userHeartValue[msg.sender].add(remainderHearts);
//user info
updateUserData(remainderHearts);
//entry info
updateEntryData(remainderHearts, id, ref);
}
pools[id] = pool;
return true;
}
//enters pool - transfers HEX from user to contract - approval needed
function enterPool(uint hearts, uint poolId, address payable ref)
internal
returns(bool)
{
PoolInfo storage pool = pools[poolId];
require(hearts <= pool.poolStakeThreshold, "amount over threshold - only 1 new pool to be created per tx");
require(!pool.isStaking, "pool is staking");
//calc amounts
uint _fee = hearts.div(fee);
uint _devFee = _fee.div(devFee);
uint _devFee2 = _fee.div(devFee2);
uint _refFee = _fee.div(refFee);
uint _hearts = hearts.sub(_fee);
pool.poolValue = pool.poolValue.add(_hearts);//increment pool value with heart value after fees
if(!pool.poolParticipant[msg.sender]){
pool.poolParticipant[msg.sender] = true;
poolUserCount[poolId]++;
}
//TOTAL amount of hearts this user has input in THIS pool after fees (EntryInfo for individual pool entries)
pool.userHeartValue[msg.sender] = pool.userHeartValue[msg.sender].add(_hearts);
//buddy divs
if(buddyDiv > 0){
require(hexInterface.transfer(msg.sender, buddyDiv), "Transfer failed");//send hex as buddy div to user
}
if(ref == address(0)){//no ref
//hex refFee to buddyDivs
buddyDiv = _refFee;
}
else{//ref
//hex refFee to ref
buddyDiv = _refFee.div(2);
require(hexInterface.transferFrom(msg.sender, ref, _refFee.div(2)), "Ref transfer failed");//send hex to refferer
}
//send
require(hexInterface.transferFrom(msg.sender, address(this), _hearts.add(buddyDiv)), "Transfer failed");//send hex from user to contract + buddyDivs to remain in contract
require(hexInterface.transferFrom(msg.sender, devAddress, _devFee), "Dev1 transfer failed");//send hex to dev
require(hexInterface.transferFrom(msg.sender, devAddress2, _devFee2), "Dev2 transfer failed");//send hex to dev2
//check for pool overflow
if(pool.poolValue > pool.poolStakeThreshold){
uint remainderHearts = pool.poolValue.sub(pool.poolStakeThreshold);//get remainder
//user info
updateUserData(_hearts.sub(remainderHearts));//remainder to be rolled to next pool
//entry info
updateEntryData(_hearts.sub(remainderHearts), pool.poolId, ref);//remainder to be rolled to next pool
pool.poolValue = pool.poolStakeThreshold;//set as max
//Back out the remainder value that is spilling into the next pool
pool.userHeartValue[msg.sender] = pool.userHeartValue[msg.sender].sub(remainderHearts);
require(startStake(poolId, pool), "Error: could not start stake");
require(newPool(pool.poolType, remainderHearts, ref), "Error: could not create new pool");//create new pool with remainder
}
else if(pool.poolValue == pool.poolStakeThreshold){
//user info
updateUserData(_hearts);
//entry info
updateEntryData(_hearts, pool.poolId, ref);
require(startStake(poolId, pool), "Error: could not start stake");
require(newPool(pool.poolType, 0, ref), "Error: could not create new pool");//new pool no remainder
}
else{
//user info
updateUserData(_hearts);
//entry info
updateEntryData(_hearts, pool.poolId, ref);
}
//mint bonus POOL tokens relative to HEX amount before fees
require(mintPool(hearts), "Error: could not mint tokens");
return true;
}
//starts staking poolStakeThreshold to the HEX contract
function startStake(uint poolId, PoolInfo storage pool)
internal
returns (bool)
{
require(pool.poolValue == pool.poolStakeThreshold, "Stake amount incorrect");
uint newStakedHearts = pool.poolStakeThreshold;
uint newStakedDays = pool.poolStakeDayLength;
hexInterface.stakeStart(newStakedHearts, newStakedDays);
uint hexStakeIndex = hexInterface.stakeCount(address(this)).sub(1);//get the most recent stakeIndex
SStore memory stake = getStakeByIndex(address(this), hexStakeIndex); //get stake from address and stakeindex
//set pool stake id info
pool.hexStakeId = stake.stakeId;
pool.stakeId = last_stake_id;
pool.poolStakeStartTimestamp = now;
pool.isActive = false;
pool.isStaking = true;
_next_stake_id();
emit PoolStartStake(
newStakedHearts,
newStakedDays,
poolId,
stake.stakeId
);
return true;
}
//end a pool stake - cannot emergency unstake - needs testing
function endStake(uint poolId)
internal
returns (bool)
{
require(poolId <= last_pool_id, "Error: poolId out of range");
PoolInfo storage pool = pools[poolId];
require(pool.isStaking, "Error: pool is not yet staked, or has already ended staking");
require(isPoolStakeFinished(poolId), "Error: cannot early unstake");
uint256 oldBalance = getContractBalance();
//find the stake index then
//end stake
hexInterface.stakeEnd(getStakeIndexById(address(this), pool.hexStakeId), pool.hexStakeId);
pool.isStaking = false;
pool.stakeEnded = true;
//calc stakeValue and stakeProfit
uint256 stakeValue = getContractBalance().sub(oldBalance);
pool.stakeValue = stakeValue;
pool.stakeProfit = stakeValue.sub(pool.poolStakeThreshold);
emit PoolEndStake(
pool.stakeProfit,
pool.poolValue,
pool.poolStakeDayLength,
pool.poolId,
pool.hexStakeId
);
return true;
}
//withdraws any staking rewards - or ends a stake if finished but not yet unstaked
function withdrawPoolRewards(uint poolId)
internal
returns(bool)
{
PoolInfo storage pool = pools[poolId];
require(pool.poolValue > 0, "pool rewards have been drained");
require(pools[poolId].userHeartValue[msg.sender] > 0, "you have no share in this pool");
if(!pool.stakeEnded){
endStake(poolId);
}
uint rewards = getWithdrawableRewards(poolId);//calculate pool share
pool.poolValue = pool.poolValue.sub(pool.userHeartValue[msg.sender]);//reduce pool value
pool.userHeartValue[msg.sender] = 0;//user has withdrawn rewards from pool
if(pool.poolValue == 0){
delete pools[poolId];//delete pool if empty
}
require(hexInterface.transfer(msg.sender, rewards), "Transfer failed");//transfer users share
emit Withdrawal(msg.sender, rewards);
return true;
}
//get any withdrawable staking rewards of caller
function getWithdrawableRewards(uint poolId)
public
view
returns (uint)
{
PoolInfo storage pool = pools[poolId];
require(pool.stakeEnded, "pool stake has not yet finished");
if(pool.userHeartValue[msg.sender] == 0){
return 0;
}
uint stakeWithdrawable = pool.stakeValue.mul(pool.userHeartValue[msg.sender]).div(pool.poolStakeThreshold);//withdrawable rewards
return stakeWithdrawable;
}
//exits pool of entry by entryId
function exitPool(uint entryId)
internal
returns (bool)
{
EntryInfo memory entry = entries[entryId];
require(msg.sender == entry.userAddress, "not entry owner, or already exited");
PoolInfo storage pool = pools[entry.poolId];
require(pool.poolParticipant[msg.sender], "you are not a pool participant");
require(!pool.isStaking, "pool is staking, cannot exit");
users[msg.sender].totalHeartsEntered = users[msg.sender].totalHeartsEntered.sub(entry.heartValue);
pool.poolValue = pool.poolValue.sub(entry.heartValue); //reduce pool value
pool.userHeartValue[msg.sender] = pool.userHeartValue[msg.sender].sub(entry.heartValue);//reduce users pool share
//remove user from pool data if 0 pool share
if(pool.userHeartValue[msg.sender] == 0){
pool.poolParticipant[msg.sender] = false;
poolUserCount[entry.poolId]--;
}
delete entries[entryId];
//calc fee amount
uint _fee = entry.heartValue.div(fee);
uint _devFee = _fee.div(devFee);
uint _devFee2 = _fee.div(devFee2);
uint _refFee = _fee.div(refFee);
uint _hearts = entry.heartValue.sub(_fee);
if(buddyDiv > 0){
require(hexInterface.transfer(devAddress, buddyDiv.div(2)), "Transfer failed");//send hex as buddy div to dev1 as penalty for user exiting pool
require(hexInterface.transfer(devAddress2, buddyDiv.div(2)), "Transfer failed");//send hex as buddy div to dev2 as penalty for user exiting pool
}
if(entry.refferer == address(0)){//no ref
//set new buddyDivs as hex refFee
buddyDiv = _refFee;
}
else{//ref
//set new buddyDivs as hex refFee / 2
buddyDiv = _refFee.div(2);
require(hexInterface.transfer(entry.refferer, _refFee.div(2)), "Ref transfer failed");//send hex to refferer
}
//send
require(hexInterface.transfer(msg.sender, _hearts), "Transfer failed");//send hex from contract to user
require(hexInterface.transfer(devAddress, _devFee), "Dev1 transfer failed");//send hex to dev
require(hexInterface.transfer(devAddress2, _devFee2), "Dev2 transfer failed");//send hex to dev2
//events
emit PoolExit(
entry.userAddress,
entry.heartValue,
entry.entryId,
pool.poolId
);
return true;
}
//updates user data
function updateUserData(uint hearts)
internal
{
UserInfo storage user = users[msg.sender];
user.totalHeartsEntered = user.totalHeartsEntered.add(hearts);//total amount of hearts deposited by this user after fees
user.userAddress = msg.sender;
}
//updates entry data
function updateEntryData(uint hearts, uint poolId, address payable ref)
internal
{
uint _entryID = _next_pool_entry_id();
userEntryIds[msg.sender].push(_entryID);//update userEntryIds
poolEntryIds[poolId].push(_entryID);//update poolEntryIds
EntryInfo memory entry;
entry.heartValue = hearts;//amount of hearts deposited in this entry after fees
entry.poolId = poolId;//poolId this entry has deposited to
entry.entryId = _entryID;
entry.userAddress = msg.sender;
entry.refferer = ref;
entries[_entryID] = entry;//update entry data
emit PoolEntry(
entry.userAddress,
entry.heartValue,
entry.entryId,
poolId
);
}
//get next entry id
function _next_pool_entry_id()
internal
returns (uint)
{
last_pool_entry_id++;
return last_pool_entry_id;
}
//get next pool id
function _next_pool_id()
internal
returns (uint)
{
last_pool_id++;
return last_pool_id;
}
//get next stake id
function _next_stake_id()
internal
returns (uint)
{
last_stake_id++;
return last_stake_id;
}
//////////////////////////////////////////////////////////////////
////////////////////////PUBLIC FACING HEXPOOL////////////////////
////////////////////////////////////////////////////////////////
//enter any pool that isActive
function EnterPool(uint _hearts, uint _poolId, address payable _ref)
public
canEnter(_poolId, _hearts)
synchronized
{
require(enterPool(_hearts, _poolId, _ref), "Error: could not enter pool");
}
//withdraw funds from pool by entryId - pool cannot be already staking
function ExitPool(uint _entryId)
public
synchronized
{
require(exitPool(_entryId), "Error: could not exit pool");
}
//ends a staked pool
function EndPoolStake(uint _poolId)
public
synchronized
{
require(endStake(_poolId), "Error: could not end stake");
}
//withdraws HEX staking rewards
function WithdrawHEX(uint _poolId)
public
synchronized
{
require(withdrawPoolRewards(_poolId), "Error: could not withdraw rewards");
}
//////////////////////////////////////////
////////////VIEW ONLY/////////////////////
//////////////////////////////////////////
//only an active pool can be entered or exited
function isPoolActive(uint poolId)
public
view
isReady
returns(bool)
{
return pools[poolId].isActive;
}
//
function isPoolStaking(uint poolId)
public
view
returns(bool)
{
return pools[poolId].isStaking;
}
//
function isPoolStakeFinished(uint poolId)
public
view
returns(bool)
{
//add 1 to stakeDayLength to account for stake pending time
return pools[poolId].poolStakeStartTimestamp.add((pools[poolId].poolStakeDayLength.add(1)).mul(86400)) <= now;
}
//
function isPoolStakeEnded(uint poolId)
public
view
returns(bool)
{
return pools[poolId].stakeEnded;
}
//general user info
function getUserInfo(address addr)
public
view
returns(
uint totalHeartsEntered,
uint[] memory _entryIds,
address userAddress
)
{
return(users[addr].totalHeartsEntered, userEntryIds[addr], users[addr].userAddress);
}
//general entry info
function getEntryInfo(uint entryId)
public
view
returns(
uint heartValue,
uint poolId,
address payable userAddress,
address payable refferer
)
{
return(entries[entryId].heartValue, entries[entryId].poolId, entries[entryId].userAddress, entries[entryId].refferer);
}
//general pool info
function getPoolInfo(uint poolId)
public
view
returns(
uint poolStakeThreshold,//hearts
uint poolStakeDayLength,
uint poolValue,//hearts
uint poolType,
bool isStaking,
uint256 poolStakeStartTimestamp,
bool stakeEnded
)
{
return(
pools[poolId].poolStakeThreshold,
pools[poolId].poolStakeDayLength,
pools[poolId].poolValue,
pools[poolId].poolType,
pools[poolId].isStaking,
pools[poolId].poolStakeStartTimestamp,
pools[poolId].stakeEnded
);
}
//returns all entryIds of a pool
function getPoolEntryIds(uint poolId)
public
view
returns(uint[] memory)
{
return poolEntryIds[poolId];
}
//return vital stake params
function getPoolStakeInfo(uint poolId)
public
view
returns(uint stakeId, uint hexStakeIndex, uint40 hexStakeId)
{
return(pools[poolId].stakeId, getStakeIndexById(address(this), pools[poolId].hexStakeId), pools[poolId].hexStakeId);
}
//returns amount of users by address in a pool
function getPoolUserCount(uint poolId)
public
view
returns(uint)
{
return poolUserCount[poolId];
}
//is address a user of pool
function isPoolParticipant(uint id, address addr)
public
view
returns(bool)
{
return pools[id].poolParticipant[addr];
}
//returns total hearts a user owns in pool
function getUserHeartValue(uint id, address addr)
public
view
returns(uint)
{
return pools[id].userHeartValue[addr];
}
//returns contract HEX balance
function getContractBalance()
public
view
returns(uint)
{
return hexInterface.balanceOf(address(this));
}
///////////////////////////////////////////////
//////////////////MUTABLE//////////////////////
//////////////////////////////////////////////
function setMinEntry(uint hearts)
public
onlyOwner
{
minEntryHearts = hearts;
}
///////////////////////////////////////////////
///////////////////HEX UTILS///////////////////
///////////////////////////////////////////////
//credits to kyle bahr @ https://gist.github.com/kbahr/80e61ab761053849f7fdc6226b85a354
struct SStore {
uint40 stakeId;
uint72 stakedHearts;
uint72 stakeShares;
uint16 lockedDay;
uint16 stakedDays;
uint16 unlockedDay;
bool isAutoStake;
}
struct DailyDataCache {
uint256 dayPayoutTotal;
uint256 dayStakeSharesTotal;
uint256 dayUnclaimedSatoshisTotal;
}
uint256 private constant HEARTS_UINT_SHIFT = 72;
uint256 private constant HEARTS_MASK = (1 << HEARTS_UINT_SHIFT) - 1;
uint256 private constant SATS_UINT_SHIFT = 56;
uint256 private constant SATS_MASK = (1 << SATS_UINT_SHIFT) - 1;
function decodeDailyData(uint256 encDay)
private
pure
returns (DailyDataCache memory)
{
uint256 v = encDay;
uint256 payout = v & HEARTS_MASK;
v = v >> HEARTS_UINT_SHIFT;
uint256 shares = v & HEARTS_MASK;
v = v >> HEARTS_UINT_SHIFT;
uint256 sats = v & SATS_MASK;
return DailyDataCache(payout, shares, sats);
}
function interestForRange(DailyDataCache[] memory dailyData, uint256 myShares)
private
pure
returns (uint256)
{
uint256 len = dailyData.length;
uint256 total = 0;
for(uint256 i = 0; i < len; i++){
total += interestForDay(dailyData[i], myShares);
}
return total;
}
function interestForDay(DailyDataCache memory dayObj, uint256 myShares)
private
pure
returns (uint256)
{
return myShares * dayObj.dayPayoutTotal / dayObj.dayStakeSharesTotal;
}
function getDataRange(uint256 b, uint256 e)
private
view
returns (DailyDataCache[] memory)
{
uint256[] memory dataRange = hexInterface.dailyDataRange(b, e);
uint256 len = dataRange.length;
DailyDataCache[] memory data = new DailyDataCache[](len);
for(uint256 i = 0; i < len; i++){
data[i] = decodeDailyData(dataRange[i]);
}
return data;
}
function getLastDataDay()
private
view
returns(uint256)
{
uint256[13] memory globalInfo = hexInterface.globalInfo();
uint256 lastDay = globalInfo[4];
return lastDay;
}
function getInterestByStake(SStore memory s)
private
view
returns (uint256)
{
uint256 b = s.lockedDay;
uint256 e = getLastDataDay(); // ostensibly "today"
if (b >= e) {
//not started - error
return 0;
} else {
DailyDataCache[] memory data = getDataRange(b, e);
return interestForRange(data, s.stakeShares);
}
}
function getInterestByStakeId(address addr, uint40 stakeId)
public
view
returns (uint256)
{
SStore memory s = getStakeByStakeId(addr, stakeId);
return getInterestByStake(s);
}
function getTotalValueByStakeId(address addr, uint40 stakeId)
public
view
returns (uint256)
{
SStore memory stake = getStakeByStakeId(addr, stakeId);
uint256 interest = getInterestByStake(stake);
return stake.stakedHearts + interest;
}
function getStakeByIndex(address addr, uint256 idx)
private
view
returns (SStore memory)
{
uint40 stakeId;
uint72 stakedHearts;
uint72 stakeShares;
uint16 lockedDay;
uint16 stakedDays;
uint16 unlockedDay;
bool isAutoStake;
(stakeId,
stakedHearts,
stakeShares,
lockedDay,
stakedDays,
unlockedDay,
isAutoStake) = hexInterface.stakeLists(addr, idx);
return SStore(stakeId,
stakedHearts,
stakeShares,
lockedDay,
stakedDays,
unlockedDay,
isAutoStake);
}
function getStakeByStakeId(address addr, uint40 sid)
private
view
returns (SStore memory)
{
uint40 stakeId;
uint72 stakedHearts;
uint72 stakeShares;
uint16 lockedDay;
uint16 stakedDays;
uint16 unlockedDay;
bool isAutoStake;
uint256 stakeCount = hexInterface.stakeCount(addr);
for(uint256 i = 0; i < stakeCount; i++){
(stakeId,
stakedHearts,
stakeShares,
lockedDay,
stakedDays,
unlockedDay,
isAutoStake) = hexInterface.stakeLists(addr, i);
if(stakeId == sid){
return SStore(stakeId,
stakedHearts,
stakeShares,
lockedDay,
stakedDays,
unlockedDay,
isAutoStake);
}
}
}
function getStakeIndexById(address addr, uint40 sid)
private
view
returns (uint)
{
uint40 stakeId;
uint72 stakedHearts;
uint72 stakeShares;
uint16 lockedDay;
uint16 stakedDays;
uint16 unlockedDay;
bool isAutoStake;
uint256 stakeCount = hexInterface.stakeCount(addr);
for(uint256 i = 0; i < stakeCount; i++){
(stakeId,
stakedHearts,
stakeShares,
lockedDay,
stakedDays,
unlockedDay,
isAutoStake) = hexInterface.stakeLists(addr, i);
if(stakeId == sid){
return i;
}
}
}
}
pragma solidity 0.5.13;
interface HEX {
/**
* @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);//from address(0) for minting
/**
* @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);
function stakeStart(uint256 newStakedHearts, uint256 newStakedDays) external;
function stakeEnd(uint256 stakeIndex, uint40 stakeIdParam) external;
function stakeCount(address stakerAddr) external view returns (uint256);
function stakeLists(address owner, uint256 stakeIndex) external view returns (uint40, uint72, uint72, uint16, uint16, uint16, bool);
function currentDay() external view returns (uint256);
function dailyDataRange(uint256 beginDay, uint256 endDay) external view returns (uint256[] memory);
function globalInfo() external view returns (uint256[13] memory);
}
pragma solidity ^0.5.13;
/**
* @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);//from address(0) for minting
/**
* @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);
}
pragma solidity ^0.5.13;
/**
* @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;
}
}
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"heartValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"stakeProfit","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"dayLength","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"poolId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"hexStakeId","type":"uint256"}],"name":"PoolEndStake","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"heartValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"entryId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"poolId","type":"uint256"}],"name":"PoolEntry","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"heartValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"entryId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"poolId","type":"uint256"}],"name":"PoolExit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"heartValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"dayLength","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"poolId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"hexStakeId","type":"uint256"}],"name":"PoolStartStake","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TokenFreeze","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TokenUnfreeze","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"heartValue","type":"uint256"}],"name":"Withdrawal","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"}],"name":"EndPoolStake","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_hearts","type":"uint256"},{"internalType":"uint256","name":"_poolId","type":"uint256"},{"internalType":"address payable","name":"_ref","type":"address"}],"name":"EnterPool","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_entryId","type":"uint256"}],"name":"ExitPool","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"FreezeTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"UnfreezeTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"}],"name":"WithdrawHEX","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"buddyDiv","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"entries","outputs":[{"internalType":"uint256","name":"heartValue","type":"uint256"},{"internalType":"uint256","name":"poolId","type":"uint256"},{"internalType":"uint256","name":"entryId","type":"uint256"},{"internalType":"address payable","name":"userAddress","type":"address"},{"internalType":"address payable","name":"refferer","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getContractBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"entryId","type":"uint256"}],"name":"getEntryInfo","outputs":[{"internalType":"uint256","name":"heartValue","type":"uint256"},{"internalType":"uint256","name":"poolId","type":"uint256"},{"internalType":"address payable","name":"userAddress","type":"address"},{"internalType":"address payable","name":"refferer","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint40","name":"stakeId","type":"uint40"}],"name":"getInterestByStakeId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"poolId","type":"uint256"}],"name":"getPoolEntryIds","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"poolId","type":"uint256"}],"name":"getPoolInfo","outputs":[{"internalType":"uint256","name":"poolStakeThreshold","type":"uint256"},{"internalType":"uint256","name":"poolStakeDayLength","type":"uint256"},{"internalType":"uint256","name":"poolValue","type":"uint256"},{"internalType":"uint256","name":"poolType","type":"uint256"},{"internalType":"bool","name":"isStaking","type":"bool"},{"internalType":"uint256","name":"poolStakeStartTimestamp","type":"uint256"},{"internalType":"bool","name":"stakeEnded","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"poolId","type":"uint256"}],"name":"getPoolStakeInfo","outputs":[{"internalType":"uint256","name":"stakeId","type":"uint256"},{"internalType":"uint256","name":"hexStakeIndex","type":"uint256"},{"internalType":"uint40","name":"hexStakeId","type":"uint40"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"poolId","type":"uint256"}],"name":"getPoolUserCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint40","name":"stakeId","type":"uint40"}],"name":"getTotalValueByStakeId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"addr","type":"address"}],"name":"getUserHeartValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getUserInfo","outputs":[{"internalType":"uint256","name":"totalHeartsEntered","type":"uint256"},{"internalType":"uint256[]","name":"_entryIds","type":"uint256[]"},{"internalType":"address","name":"userAddress","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"poolId","type":"uint256"}],"name":"getWithdrawableRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"poolId","type":"uint256"}],"name":"isPoolActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"addr","type":"address"}],"name":"isPoolParticipant","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"poolId","type":"uint256"}],"name":"isPoolStakeEnded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"poolId","type":"uint256"}],"name":"isPoolStakeFinished","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"poolId","type":"uint256"}],"name":"isPoolStaking","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"last_pool_entry_id","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"last_pool_id","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"last_stake_id","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"minEntryHearts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"pools","outputs":[{"internalType":"uint256","name":"poolStakeThreshold","type":"uint256"},{"internalType":"uint256","name":"poolStakeDayLength","type":"uint256"},{"internalType":"uint256","name":"poolValue","type":"uint256"},{"internalType":"uint256","name":"poolId","type":"uint256"},{"internalType":"uint256","name":"poolType","type":"uint256"},{"internalType":"uint256","name":"stakeId","type":"uint256"},{"internalType":"uint40","name":"hexStakeId","type":"uint40"},{"internalType":"bool","name":"isStaking","type":"bool"},{"internalType":"bool","name":"isActive","type":"bool"},{"internalType":"uint256","name":"poolStakeStartTimestamp","type":"uint256"},{"internalType":"uint256","name":"stakeValue","type":"uint256"},{"internalType":"uint256","name":"stakeProfit","type":"uint256"},{"internalType":"bool","name":"stakeEnded","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"hearts","type":"uint256"}],"name":"setMinEntry","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenFrozenBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalFrozen","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalFrozenTokenBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"users","outputs":[{"internalType":"uint256","name":"totalHeartsEntered","type":"uint256"},{"internalType":"address","name":"userAddress","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}]Contract Creation Code
6080604052678ac7230489e800006003553480156200001d57600080fd5b50600980546001600160a01b0319908116331790915560088054909116732b591e99afe9f32eaa6214f7b7629768c40eeb39179055620000656001600160e01b036200006b16565b62000716565b6009546001600160a01b03163314620000e557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f6e6f744f776e6572000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b601454610100900460ff16156200015d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f63616e6e6f74207265696e697469616c697a6500000000000000000000000000604482015290519081900360640190fd5b60005b60038110156200018b5762000181816000806001600160e01b03620001b616565b5060010162000160565b50620001a564174876e8006001600160e01b036200046016565b6014805461ff001916610100179055565b6000808085620001d3575066354a6ba7a180009050602462000276565b8560011415620001f1575066354a6ba7a18000905061016d62000276565b85600214156200020f575066354a6ba7a180009050610e4262000276565b604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f696e76616c696420706f6f6c5479706500000000000000000000000000000000604482015290519081900360640190fd5b60006200028b6001600160e01b03620004df16565b60008181526010602052604090208481556001810184905560028101889055600381018290556004810189905560088101805460ff60301b1916660100000000000017905590915086156200036857600082815260116020908152604080832080546001908101909155338452600585018352818420805460ff19169091179055600684018252909120546200032c9189906200232b620004ed821b17901c565b33600090815260068301602052604090205562000352876001600160e01b036200056916565b620003688783886001600160e01b03620005ae16565b60009182526010602052604090912081548155600180830154818301556002808401549083015560038084015490830155600480840154908301556007808401549083015560088084018054918401805464ffffffffff90931664ffffffffff1990931692909217808355815460ff60281b19909116650100000000009182900460ff908116151590920217808455915460ff60301b19909216660100000000000092839004821615159092029190911790915560098085015490840155600a8085015490840155600b8085015490840155600c9384015493909201805460ff19169390921615159290921790559695505050505050565b6009546001600160a01b03163314620004da57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f6e6f744f776e6572000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600d55565b600b80546001019081905590565b6000828201838110156200056257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b336000908152600e602090815260409091208054909162000596919084906200232b620004ed821b17901c565b815560010180546001600160a01b0319163317905550565b6000620005c36001600160e01b03620006c716565b336000908152601360209081526040808320805460018181018355918552838520018590558784526012835290832080549182018155835291200181905590506200060d620006d5565b8481526020808201858152604080840185815233606086019081526001600160a01b03888116608088019081526000898152600f885285902088518082559651600182015593516002850181905592516003850180549184166001600160a01b0319928316811790915591516004909501805495909316941693909317905582518981529251909491927fb8ab617400c81f66404f4b37405e10991268e0a05e4d7f3b06b7d28076c2c69592908290030190a45050505050565b600a80546001019081905590565b6040518060a0016040528060008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681525090565b614a0780620007266000396000f3fe60806040526004361061027d5760003560e01c8063916808bb1161014f578063ac4afa38116100c1578063c7d0b70e1161007a578063c7d0b70e14610b49578063cc2e5b2814610b73578063d34b0a3e14610bac578063dd62ed3e14610bc1578063ea62167b14610bfc578063f248b86a14610c265761027d565b8063ac4afa3814610955578063ad663e67146109f0578063b0a5df9a14610a3f578063b30906d414610a7f578063bb7a1c3514610ae0578063bbbaf8c814610b1f5761027d565b80639e1a4d19116101135780639e1a4d191461083b578063a391210714610850578063a457c2d714610865578063a87430ba1461089e578063a8dcd03a146108f2578063a9059cbb1461091c5761027d565b8063916808bb1461075b578063922e92a3146107705780639355aea7146107a357806394244039146107fc57806395d89b41146108265761027d565b8063313ce567116101f35780636f9fb98a116101ac5780636f9fb98a1461066a57806370a082311461067f5780637be79cf6146106b25780637e8e3749146106dc5780638094f90d1461071c57806384e56ca2146107465761027d565b8063313ce567146104e857806333590596146104fd578063365a94e8146105365780633950935114610560578063404f1fec146105995780636386c1c7146105c35761027d565b806318160ddd1161024557806318160ddd146103d6578063181f599f146103eb5780631e7f87bc1461040057806323b872dd14610415578063245590da146104585780632f380b35146104825761027d565b80630410808e1461028457806306fdde03146102ab578063095ea7b3146103355780630cdc25d3146103825780630cfd442a146103ac575b600080fd5b005b34801561029057600080fd5b50610299610ca0565b60408051918252519081900360200190f35b3480156102b757600080fd5b506102c0610ca6565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102fa5781810151838201526020016102e2565b50505050905090810190601f1680156103275780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561034157600080fd5b5061036e6004803603604081101561035857600080fd5b506001600160a01b038135169060200135610cc9565b604080519115158252519081900360200190f35b34801561038e57600080fd5b50610282600480360360208110156103a557600080fd5b5035610ce0565b3480156103b857600080fd5b50610282600480360360208110156103cf57600080fd5b5035610d98565b3480156103e257600080fd5b50610299610e2d565b3480156103f757600080fd5b50610299610e33565b34801561040c57600080fd5b50610299610e39565b34801561042157600080fd5b5061036e6004803603606081101561043857600080fd5b506001600160a01b03813581169160208101359091169060400135610e3f565b34801561046457600080fd5b506102826004803603602081101561047b57600080fd5b5035610eae565b34801561048e57600080fd5b506104ac600480360360208110156104a557600080fd5b5035610fbf565b6040805197885260208801969096528686019490945260608601929092521515608085015260a0840152151560c0830152519081900360e00190f35b3480156104f457600080fd5b50610299611009565b34801561050957600080fd5b5061036e6004803603604081101561052057600080fd5b50803590602001356001600160a01b031661100e565b34801561054257600080fd5b5061036e6004803603602081101561055957600080fd5b503561103d565b34801561056c57600080fd5b5061036e6004803603604081101561058357600080fd5b506001600160a01b0381351690602001356110a3565b3480156105a557600080fd5b50610299600480360360208110156105bc57600080fd5b50356110df565b3480156105cf57600080fd5b506105f6600480360360208110156105e657600080fd5b50356001600160a01b03166110f1565b6040518084815260200180602001836001600160a01b03166001600160a01b03168152602001828103825284818151815260200191508051906020019060200280838360005b8381101561065457818101518382015260200161063c565b5050505090500194505050505060405180910390f35b34801561067657600080fd5b50610299611186565b34801561068b57600080fd5b50610299600480360360208110156106a257600080fd5b50356001600160a01b0316611202565b3480156106be57600080fd5b50610282600480360360208110156106d557600080fd5b503561121d565b3480156106e857600080fd5b50610299600480360360408110156106ff57600080fd5b5080356001600160a01b0316906020013564ffffffffff1661126c565b34801561072857600080fd5b506102996004803603602081101561073f57600080fd5b5035611293565b34801561075257600080fd5b50610299611357565b34801561076757600080fd5b5061029961135d565b34801561077c57600080fd5b506102996004803603602081101561079357600080fd5b50356001600160a01b0316611363565b3480156107af57600080fd5b506107cd600480360360208110156107c657600080fd5b5035611375565b6040805194855260208501939093526001600160a01b0391821684840152166060830152519081900360800190f35b34801561080857600080fd5b5061036e6004803603602081101561081f57600080fd5b50356113a9565b34801561083257600080fd5b506102c06113c1565b34801561084757600080fd5b506102996113e1565b34801561085c57600080fd5b506102996113f1565b34801561087157600080fd5b5061036e6004803603604081101561088857600080fd5b506001600160a01b0381351690602001356113f7565b3480156108aa57600080fd5b506108d1600480360360208110156108c157600080fd5b50356001600160a01b031661144c565b604080519283526001600160a01b0390911660208301528051918290030190f35b3480156108fe57600080fd5b506102826004803603602081101561091557600080fd5b503561146e565b34801561092857600080fd5b5061036e6004803603604081101561093f57600080fd5b506001600160a01b038135169060200135611519565b34801561096157600080fd5b5061097f6004803603602081101561097857600080fd5b5035611526565b604080519d8e5260208e019c909c528c8c019a909a5260608c019890985260808b019690965260a08a019490945264ffffffffff90921660c0890152151560e08801521515610100870152610120860152610140850152610160840152151561018083015251908190036101a00190f35b3480156109fc57600080fd5b50610a1a60048036036020811015610a1357600080fd5b503561159a565b60408051938452602084019290925264ffffffffff1682820152519081900360600190f35b348015610a4b57600080fd5b5061029960048036036040811015610a6257600080fd5b5080356001600160a01b0316906020013564ffffffffff166115ee565b348015610a8b57600080fd5b50610aa960048036036020811015610aa257600080fd5b503561162c565b604080519586526020860194909452848401929092526001600160a01b039081166060850152166080830152519081900360a00190f35b348015610aec57600080fd5b5061028260048036036060811015610b0357600080fd5b50803590602081013590604001356001600160a01b0316611667565b348015610b2b57600080fd5b5061036e60048036036020811015610b4257600080fd5b5035611818565b348015610b5557600080fd5b5061028260048036036020811015610b6c57600080fd5b5035611881565b348015610b7f57600080fd5b5061029960048036036040811015610b9657600080fd5b50803590602001356001600160a01b03166119d3565b348015610bb857600080fd5b506102996119ff565b348015610bcd57600080fd5b5061029960048036036040811015610be457600080fd5b506001600160a01b0381358116916020013516611a05565b348015610c0857600080fd5b5061036e60048036036020811015610c1f57600080fd5b5035611a30565b348015610c3257600080fd5b50610c5060048036036020811015610c4957600080fd5b5035611a4f565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610c8c578181015183820152602001610c74565b505050509050019250505060405180910390f35b60065490565b604051806040016040528060078152602001661211561413d3d360ca1b81525081565b6000610cd6338484611ab1565b5060015b92915050565b60145460ff1615610d24576040805162461bcd60e51b815260206004820152600960248201526853796e63206c6f636b60b81b604482015290519081900360640190fd5b6014805460ff19166001179055610d3a81611b9d565b610d8b576040805162461bcd60e51b815260206004820152601a60248201527f4572726f723a20636f756c64206e6f7420656e64207374616b65000000000000604482015290519081900360640190fd5b506014805460ff19169055565b60145460ff1615610ddc576040805162461bcd60e51b815260206004820152600960248201526853796e63206c6f636b60b81b604482015290519081900360640190fd5b6014805460ff19166001179055610df281611e0d565b610d8b5760405162461bcd60e51b81526004018080602001828103825260218152602001806148056021913960400191505060405180910390fd5b60045490565b600c5481565b60065481565b6000610e4c8484846120ab565b610ea48433610e9f8560405180606001604052806028815260200161491c602891396001600160a01b038a166000908152600160209081526040808320338452909152902054919063ffffffff61224b16565b611ab1565b5060019392505050565b60008111610ef0576040805162461bcd60e51b815260206004820152600a6024820152691e995c9bc81a5b9c1d5d60b21b604482015290519081900360640190fd5b33600090815260076020526040902054811115610f3e5760405162461bcd60e51b815260040180806020018281038252602281526020018061484c6022913960400191505060405180910390fd5b33600090815260076020526040902054610f5e908263ffffffff6122e216565b33600090815260076020526040902055600654610f81908263ffffffff6122e216565b600655610f8f3033836120ab565b604051819033907fb925ba840e2f36bcb317f8179bd8b5ed01aba4a22abf5f169162c0894dea87ab90600090a350565b6000908152601060205260409020805460018201546002830154600484015460088501546009860154600c909601549496939592949193600160281b90910460ff90811693921690565b600881565b60008281526010602090815260408083206001600160a01b038516845260050190915290205460ff1692915050565b600081815260106020526040812060019081015442916110999161107b91620151809161106f9163ffffffff61232b16565b9063ffffffff61238516565b6000858152601060205260409020600901549063ffffffff61232b16565b111590505b919050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610cd6918590610e9f908663ffffffff61232b16565b60009081526011602052604090205490565b6001600160a01b038082166000908152600e6020818152604080842080546013845282862094845260019091015484548351818602810186019094528084529596606096889693959394929091169284919083018282801561117257602002820191906000526020600020905b81548152602001906001019080831161115e575b505050505091509250925092509193909250565b600854604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156111d157600080fd5b505afa1580156111e5573d6000803e3d6000fd5b505050506040513d60208110156111fb57600080fd5b5051905090565b6001600160a01b031660009081526020819052604090205490565b6009546001600160a01b03163314611267576040805162461bcd60e51b81526020600482015260086024820152673737ba27bbb732b960c11b604482015290519081900360640190fd5b600d55565b6000611276614681565b61128084846123de565b905061128b816125cb565b949350505050565b6000818152601060205260408120600c81015460ff166112fa576040805162461bcd60e51b815260206004820152601f60248201527f706f6f6c207374616b6520686173206e6f74207965742066696e697368656400604482015290519081900360640190fd5b33600090815260068201602052604090205461131a57600091505061109e565b8054336000908152600683016020526040812054600a840154919261128b92909161134b919063ffffffff61238516565b9063ffffffff61262516565b60055481565b600a5481565b60076020526000908152604090205481565b6000908152600f60205260409020805460018201546003830154600490930154919390926001600160a01b03908116921690565b6000908152601060205260409020600c015460ff1690565b604051806040016040528060048152602001631413d3d360e21b81525081565b60006113ec33611202565b905090565b600b5481565b6000610cd63384610e9f856040518060600160405280602581526020016149ae602591393360009081526001602090815260408083206001600160a01b038d168452909152902054919063ffffffff61224b16565b600e60205260009081526040902080546001909101546001600160a01b031682565b60145460ff16156114b2576040805162461bcd60e51b815260206004820152600960248201526853796e63206c6f636b60b81b604482015290519081900360640190fd5b6014805460ff191660011790556114c881612667565b610d8b576040805162461bcd60e51b815260206004820152601a60248201527f4572726f723a20636f756c64206e6f74206578697420706f6f6c000000000000604482015290519081900360640190fd5b6000610cd63384846120ab565b601060205260009081526040902080546001820154600283015460038401546004850154600786015460088701546009880154600a890154600b8a0154600c909a015498999798969795969495939464ffffffffff84169460ff600160281b8604811695600160301b90048116949392168d565b60008181526010602052604081206007810154600890910154829182916115c990309064ffffffffff16612f21565b60009586526010602052604090952060080154909564ffffffffff9091169350915050565b60006115f8614681565b61160284846123de565b9050600061160f826125cb565b60209092015168ffffffffffffffffff1690910191505092915050565b600f60205260009081526040902080546001820154600283015460038401546004909401549293919290916001600160a01b03908116911685565b818361167282611818565b6116c3576040805162461bcd60e51b815260206004820152601f60248201527f63616e6e6f7420656e7465722c20706f6f6c4964206e6f742061637469766500604482015290519081900360640190fd5b600b5482111561171a576040805162461bcd60e51b815260206004820152601a60248201527f4572726f723a20706f6f6c4964206f7574206f662072616e6765000000000000604482015290519081900360640190fd5b600d54811161175a5760405162461bcd60e51b81526004018080602001828103825260308152602001806148cb6030913960400191505060405180910390fd5b60145460ff161561179e576040805162461bcd60e51b815260206004820152600960248201526853796e63206c6f636b60b81b604482015290519081900360640190fd5b6014805460ff191660011790556117b68585856130af565b611807576040805162461bcd60e51b815260206004820152601b60248201527f4572726f723a20636f756c64206e6f7420656e74657220706f6f6c0000000000604482015290519081900360640190fd5b50506014805460ff19169055505050565b601454600090610100900460ff166118615760405162461bcd60e51b815260040180806020018281038252602381526020018061473f6023913960400191505060405180910390fd5b50600090815260106020526040902060080154600160301b900460ff1690565b600081116118c3576040805162461bcd60e51b815260206004820152600a6024820152691e995c9bc81a5b9c1d5d60b21b604482015290519081900360640190fd5b806118cc6113e1565b101561191f576040805162461bcd60e51b815260206004820152601b60248201527f4572726f723a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b61195f61194361193683606463ffffffff61262516565b839063ffffffff6122e216565b336000908152600760205260409020549063ffffffff61232b16565b3360009081526007602052604090205561199561198661193683606463ffffffff61262516565b6006549063ffffffff61232b16565b6006556119a33330836120ab565b604051819033907f7def9f73ac6a7ac8fe4dc55f5257d48aed7e3f9d5247b0020598b87a5c369d8290600090a350565b60008281526010602090815260408083206001600160a01b038516845260060190915290205492915050565b600d5481565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600090815260106020526040902060080154600160281b900460ff1690565b600081815260126020908152604091829020805483518184028101840190945280845260609392830182828015611aa557602002820191906000526020600020905b815481526020019060010190808311611a91575b50505050509050919050565b6001600160a01b038316611af65760405162461bcd60e51b815260040180806020018281038252602481526020018061498a6024913960400191505060405180910390fd5b6001600160a01b038216611b3b5760405162461bcd60e51b81526004018080602001828103825260228152602001806147e36022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6000600b54821115611bf6576040805162461bcd60e51b815260206004820152601a60248201527f4572726f723a20706f6f6c4964206f7574206f662072616e6765000000000000604482015290519081900360640190fd5b60008281526010602052604090206008810154600160281b900460ff16611c4e5760405162461bcd60e51b815260040180806020018281038252603b81526020018061486e603b913960400191505060405180910390fd5b611c578361103d565b611ca8576040805162461bcd60e51b815260206004820152601b60248201527f4572726f723a2063616e6e6f74206561726c7920756e7374616b650000000000604482015290519081900360640190fd5b6000611cb2611186565b60088054908401549192506001600160a01b03169063343009a290611cdf90309064ffffffffff16612f21565b6008850154604080516001600160e01b031960e086901b168152600481019390935264ffffffffff909116602483015251604480830192600092919082900301818387803b158015611d3057600080fd5b505af1158015611d44573d6000803e3d6000fd5b50505060088301805465ff00000000001916905550600c8201805460ff191660011790556000611d8282611d76611186565b9063ffffffff6122e216565b600a84018190558354909150611d9f90829063ffffffff6122e216565b600b840181905560038401546001850154600286015460088701546040805195865264ffffffffff909116602086015280519394929391927f4264c1c4dce9a5bdaf76353b212e051ed6a441a4c184dece2572f8510b007c8f929081900390910190a4506001949350505050565b60008181526010602052604081206002810154611e71576040805162461bcd60e51b815260206004820152601e60248201527f706f6f6c20726577617264732068617665206265656e20647261696e65640000604482015290519081900360640190fd5b6000838152601060209081526040808320338452600601909152902054611edf576040805162461bcd60e51b815260206004820152601e60248201527f796f752068617665206e6f20736861726520696e207468697320706f6f6c0000604482015290519081900360640190fd5b600c81015460ff16611ef657611ef483611b9d565b505b6000611f0184611293565b3360009081526006840160205260409020546002840154919250611f2b919063ffffffff6122e216565b6002830190815533600090815260068401602052604081205554611fb1576000848152601060205260408120818155600181018290556002810182905560038101829055600481018290556007810182905560088101805466ffffffffffffff1916905560098101829055600a8101829055600b810191909155600c01805460ff191690555b6008546040805163a9059cbb60e01b81523360048201526024810184905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b15801561200557600080fd5b505af1158015612019573d6000803e3d6000fd5b505050506040513d602081101561202f57600080fd5b5051612074576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b604051819033907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b6590600090a35060019392505050565b6001600160a01b0383166120f05760405162461bcd60e51b81526004018080602001828103825260258152602001806149656025913960400191505060405180910390fd5b6001600160a01b0382166121355760405162461bcd60e51b81526004018080602001828103825260238152602001806147626023913960400191505060405180910390fd5b600061214882606463ffffffff61262516565b9050600061215c838363ffffffff6122e216565b90506121a181604051806060016040528060268152602001614826602691396001600160a01b038816600090815260208190526040902054919063ffffffff61224b16565b6001600160a01b0380871660009081526020819052604080822093909355908616815220546121d6908263ffffffff61232b16565b6001600160a01b0385166000908152602081905260409020556121f985836139ca565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050505050565b600081848411156122da5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561229f578181015183820152602001612287565b50505050905090810190601f1680156122cc5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600061232483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061224b565b9392505050565b600082820183811015612324576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008261239457506000610cda565b828202828482816123a157fe5b04146123245760405162461bcd60e51b81526004018080602001828103825260218152602001806148fb6021913960400191505060405180910390fd5b6123e6614681565b600080600080600080600080600860009054906101000a90046001600160a01b03166001600160a01b03166333060d908c6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561245d57600080fd5b505afa158015612471573d6000803e3d6000fd5b505050506040513d602081101561248757600080fd5b5051905060005b818110156125bc5760085460408051632607443b60e01b81526001600160a01b038f811660048301526024820185905291519190921691632607443b9160448083019260e0929190829003018186803b1580156124ea57600080fd5b505afa1580156124fe573d6000803e3d6000fd5b505050506040513d60e081101561251457600080fd5b508051602082015160408301516060840151608085015160a086015160c090960151949e50929c50909a5098509650909450925064ffffffffff808a16908c1614156125b45750506040805160e08101825264ffffffffff909816885268ffffffffffffffffff9687166020890152949095169386019390935261ffff9182166060860152811660808501521660a0830152151560c08201529050610cda565b60010161248e565b50505050505050505092915050565b606081015160009061ffff16816125e0613ac6565b90508082106125f45760009250505061109e565b60606126008383613b64565b905061261b81866040015168ffffffffffffffffff16613d1c565b935050505061109e565b600061232483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613d5e565b60006126716146bd565b506000828152600f6020908152604091829020825160a0810184528154815260018201549281019290925260028101549282019290925260038201546001600160a01b03908116606083018190526004909301541660808201529033146127095760405162461bcd60e51b81526004018080602001828103825260228152602001806148a96022913960400191505060405180910390fd5b60208082015160009081526010825260408082203383526005810190935290205460ff1661277e576040805162461bcd60e51b815260206004820152601e60248201527f796f7520617265206e6f74206120706f6f6c207061727469636970616e740000604482015290519081900360640190fd5b6008810154600160281b900460ff16156127df576040805162461bcd60e51b815260206004820152601c60248201527f706f6f6c206973207374616b696e672c2063616e6e6f74206578697400000000604482015290519081900360640190fd5b8151336000908152600e60205260409020546128009163ffffffff6122e216565b336000908152600e6020526040902055815160028201546128269163ffffffff6122e216565b6002820155815133600090815260068301602052604090205461284e9163ffffffff6122e216565b3360009081526006830160205260409020819055612898573360009081526005820160209081526040808320805460ff191690558482015183526011909152902080546000190190555b6000848152600f6020526040812081815560018101829055600281018290556003810180546001600160a01b031990811690915560049091018054909116905582516128eb90606463ffffffff61262516565b9050600061290082600263ffffffff61262516565b9050600061291583600463ffffffff61262516565b9050600061292a84600463ffffffff61262516565b8651909150600090612942908663ffffffff6122e216565b60055490915015612b36576008546009546005546001600160a01b039283169263a9059cbb92169061297b90600263ffffffff61262516565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156129ca57600080fd5b505af11580156129de573d6000803e3d6000fd5b505050506040513d60208110156129f457600080fd5b5051612a39576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b6008546005546001600160a01b039091169063a9059cbb9073d30bc4859a79852157211e6db19de159673a67e290612a7890600263ffffffff61262516565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612ac757600080fd5b505af1158015612adb573d6000803e3d6000fd5b505050506040513d6020811015612af157600080fd5b5051612b36576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b60808701516001600160a01b0316612b52576005829055612c53565b612b6382600263ffffffff61262516565b60055560085460808801516001600160a01b039091169063a9059cbb90612b9185600263ffffffff61262516565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612be057600080fd5b505af1158015612bf4573d6000803e3d6000fd5b505050506040513d6020811015612c0a57600080fd5b5051612c53576040805162461bcd60e51b8152602060048201526013602482015272149959881d1c985b9cd9995c8819985a5b1959606a1b604482015290519081900360640190fd5b6008546040805163a9059cbb60e01b81523360048201526024810184905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b158015612ca757600080fd5b505af1158015612cbb573d6000803e3d6000fd5b505050506040513d6020811015612cd157600080fd5b5051612d16576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b6008546009546040805163a9059cbb60e01b81526001600160a01b039283166004820152602481018890529051919092169163a9059cbb9160448083019260209291908290030181600087803b158015612d6f57600080fd5b505af1158015612d83573d6000803e3d6000fd5b505050506040513d6020811015612d9957600080fd5b5051612de3576040805162461bcd60e51b815260206004820152601460248201527311195d8c481d1c985b9cd9995c8819985a5b195960621b604482015290519081900360640190fd5b6008546040805163a9059cbb60e01b815273d30bc4859a79852157211e6db19de159673a67e260048201526024810186905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b158015612e4b57600080fd5b505af1158015612e5f573d6000803e3d6000fd5b505050506040513d6020811015612e7557600080fd5b5051612ebf576040805162461bcd60e51b815260206004820152601460248201527311195d8c881d1c985b9cd9995c8819985a5b195960621b604482015290519081900360640190fd5b8660400151876000015188606001516001600160a01b03167f998379a72dc64811ce41782d18dd7759dd22de4dd43049986376fada953be82989600301546040518082815260200191505060405180910390a450600198975050505050505050565b6000806000806000806000806000600860009054906101000a90046001600160a01b03166001600160a01b03166333060d908c6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015612f9a57600080fd5b505afa158015612fae573d6000803e3d6000fd5b505050506040513d6020811015612fc457600080fd5b5051905060005b818110156125bc5760085460408051632607443b60e01b81526001600160a01b038f811660048301526024820185905291519190921691632607443b9160448083019260e0929190829003018186803b15801561302757600080fd5b505afa15801561303b573d6000803e3d6000fd5b505050506040513d60e081101561305157600080fd5b508051602082015160408301516060840151608085015160a086015160c090960151949e50929c50909a5098509650909450925064ffffffffff808a16908c1614156130a7579850610cda975050505050505050565b600101612fcb565b600082815260106020526040812080548511156130fd5760405162461bcd60e51b815260040180806020018281038252603c815260200180614785603c913960400191505060405180910390fd5b6008810154600160281b900460ff1615613150576040805162461bcd60e51b815260206004820152600f60248201526e706f6f6c206973207374616b696e6760881b604482015290519081900360640190fd5b600061316386606463ffffffff61262516565b9050600061317882600263ffffffff61262516565b9050600061318d83600463ffffffff61262516565b905060006131a284600463ffffffff61262516565b905060006131b68a8663ffffffff6122e216565b60028701549091506131ce908263ffffffff61232b16565b600287015533600090815260058701602052604090205460ff16613221573360009081526005870160209081526040808320805460ff191660019081179091558c84526011909252909120805490910190555b336000908152600687016020526040902054613243908263ffffffff61232b16565b33600090815260068801602052604090205560055415613323576008546005546040805163a9059cbb60e01b81523360048201526024810192909252516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b1580156132b457600080fd5b505af11580156132c8573d6000803e3d6000fd5b505050506040513d60208110156132de57600080fd5b5051613323576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b6001600160a01b03881661333b57600582905561344e565b61334c82600263ffffffff61262516565b6005556008546001600160a01b03166323b872dd338a61337386600263ffffffff61262516565b6040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050602060405180830381600087803b1580156133db57600080fd5b505af11580156133ef573d6000803e3d6000fd5b505050506040513d602081101561340557600080fd5b505161344e576040805162461bcd60e51b8152602060048201526013602482015272149959881d1c985b9cd9995c8819985a5b1959606a1b604482015290519081900360640190fd5b6008546005546001600160a01b03909116906323b872dd903390309061347b90869063ffffffff61232b16565b6040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050602060405180830381600087803b1580156134e357600080fd5b505af11580156134f7573d6000803e3d6000fd5b505050506040513d602081101561350d57600080fd5b5051613552576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b600854600954604080516323b872dd60e01b81523360048201526001600160a01b03928316602482015260448101889052905191909216916323b872dd9160648083019260209291908290030181600087803b1580156135b157600080fd5b505af11580156135c5573d6000803e3d6000fd5b505050506040513d60208110156135db57600080fd5b5051613625576040805162461bcd60e51b815260206004820152601460248201527311195d8c481d1c985b9cd9995c8819985a5b195960621b604482015290519081900360640190fd5b600854604080516323b872dd60e01b815233600482015273d30bc4859a79852157211e6db19de159673a67e260248201526044810186905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b15801561369357600080fd5b505af11580156136a7573d6000803e3d6000fd5b505050506040513d60208110156136bd57600080fd5b5051613707576040805162461bcd60e51b815260206004820152601460248201527311195d8c881d1c985b9cd9995c8819985a5b195960621b604482015290519081900360640190fd5b855460028701541115613862578554600287015460009161372e919063ffffffff6122e216565b9050613748613743838363ffffffff6122e216565b613dc3565b61376661375b838363ffffffff6122e216565b88600301548b613dfc565b8654600288015533600090815260068801602052604090205461378f908263ffffffff6122e216565b3360009081526006890160205260409020556137ab8a88613f08565b6137fc576040805162461bcd60e51b815260206004820152601c60248201527f4572726f723a20636f756c64206e6f74207374617274207374616b6500000000604482015290519081900360640190fd5b61380b8760040154828b61410e565b61385c576040805162461bcd60e51b815260206004820181905260248201527f4572726f723a20636f756c64206e6f7420637265617465206e657720706f6f6c604482015290519081900360640190fd5b50613960565b8554600287015414156139485761387881613dc3565b6138878187600301548a613dfc565b6138918987613f08565b6138e2576040805162461bcd60e51b815260206004820152601c60248201527f4572726f723a20636f756c64206e6f74207374617274207374616b6500000000604482015290519081900360640190fd5b6138f2866004015460008a61410e565b613943576040805162461bcd60e51b815260206004820181905260248201527f4572726f723a20636f756c64206e6f7420637265617465206e657720706f6f6c604482015290519081900360640190fd5b613960565b61395181613dc3565b6139608187600301548a613dfc565b6139698a614363565b6139ba576040805162461bcd60e51b815260206004820152601c60248201527f4572726f723a20636f756c64206e6f74206d696e7420746f6b656e7300000000604482015290519081900360640190fd5b5060019998505050505050505050565b6001600160a01b038216613a0f5760405162461bcd60e51b81526004018080602001828103825260218152602001806149446021913960400191505060405180910390fd5b613a52816040518060600160405280602281526020016147c1602291396001600160a01b038516600090815260208190526040902054919063ffffffff61224b16565b6001600160a01b038316600090815260208190526040902055600454613a7e908263ffffffff6122e216565b6004556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6000613ad06146fe565b600860009054906101000a90046001600160a01b03166001600160a01b031663f04b5fa06040518163ffffffff1660e01b81526004016101a06040518083038186803b158015613b1f57600080fd5b505afa158015613b33573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506101a0811015613b5957600080fd5b506080015192915050565b60085460408051633510850760e11b81526004810185905260248101849052905160609283926001600160a01b0390911691636a210a0e91604480820192600092909190829003018186803b158015613bbc57600080fd5b505afa158015613bd0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015613bf957600080fd5b8101908080516040519392919084640100000000821115613c1957600080fd5b908301906020820185811115613c2e57600080fd5b8251866020820283011164010000000082111715613c4b57600080fd5b82525081516020918201928201910280838360005b83811015613c78578181015183820152602001613c60565b505050509050016040525050509050600081519050606081604051908082528060200260200182016040528015613cc957816020015b613cb661471d565b815260200190600190039081613cae5790505b50905060005b82811015613d1257613cf3848281518110613ce657fe5b6020026020010151614384565b828281518110613cff57fe5b6020908102919091010152600101613ccf565b5095945050505050565b815160009081805b82811015613d5557613d49868281518110613d3b57fe5b6020026020010151866143c7565b90910190600101613d24565b50949350505050565b60008183613dad5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561229f578181015183820152602001612287565b506000838581613db957fe5b0495945050505050565b336000908152600e602052604090208054613de4908363ffffffff61232b16565b815560010180546001600160a01b0319163317905550565b6000613e066143e4565b33600090815260136020908152604080832080546001818101835591855283852001859055878452601283529083208054918201815583529120018190559050613e4e6146bd565b8481526020808201858152604080840185815233606086019081526001600160a01b03888116608088019081526000898152600f885285902088518082559651600182015593516002850181905592516003850180549184166001600160a01b0319928316811790915591516004909501805495909316941693909317905582518981529251909491927fb8ab617400c81f66404f4b37405e10991268e0a05e4d7f3b06b7d28076c2c69592908290030190a45050505050565b8054600282015460009114613f5d576040805162461bcd60e51b815260206004820152601660248201527514dd185ad948185b5bdd5b9d081a5b98dbdc9c9958dd60521b604482015290519081900360640190fd5b8154600183015460085460408051630a54871760e31b8152600481018590526024810184905290516001600160a01b03909216916352a438b89160448082019260009290919082900301818387803b158015613fb857600080fd5b505af1158015613fcc573d6000803e3d6000fd5b50506008546040805163033060d960e41b815230600482015290516000945061405a93506001926001600160a01b0316916333060d90916024808301926020929190829003018186803b15801561402257600080fd5b505afa158015614036573d6000803e3d6000fd5b505050506040513d602081101561404c57600080fd5b50519063ffffffff6122e216565b9050614064614681565b61406e30836143f2565b805160088801805464ffffffffff90921664ffffffffff1990921691909117808255600c5460078a01554260098a015566ffff00000000001916600160281b17905590506140ba614510565b5080516040805186815264ffffffffff90921660208301528051899286927fe6e27f56b3cdde69e5d0a9bcdef1ef34500823c80d47d320e171687080f8fbb292918290030190a35060019695505050505050565b6000808085614129575066354a6ba7a18000905060246141a1565b8560011415614145575066354a6ba7a18000905061016d6141a1565b8560021415614161575066354a6ba7a180009050610e426141a1565b6040805162461bcd60e51b815260206004820152601060248201526f696e76616c696420706f6f6c5479706560801b604482015290519081900360640190fd5b60006141ab61451e565b60008181526010602052604090208481556001810184905560028101889055600381018290556004810189905560088101805466ff0000000000001916600160301b179055909150861561426b57600082815260116020908152604080832080546001908101909155338452600585018352818420805460ff1916909117905560068401909152902054614245908863ffffffff61232b16565b33600090815260068301602052604090205561426087613dc3565b61426b878388613dfc565b60009182526010602052604090912081548155600180830154818301556002808401549083015560038084015490830155600480840154908301556007808401549083015560088084018054918401805464ffffffffff90931664ffffffffff1990931692909217808355815465ff000000000019909116600160281b9182900460ff908116151590920217808455915466ff00000000000019909216600160301b92839004821615159092029190911790915560098085015490840155600a8085015490840155600b8085015490840155600c9384015493909201805460ff19169390921615159290921790559695505050505050565b60008061437783606463ffffffff61262516565b905033610ea4818361452c565b61438c61471d565b506040805160608101825268ffffffffffffffffff8381168252604884901c16602082015260909290921c66ffffffffffffff169082015290565b6000826020015183600001518302816143dc57fe5b049392505050565b600a80546001019081905590565b6143fa614681565b60085460408051632607443b60e01b81526001600160a01b038681166004830152602482018690529151600093849384938493849384938493911691632607443b9160448082019260e092909190829003018186803b15801561445c57600080fd5b505afa158015614470573d6000803e3d6000fd5b505050506040513d60e081101561448657600080fd5b50805160208083015160408085015160608087015160808089015160a0808b015160c09b8c0151885160e081018a5264ffffffffff909c168c5268ffffffffffffffffff998a169a8c019a909a52979095169589019590955261ffff91821692880192909252928316908601529116908301521515918101919091529a9950505050505050505050565b600c80546001019081905590565b600b80546001019081905590565b806001600160a01b038316614588576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b60025460ff1661467c57600354600454101561467c576003546004546145b4908363ffffffff61232b16565b11156145e9576004546003546145cf9163ffffffff6122e216565b6003546004556002805460ff191660011790559050614600565b6004546145fc908263ffffffff61232b16565b6004555b6001600160a01b038316600090815260208190526040902054614629908263ffffffff61232b16565b6001600160a01b0384166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35b505050565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b6040518060a0016040528060008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681525090565b604051806101a00160405280600d906020820280388339509192915050565b6040518060600160405280600081526020016000815260200160008152509056fe63616e6e6f7420656e7465722c20706f6f6c73206e6f7420696e697469616c697a656445524332303a207472616e7366657220746f20746865207a65726f2061646472657373616d6f756e74206f766572207468726573686f6c64202d206f6e6c792031206e657720706f6f6c20746f20626520637265617465642070657220747845524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f20616464726573734572726f723a20636f756c64206e6f74207769746864726177207265776172647345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63654572726f723a20756e73756666696369656e742066726f7a656e2062616c616e63654572726f723a20706f6f6c206973206e6f7420796574207374616b65642c206f722068617320616c726561647920656e646564207374616b696e676e6f7420656e747279206f776e65722c206f7220616c7265616479206578697465644572726f723a2076616c7565206d7573742062652067726561746572207468616e206d696e456e747279486561727473536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa265627a7a72315820ca62bd23ffec7202a2b3a5f9ecfb53da305133c5723869fed8a369af68340e9364736f6c634300050d0032
Deployed Bytecode
0x60806040526004361061027d5760003560e01c8063916808bb1161014f578063ac4afa38116100c1578063c7d0b70e1161007a578063c7d0b70e14610b49578063cc2e5b2814610b73578063d34b0a3e14610bac578063dd62ed3e14610bc1578063ea62167b14610bfc578063f248b86a14610c265761027d565b8063ac4afa3814610955578063ad663e67146109f0578063b0a5df9a14610a3f578063b30906d414610a7f578063bb7a1c3514610ae0578063bbbaf8c814610b1f5761027d565b80639e1a4d19116101135780639e1a4d191461083b578063a391210714610850578063a457c2d714610865578063a87430ba1461089e578063a8dcd03a146108f2578063a9059cbb1461091c5761027d565b8063916808bb1461075b578063922e92a3146107705780639355aea7146107a357806394244039146107fc57806395d89b41146108265761027d565b8063313ce567116101f35780636f9fb98a116101ac5780636f9fb98a1461066a57806370a082311461067f5780637be79cf6146106b25780637e8e3749146106dc5780638094f90d1461071c57806384e56ca2146107465761027d565b8063313ce567146104e857806333590596146104fd578063365a94e8146105365780633950935114610560578063404f1fec146105995780636386c1c7146105c35761027d565b806318160ddd1161024557806318160ddd146103d6578063181f599f146103eb5780631e7f87bc1461040057806323b872dd14610415578063245590da146104585780632f380b35146104825761027d565b80630410808e1461028457806306fdde03146102ab578063095ea7b3146103355780630cdc25d3146103825780630cfd442a146103ac575b600080fd5b005b34801561029057600080fd5b50610299610ca0565b60408051918252519081900360200190f35b3480156102b757600080fd5b506102c0610ca6565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102fa5781810151838201526020016102e2565b50505050905090810190601f1680156103275780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561034157600080fd5b5061036e6004803603604081101561035857600080fd5b506001600160a01b038135169060200135610cc9565b604080519115158252519081900360200190f35b34801561038e57600080fd5b50610282600480360360208110156103a557600080fd5b5035610ce0565b3480156103b857600080fd5b50610282600480360360208110156103cf57600080fd5b5035610d98565b3480156103e257600080fd5b50610299610e2d565b3480156103f757600080fd5b50610299610e33565b34801561040c57600080fd5b50610299610e39565b34801561042157600080fd5b5061036e6004803603606081101561043857600080fd5b506001600160a01b03813581169160208101359091169060400135610e3f565b34801561046457600080fd5b506102826004803603602081101561047b57600080fd5b5035610eae565b34801561048e57600080fd5b506104ac600480360360208110156104a557600080fd5b5035610fbf565b6040805197885260208801969096528686019490945260608601929092521515608085015260a0840152151560c0830152519081900360e00190f35b3480156104f457600080fd5b50610299611009565b34801561050957600080fd5b5061036e6004803603604081101561052057600080fd5b50803590602001356001600160a01b031661100e565b34801561054257600080fd5b5061036e6004803603602081101561055957600080fd5b503561103d565b34801561056c57600080fd5b5061036e6004803603604081101561058357600080fd5b506001600160a01b0381351690602001356110a3565b3480156105a557600080fd5b50610299600480360360208110156105bc57600080fd5b50356110df565b3480156105cf57600080fd5b506105f6600480360360208110156105e657600080fd5b50356001600160a01b03166110f1565b6040518084815260200180602001836001600160a01b03166001600160a01b03168152602001828103825284818151815260200191508051906020019060200280838360005b8381101561065457818101518382015260200161063c565b5050505090500194505050505060405180910390f35b34801561067657600080fd5b50610299611186565b34801561068b57600080fd5b50610299600480360360208110156106a257600080fd5b50356001600160a01b0316611202565b3480156106be57600080fd5b50610282600480360360208110156106d557600080fd5b503561121d565b3480156106e857600080fd5b50610299600480360360408110156106ff57600080fd5b5080356001600160a01b0316906020013564ffffffffff1661126c565b34801561072857600080fd5b506102996004803603602081101561073f57600080fd5b5035611293565b34801561075257600080fd5b50610299611357565b34801561076757600080fd5b5061029961135d565b34801561077c57600080fd5b506102996004803603602081101561079357600080fd5b50356001600160a01b0316611363565b3480156107af57600080fd5b506107cd600480360360208110156107c657600080fd5b5035611375565b6040805194855260208501939093526001600160a01b0391821684840152166060830152519081900360800190f35b34801561080857600080fd5b5061036e6004803603602081101561081f57600080fd5b50356113a9565b34801561083257600080fd5b506102c06113c1565b34801561084757600080fd5b506102996113e1565b34801561085c57600080fd5b506102996113f1565b34801561087157600080fd5b5061036e6004803603604081101561088857600080fd5b506001600160a01b0381351690602001356113f7565b3480156108aa57600080fd5b506108d1600480360360208110156108c157600080fd5b50356001600160a01b031661144c565b604080519283526001600160a01b0390911660208301528051918290030190f35b3480156108fe57600080fd5b506102826004803603602081101561091557600080fd5b503561146e565b34801561092857600080fd5b5061036e6004803603604081101561093f57600080fd5b506001600160a01b038135169060200135611519565b34801561096157600080fd5b5061097f6004803603602081101561097857600080fd5b5035611526565b604080519d8e5260208e019c909c528c8c019a909a5260608c019890985260808b019690965260a08a019490945264ffffffffff90921660c0890152151560e08801521515610100870152610120860152610140850152610160840152151561018083015251908190036101a00190f35b3480156109fc57600080fd5b50610a1a60048036036020811015610a1357600080fd5b503561159a565b60408051938452602084019290925264ffffffffff1682820152519081900360600190f35b348015610a4b57600080fd5b5061029960048036036040811015610a6257600080fd5b5080356001600160a01b0316906020013564ffffffffff166115ee565b348015610a8b57600080fd5b50610aa960048036036020811015610aa257600080fd5b503561162c565b604080519586526020860194909452848401929092526001600160a01b039081166060850152166080830152519081900360a00190f35b348015610aec57600080fd5b5061028260048036036060811015610b0357600080fd5b50803590602081013590604001356001600160a01b0316611667565b348015610b2b57600080fd5b5061036e60048036036020811015610b4257600080fd5b5035611818565b348015610b5557600080fd5b5061028260048036036020811015610b6c57600080fd5b5035611881565b348015610b7f57600080fd5b5061029960048036036040811015610b9657600080fd5b50803590602001356001600160a01b03166119d3565b348015610bb857600080fd5b506102996119ff565b348015610bcd57600080fd5b5061029960048036036040811015610be457600080fd5b506001600160a01b0381358116916020013516611a05565b348015610c0857600080fd5b5061036e60048036036020811015610c1f57600080fd5b5035611a30565b348015610c3257600080fd5b50610c5060048036036020811015610c4957600080fd5b5035611a4f565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610c8c578181015183820152602001610c74565b505050509050019250505060405180910390f35b60065490565b604051806040016040528060078152602001661211561413d3d360ca1b81525081565b6000610cd6338484611ab1565b5060015b92915050565b60145460ff1615610d24576040805162461bcd60e51b815260206004820152600960248201526853796e63206c6f636b60b81b604482015290519081900360640190fd5b6014805460ff19166001179055610d3a81611b9d565b610d8b576040805162461bcd60e51b815260206004820152601a60248201527f4572726f723a20636f756c64206e6f7420656e64207374616b65000000000000604482015290519081900360640190fd5b506014805460ff19169055565b60145460ff1615610ddc576040805162461bcd60e51b815260206004820152600960248201526853796e63206c6f636b60b81b604482015290519081900360640190fd5b6014805460ff19166001179055610df281611e0d565b610d8b5760405162461bcd60e51b81526004018080602001828103825260218152602001806148056021913960400191505060405180910390fd5b60045490565b600c5481565b60065481565b6000610e4c8484846120ab565b610ea48433610e9f8560405180606001604052806028815260200161491c602891396001600160a01b038a166000908152600160209081526040808320338452909152902054919063ffffffff61224b16565b611ab1565b5060019392505050565b60008111610ef0576040805162461bcd60e51b815260206004820152600a6024820152691e995c9bc81a5b9c1d5d60b21b604482015290519081900360640190fd5b33600090815260076020526040902054811115610f3e5760405162461bcd60e51b815260040180806020018281038252602281526020018061484c6022913960400191505060405180910390fd5b33600090815260076020526040902054610f5e908263ffffffff6122e216565b33600090815260076020526040902055600654610f81908263ffffffff6122e216565b600655610f8f3033836120ab565b604051819033907fb925ba840e2f36bcb317f8179bd8b5ed01aba4a22abf5f169162c0894dea87ab90600090a350565b6000908152601060205260409020805460018201546002830154600484015460088501546009860154600c909601549496939592949193600160281b90910460ff90811693921690565b600881565b60008281526010602090815260408083206001600160a01b038516845260050190915290205460ff1692915050565b600081815260106020526040812060019081015442916110999161107b91620151809161106f9163ffffffff61232b16565b9063ffffffff61238516565b6000858152601060205260409020600901549063ffffffff61232b16565b111590505b919050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610cd6918590610e9f908663ffffffff61232b16565b60009081526011602052604090205490565b6001600160a01b038082166000908152600e6020818152604080842080546013845282862094845260019091015484548351818602810186019094528084529596606096889693959394929091169284919083018282801561117257602002820191906000526020600020905b81548152602001906001019080831161115e575b505050505091509250925092509193909250565b600854604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156111d157600080fd5b505afa1580156111e5573d6000803e3d6000fd5b505050506040513d60208110156111fb57600080fd5b5051905090565b6001600160a01b031660009081526020819052604090205490565b6009546001600160a01b03163314611267576040805162461bcd60e51b81526020600482015260086024820152673737ba27bbb732b960c11b604482015290519081900360640190fd5b600d55565b6000611276614681565b61128084846123de565b905061128b816125cb565b949350505050565b6000818152601060205260408120600c81015460ff166112fa576040805162461bcd60e51b815260206004820152601f60248201527f706f6f6c207374616b6520686173206e6f74207965742066696e697368656400604482015290519081900360640190fd5b33600090815260068201602052604090205461131a57600091505061109e565b8054336000908152600683016020526040812054600a840154919261128b92909161134b919063ffffffff61238516565b9063ffffffff61262516565b60055481565b600a5481565b60076020526000908152604090205481565b6000908152600f60205260409020805460018201546003830154600490930154919390926001600160a01b03908116921690565b6000908152601060205260409020600c015460ff1690565b604051806040016040528060048152602001631413d3d360e21b81525081565b60006113ec33611202565b905090565b600b5481565b6000610cd63384610e9f856040518060600160405280602581526020016149ae602591393360009081526001602090815260408083206001600160a01b038d168452909152902054919063ffffffff61224b16565b600e60205260009081526040902080546001909101546001600160a01b031682565b60145460ff16156114b2576040805162461bcd60e51b815260206004820152600960248201526853796e63206c6f636b60b81b604482015290519081900360640190fd5b6014805460ff191660011790556114c881612667565b610d8b576040805162461bcd60e51b815260206004820152601a60248201527f4572726f723a20636f756c64206e6f74206578697420706f6f6c000000000000604482015290519081900360640190fd5b6000610cd63384846120ab565b601060205260009081526040902080546001820154600283015460038401546004850154600786015460088701546009880154600a890154600b8a0154600c909a015498999798969795969495939464ffffffffff84169460ff600160281b8604811695600160301b90048116949392168d565b60008181526010602052604081206007810154600890910154829182916115c990309064ffffffffff16612f21565b60009586526010602052604090952060080154909564ffffffffff9091169350915050565b60006115f8614681565b61160284846123de565b9050600061160f826125cb565b60209092015168ffffffffffffffffff1690910191505092915050565b600f60205260009081526040902080546001820154600283015460038401546004909401549293919290916001600160a01b03908116911685565b818361167282611818565b6116c3576040805162461bcd60e51b815260206004820152601f60248201527f63616e6e6f7420656e7465722c20706f6f6c4964206e6f742061637469766500604482015290519081900360640190fd5b600b5482111561171a576040805162461bcd60e51b815260206004820152601a60248201527f4572726f723a20706f6f6c4964206f7574206f662072616e6765000000000000604482015290519081900360640190fd5b600d54811161175a5760405162461bcd60e51b81526004018080602001828103825260308152602001806148cb6030913960400191505060405180910390fd5b60145460ff161561179e576040805162461bcd60e51b815260206004820152600960248201526853796e63206c6f636b60b81b604482015290519081900360640190fd5b6014805460ff191660011790556117b68585856130af565b611807576040805162461bcd60e51b815260206004820152601b60248201527f4572726f723a20636f756c64206e6f7420656e74657220706f6f6c0000000000604482015290519081900360640190fd5b50506014805460ff19169055505050565b601454600090610100900460ff166118615760405162461bcd60e51b815260040180806020018281038252602381526020018061473f6023913960400191505060405180910390fd5b50600090815260106020526040902060080154600160301b900460ff1690565b600081116118c3576040805162461bcd60e51b815260206004820152600a6024820152691e995c9bc81a5b9c1d5d60b21b604482015290519081900360640190fd5b806118cc6113e1565b101561191f576040805162461bcd60e51b815260206004820152601b60248201527f4572726f723a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b61195f61194361193683606463ffffffff61262516565b839063ffffffff6122e216565b336000908152600760205260409020549063ffffffff61232b16565b3360009081526007602052604090205561199561198661193683606463ffffffff61262516565b6006549063ffffffff61232b16565b6006556119a33330836120ab565b604051819033907f7def9f73ac6a7ac8fe4dc55f5257d48aed7e3f9d5247b0020598b87a5c369d8290600090a350565b60008281526010602090815260408083206001600160a01b038516845260060190915290205492915050565b600d5481565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600090815260106020526040902060080154600160281b900460ff1690565b600081815260126020908152604091829020805483518184028101840190945280845260609392830182828015611aa557602002820191906000526020600020905b815481526020019060010190808311611a91575b50505050509050919050565b6001600160a01b038316611af65760405162461bcd60e51b815260040180806020018281038252602481526020018061498a6024913960400191505060405180910390fd5b6001600160a01b038216611b3b5760405162461bcd60e51b81526004018080602001828103825260228152602001806147e36022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6000600b54821115611bf6576040805162461bcd60e51b815260206004820152601a60248201527f4572726f723a20706f6f6c4964206f7574206f662072616e6765000000000000604482015290519081900360640190fd5b60008281526010602052604090206008810154600160281b900460ff16611c4e5760405162461bcd60e51b815260040180806020018281038252603b81526020018061486e603b913960400191505060405180910390fd5b611c578361103d565b611ca8576040805162461bcd60e51b815260206004820152601b60248201527f4572726f723a2063616e6e6f74206561726c7920756e7374616b650000000000604482015290519081900360640190fd5b6000611cb2611186565b60088054908401549192506001600160a01b03169063343009a290611cdf90309064ffffffffff16612f21565b6008850154604080516001600160e01b031960e086901b168152600481019390935264ffffffffff909116602483015251604480830192600092919082900301818387803b158015611d3057600080fd5b505af1158015611d44573d6000803e3d6000fd5b50505060088301805465ff00000000001916905550600c8201805460ff191660011790556000611d8282611d76611186565b9063ffffffff6122e216565b600a84018190558354909150611d9f90829063ffffffff6122e216565b600b840181905560038401546001850154600286015460088701546040805195865264ffffffffff909116602086015280519394929391927f4264c1c4dce9a5bdaf76353b212e051ed6a441a4c184dece2572f8510b007c8f929081900390910190a4506001949350505050565b60008181526010602052604081206002810154611e71576040805162461bcd60e51b815260206004820152601e60248201527f706f6f6c20726577617264732068617665206265656e20647261696e65640000604482015290519081900360640190fd5b6000838152601060209081526040808320338452600601909152902054611edf576040805162461bcd60e51b815260206004820152601e60248201527f796f752068617665206e6f20736861726520696e207468697320706f6f6c0000604482015290519081900360640190fd5b600c81015460ff16611ef657611ef483611b9d565b505b6000611f0184611293565b3360009081526006840160205260409020546002840154919250611f2b919063ffffffff6122e216565b6002830190815533600090815260068401602052604081205554611fb1576000848152601060205260408120818155600181018290556002810182905560038101829055600481018290556007810182905560088101805466ffffffffffffff1916905560098101829055600a8101829055600b810191909155600c01805460ff191690555b6008546040805163a9059cbb60e01b81523360048201526024810184905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b15801561200557600080fd5b505af1158015612019573d6000803e3d6000fd5b505050506040513d602081101561202f57600080fd5b5051612074576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b604051819033907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b6590600090a35060019392505050565b6001600160a01b0383166120f05760405162461bcd60e51b81526004018080602001828103825260258152602001806149656025913960400191505060405180910390fd5b6001600160a01b0382166121355760405162461bcd60e51b81526004018080602001828103825260238152602001806147626023913960400191505060405180910390fd5b600061214882606463ffffffff61262516565b9050600061215c838363ffffffff6122e216565b90506121a181604051806060016040528060268152602001614826602691396001600160a01b038816600090815260208190526040902054919063ffffffff61224b16565b6001600160a01b0380871660009081526020819052604080822093909355908616815220546121d6908263ffffffff61232b16565b6001600160a01b0385166000908152602081905260409020556121f985836139ca565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050505050565b600081848411156122da5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561229f578181015183820152602001612287565b50505050905090810190601f1680156122cc5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600061232483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061224b565b9392505050565b600082820183811015612324576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008261239457506000610cda565b828202828482816123a157fe5b04146123245760405162461bcd60e51b81526004018080602001828103825260218152602001806148fb6021913960400191505060405180910390fd5b6123e6614681565b600080600080600080600080600860009054906101000a90046001600160a01b03166001600160a01b03166333060d908c6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561245d57600080fd5b505afa158015612471573d6000803e3d6000fd5b505050506040513d602081101561248757600080fd5b5051905060005b818110156125bc5760085460408051632607443b60e01b81526001600160a01b038f811660048301526024820185905291519190921691632607443b9160448083019260e0929190829003018186803b1580156124ea57600080fd5b505afa1580156124fe573d6000803e3d6000fd5b505050506040513d60e081101561251457600080fd5b508051602082015160408301516060840151608085015160a086015160c090960151949e50929c50909a5098509650909450925064ffffffffff808a16908c1614156125b45750506040805160e08101825264ffffffffff909816885268ffffffffffffffffff9687166020890152949095169386019390935261ffff9182166060860152811660808501521660a0830152151560c08201529050610cda565b60010161248e565b50505050505050505092915050565b606081015160009061ffff16816125e0613ac6565b90508082106125f45760009250505061109e565b60606126008383613b64565b905061261b81866040015168ffffffffffffffffff16613d1c565b935050505061109e565b600061232483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613d5e565b60006126716146bd565b506000828152600f6020908152604091829020825160a0810184528154815260018201549281019290925260028101549282019290925260038201546001600160a01b03908116606083018190526004909301541660808201529033146127095760405162461bcd60e51b81526004018080602001828103825260228152602001806148a96022913960400191505060405180910390fd5b60208082015160009081526010825260408082203383526005810190935290205460ff1661277e576040805162461bcd60e51b815260206004820152601e60248201527f796f7520617265206e6f74206120706f6f6c207061727469636970616e740000604482015290519081900360640190fd5b6008810154600160281b900460ff16156127df576040805162461bcd60e51b815260206004820152601c60248201527f706f6f6c206973207374616b696e672c2063616e6e6f74206578697400000000604482015290519081900360640190fd5b8151336000908152600e60205260409020546128009163ffffffff6122e216565b336000908152600e6020526040902055815160028201546128269163ffffffff6122e216565b6002820155815133600090815260068301602052604090205461284e9163ffffffff6122e216565b3360009081526006830160205260409020819055612898573360009081526005820160209081526040808320805460ff191690558482015183526011909152902080546000190190555b6000848152600f6020526040812081815560018101829055600281018290556003810180546001600160a01b031990811690915560049091018054909116905582516128eb90606463ffffffff61262516565b9050600061290082600263ffffffff61262516565b9050600061291583600463ffffffff61262516565b9050600061292a84600463ffffffff61262516565b8651909150600090612942908663ffffffff6122e216565b60055490915015612b36576008546009546005546001600160a01b039283169263a9059cbb92169061297b90600263ffffffff61262516565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156129ca57600080fd5b505af11580156129de573d6000803e3d6000fd5b505050506040513d60208110156129f457600080fd5b5051612a39576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b6008546005546001600160a01b039091169063a9059cbb9073d30bc4859a79852157211e6db19de159673a67e290612a7890600263ffffffff61262516565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612ac757600080fd5b505af1158015612adb573d6000803e3d6000fd5b505050506040513d6020811015612af157600080fd5b5051612b36576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b60808701516001600160a01b0316612b52576005829055612c53565b612b6382600263ffffffff61262516565b60055560085460808801516001600160a01b039091169063a9059cbb90612b9185600263ffffffff61262516565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612be057600080fd5b505af1158015612bf4573d6000803e3d6000fd5b505050506040513d6020811015612c0a57600080fd5b5051612c53576040805162461bcd60e51b8152602060048201526013602482015272149959881d1c985b9cd9995c8819985a5b1959606a1b604482015290519081900360640190fd5b6008546040805163a9059cbb60e01b81523360048201526024810184905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b158015612ca757600080fd5b505af1158015612cbb573d6000803e3d6000fd5b505050506040513d6020811015612cd157600080fd5b5051612d16576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b6008546009546040805163a9059cbb60e01b81526001600160a01b039283166004820152602481018890529051919092169163a9059cbb9160448083019260209291908290030181600087803b158015612d6f57600080fd5b505af1158015612d83573d6000803e3d6000fd5b505050506040513d6020811015612d9957600080fd5b5051612de3576040805162461bcd60e51b815260206004820152601460248201527311195d8c481d1c985b9cd9995c8819985a5b195960621b604482015290519081900360640190fd5b6008546040805163a9059cbb60e01b815273d30bc4859a79852157211e6db19de159673a67e260048201526024810186905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b158015612e4b57600080fd5b505af1158015612e5f573d6000803e3d6000fd5b505050506040513d6020811015612e7557600080fd5b5051612ebf576040805162461bcd60e51b815260206004820152601460248201527311195d8c881d1c985b9cd9995c8819985a5b195960621b604482015290519081900360640190fd5b8660400151876000015188606001516001600160a01b03167f998379a72dc64811ce41782d18dd7759dd22de4dd43049986376fada953be82989600301546040518082815260200191505060405180910390a450600198975050505050505050565b6000806000806000806000806000600860009054906101000a90046001600160a01b03166001600160a01b03166333060d908c6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015612f9a57600080fd5b505afa158015612fae573d6000803e3d6000fd5b505050506040513d6020811015612fc457600080fd5b5051905060005b818110156125bc5760085460408051632607443b60e01b81526001600160a01b038f811660048301526024820185905291519190921691632607443b9160448083019260e0929190829003018186803b15801561302757600080fd5b505afa15801561303b573d6000803e3d6000fd5b505050506040513d60e081101561305157600080fd5b508051602082015160408301516060840151608085015160a086015160c090960151949e50929c50909a5098509650909450925064ffffffffff808a16908c1614156130a7579850610cda975050505050505050565b600101612fcb565b600082815260106020526040812080548511156130fd5760405162461bcd60e51b815260040180806020018281038252603c815260200180614785603c913960400191505060405180910390fd5b6008810154600160281b900460ff1615613150576040805162461bcd60e51b815260206004820152600f60248201526e706f6f6c206973207374616b696e6760881b604482015290519081900360640190fd5b600061316386606463ffffffff61262516565b9050600061317882600263ffffffff61262516565b9050600061318d83600463ffffffff61262516565b905060006131a284600463ffffffff61262516565b905060006131b68a8663ffffffff6122e216565b60028701549091506131ce908263ffffffff61232b16565b600287015533600090815260058701602052604090205460ff16613221573360009081526005870160209081526040808320805460ff191660019081179091558c84526011909252909120805490910190555b336000908152600687016020526040902054613243908263ffffffff61232b16565b33600090815260068801602052604090205560055415613323576008546005546040805163a9059cbb60e01b81523360048201526024810192909252516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b1580156132b457600080fd5b505af11580156132c8573d6000803e3d6000fd5b505050506040513d60208110156132de57600080fd5b5051613323576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b6001600160a01b03881661333b57600582905561344e565b61334c82600263ffffffff61262516565b6005556008546001600160a01b03166323b872dd338a61337386600263ffffffff61262516565b6040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050602060405180830381600087803b1580156133db57600080fd5b505af11580156133ef573d6000803e3d6000fd5b505050506040513d602081101561340557600080fd5b505161344e576040805162461bcd60e51b8152602060048201526013602482015272149959881d1c985b9cd9995c8819985a5b1959606a1b604482015290519081900360640190fd5b6008546005546001600160a01b03909116906323b872dd903390309061347b90869063ffffffff61232b16565b6040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050602060405180830381600087803b1580156134e357600080fd5b505af11580156134f7573d6000803e3d6000fd5b505050506040513d602081101561350d57600080fd5b5051613552576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b600854600954604080516323b872dd60e01b81523360048201526001600160a01b03928316602482015260448101889052905191909216916323b872dd9160648083019260209291908290030181600087803b1580156135b157600080fd5b505af11580156135c5573d6000803e3d6000fd5b505050506040513d60208110156135db57600080fd5b5051613625576040805162461bcd60e51b815260206004820152601460248201527311195d8c481d1c985b9cd9995c8819985a5b195960621b604482015290519081900360640190fd5b600854604080516323b872dd60e01b815233600482015273d30bc4859a79852157211e6db19de159673a67e260248201526044810186905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b15801561369357600080fd5b505af11580156136a7573d6000803e3d6000fd5b505050506040513d60208110156136bd57600080fd5b5051613707576040805162461bcd60e51b815260206004820152601460248201527311195d8c881d1c985b9cd9995c8819985a5b195960621b604482015290519081900360640190fd5b855460028701541115613862578554600287015460009161372e919063ffffffff6122e216565b9050613748613743838363ffffffff6122e216565b613dc3565b61376661375b838363ffffffff6122e216565b88600301548b613dfc565b8654600288015533600090815260068801602052604090205461378f908263ffffffff6122e216565b3360009081526006890160205260409020556137ab8a88613f08565b6137fc576040805162461bcd60e51b815260206004820152601c60248201527f4572726f723a20636f756c64206e6f74207374617274207374616b6500000000604482015290519081900360640190fd5b61380b8760040154828b61410e565b61385c576040805162461bcd60e51b815260206004820181905260248201527f4572726f723a20636f756c64206e6f7420637265617465206e657720706f6f6c604482015290519081900360640190fd5b50613960565b8554600287015414156139485761387881613dc3565b6138878187600301548a613dfc565b6138918987613f08565b6138e2576040805162461bcd60e51b815260206004820152601c60248201527f4572726f723a20636f756c64206e6f74207374617274207374616b6500000000604482015290519081900360640190fd5b6138f2866004015460008a61410e565b613943576040805162461bcd60e51b815260206004820181905260248201527f4572726f723a20636f756c64206e6f7420637265617465206e657720706f6f6c604482015290519081900360640190fd5b613960565b61395181613dc3565b6139608187600301548a613dfc565b6139698a614363565b6139ba576040805162461bcd60e51b815260206004820152601c60248201527f4572726f723a20636f756c64206e6f74206d696e7420746f6b656e7300000000604482015290519081900360640190fd5b5060019998505050505050505050565b6001600160a01b038216613a0f5760405162461bcd60e51b81526004018080602001828103825260218152602001806149446021913960400191505060405180910390fd5b613a52816040518060600160405280602281526020016147c1602291396001600160a01b038516600090815260208190526040902054919063ffffffff61224b16565b6001600160a01b038316600090815260208190526040902055600454613a7e908263ffffffff6122e216565b6004556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6000613ad06146fe565b600860009054906101000a90046001600160a01b03166001600160a01b031663f04b5fa06040518163ffffffff1660e01b81526004016101a06040518083038186803b158015613b1f57600080fd5b505afa158015613b33573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506101a0811015613b5957600080fd5b506080015192915050565b60085460408051633510850760e11b81526004810185905260248101849052905160609283926001600160a01b0390911691636a210a0e91604480820192600092909190829003018186803b158015613bbc57600080fd5b505afa158015613bd0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015613bf957600080fd5b8101908080516040519392919084640100000000821115613c1957600080fd5b908301906020820185811115613c2e57600080fd5b8251866020820283011164010000000082111715613c4b57600080fd5b82525081516020918201928201910280838360005b83811015613c78578181015183820152602001613c60565b505050509050016040525050509050600081519050606081604051908082528060200260200182016040528015613cc957816020015b613cb661471d565b815260200190600190039081613cae5790505b50905060005b82811015613d1257613cf3848281518110613ce657fe5b6020026020010151614384565b828281518110613cff57fe5b6020908102919091010152600101613ccf565b5095945050505050565b815160009081805b82811015613d5557613d49868281518110613d3b57fe5b6020026020010151866143c7565b90910190600101613d24565b50949350505050565b60008183613dad5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561229f578181015183820152602001612287565b506000838581613db957fe5b0495945050505050565b336000908152600e602052604090208054613de4908363ffffffff61232b16565b815560010180546001600160a01b0319163317905550565b6000613e066143e4565b33600090815260136020908152604080832080546001818101835591855283852001859055878452601283529083208054918201815583529120018190559050613e4e6146bd565b8481526020808201858152604080840185815233606086019081526001600160a01b03888116608088019081526000898152600f885285902088518082559651600182015593516002850181905592516003850180549184166001600160a01b0319928316811790915591516004909501805495909316941693909317905582518981529251909491927fb8ab617400c81f66404f4b37405e10991268e0a05e4d7f3b06b7d28076c2c69592908290030190a45050505050565b8054600282015460009114613f5d576040805162461bcd60e51b815260206004820152601660248201527514dd185ad948185b5bdd5b9d081a5b98dbdc9c9958dd60521b604482015290519081900360640190fd5b8154600183015460085460408051630a54871760e31b8152600481018590526024810184905290516001600160a01b03909216916352a438b89160448082019260009290919082900301818387803b158015613fb857600080fd5b505af1158015613fcc573d6000803e3d6000fd5b50506008546040805163033060d960e41b815230600482015290516000945061405a93506001926001600160a01b0316916333060d90916024808301926020929190829003018186803b15801561402257600080fd5b505afa158015614036573d6000803e3d6000fd5b505050506040513d602081101561404c57600080fd5b50519063ffffffff6122e216565b9050614064614681565b61406e30836143f2565b805160088801805464ffffffffff90921664ffffffffff1990921691909117808255600c5460078a01554260098a015566ffff00000000001916600160281b17905590506140ba614510565b5080516040805186815264ffffffffff90921660208301528051899286927fe6e27f56b3cdde69e5d0a9bcdef1ef34500823c80d47d320e171687080f8fbb292918290030190a35060019695505050505050565b6000808085614129575066354a6ba7a18000905060246141a1565b8560011415614145575066354a6ba7a18000905061016d6141a1565b8560021415614161575066354a6ba7a180009050610e426141a1565b6040805162461bcd60e51b815260206004820152601060248201526f696e76616c696420706f6f6c5479706560801b604482015290519081900360640190fd5b60006141ab61451e565b60008181526010602052604090208481556001810184905560028101889055600381018290556004810189905560088101805466ff0000000000001916600160301b179055909150861561426b57600082815260116020908152604080832080546001908101909155338452600585018352818420805460ff1916909117905560068401909152902054614245908863ffffffff61232b16565b33600090815260068301602052604090205561426087613dc3565b61426b878388613dfc565b60009182526010602052604090912081548155600180830154818301556002808401549083015560038084015490830155600480840154908301556007808401549083015560088084018054918401805464ffffffffff90931664ffffffffff1990931692909217808355815465ff000000000019909116600160281b9182900460ff908116151590920217808455915466ff00000000000019909216600160301b92839004821615159092029190911790915560098085015490840155600a8085015490840155600b8085015490840155600c9384015493909201805460ff19169390921615159290921790559695505050505050565b60008061437783606463ffffffff61262516565b905033610ea4818361452c565b61438c61471d565b506040805160608101825268ffffffffffffffffff8381168252604884901c16602082015260909290921c66ffffffffffffff169082015290565b6000826020015183600001518302816143dc57fe5b049392505050565b600a80546001019081905590565b6143fa614681565b60085460408051632607443b60e01b81526001600160a01b038681166004830152602482018690529151600093849384938493849384938493911691632607443b9160448082019260e092909190829003018186803b15801561445c57600080fd5b505afa158015614470573d6000803e3d6000fd5b505050506040513d60e081101561448657600080fd5b50805160208083015160408085015160608087015160808089015160a0808b015160c09b8c0151885160e081018a5264ffffffffff909c168c5268ffffffffffffffffff998a169a8c019a909a52979095169589019590955261ffff91821692880192909252928316908601529116908301521515918101919091529a9950505050505050505050565b600c80546001019081905590565b600b80546001019081905590565b806001600160a01b038316614588576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b60025460ff1661467c57600354600454101561467c576003546004546145b4908363ffffffff61232b16565b11156145e9576004546003546145cf9163ffffffff6122e216565b6003546004556002805460ff191660011790559050614600565b6004546145fc908263ffffffff61232b16565b6004555b6001600160a01b038316600090815260208190526040902054614629908263ffffffff61232b16565b6001600160a01b0384166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35b505050565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b6040518060a0016040528060008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681525090565b604051806101a00160405280600d906020820280388339509192915050565b6040518060600160405280600081526020016000815260200160008152509056fe63616e6e6f7420656e7465722c20706f6f6c73206e6f7420696e697469616c697a656445524332303a207472616e7366657220746f20746865207a65726f2061646472657373616d6f756e74206f766572207468726573686f6c64202d206f6e6c792031206e657720706f6f6c20746f20626520637265617465642070657220747845524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f20616464726573734572726f723a20636f756c64206e6f74207769746864726177207265776172647345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63654572726f723a20756e73756666696369656e742066726f7a656e2062616c616e63654572726f723a20706f6f6c206973206e6f7420796574207374616b65642c206f722068617320616c726561647920656e646564207374616b696e676e6f7420656e747279206f776e65722c206f7220616c7265616479206578697465644572726f723a2076616c7565206d7573742062652067726561746572207468616e206d696e456e747279486561727473536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa265627a7a72315820ca62bd23ffec7202a2b3a5f9ecfb53da305133c5723869fed8a369af68340e9364736f6c634300050d0032
Deployed Bytecode Sourcemap
12356:28491:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15402:14;;;;12356:28491;12044:134;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12044:134:1;;;:::i;:::-;;;;;;;;;;;;;;;;2116:39;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2116:39:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;2116:39:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3476:150;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3476:150:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;3476:150:1;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;30354:154;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30354:154:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30354:154:1;;:::i;30553:171::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30553:171:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30553:171:1;;:::i;2499:91::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2499:91:1;;;:::i;13273:25::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13273:25:1;;;:::i;2312:23::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2312:23:1;;;:::i;4098:300::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4098:300:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;4098:300:1;;;;;;;;;;;;;;;;;:::i;11381:505::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11381:505:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11381:505:1;;:::i;32488:686::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32488:686:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32488:686:1;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2207:33;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2207:33:1;;;:::i;33935:164::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33935:164:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33935:164:1;;;;;;-1:-1:-1;;;;;33935:164:1;;:::i;31263:297::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31263:297:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31263:297:1;;:::i;4807:206::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4807:206:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;4807:206:1;;;;;;;;:::i;33750:144::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33750:144:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33750:144:1;;:::i;31756:301::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31756:301:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31756:301:1;-1:-1:-1;;;;;31756:301:1;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31756:301:1;-1:-1:-1;;;;;31756:301:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;31756:301:1;;;;;;;;;;;;;;;;;;;34362:151;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34362:151:1;;;:::i;2653:110::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2653:110:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2653:110:1;-1:-1:-1;;;;;2653:110:1;;:::i;34681:116::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34681:116:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34681:116:1;;:::i;37770:220::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37770:220:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37770:220:1;;-1:-1:-1;;;;;37770:220:1;;;;;;;;:::i;24847:489::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24847:489:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24847:489:1;;:::i;2269:20::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2269:20:1;;;:::i;13179:30::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13179:30:1;;;:::i;2342:52::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2342:52:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2342:52:1;-1:-1:-1;;;;;2342:52:1;;:::i;32091:364::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32091:364:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32091:364:1;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;;;;32091:364:1;;;;;;;;;;;;;;;;;;;;;31576:147;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31576:147:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31576:147:1;;:::i;2162:38::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2162:38:1;;;:::i;12216:133::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12216:133:1;;;:::i;13232:24::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13232:24:1;;;:::i;5516:257::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5516:257:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;5516:257:1;;;;;;;;:::i;13374:42::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13374:42:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13374:42:1;-1:-1:-1;;;;;13374:42:1;;:::i;:::-;;;;;;;-1:-1:-1;;;;;13374:42:1;;;;;;;;;;;;;;;;30168:152;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30168:152:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30168:152:1;;:::i;2976:156::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2976:156:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2976:156:1;;;;;;;;:::i;13472:39::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13472:39:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13472:39:1;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33412:278;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33412:278:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33412:278:1;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37998:289;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37998:289:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37998:289:1;;-1:-1:-1;;;;;37998:289:1;;;;;;;;:::i;13423:42::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13423:42:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13423:42:1;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13423:42:1;;;;;;;;;;;;;;;;;;;;;29844:240;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29844:240:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29844:240:1;;;;;;;;;;;-1:-1:-1;;;;;29844:240:1;;:::i;30930:158::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30930:158:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30930:158:1;;:::i;10801:537::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10801:537:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10801:537:1;;:::i;34155:163::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34155:163:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34155:163:1;;;;;;-1:-1:-1;;;;;34155:163:1;;:::i;13318:26::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13318:26:1;;;:::i;3195:134::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3195:134:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;3195:134:1;;;;;;;;;;:::i;31104:143::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31104:143:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31104:143:1;;:::i;33220:151::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33220:151:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33220:151:1;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;33220:151:1;;;;;;;;;;;;;;;;;12044:134;12159:11;;12044:134;:::o;2116:39::-;;;;;;;;;;;;;;-1:-1:-1;;;2116:39:1;;;;:::o;3476:150::-;3542:4;3559:37;3568:10;3580:7;3589:6;3559:8;:37::i;:::-;-1:-1:-1;3614:4:1;3476:150;;;;;:::o;30354:154::-;15126:6;;;;15125:7;15117:29;;;;;-1:-1:-1;;;15117:29:1;;;;;;;;;;;;-1:-1:-1;;;15117:29:1;;;;;;;;;;;;;;;15157:6;:13;;-1:-1:-1;;15157:13:1;15166:4;15157:13;;;30452:17;30461:7;30452:8;:17::i;:::-;30444:56;;;;;-1:-1:-1;;;30444:56:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15193:6:1;:14;;-1:-1:-1;;15193:14:1;;;30354:154::o;30553:171::-;15126:6;;;;15125:7;15117:29;;;;;-1:-1:-1;;;15117:29:1;;;;;;;;;;;;-1:-1:-1;;;15117:29:1;;;;;;;;;;;;;;;15157:6;:13;;-1:-1:-1;;15157:13:1;15166:4;15157:13;;;30650:28;30670:7;30650:19;:28::i;:::-;30642:74;;;;-1:-1:-1;;;30642:74:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2499:91;2570:12;;2499:91;:::o;13273:25::-;;;;:::o;2312:23::-;;;;:::o;4098:300::-;4187:4;4204:36;4214:6;4222:9;4233:6;4204:9;:36::i;:::-;4251:117;4260:6;4268:10;4280:87;4316:6;4280:87;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4280:19:1;;;;;;:11;:19;;;;;;;;4300:10;4280:31;;;;;;;;;:87;;:35;:87;:::i;:::-;4251:8;:117::i;:::-;-1:-1:-1;4386:4:1;4098:300;;;;;:::o;11381:505::-;11461:1;11455:3;:7;11447:30;;;;;-1:-1:-1;;;11447:30:1;;;;;;;;;;;;-1:-1:-1;;;11447:30:1;;;;;;;;;;;;;;;11516:10;11496:31;;;;:19;:31;;;;;;:38;-1:-1:-1;11496:38:1;11488:84;;;;-1:-1:-1;;;11488:84:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11674:10;11654:31;;;;:19;:31;;;;;;:40;;11690:3;11654:40;:35;:40;:::i;:::-;11640:10;11620:31;;;;:19;:31;;;;;:74;11736:11;;:20;;11752:3;11736:20;:15;:20;:::i;:::-;11722:11;:34;11767:41;11785:4;11792:10;11804:3;11767:9;:41::i;:::-;11848:30;;11874:3;;11862:10;;11848:30;;;;;11381:505;:::o;32488:686::-;32579:27;32868:13;;;:5;:13;;;;;:32;;32915;;;;32962:23;;;;33000:22;;;;33037:23;;;;33075:37;;;;33127:24;;;;;32868:32;;32915;;32962:23;;33000:22;;-1:-1:-1;;;33037:23:1;;;;;;;;33075:37;33127:24;;32488:686::o;2207:33::-;2239:1;2207:33;:::o;33935:164::-;34032:4;34060:9;;;:5;:9;;;;;;;;-1:-1:-1;;;;;34060:31:1;;;;:25;;:31;;;;;;;;33935:164;;;;:::o;31263:297::-;31352:4;31493:13;;;:5;:13;;;;;31530:1;31493:32;;;;31549:3;;31450:95;;31492:52;;31538:5;;31493:39;;;:36;:39;:::i;:::-;31492:45;:52;:45;:52;:::i;:::-;31450:13;;;;:5;:13;;;;;:37;;;;:95;:41;:95;:::i;:::-;:102;;31443:109;;31263:297;;;;:::o;4807:206::-;4913:10;4887:4;4934:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;4934:32:1;;;;;;;;;;4887:4;;4904:79;;4925:7;;4934:48;;4971:10;4934:48;:36;:48;:::i;33750:144::-;33836:4;33865:21;;;:13;:21;;;;;;;33750:144::o;31756:301::-;-1:-1:-1;;;;;31973:11:1;;;31848:26;31973:11;;;:5;:11;;;;;;;;:30;;32005:12;:18;;;;;32025:11;;;:23;;;;;31966:83;;;;;;;;;;;;;;;;;31848:26;;31885:23;;31848:26;;31973:30;;32005:18;;32025:23;;;;;32005:18;;31966:83;;;32005:18;31966:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31756:301;;;;;:::o;34362:151::-;34468:12;;:37;;;-1:-1:-1;;;34468:37:1;;34499:4;34468:37;;;;;;34439:4;;-1:-1:-1;;;;;34468:12:1;;:22;;:37;;;;;;;;;;;;;;:12;:37;;;5:2:-1;;;;30:1;27;20:12;5:2;34468:37:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34468:37:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34468:37:1;;-1:-1:-1;34362:151:1;:::o;2653:110::-;-1:-1:-1;;;;;2737:18:1;2710:7;2737:18;;;;;;;;;;;;2653:110::o;34681:116::-;14622:10;;-1:-1:-1;;;;;14622:10:1;14608;:24;14600:45;;;;;-1:-1:-1;;;14600:45:1;;;;;;;;;;;;-1:-1:-1;;;14600:45:1;;;;;;;;;;;;;;;34766:14;:23;34681:116::o;37770:220::-;37866:7;37891:15;;:::i;:::-;37909:32;37927:4;37933:7;37909:17;:32::i;:::-;37891:50;;37961:21;37980:1;37961:18;:21::i;:::-;37954:28;37770:220;-1:-1:-1;;;;37770:220:1:o;24847:489::-;24940:4;24986:13;;;:5;:13;;;;;25018:15;;;;;;25010:59;;;;;-1:-1:-1;;;25010:59:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;25103:10;25083:31;;;;:19;;;:31;;;;;;25080:75;;25142:1;25135:8;;;;;25080:75;25247:23;;25230:10;25165:22;25210:31;;;:19;;;:31;;;;;;25190:15;;;;25165:22;;25190:81;;25247:23;;25190:52;;:15;:52;:19;:52;:::i;:::-;:56;:81;:56;:81;:::i;2269:20::-;;;;:::o;13179:30::-;;;;:::o;2342:52::-;;;;;;;;;;;;;:::o;32091:364::-;32184:19;32337:16;;;:7;:16;;;;;:27;;32366:23;;;;32391:28;;;;32421:25;;;;;32337:27;;32366:23;;-1:-1:-1;;;;;32391:28:1;;;;32421:25;;32091:364::o;31576:147::-;31662:4;31691:13;;;:5;:13;;;;;:24;;;;;;31576:147::o;2162:38::-;;;;;;;;;;;;;;-1:-1:-1;;;2162:38:1;;;;:::o;12216:133::-;12288:7;12320:21;12330:10;12320:9;:21::i;:::-;12313:28;;12216:133;:::o;13232:24::-;;;;:::o;5516:257::-;5601:4;5618:125;5627:10;5639:7;5648:94;5685:15;5648:94;;;;;;;;;;;;;;;;;5660:10;5648:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;5648:32:1;;;;;;;;;;;:94;;:36;:94;:::i;13374:42::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13374:42:1;;:::o;30168:152::-;15126:6;;;;15125:7;15117:29;;;;;-1:-1:-1;;;15117:29:1;;;;;;;;;;;;-1:-1:-1;;;15117:29:1;;;;;;;;;;;;;;;15157:6;:13;;-1:-1:-1;;15157:13:1;15166:4;15157:13;;;30263:18;30272:8;30263;:18::i;:::-;30255:57;;;;;-1:-1:-1;;;30255:57:1;;;;;;;;;;;;;;;;;;;;;;;;;;;2976:156;3045:4;3062:40;3072:10;3084:9;3095:6;3062:9;:40::i;13472:39::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;13472:39:1;;;;;-1:-1:-1;;;13472:39:1;;;;;;;;;:::o;33412:278::-;33498:12;33574:13;;;:5;:13;;;;;:21;;;;33630:24;;;;;33498:12;;;;33597:58;;33623:4;;33630:24;;33597:17;:58::i;:::-;33657:13;;;;:5;:13;;;;;;:24;;;33567:115;;33657:24;;;;;-1:-1:-1;33412:278:1;-1:-1:-1;;33412:278:1:o;37998:289::-;38096:7;38121:19;;:::i;:::-;38143:32;38161:4;38167:7;38143:17;:32::i;:::-;38121:54;;38188:16;38207:25;38226:5;38207:18;:25::i;:::-;38250:18;;;;;:29;;;;;;-1:-1:-1;;37998:289:1;;;;:::o;13423:42::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13423:42:1;;;;;;:::o;29844:240::-;29947:7;29956;14732:16;14745:2;14732:12;:16::i;:::-;14724:60;;;;;-1:-1:-1;;;14724:60:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;14809:12;;14803:2;:18;;14795:57;;;;;-1:-1:-1;;;14795:57:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;14880:14;;14871:6;:23;14863:84;;;;-1:-1:-1;;;14863:84:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15126:6;;;;15125:7;15117:29;;;;;-1:-1:-1;;;15117:29:1;;;;;;;;;;;;-1:-1:-1;;;15117:29:1;;;;;;;;;;;;;;;15157:6;:13;;-1:-1:-1;;15157:13:1;15166:4;15157:13;;;30011:33;30021:7;30030;30039:4;30011:9;:33::i;:::-;30003:73;;;;;-1:-1:-1;;;30003:73:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15193:6:1;:14;;-1:-1:-1;;15193:14:1;;;-1:-1:-1;;;29844:240:1:o;30930:158::-;15011:5;;31029:4;;15011:5;;;;;15003:53;;;;-1:-1:-1;;;15003:53:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31058:13:1;;;;:5;:13;;;;;:22;;;-1:-1:-1;;;31058:22:1;;;;;30930:158::o;10801:537::-;10879:1;10873:3;:7;10865:30;;;;;-1:-1:-1;;;10865:30:1;;;;;;;;;;;;-1:-1:-1;;;10865:30:1;;;;;;;;;;;;;;;10932:3;10914:14;:12;:14::i;:::-;:21;;10906:61;;;;;-1:-1:-1;;;10906:61:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;11089:58;11125:21;11133:12;:3;11141;11133:12;:7;:12;:::i;:::-;11125:3;;:21;:7;:21;:::i;:::-;11109:10;11089:31;;;;:19;:31;;;;;;;:58;:35;:58;:::i;:::-;11075:10;11055:31;;;;:19;:31;;;;;:92;11172:38;11188:21;11196:12;:3;11204;11196:12;:7;:12;:::i;11188:21::-;11172:11;;;:38;:15;:38;:::i;:::-;11158:11;:52;11221:41;11231:10;11251:4;11258:3;11221:9;:41::i;:::-;11302:28;;11326:3;;11314:10;;11302:28;;;;;10801:537;:::o;34155:163::-;34252:4;34280:9;;;:5;:9;;;;;;;;-1:-1:-1;;;;;34280:30:1;;;;:24;;:30;;;;;;34155:163;;;;:::o;13318:26::-;;;;:::o;3195:134::-;-1:-1:-1;;;;;3294:18:1;;;3267:7;3294:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3195:134::o;31104:143::-;31187:4;31216:13;;;:5;:13;;;;;:23;;;-1:-1:-1;;;31216:23:1;;;;;31104:143::o;33220:151::-;33343:20;;;;:12;:20;;;;;;;;;33336:27;;;;;;;;;;;;;;;;;33305:13;;33336:27;;;33343:20;33336:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33220:151;;;:::o;8982:338::-;-1:-1:-1;;;;;9076:19:1;;9068:68;;;;-1:-1:-1;;;9068:68:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9155:21:1;;9147:68;;;;-1:-1:-1;;;9147:68:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9228:18:1;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;9280:32;;;;;;;;;;;;;;;;;8982:338;;;:::o;22675:1093::-;22742:4;22782:12;;22772:6;:22;;22764:61;;;;;-1:-1:-1;;;22764:61:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;22836:21;22860:13;;;:5;:13;;;;;22892:14;;;;-1:-1:-1;;;22892:14:1;;;;22884:86;;;;-1:-1:-1;;;22884:86:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22989:27;23009:6;22989:19;:27::i;:::-;22981:67;;;;;-1:-1:-1;;;22981:67:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;23061:18;23082:20;:18;:20::i;:::-;23171:12;;;23226:15;;;;23061:41;;-1:-1:-1;;;;;;23171:12:1;;:21;;23193:49;;23219:4;;23226:15;;23193:17;:49::i;:::-;23244:15;;;;23171:89;;;-1:-1:-1;;;;;;23171:89:1;;;;;;;;;;;;;;23244:15;;;;23171:89;;;;;;;;;;23244:15;;23171:89;;;;;;;23244:15;23171:89;;;;5:2:-1;;;;30:1;27;20:12;5:2;23171:89:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;;23271:14:1;;;:22;;-1:-1:-1;;23271:22:1;;;-1:-1:-1;23304:15:1;;;:22;;-1:-1:-1;;23304:22:1;23271;23304;;;23288:5;23401:36;23426:10;23401:20;:18;:20::i;:::-;:24;:36;:24;:36;:::i;:::-;23448:15;;;:28;;;23521:23;;23380:57;;-1:-1:-1;23506:39:1;;23380:57;;23506:39;:14;:39;:::i;:::-;23487:16;;;:58;;;23686:11;;;;23648:23;;;;23619:14;;;;23712:15;;;;23561:177;;;;;;23712:15;;;;23561:177;;;;;;23686:11;;23648:23;;23619:14;;23561:177;;;;;;;;;;;-1:-1:-1;23756:4:1;;22675:1093;-1:-1:-1;;;;22675:1093:1:o;23864:921::-;23941:4;23987:13;;;:5;:13;;;;;24019:14;;;;24011:61;;;;;-1:-1:-1;;;24011:61:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;24134:1;24091:13;;;:5;:13;;;;;;;;24120:10;24091:40;;:28;;:40;;;;;;24083:87;;;;;-1:-1:-1;;;24083:87:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;24185:15;;;;;;24181:63;;24216:16;24225:6;24216:8;:16::i;:::-;;24181:63;24254:12;24269:30;24292:6;24269:22;:30::i;:::-;24388:10;24368:31;;;;:19;;;:31;;;;;;24349:14;;;;24254:45;;-1:-1:-1;24349:51:1;;:14;:51;:18;:51;:::i;:::-;24332:14;;;:68;;;24450:10;24464:1;24430:31;;;:19;;;:31;;;;;:35;24517:14;24514:92;;24559:13;;;;:5;:13;;;;;24552:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24552:20:1;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24552:20:1;;;24514:92;24624:12;;:42;;;-1:-1:-1;;;24624:42:1;;24646:10;24624:42;;;;;;;;;;;;-1:-1:-1;;;;;24624:12:1;;;;:21;;:42;;;;;;;;;;;;;;;:12;;:42;;;5:2:-1;;;;30:1;27;20:12;5:2;24624:42:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24624:42:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24624:42:1;24616:70;;;;;-1:-1:-1;;;24616:70:1;;;;;;;;;;;;-1:-1:-1;;;24616:70:1;;;;;;;;;;;;;;;24724:31;;24747:7;;24735:10;;24724:31;;;;;-1:-1:-1;24773:4:1;;23864:921;-1:-1:-1;;;23864:921:1:o;6263:605::-;-1:-1:-1;;;;;6361:20:1;;6353:70;;;;-1:-1:-1;;;6353:70:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6442:23:1;;6434:71;;;;-1:-1:-1;;;6434:71:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6540:10;6553:15;:6;6564:3;6553:15;:10;:15;:::i;:::-;6540:28;-1:-1:-1;6579:11:1;6593:17;:6;6540:28;6593:17;:10;:17;:::i;:::-;6579:31;;6641:71;6663:6;6641:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6641:17:1;;:9;:17;;;;;;;;;;;;:71;;:21;:71;:::i;:::-;-1:-1:-1;;;;;6621:17:1;;;:9;:17;;;;;;;;;;;:91;;;;6746:20;;;;;;;:32;;6771:6;6746:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;6723:20:1;;:9;:20;;;;;;;;;;:55;6789:20;6795:6;6803:5;6789;:20::i;:::-;6842:9;-1:-1:-1;;;;;6825:35:1;6834:6;-1:-1:-1;;;;;6825:35:1;;6853:6;6825:35;;;;;;;;;;;;;;;;;;6263:605;;;;;:::o;1789:192:3:-;1875:7;1911:12;1903:6;;;;1895:29;;;;-1:-1:-1;;;1895:29:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;1895:29:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1947:5:3;;;1789:192::o;1316:136::-;1374:7;1401:43;1405:1;1408;1401:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1394:50;1316:136;-1:-1:-1;;;1316:136:3:o;860:181::-;918:7;950:5;;;974:6;;;;966:46;;;;;-1:-1:-1;;;966:46:3;;;;;;;;;;;;;;;;;;;;;;;;;;;2232:471;2290:7;2535:6;2531:47;;-1:-1:-1;2565:1:3;2558:8;;2531:47;2602:5;;;2606:1;2602;:5;:1;2626:5;;;;;:10;2618:56;;;;-1:-1:-1;;;2618:56:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39089:1017:1;39179:13;;:::i;:::-;39212:14;39237:19;39267:18;39296:16;39323:17;39351:18;39380:16;39409:18;39430:12;;;;;;;;;-1:-1:-1;;;;;39430:12:1;-1:-1:-1;;;;;39430:23:1;;39454:4;39430:29;;;;;;;;;;;;;-1:-1:-1;;;;;39430:29:1;-1:-1:-1;;;;;39430:29:1;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39430:29:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39430:29:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39430:29:1;;-1:-1:-1;39474:9:1;39470:629;39493:10;39489:1;:14;39470:629;;;39690:12;;:32;;;-1:-1:-1;;;39690:32:1;;-1:-1:-1;;;;;39690:32:1;;;;;;;;;;;;;;;:12;;;;;:23;;:32;;;;;;;;;;;;;;:12;:32;;;5:2:-1;;;;30:1;27;20:12;5:2;39690:32:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39690:32:1;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;39690:32:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39690:32:1;;-1:-1:-1;39690:32:1;;-1:-1:-1;39690:32:1;-1:-1:-1;39690:32:1;-1:-1:-1;39690:32:1;;-1:-1:-1;39690:32:1;-1:-1:-1;39742:14:1;;;;;;;;39739:349;;;-1:-1:-1;;39783:289:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39776:296:1;;39739:349;39505:3;;39470:629;;;;39089:1017;;;;;;;;;;;;:::o;37328:434::-;37447:11;;;;37410:7;;37435:23;;37410:7;37481:16;:14;:16::i;:::-;37469:28;;37541:1;37536;:6;37532:223;;37601:1;37594:8;;;;;;37532:223;37635:28;37666:18;37679:1;37682;37666:12;:18::i;:::-;37635:49;;37706:37;37723:4;37729:1;:13;;;37706:37;;:16;:37::i;:::-;37699:44;;;;;;;3171:132:3;3229:7;3256:39;3260:1;3263;3256:39;;;;;;;;;;;;;;;;;:3;:39::i;25382:2533:1:-;25450:4;25472:22;;:::i;:::-;-1:-1:-1;25497:16:1;;;;:7;:16;;;;;;;;;25472:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25472:41:1;;;;;;;;;;;;;;;;;;;;25532:10;:31;25524:78;;;;-1:-1:-1;;;25524:78:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25643:12;;;;;25613:21;25637:19;;;:5;:19;;;;;;25696:10;25675:32;;:20;;;:32;;;;;;;;25667:75;;;;;-1:-1:-1;;;25667:75:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;25762:14;;;;-1:-1:-1;;;25762:14:1;;;;25761:15;25753:56;;;;;-1:-1:-1;;;25753:56:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;25900:16;;25865:10;25900:16;25859:17;;;:5;:17;;;;;:36;:58;;;:40;:58;:::i;:::-;25826:10;25820:17;;;;:5;:17;;;;;:97;25964:16;;25945:14;;;;:36;;;:18;:36;:::i;:::-;25928:14;;;:53;26082:16;;26066:10;26082:16;26046:31;;;:19;;;:31;;;;;;:53;;;:35;:53;:::i;:::-;26032:10;26012:31;;;;:19;;;:31;;;;;:87;;;26189:151;;26265:10;26279:5;26244:32;;;:20;;;:32;;;;;;;;:40;;-1:-1:-1;;26244:40:1;;;26313:12;;;;26299:27;;:13;:27;;;;;:29;;-1:-1:-1;;26299:29:1;;;26189:151;26357:16;;;;:7;:16;;;;;26350:23;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;26350:23:1;;;;;;;;;;;;;;;;;26423:16;;:25;;12955:3;26423:25;:20;:25;:::i;:::-;26411:37;-1:-1:-1;26459:12:1;26474:16;26411:37;12994:1;26474:16;:8;:16;:::i;:::-;26459:31;-1:-1:-1;26501:13:1;26517:17;:4;13047:1;26517:17;:8;:17;:::i;:::-;26501:33;-1:-1:-1;26545:12:1;26560:16;:4;13100:1;26560:16;:8;:16;:::i;:::-;26602;;26545:31;;-1:-1:-1;26587:12:1;;26602:26;;26623:4;26602:26;:20;:26;:::i;:::-;26652:8;;26587:41;;-1:-1:-1;26652:12:1;26649:343;;26688:12;;26710:10;;26722:8;;-1:-1:-1;;;;;26688:12:1;;;;:21;;26710:10;;26722:15;;26735:1;26722:15;:12;:15;:::i;:::-;26688:50;;;;;;;;;;;;;-1:-1:-1;;;;;26688:50:1;-1:-1:-1;;;;;26688:50:1;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26688:50:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26688:50:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26688:50:1;26680:78;;;;;-1:-1:-1;;;26680:78:1;;;;;;;;;;;;-1:-1:-1;;;26680:78:1;;;;;;;;;;;;;;;26845:12;;26880:8;;-1:-1:-1;;;;;26845:12:1;;;;:21;;12884:42;;26880:15;;26893:1;26880:15;:12;:15;:::i;:::-;26845:51;;;;;;;;;;;;;-1:-1:-1;;;;;26845:51:1;-1:-1:-1;;;;;26845:51:1;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26845:51:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26845:51:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26845:51:1;26837:79;;;;;-1:-1:-1;;;26837:79:1;;;;;;;;;;;;-1:-1:-1;;;26837:79:1;;;;;;;;;;;;;;;27005:14;;;;-1:-1:-1;;;;;27005:28:1;27002:376;;27104:8;:18;;;27002:376;;;27230:14;:7;27242:1;27230:14;:11;:14;:::i;:::-;27219:8;:25;27267:12;;27289:14;;;;-1:-1:-1;;;;;27267:12:1;;;;:21;;27305:14;:7;27317:1;27305:14;:11;:14;:::i;:::-;27267:53;;;;;;;;;;;;;-1:-1:-1;;;;;27267:53:1;-1:-1:-1;;;;;27267:53:1;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27267:53:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27267:53:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27267:53:1;27259:85;;;;;-1:-1:-1;;;27259:85:1;;;;;;;;;;;;-1:-1:-1;;;27259:85:1;;;;;;;;;;;;;;;27412:12;;:42;;;-1:-1:-1;;;27412:42:1;;27434:10;27412:42;;;;;;;;;;;;-1:-1:-1;;;;;27412:12:1;;;;:21;;:42;;;;;;;;;;;;;;;:12;;:42;;;5:2:-1;;;;30:1;27;20:12;5:2;27412:42:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27412:42:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27412:42:1;27404:70;;;;;-1:-1:-1;;;27404:70:1;;;;;;;;;;;;-1:-1:-1;;;27404:70:1;;;;;;;;;;;;;;;27525:12;;27547:10;;27525:42;;;-1:-1:-1;;;27525:42:1;;-1:-1:-1;;;;;27547:10:1;;;27525:42;;;;;;;;;;;;:12;;;;;:21;;:42;;;;;;;;;;;;;;:12;;:42;;;5:2:-1;;;;30:1;27;20:12;5:2;27525:42:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27525:42:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27525:42:1;27517:75;;;;;-1:-1:-1;;;27517:75:1;;;;;;;;;;;;-1:-1:-1;;;27517:75:1;;;;;;;;;;;;;;;27628:12;;:44;;;-1:-1:-1;;;27628:44:1;;12884:42;27628:44;;;;;;;;;;;;-1:-1:-1;;;;;27628:12:1;;;;:21;;:44;;;;;;;;;;;;;;;:12;;:44;;;5:2:-1;;;;30:1;27;20:12;5:2;27628:44:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27628:44:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27628:44:1;27620:77;;;;;-1:-1:-1;;;27620:77:1;;;;;;;;;;;;-1:-1:-1;;;27620:77:1;;;;;;;;;;;;;;;27835:5;:13;;;27804:5;:16;;;27772:5;:17;;;-1:-1:-1;;;;;27749:136:1;;27863:4;:11;;;27749:136;;;;;;;;;;;;;;;;;;-1:-1:-1;27903:4:1;;25382:2533;-1:-1:-1;;;;;;;;25382:2533:1:o;40114:730::-;40216:4;40238:14;40263:19;40293:18;40322:16;40349:17;40377:18;40406:16;40435:18;40456:12;;;;;;;;;-1:-1:-1;;;;;40456:12:1;-1:-1:-1;;;;;40456:23:1;;40480:4;40456:29;;;;;;;;;;;;;-1:-1:-1;;;;;40456:29:1;-1:-1:-1;;;;;40456:29:1;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40456:29:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;40456:29:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;40456:29:1;;-1:-1:-1;40500:9:1;40496:341;40519:10;40515:1;:14;40496:341;;;40716:12;;:32;;;-1:-1:-1;;;40716:32:1;;-1:-1:-1;;;;;40716:32:1;;;;;;;;;;;;;;;:12;;;;;:23;;:32;;;;;;;;;;;;;;:12;:32;;;5:2:-1;;;;30:1;27;20:12;5:2;40716:32:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;40716:32:1;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;40716:32:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40716:32:1;;-1:-1:-1;40716:32:1;;-1:-1:-1;40716:32:1;-1:-1:-1;40716:32:1;-1:-1:-1;40716:32:1;;-1:-1:-1;40716:32:1;-1:-1:-1;40768:14:1;;;;;;;;40765:61;;;40809:1;-1:-1:-1;40802:8:1;;-1:-1:-1;;;;;;;;40802:8:1;40765:61;40531:3;;40496:341;;17838:3669;17939:4;17985:13;;;:5;:13;;;;;18027:23;;18017:33;;;18009:106;;;;-1:-1:-1;;;18009:106:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18135:14;;;;-1:-1:-1;;;18135:14:1;;;;18134:15;18126:43;;;;;-1:-1:-1;;;18126:43:1;;;;;;;;;;;;-1:-1:-1;;;18126:43:1;;;;;;;;;;;;;;;18204:9;18216:15;:6;12955:3;18216:15;:10;:15;:::i;:::-;18204:27;-1:-1:-1;18242:12:1;18257:16;18204:27;12994:1;18257:16;:8;:16;:::i;:::-;18242:31;-1:-1:-1;18284:13:1;18300:17;:4;13047:1;18300:17;:8;:17;:::i;:::-;18284:33;-1:-1:-1;18328:12:1;18343:16;:4;13100:1;18343:16;:8;:16;:::i;:::-;18328:31;-1:-1:-1;18370:12:1;18385:16;:6;18396:4;18385:16;:10;:16;:::i;:::-;18429:14;;;;18370:31;;-1:-1:-1;18429:27:1;;18370:31;18429:27;:18;:27;:::i;:::-;18412:14;;;:44;18542:10;18521:32;;;;:20;;;:32;;;;;;;;18517:141;;18590:10;18569:32;;;;:20;;;:32;;;;;;;;:39;;-1:-1:-1;;18569:39:1;18604:4;18569:39;;;;;;18623:21;;;:13;:21;;;;;;:23;;;;;;;18517:141;18841:10;18821:31;;;;:19;;;:31;;;;;;:44;;18857:7;18821:44;:35;:44;:::i;:::-;18807:10;18787:31;;;;:19;;;:31;;;;;:78;18901:8;;:12;18898:145;;18937:12;;18971:8;;18937:43;;;-1:-1:-1;;;18937:43:1;;18959:10;18937:43;;;;;;;;;;;;-1:-1:-1;;;;;18937:12:1;;;;:21;;:43;;;;;;;;;;;;;;;:12;;:43;;;5:2:-1;;;;30:1;27;20:12;5:2;18937:43:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18937:43:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18937:43:1;18929:71;;;;;-1:-1:-1;;;18929:71:1;;;;;;;;;;;;-1:-1:-1;;;18929:71:1;;;;;;;;;;;;;;;-1:-1:-1;;;;;19056:17:1;;19053:344;;19136:8;:18;;;19053:344;;;19244:14;:7;19256:1;19244:14;:11;:14;:::i;:::-;19233:8;:25;19281:12;;-1:-1:-1;;;;;19281:12:1;:25;19307:10;19319:3;19324:14;:7;19336:1;19324:14;:11;:14;:::i;:::-;19281:58;;;;;;;;;;;;;-1:-1:-1;;;;;19281:58:1;-1:-1:-1;;;;;19281:58:1;;;;;;-1:-1:-1;;;;;19281:58:1;-1:-1:-1;;;;;19281:58:1;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19281:58:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19281:58:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19281:58:1;19273:90;;;;;-1:-1:-1;;;19273:90:1;;;;;;;;;;;;-1:-1:-1;;;19273:90:1;;;;;;;;;;;;;;;19431:12;;19496:8;;-1:-1:-1;;;;;19431:12:1;;;;:25;;19457:10;;19477:4;;19484:21;;:7;;:21;:11;:21;:::i;:::-;19431:75;;;;;;;;;;;;;-1:-1:-1;;;;;19431:75:1;-1:-1:-1;;;;;19431:75:1;;;;;;-1:-1:-1;;;;;19431:75:1;-1:-1:-1;;;;;19431:75:1;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19431:75:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19431:75:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19431:75:1;19423:103;;;;;-1:-1:-1;;;19423:103:1;;;;;;;;;;;;-1:-1:-1;;;19423:103:1;;;;;;;;;;;;;;;19611:12;;19649:10;;19611:58;;;-1:-1:-1;;;19611:58:1;;19637:10;19611:58;;;;-1:-1:-1;;;;;19649:10:1;;;19611:58;;;;;;;;;;;;:12;;;;;:25;;:58;;;;;;;;;;;;;;:12;;:58;;;5:2:-1;;;;30:1;27;20:12;5:2;19611:58:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19611:58:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19611:58:1;19603:91;;;;;-1:-1:-1;;;19603:91:1;;;;;;;;;;;;-1:-1:-1;;;19603:91:1;;;;;;;;;;;;;;;19730:12;;:60;;;-1:-1:-1;;;19730:60:1;;19756:10;19730:60;;;;12884:42;19730:60;;;;;;;;;;;;-1:-1:-1;;;;;19730:12:1;;;;:25;;:60;;;;;;;;;;;;;;;:12;;:60;;;5:2:-1;;;;30:1;27;20:12;5:2;19730:60:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19730:60:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19730:60:1;19722:93;;;;;-1:-1:-1;;;19722:93:1;;;;;;;;;;;;-1:-1:-1;;;19722:93:1;;;;;;;;;;;;;;;19899:23;;19882:14;;;;:40;19879:1462;;;19980:23;;19961:14;;;;19938:20;;19961:43;;:14;:43;:18;:43;:::i;:::-;19938:66;-1:-1:-1;20059:44:1;20074:28;:7;19938:66;20074:28;:11;:28;:::i;:::-;20059:14;:44::i;:::-;20181:63;20197:28;:7;20209:15;20197:28;:11;:28;:::i;:::-;20227:4;:11;;;20240:3;20181:15;:63::i;:::-;20313:23;;20296:14;;;:40;20498:10;20313:23;20478:31;;;:19;;;:31;;;;;;:52;;20514:15;20478:52;:35;:52;:::i;:::-;20464:10;20444:31;;;;:19;;;:31;;;;;:86;20553:24;20564:6;20444:4;20553:10;:24::i;:::-;20545:65;;;;;-1:-1:-1;;;20545:65:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;20633:44;20641:4;:13;;;20656:15;20673:3;20633:7;:44::i;:::-;20625:89;;;;;-1:-1:-1;;;20625:89:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19879:1462;;;;20794:23;;20776:14;;;;:41;20773:568;;;20858:23;20873:7;20858:14;:23::i;:::-;20922:42;20938:7;20947:4;:11;;;20960:3;20922:15;:42::i;:::-;20987:24;20998:6;21006:4;20987:10;:24::i;:::-;20979:65;;;;;-1:-1:-1;;;20979:65:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;21067:30;21075:4;:13;;;21090:1;21093:3;21067:7;:30::i;:::-;21059:75;;;;;-1:-1:-1;;;21059:75:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20773:568;;;21223:23;21238:7;21223:14;:23::i;:::-;21287:42;21303:7;21312:4;:11;;;21325:3;21287:15;:42::i;:::-;21428:16;21437:6;21428:8;:16::i;:::-;21420:57;;;;;-1:-1:-1;;;21420:57:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21495:4:1;;17838:3669;-1:-1:-1;;;;;;;;;17838:3669:1:o;8194:348::-;-1:-1:-1;;;;;8270:21:1;;8262:67;;;;-1:-1:-1;;;8262:67:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8363:68;8386:6;8363:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8363:18:1;;:9;:18;;;;;;;;;;;;:68;;:22;:68;:::i;:::-;-1:-1:-1;;;;;8342:18:1;;:9;:18;;;;;;;;;;:89;8457:12;;:24;;8474:6;8457:24;:16;:24;:::i;:::-;8442:12;:39;8497:37;;;;;;;;8523:1;;-1:-1:-1;;;;;8497:37:1;;;;;;;;;;;;8194:348;;:::o;37101:219::-;37163:7;37188:29;;:::i;:::-;37220:12;;;;;;;;;-1:-1:-1;;;;;37220:12:1;-1:-1:-1;;;;;37220:23:1;;:25;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37220:25:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37220:25:1;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13:3;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;37274:13:1;;;;37101:219;-1:-1:-1;;37101:219:1:o;36663:430::-;36814:12;;:33;;;-1:-1:-1;;;36814:33:1;;;;;;;;;;;;;;;;36744:23;;;;-1:-1:-1;;;;;36814:12:1;;;;:27;;:33;;;;;:12;;:33;;;;;;;;:12;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;36814:33:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36814:33:1;;;;;;39:16:-1;36:1;17:17;2:54;101:4;36814:33:1;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;36814:33:1;;;;;;;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;36814:33:1;;421:4:-1;412:14;;;;36814:33:1;;;;;412:14:-1;36814:33:1;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;36814:33:1;;;;;;;;;;;36785:62;;36858:11;36872:9;:16;36858:30;;36899:28;36951:3;36930:25;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;36899:56:1;-1:-1:-1;36970:9:1;36966:98;36989:3;36985:1;:7;36966:98;;;37023:29;37039:9;37049:1;37039:12;;;;;;;;;;;;;;37023:15;:29::i;:::-;37013:4;37018:1;37013:7;;;;;;;;;;;;;;;;;:39;36994:3;;36966:98;;;-1:-1:-1;37081:4:1;36663:430;-1:-1:-1;;;;;36663:430:1:o;36091:346::-;36246:16;;36207:7;;;;36301:106;36324:3;36320:1;:7;36301:106;;;36357:38;36372:9;36382:1;36372:12;;;;;;;;;;;;;;36386:8;36357:14;:38::i;:::-;36348:47;;;;36329:3;;36301:106;;;-1:-1:-1;36424:5:1;36091:346;-1:-1:-1;;;;36091:346:1:o;3833:345:3:-;3919:7;4021:12;4014:5;4006:28;;;;-1:-1:-1;;;4006:28:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;4006:28:3;;4045:9;4061:1;4057;:5;;;;;;;3833:345;-1:-1:-1;;;;;3833:345:3:o;27948:290:1:-;28049:10;28019:21;28043:17;;;:5;:17;;;;;28097:23;;:35;;28125:6;28097:35;:27;:35;:::i;:::-;28071:61;;28201:16;;:29;;-1:-1:-1;;;;;;28201:29:1;28220:10;28201:29;;;-1:-1:-1;27948:290:1:o;28272:789::-;28378:13;28394:21;:19;:21::i;:::-;28439:10;28426:24;;;;:12;:24;;;;;;;;27:10:-1;;39:1;23:18;;;45:23;;28426:39:1;;;;;;;;;;28497:20;;;:12;:20;;;;;27:10:-1;;23:18;;;45:23;;28497:35:1;;;;;;;;28378:37;-1:-1:-1;28564:22:1;;:::i;:::-;28597:25;;;28686:12;;;;:21;;;28754:13;;;;:24;;;28809:10;28789:17;;;:30;;;-1:-1:-1;;;;;28830:20:1;;;:14;;;:20;;;28597:16;28861:17;;;:7;:17;;;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28861:25:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;28921:132;;;;;;;28861:25;;;;28921:132;;;;;;;;;28272:789;;;;;:::o;21576:1024::-;21716:23;;21698:14;;;;21668:4;;21698:41;21690:76;;;;;-1:-1:-1;;;21690:76:1;;;;;;;;;;;;-1:-1:-1;;;21690:76:1;;;;;;;;;;;;;;;21800:23;;21855;;;;21889:12;;:55;;;-1:-1:-1;;;21889:55:1;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21889:12:1;;;;:23;;:55;;;;;21777:20;;21889:55;;;;;;;;21777:20;21889:12;:55;;;5:2:-1;;;;30:1;27;20:12;5:2;21889:55:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;21976:12:1;;:38;;;-1:-1:-1;;;21976:38:1;;22008:4;21976:38;;;;;;21955:18;;-1:-1:-1;21976:45:1;;-1:-1:-1;22019:1:1;;-1:-1:-1;;;;;21976:12:1;;:23;;:38;;;;;;;;;;;;;;:12;:38;;;5:2:-1;;;;30:1;27;20:12;5:2;21976:38:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21976:38:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21976:38:1;;:45;:42;:45;:::i;:::-;21955:66;;22064:19;;:::i;:::-;22086:45;22110:4;22117:13;22086:15;:45::i;:::-;22234:13;;22216:15;;;:31;;;;;;-1:-1:-1;;22216:31:1;;;;;;;;;;22273:13;;22258:12;;;:28;22328:3;22297:28;;;:34;-1:-1:-1;;22374:21:1;-1:-1:-1;;;22374:21:1;;;22064:67;-1:-1:-1;22406:16:1;:14;:16::i;:::-;-1:-1:-1;22546:13:1;;22438:132;;;;;;;;;;;;;;;;22525:6;;22497:13;;22438:132;;;;;;;;;-1:-1:-1;22588:4:1;;21576:1024;-1:-1:-1;;;;;;21576:1024:1:o;16204:1551::-;16313:4;;;16390:13;16387:529;;-1:-1:-1;16431:17:1;;-1:-1:-1;16501:2:1;16387:529;;;16543:8;16555:1;16543:13;16540:376;;;-1:-1:-1;16584:17:1;;-1:-1:-1;16655:3:1;16540:376;;;16696:8;16708:1;16696:13;16693:223;;;-1:-1:-1;16737:17:1;;-1:-1:-1;16809:4:1;16693:223;;;16878:26;;;-1:-1:-1;;;16878:26:1;;;;;;;;;;;;-1:-1:-1;;;16878:26:1;;;;;;;;;;;;;;16693:223;16926:7;16936:15;:13;:15::i;:::-;16962:21;16986:9;;;:5;:9;;;;;17006:35;;;17060:23;;;:35;;;17106:14;;;:32;;;17157:11;;;:16;;;17184:13;;;:24;;;17219:13;;;:20;;-1:-1:-1;;17219:20:1;-1:-1:-1;;;17219:20:1;;;16926:25;;-1:-1:-1;17253:19:1;;17250:449;;17360:17;;;;:13;:17;;;;;;;;:19;;;;;;;;;17415:10;17394:32;;:20;;;:32;;;;;:39;;-1:-1:-1;;17394:39:1;;;;;;17482:19;;;:31;;;;;;:52;;17518:15;17482:52;:35;:52;:::i;:::-;17468:10;17448:31;;;;:19;;;:31;;;;;:86;17574:31;17589:15;17574:14;:31::i;:::-;17646:41;17662:15;17679:2;17683:3;17646:15;:41::i;:::-;17709:9;;;;:5;:9;;;;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17709:16:1;;;;;;;;;;;;-1:-1:-1;;17709:16:1;;;-1:-1:-1;;;17709:16:1;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17709:16:1;;;-1:-1:-1;;;17709:16:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17709:16:1;;;;;;;;;;;;;;16204:1551;-1:-1:-1;;;;;;16204:1551:1:o;10294:283::-;10360:4;;10393:15;:6;10404:3;10393:15;:10;:15;:::i;:::-;10382:26;-1:-1:-1;10436:10:1;10457:18;10436:10;10382:26;10457:5;:18::i;35687:396::-;35765:21;;:::i;:::-;-1:-1:-1;36039:36:1;;;;;;;;35528:28;35850:15;;;36039:36;;35480:2;35880:22;;;35930:15;36039:36;;;;35960:22;;;;;35652:26;36008:13;36039:36;;;;;35687:396::o;36445:210::-;36554:7;36621:6;:26;;;36597:6;:21;;;36586:8;:32;:61;;;;;;;36445:210;-1:-1:-1;;;36445:210:1:o;29094:153::-;29183:18;:20;;;;;;;;29094:153;:::o;38295:786::-;38384:13;;:::i;:::-;38778:12;;:34;;;-1:-1:-1;;;38778:34:1;;-1:-1:-1;;;;;38778:34:1;;;;;;;;;;;;;;;38415:14;;;;;;;;;;;;;;38778:12;;;:23;;:34;;;;;;;;;;;;;;;:12;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;38778:34:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38778:34:1;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;38778:34:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38832:241;;38778:34;38832:241;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38295:786;-1:-1:-1;;;;;;;;;;38295:786:1:o;29447:138::-;29531:13;:15;;;;;;;;29447:138;:::o;29279:135::-;29362:12;:14;;;;;;;;29279:135;:::o;7149:713::-;7231:6;-1:-1:-1;;;;;7256:21:1;;7248:65;;;;;-1:-1:-1;;;7248:65:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;7328:9;;;;7324:531;;7371:10;;7356:12;;:25;7353:491;;;7428:10;;7404:12;;:21;;7421:3;7404:21;:16;:21;:::i;:::-;:34;7401:303;;;7483:12;;7468:10;;:28;;;:14;:28;:::i;:::-;7534:10;;7519:12;:25;7567:9;:16;;-1:-1:-1;;7567:16:1;7579:4;7567:16;;;7462:34;-1:-1:-1;7401:303:1;;;7663:12;;:21;;7680:3;7663:21;:16;:21;:::i;:::-;7648:12;:36;7401:303;-1:-1:-1;;;;;7743:18:1;;:9;:18;;;;;;;;;;;:27;;7766:3;7743:27;:22;:27;:::i;:::-;-1:-1:-1;;;;;7722:18:1;;:9;:18;;;;;;;;;;;:48;;;;7794:34;;;;;;;7722:18;;:9;;7794:34;;;;;;;;;;7353:491;7149:713;;;:::o;12356:28491::-;;;;;;;;;-1:-1:-1;12356:28491:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12356:28491:1;;;;;;-1:-1:-1;;;;;12356:28491:1;;;;;:::o;:::-;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;-1:-1;12356:28491:1;;;-1:-1:-1;;12356:28491:1:o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
bzzr://ca62bd23ffec7202a2b3a5f9ecfb53da305133c5723869fed8a369af68340e93
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.
Add Token to MetaMask (Web3)