ETH Price: $2,466.51 (-7.95%)

Token

Wrapped Martkist (WMARTK)
 

Overview

Max Total Supply

444,207.23976614 WMARTK

Holders

36

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 8 Decimals)

Balance
343.6132434 WMARTK

Value
$0.00
0x0a3afcf9c5595b577e8bf5fb82a5f94c7c06edd8
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
WMART

Compiler Version
v0.7.4+commit.3f05b770

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-11-04
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.7.4;
pragma experimental ABIEncoderV2;

abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; 
        return msg.data;
    }
}


library Address {

    function isContract(address account) internal view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {

            if (returndata.length > 0) {

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}


library EnumerableSet {

    struct Set {
        bytes32[] _values;
        mapping (bytes32 => uint256) _indexes;
    }

    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    function _remove(Set storage set, bytes32 value) private returns (bool) {

        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) {

            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;
            bytes32 lastvalue = set._values[lastIndex];
            set._values[toDeleteIndex] = lastvalue;
            set._indexes[lastvalue] = toDeleteIndex + 1;
            set._values.pop();
            delete set._indexes[value];
            return true;
            
        } else {
            return false;
        }
    }

    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }

    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        require(set._values.length > index, "EnumerableSet: index out of bounds");
        return set._values[index];
    }

    struct AddressSet {
        Set _inner;
    }

    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(value)));
    }

    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(value)));
    }

    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(value)));
    }

    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint256(_at(set._inner, index)));
    }

    struct UintSet {
        Set _inner;
    }

    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }

    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }

    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }
}


library SafeMath {

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}


abstract contract AccessControl is Context {
    using EnumerableSet for EnumerableSet.AddressSet;
    using Address for address;

    struct RoleData {
        EnumerableSet.AddressSet members;
        bytes32 adminRole;
    }

    mapping (bytes32 => RoleData) private _roles;

    bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;
    bytes32 public constant MINTER_ROLE = "MINTER";

    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);

    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);

    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);

    function hasRole(bytes32 role, address account) public view returns (bool) {
        return _roles[role].members.contains(account);
    }

    function getRoleMemberCount(bytes32 role) public view returns (uint256) {
        return _roles[role].members.length();
    }

    function getRoleMember(bytes32 role, uint256 index) public view returns (address) {
        return _roles[role].members.at(index);
    }

    function getRoleAdmin(bytes32 role) public view returns (bytes32) {
        return _roles[role].adminRole;
    }

    function grantRole(bytes32 role, address account) public virtual {
        require(hasRole(_roles[DEFAULT_ADMIN_ROLE].adminRole, _msgSender()), "AccessControl: sender must be an admin to grant");
        require(!hasRole(_roles[DEFAULT_ADMIN_ROLE].adminRole, account), "AccessControl: admin cannot grant himself");
        require(DEFAULT_ADMIN_ROLE != role, "AccessControl: cannot grant adminRole");
        _grantRole(role, account);
    }
    
    function transferAdminRole(address account) public virtual {
        require(hasRole(_roles[DEFAULT_ADMIN_ROLE].adminRole, _msgSender()), "AccessControl: sender must be an admin to transfer");
        require(_roles[DEFAULT_ADMIN_ROLE].members.at(0) != account, "AccessControl: admin cannot transfer himself");
        _removeRole(DEFAULT_ADMIN_ROLE, _msgSender());
        _setupRole(DEFAULT_ADMIN_ROLE, account);
        _removeRole(MINTER_ROLE, _msgSender());
        _setupRole(MINTER_ROLE, account);
    }    

    function revokeRole(bytes32 role, address account) public virtual {
        require(hasRole(_roles[DEFAULT_ADMIN_ROLE].adminRole, _msgSender()), "AccessControl: sender must be an admin to revoke");
        require(!hasRole(_roles[DEFAULT_ADMIN_ROLE].adminRole, account), "AccessControl: admin cannot revoke himself");
        _revokeRole(role, account);
    }

    function renounceRole(bytes32 role, address account) public virtual {
        require(account == _msgSender(), "AccessControl: can only renounce roles for self");
        require(!hasRole(_roles[DEFAULT_ADMIN_ROLE].adminRole, account), "AccessControl: admin cannot renounce himself");
        _revokeRole(role, account);
    }

    function _setupRole(bytes32 role, address account) internal virtual {
        _grantRole(role, account);
    }

    function _removeRole(bytes32 role, address account) internal virtual {
        _revokeRole(role, account);
    }

    function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
        emit RoleAdminChanged(role, _roles[role].adminRole, adminRole);
        _roles[role].adminRole = adminRole;
    }

    function _grantRole(bytes32 role, address account) private {
        if (_roles[role].members.add(account)) {
            emit RoleGranted(role, account, _msgSender());
        }
    }

    function _revokeRole(bytes32 role, address account) private {
        if (_roles[role].members.remove(account)) {
            emit RoleRevoked(role, account, _msgSender());
        }
    }
}


interface IERC20 {

    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, uint256 amount) external returns (bool);

    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);

    event General(address account);
    
}

contract Pausable is Context {

    event Paused(address account);
    event Unpaused(address account);
    bool private _paused;

    constructor () {
        _paused = false;
    }

    function paused() public view returns (bool) {
        return _paused;
    }

    modifier whenNotPaused() {
        require(!_paused, "Pausable: paused");
        _;
    }

    modifier whenPaused() {
        require(_paused, "Pausable: not paused");
        _;
    }

    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}


contract WMART is Context, IERC20, AccessControl, Pausable {
    using SafeMath for uint256;
    using Address for address;

    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    struct stake {
        uint256 col1;
        uint256 prew1;
        uint256 arew1;
        uint256 rrew1;
        uint256 date1;
        uint256 col2;
        uint256 prew2;
        uint256 arew2;
        uint256 rrew2;
        uint256 date2;
        uint256 col3;
        uint256 prew3;
        uint256 arew3;
        uint256 rrew3;
        uint256 date3; 
        uint256 bal;
        address refAdd;
        uint256 refPaid;
        uint256 stakePaid;
    } 
    
    mapping(address =>  stake) private _stake;
    
    string private _name;
    string private _symbol;
    bool private _staking;
    uint8 private _decimals;
    uint256 private _totalSupply;
    uint256 private _maxSupply;
    uint256 private _maxTxLimit;
    uint256 private _t1Collateral;
    uint256 private _t2Collateral;
    uint256 private _t3Collateral;
    uint256 private _t1LockTime;
    uint256 private _t2LockTime;
    uint256 private _t3LockTime; 
    uint256 private _rewardDuration;    
    uint256 private _t1Reward;
    uint256 private _t2Reward;
    uint256 private _t3Reward;  
    uint256 private _totalStake;   
    uint256 private _refCom;
    uint256 private _refPaid;
    uint256 private _stakePaid;
  
    constructor () {
        _name = "Wrapped Martkist";
        _symbol = "WMARTK";
        _decimals = 8;
        _maxSupply = 3700000000000000;
        _maxTxLimit = 200;
        _t1Collateral = 100000000000;
        _t2Collateral = 900000000000;
        _t3Collateral = 1800000000000;
        _t1LockTime = 2592000;
        _t2LockTime = 7776000;
        _t3LockTime = 31536000;
        _rewardDuration = 86400;
        _t1Reward = 33000000; 
        _t2Reward = 444000000;
        _t3Reward = 2466000000;
        _staking = true;
        _refCom = 10;
        _setupRole(DEFAULT_ADMIN_ROLE, _msgSender());
        _setupRole(MINTER_ROLE, _msgSender());        
    }    

    function name() public view virtual returns (string memory) {
        return _name;
    }

    function symbol() public view virtual returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }
    
    function maxSupply() public view virtual returns (uint256) {
        return _maxSupply;
    }
    
    function isStaking() public view virtual returns (bool) {
       return _staking; 
    } 
    
    function maxTxLimit() public view virtual returns (uint256) {
       return _maxTxLimit; 
    }    

    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }
    
    function allBalance(address account) public view virtual returns (stake memory) { 
        stake memory stb;
        stb = _stake[account];
        stb.arew1 = (block.timestamp.sub(_stake[account].date1)).div(_rewardDuration).mul(_t1Reward).mul(_stake[account].col1.div(_t1Collateral));
        stb.arew2 = (block.timestamp.sub(_stake[account].date2)).div(_rewardDuration).mul(_t2Reward).mul(_stake[account].col2.div(_t2Collateral));
        stb.arew3 = (block.timestamp.sub(_stake[account].date3)).div(_rewardDuration).mul(_t3Reward).mul(_stake[account].col3.div(_t3Collateral));
        stb.date1 = _stake[account].date1.add(_t1LockTime);
        stb.date2 = _stake[account].date2.add(_t2LockTime);
        stb.date3 = _stake[account].date3.add(_t3LockTime);
        stb.bal = _balances[account];
        return stb;
    }   
    
    function stakeDetails() public view virtual returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256, uint256, uint256, uint256, uint256, bool) {
        return (_t1Collateral, _t1Reward, _t1LockTime, _t2Collateral, _t2Reward, _t2LockTime, _t3Collateral, _t3Reward, _t3LockTime, _rewardDuration, _totalStake, _staking);
    }
    
    function generalDetails() public view virtual returns (string memory, string memory, uint256, uint256, uint256, bool, uint256, uint256, uint256) {
        return (_name, _symbol, _decimals, _totalSupply, _maxSupply, paused(), _refCom, _refPaid, _stakePaid);
    }    
    
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }
    
    
    function stakingPause() public virtual {
        require(hasRole(DEFAULT_ADMIN_ROLE, _msgSender()), "ERC20: Only ADMIN can pause staking");
        require(_staking, "Staking: paused already");
        _staking = false;
        emit General(_msgSender());
    }

    function stakingUnpause() public virtual {
        require(hasRole(DEFAULT_ADMIN_ROLE, _msgSender()), "ERC20: Only ADMIN can unpause staking");
        require(!_staking, "Staking: unpaused already");
        _staking = true;
        emit General(_msgSender());
    }     
    
    function totalStakeBalance() public view virtual returns (uint256) {
       return _totalStake; 
    }  
    
    function generalConfig(uint256 no, uint256 value) public virtual {
        require(hasRole(DEFAULT_ADMIN_ROLE, _msgSender()), "Only ADMIN can change config");
        if(no == 1){
            require(value >= _totalSupply, "Value is less than _totalSupply");    
            _maxSupply = value;
        } else if(no == 2){
            _maxTxLimit = value;  
        } else if(no == 3){
            _refCom = value;
        }
        emit General(_msgSender());
    }
 
    function stakeConfig(uint256 no, uint256 value) public virtual {
        require(hasRole(DEFAULT_ADMIN_ROLE, _msgSender()), "Only ADMIN can change config");
        if(no == 1){    
            _t1Collateral = value;
        } else if(no == 2){
            _t1Reward = value; 
        } else if(no == 3){
            _t1LockTime = value;  
        } else if(no == 4){    
            _t2Collateral = value;
        } else if(no == 5){
            _t2Reward = value; 
        } else if(no == 6){
            _t2LockTime = value;  
        } else if(no == 7){    
            _t3Collateral = value;
        } else if(no == 8){
            _t3Reward = value; 
        } else if(no == 9){
            _t3LockTime = value;  
        } else if(no == 10){
            _rewardDuration = value; 
        }
        emit General(_msgSender());
    }    
    
    function increaseStake(uint256 tier, address refAdd) public virtual {
        require(tier < 4 && tier > 0, "Staking Tier Not Available");
        require(!paused(), "ERC20: Token paused by ADMIN");
        require(_staking, "Staking: paused");        
        uint256 stakeAmount = 0;
        uint256 stakeReward = 0;
        uint256 collateral = 0;
        uint256 reward = 0;
        uint256 preward = 0;
        uint256 diff = 0;
        uint256 refRew = 0;
        if(_stake[_msgSender()].refAdd == 0x0000000000000000000000000000000000000000 && refAdd != 0x0000000000000000000000000000000000000000 && refAdd != _msgSender()){
            _stake[_msgSender()].refAdd = refAdd;
        }         
        if(tier == 1){
            require(_stake[_msgSender()].col1 > 0, "Not Staking");
            collateral = _t1Collateral;
            reward = _t1Reward;
            preward = _stake[_msgSender()].prew1;
            stakeAmount = _stake[_msgSender()].col1;
            diff = (block.timestamp.sub(_stake[_msgSender()].date1)).div(_rewardDuration);
            refRew = _t1LockTime.div(_rewardDuration).mul(_t1Reward).mul(_refCom).div(100);
            _balances[_msgSender()] = _balances[_msgSender()].sub(collateral, "Stake amount exceeds balance");
            stakeReward = diff.mul(reward).mul(stakeAmount.div(collateral)).add(preward);
            uint256 tempReward = diff.mul(reward).mul(stakeAmount.add(collateral).div(collateral)).add(preward);
            require(_totalSupply.add(tempReward) <= _maxSupply, "Exceeds Max Supply, you can't stake more");
            if(_stake[_msgSender()].refAdd != 0x0000000000000000000000000000000000000000){
                _stake[_stake[_msgSender()].refAdd].rrew1 = _stake[_stake[_msgSender()].refAdd].rrew1.add(refRew);
            } 
            _stake[_msgSender()].date1 = block.timestamp;
            _stake[_msgSender()].col1 = _stake[_msgSender()].col1.add(collateral);
            _stake[_msgSender()].prew1 = stakeReward;            
        } else if(tier == 2){
            require(_stake[_msgSender()].col2 > 0, "Not Staking");
            collateral = _t2Collateral;
            reward = _t2Reward; 
            preward = _stake[_msgSender()].prew1;
            stakeAmount = _stake[_msgSender()].col2;
            diff = (block.timestamp.sub(_stake[_msgSender()].date2)).div(_rewardDuration);
            refRew = _t2LockTime.div(_rewardDuration).mul(_t2Reward).mul(_refCom).div(100);
            _balances[_msgSender()] = _balances[_msgSender()].sub(collateral, "Stake amount exceeds balance");
            stakeReward = diff.mul(reward).mul(stakeAmount.div(collateral)).add(preward);
            uint256 tempReward = diff.mul(reward).mul(stakeAmount.add(collateral).div(collateral)).add(preward);
            require(_totalSupply.add(tempReward) <= _maxSupply, "Exceeds Max Supply, you can't stake more");    
            if(_stake[_msgSender()].refAdd != 0x0000000000000000000000000000000000000000){
                _stake[_stake[_msgSender()].refAdd].rrew2 = _stake[_stake[_msgSender()].refAdd].rrew2.add(refRew);
            } 
            _stake[_msgSender()].date2 = block.timestamp;
            _stake[_msgSender()].col2 = _stake[_msgSender()].col2.add(collateral);
            _stake[_msgSender()].prew2 = stakeReward;            
        } else if(tier == 3){
            require(_stake[_msgSender()].col3 > 0, "Not Staking");
            collateral = _t3Collateral;
            reward = _t3Reward; 
            preward = _stake[_msgSender()].prew1;
            stakeAmount = _stake[_msgSender()].col3;
            diff = (block.timestamp.sub(_stake[_msgSender()].date3)).div(_rewardDuration);
            refRew = _t3LockTime.div(_rewardDuration).mul(_t3Reward).mul(_refCom).div(100);
            _balances[_msgSender()] = _balances[_msgSender()].sub(collateral, "Stake amount exceeds balance");
            stakeReward = diff.mul(reward).mul(stakeAmount.div(collateral)).add(preward);
            uint256 tempReward = diff.mul(reward).mul(stakeAmount.add(collateral).div(collateral)).add(preward);
            require(_totalSupply.add(tempReward) <= _maxSupply, "Exceeds Max Supply, you can't stake more"); 
            if(_stake[_msgSender()].refAdd != 0x0000000000000000000000000000000000000000){
                _stake[_stake[_msgSender()].refAdd].rrew3 = _stake[_stake[_msgSender()].refAdd].rrew3.add(refRew);
            }
            _stake[_msgSender()].date3 = block.timestamp;
            _stake[_msgSender()].col3 = _stake[_msgSender()].col3.add(collateral);
            _stake[_msgSender()].prew3 = stakeReward;            
        } 
        if(_stake[_msgSender()].refAdd != 0x0000000000000000000000000000000000000000){
            _stake[_stake[_msgSender()].refAdd].refPaid = _stake[_stake[_msgSender()].refAdd].refPaid.add(refRew);
            _refPaid = _refPaid.add(refRew);
        }        
        _totalStake = _totalStake.add(collateral);
        emit Transfer(_msgSender(), address(0), collateral);
    }
    
    function claimStake(uint256 tier) public virtual {
        require(!paused(), "ERC20: Token paused by ADMIN");
        require(tier < 4 && tier > 0, "Staking Tier Not Available");
        uint256 stakeAmount = 0;
        uint256 stakeReward = 0;
        uint256 collateral = 0;
        uint256 reward = 0;
        uint256 preward = 0;
        uint256 diff = 0;
        uint256 locktime = 0;
        uint256 rreward = 0;
        if(tier == 1){
            require(_stake[_msgSender()].col1 > 0, "Not Staking");
            require(block.timestamp >= (_stake[_msgSender()].date1 + locktime), "Stake claim date not reached");
            collateral = _t1Collateral;
            reward = _t1Reward;
            preward = _stake[_msgSender()].prew1;
            stakeAmount = _stake[_msgSender()].col1;
            locktime = _t1LockTime;
            diff = (block.timestamp.sub(_stake[_msgSender()].date1)).div(_rewardDuration);
            rreward = _stake[_msgSender()].rrew1;
            _stake[_msgSender()].rrew1 = 0;
            _stake[_msgSender()].col1 = 0;
            _stake[_msgSender()].date1 = 0;
            _stake[_msgSender()].prew1 = 0;            
        } else if(tier == 2){
            require(_stake[_msgSender()].col2 > 0, "Not Staking");
            require(block.timestamp >= (_stake[_msgSender()].date2 + locktime), "Stake claim date not reached");
            collateral = _t2Collateral;
            reward = _t2Reward; 
            preward = _stake[_msgSender()].prew1;
            stakeAmount = _stake[_msgSender()].col2;
            locktime = _t2LockTime;
            diff = (block.timestamp.sub(_stake[_msgSender()].date2)).div(_rewardDuration);
            rreward = _stake[_msgSender()].rrew2;
            _stake[_msgSender()].rrew1 = 0;
            _stake[_msgSender()].col2 = 0;
            _stake[_msgSender()].date2 = 0;
            _stake[_msgSender()].prew2 = 0;            
        } else if(tier == 3){
            require(_stake[_msgSender()].col3 > 0, "Not Staking");
            require(block.timestamp >= (_stake[_msgSender()].date3 + locktime), "Stake claim date not reached");
            collateral = _t3Collateral;
            reward = _t3Reward; 
            preward = _stake[_msgSender()].prew1;
            stakeAmount = _stake[_msgSender()].col3;
            locktime = _t3LockTime;
            diff = (block.timestamp.sub(_stake[_msgSender()].date3)).div(_rewardDuration);
            rreward = _stake[_msgSender()].rrew3;
            _stake[_msgSender()].rrew1 = 0;
            _stake[_msgSender()].col3 = 0;
            _stake[_msgSender()].date3 = 0;
            _stake[_msgSender()].prew3 = 0;            
        }
        stakeReward = diff.mul(reward).mul(stakeAmount.div(collateral)).add(preward).add(rreward);
        if((_totalSupply.add(stakeReward)) > _maxSupply){
            stakeReward = _maxSupply.sub(_totalSupply);
        }
        if(stakeReward.sub(rreward) > 0){
            _stake[_msgSender()].stakePaid = _stake[_msgSender()].stakePaid.add(stakeReward.sub(rreward));
            _stakePaid = _stakePaid.add(stakeReward);
        }
        _totalSupply = _totalSupply.add(stakeReward);
        _balances[_msgSender()] = _balances[_msgSender()].add(stakeAmount.add(stakeReward));
        _totalStake = _totalStake.sub(stakeAmount);        
        emit Transfer(address(0), _msgSender(), stakeAmount.add(stakeReward));
    }    

    function startStake(uint256 tier, address refAdd) public virtual {
        require(tier < 4 && tier > 0, "Staking Tier Not Available");
        require(!paused(), "ERC20: Token paused by ADMIN");
        require(_staking, "Staking: paused");        
        uint256 collateral = 0;
        uint256 tempReward = 0;
        uint256 refRew = 0;
        if(_stake[_msgSender()].refAdd == 0x0000000000000000000000000000000000000000 && refAdd != 0x0000000000000000000000000000000000000000 && refAdd != _msgSender()){
            _stake[_msgSender()].refAdd = refAdd;
        }        
        if(tier == 1){
            require(!(_stake[_msgSender()].col1 > 0), "Already Staking, Use increaseStake");
            collateral = _t1Collateral;
            tempReward = _t1LockTime.div(_rewardDuration).mul(_t1Reward);
            refRew = tempReward.mul(_refCom).div(100);
            _balances[_msgSender()] = _balances[_msgSender()].sub(collateral, "Stake amount exceeds balance");
            require(_totalSupply.add(tempReward) <= _maxSupply, "Exceeds Max Supply, you can't stake more");  
            if(_stake[_msgSender()].refAdd != 0x0000000000000000000000000000000000000000){
                _stake[_stake[_msgSender()].refAdd].rrew1 = _stake[_stake[_msgSender()].refAdd].rrew1.add(refRew);
                _refPaid = _refPaid.add(refRew);
            }
            _stake[_msgSender()].date1 = block.timestamp; 
            _stake[_msgSender()].col1 = collateral;            
        } else if(tier == 2){
            require(!(_stake[_msgSender()].col2 > 0), "Already Staking, Use increaseStake");
            collateral = _t2Collateral;
            tempReward = _t2LockTime.div(_rewardDuration).mul(_t2Reward);
            refRew = tempReward.mul(_refCom).div(100);
            _balances[_msgSender()] = _balances[_msgSender()].sub(collateral, "Stake amount exceeds balance");
            require(_totalSupply.add(tempReward) <= _maxSupply, "Exceeds Max Supply, you can't stake more");
            if(_stake[_msgSender()].refAdd != 0x0000000000000000000000000000000000000000){
                _stake[_stake[_msgSender()].refAdd].rrew2 = _stake[_stake[_msgSender()].refAdd].rrew2.add(refRew);
                _refPaid = _refPaid.add(refRew);
            }  
            _stake[_msgSender()].date2 = block.timestamp; 
            _stake[_msgSender()].col2 = collateral;            
        } else if(tier == 3){
            require(!(_stake[_msgSender()].col3 > 0), "Already Staking, Use increaseStake");
            collateral = _t3Collateral;
            tempReward = _t3LockTime.div(_rewardDuration).mul(_t3Reward);
            refRew = tempReward.mul(_refCom).div(100);
            _balances[_msgSender()] = _balances[_msgSender()].sub(collateral, "Stake amount exceeds balance");
            require(_totalSupply.add(tempReward) <= _maxSupply, "Exceeds Max Supply, you can't stake more");  
            if(_stake[_msgSender()].refAdd != 0x0000000000000000000000000000000000000000){
                _stake[_stake[_msgSender()].refAdd].rrew3 = _stake[_stake[_msgSender()].refAdd].rrew3.add(refRew);
                _refPaid = _refPaid.add(refRew);
            } 
            _stake[_msgSender()].date3 = block.timestamp; 
            _stake[_msgSender()].col3 = collateral;            
        }
        if(_stake[_msgSender()].refAdd != 0x0000000000000000000000000000000000000000){
            _stake[_stake[_msgSender()].refAdd].refPaid = _stake[_stake[_msgSender()].refAdd].refPaid.add(refRew);
            _refPaid = _refPaid.add(refRew);
        }        
        _totalStake = _totalStake.add(collateral);
        emit Transfer(_msgSender(), address(0), collateral);
    }

    
	function transferMulti(address[] memory to, uint256[] memory amount) public virtual {
	    uint256 sum_ = 0;
	    require(!paused(), "ERC20: Token paused by ADMIN");
        require(_msgSender() != address(0), "Transfer from the zero address");
		require(to.length == amount.length, "Address array length not equal to value");
		require(to.length <= _maxTxLimit, "Payout list greater than _maxTxLimit");
        for (uint8 g = 0; g < to.length; g++) {
            require(to[g] != address(0), "Transfer to the zero address");
            sum_ += amount[g];            
        }		
        require(_balances[_msgSender()] >= sum_, "Transfer amount exceeds balance");
		for (uint8 i = 0; i < to.length; i++) {
		    _transfer(_msgSender(), to[i], amount[i]);
		}
	}	
	
	function transferMultiFrom(address sender, address[] memory to, uint256[] memory amount) public virtual {
	    uint256 sum_ = 0;
	    require(!paused(), "ERC20: Token paused by ADMIN");
        require(sender != address(0), "Transfer from the zero address");
		require(to.length == amount.length, "Address array length not equal to amount");
		require(to.length <= _maxTxLimit, "Payout list greater than _maxTxLimit");
        for (uint8 g = 0; g < to.length; g++) {
            require(to[g] != address(0), "Transfer to the zero address");
            sum_ += amount[g];
        }		
        require(_balances[sender] >= sum_, "Transfer amount exceeds balance");
        require(_allowances[sender][_msgSender()] >= sum_, "Transfer amount exceeds allowance");
		for (uint8 i = 0; i < to.length; i++) {
            _transfer(sender, to[i], amount[i]);
            _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount[i], "ERC20: transfer amount exceeds allowance"));
		}
	}
	
    function mint(address to, uint256 amount) public virtual {
        require(hasRole(MINTER_ROLE, _msgSender()), "ERC20: Only MINTER can Mint");
        require((_totalSupply.add(amount)) <= _maxSupply, "Exceeds Max Supply");
        _mint(to, amount);
    }
    
    function mintMulti(address[] memory to, uint256[] memory amount) public virtual {
        uint256 sum_ = 0;
        require(!paused(), "ERC20: Token paused by ADMIN");        
        require(hasRole(MINTER_ROLE, _msgSender()), "ERC20: Only MINTER can Mint");
		require(to.length == amount.length, "Address array length not equal to amount");
		require(to.length <= _maxTxLimit, "Payout list greater than _maxTxLimit");        
        for (uint8 g = 0; g < to.length; g++) {
            require(to[g] != address(0), "ERC20: mint to the zero address");
            sum_ += amount[g];
        }
        require((_totalSupply.add(sum_)) <= _maxSupply, "Exceeds Max Supply");
		for (uint8 i = 0; i < to.length; i++) {
		    _mint(to[i], amount[i]);
		}        
    }    
    
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }

    function burnFrom(address account, uint256 amount) public virtual {
        uint256 decreasedAllowance = allowance(account, _msgSender()).sub(amount, "ERC20: burn amount exceeds allowance");
        _approve(account, _msgSender(), decreasedAllowance);
        _burn(account, amount);
    }  
    
    function burnMultiFrom(address[] memory account, uint256[] memory amount) public virtual {
        require(!paused(), "ERC20: Token paused by ADMIN");
		require(account.length == amount.length, "Address array length not equal to amount");
		require(account.length <= _maxTxLimit, "Payout list greater than _maxTxLimit");  
        for (uint8 g = 0; g < account.length; g++) {
            require(account[g] != address(0), "ERC20: burn from the zero address");
            require(_balances[account[g]] >= amount[g], "ERC20: burn amount exceeds balance");
            require(_allowances[account[g]][_msgSender()] >= amount[g], "Transfer amount exceeds allowance");
        }
		for (uint8 i = 0; i < account.length; i++) {
            uint256 decreasedAllowance = allowance(account[i], _msgSender()).sub(amount[i], "ERC20: burn amount exceeds allowance");
            _approve(account[i], _msgSender(), decreasedAllowance);
            _burn(account[i], amount[i]);
		}          
    }     
    
    function pause() public virtual {
        require(hasRole(DEFAULT_ADMIN_ROLE, _msgSender()), "ERC20: Only ADMIN can pause transfer");
        _pause();
    }

    function unpause() public virtual {
        require(hasRole(DEFAULT_ADMIN_ROLE, _msgSender()), "ERC20: Only ADMIN can unpause transfer");
        _unpause();
    }    

    function _transfer(address sender, address recipient, uint256 amount) internal virtual {
        require(!paused(), "ERC20: Token paused by ADMIN");
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(!paused(), "ERC20: Token paused by ADMIN");
        require(account != address(0), "ERC20: mint to the zero address");
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(!paused(), "ERC20: Token paused by ADMIN");
        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);
    }

    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(!paused(), "ERC20: Token paused by ADMIN");
        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);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"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":"address","name":"account","type":"address"}],"name":"General","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","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":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINTER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"allBalance","outputs":[{"components":[{"internalType":"uint256","name":"col1","type":"uint256"},{"internalType":"uint256","name":"prew1","type":"uint256"},{"internalType":"uint256","name":"arew1","type":"uint256"},{"internalType":"uint256","name":"rrew1","type":"uint256"},{"internalType":"uint256","name":"date1","type":"uint256"},{"internalType":"uint256","name":"col2","type":"uint256"},{"internalType":"uint256","name":"prew2","type":"uint256"},{"internalType":"uint256","name":"arew2","type":"uint256"},{"internalType":"uint256","name":"rrew2","type":"uint256"},{"internalType":"uint256","name":"date2","type":"uint256"},{"internalType":"uint256","name":"col3","type":"uint256"},{"internalType":"uint256","name":"prew3","type":"uint256"},{"internalType":"uint256","name":"arew3","type":"uint256"},{"internalType":"uint256","name":"rrew3","type":"uint256"},{"internalType":"uint256","name":"date3","type":"uint256"},{"internalType":"uint256","name":"bal","type":"uint256"},{"internalType":"address","name":"refAdd","type":"address"},{"internalType":"uint256","name":"refPaid","type":"uint256"},{"internalType":"uint256","name":"stakePaid","type":"uint256"}],"internalType":"struct WMART.stake","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"account","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"burnMultiFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tier","type":"uint256"}],"name":"claimStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"no","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"generalConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"generalDetails","outputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"string","name":"","type":"string"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getRoleMember","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleMemberCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tier","type":"uint256"},{"internalType":"address","name":"refAdd","type":"address"}],"name":"increaseStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isStaking","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"to","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"mintMulti","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"no","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"stakeConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakeDetails","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingUnpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tier","type":"uint256"},{"internalType":"address","name":"refAdd","type":"address"}],"name":"startStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStakeBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"transferAdminRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"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"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"to","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"transferMulti","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address[]","name":"to","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"transferMultiFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b506001805460ff191690556040805180820190915260108082526f15dc985c1c19590813585c9d1ada5cdd60821b602090920191825262000055916005916200024e565b5060408051808201909152600680825265574d4152544b60d01b60209092019182526200008391816200024e565b5060078054660d252161ab400060095560c8600a90815564174876e800600b5564d18c2e2800600c556501a3185c5000600d5562278d00600e556276a700600f556301e13380601055620151806011556301f78a40601255631a76e7006013556392fc2c80601455600161ff00199092166108001760ff1916919091179091556016556200011c6000620001166200013a565b6200013e565b620001346526a4a72a22a960d11b620001166200013a565b620002fa565b3390565b6200014a82826200014e565b5050565b60008281526020818152604090912062000173918390620039c0620001c7821b17901c565b156200014a57620001836200013a565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000620001de836001600160a01b038416620001e7565b90505b92915050565b6000620001f5838362000236565b6200022d57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620001e1565b506000620001e1565b60009081526001919091016020526040902054151590565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620002865760008555620002d1565b82601f10620002a157805160ff1916838001178555620002d1565b82800160010185558215620002d1579182015b82811115620002d1578251825591602001919060010190620002b4565b50620002df929150620002e3565b5090565b5b80821115620002df5760008155600101620002e4565b615441806200030a6000396000f3fe608060405234801561001057600080fd5b506004361061027f5760003560e01c806370a082311161015c578063a457c2d7116100ce578063cc64133511610087578063cc64133514610555578063d539139314610568578063d547741f14610570578063d5abeb0114610583578063dd62ed3e1461058b578063f3bcbf631461059e5761027f565b8063a457c2d7146104d9578063a9059cbb146104ec578063aa339b38146104ff578063ada8f9191461051c578063ca15c8731461052f578063ca7752c9146105425761027f565b80638a61b027116101205780638a61b027146104635780639010d07c1461047657806391d148541461049657806395d89b41146104a9578063a1813fac146104b1578063a217fddf146104d15761027f565b806370a082311461041a57806376dc82941461042d57806379cc6790146104405780638036d590146104535780638456cb591461045b5761027f565b806336568abe116101f557806342966c68116101b957806342966c68146103c957806344c7d6ef146103dc57806346e4959d146103ef578063532a92951461040257806355455df21461040a5780635c975abb146104125761027f565b806336568abe1461037557806339509351146103885780633bb2047f1461039b5780633f4ba83a146103ae57806340c10f19146103b65761027f565b806323b872dd1161024757806323b872dd1461030c578063248a9ca31461031f5780632f2ff15d14610332578063313ce5671461034557806334949cc11461035a57806335bce6e4146103625761027f565b806306fdde0314610284578063095ea7b3146102a25780630e522099146102c25780630e75a63a146102d757806318160ddd146102f7575b600080fd5b61028c6105a6565b60405161029991906145cc565b60405180910390f35b6102b56102b0366004614467565b61063c565b60405161029991906145b8565b6102d56102d036600461452b565b61065a565b005b6102df610776565b6040516102999c9b9a9998979695949392919061522c565b6102ff6107ab565b60405161029991906145c3565b6102b561031a3660046143bb565b6107b1565b6102ff61032d3660046144f1565b610838565b6102d5610340366004614509565b610850565b61034d6108fa565b6040516102999190615282565b6102ff610908565b6102d5610370366004614490565b61090e565b6102d5610383366004614509565b610ad2565b6102b5610396366004614467565b610b53565b6102d56103a93660046143f6565b610ba1565b6102d5610ddd565b6102d56103c4366004614467565b610e10565b6102d56103d73660046144f1565b610e79565b6102d56103ea3660046144f1565b610e8d565b6102d56103fd366004614490565b61178d565b6102d5611925565b6102d56119ac565b6102b5611a18565b6102ff61042836600461436f565b611a21565b6102d561043b36600461452b565b611a3c565b6102d561044e366004614467565b611ad2565b6102ff611b27565b6102d5611b2d565b6102d5610471366004614509565b611b5e565b61048961048436600461452b565b6124bd565b60405161029991906145a4565b6102b56104a4366004614509565b6124dc565b61028c6124f4565b6104c46104bf36600461436f565b612555565b6040516102999190615151565b6102ff612823565b6102b56104e7366004614467565b612828565b6102b56104fa366004614467565b612890565b6105076128a4565b604051610299999897969594939291906145df565b6102d561052a36600461436f565b612a1b565b6102ff61053d3660046144f1565b612b07565b6102d5610550366004614509565b612b1e565b6102d5610563366004614490565b61365b565b6102ff6138fa565b6102d561057e366004614509565b613907565b6102ff613986565b6102ff610599366004614389565b61398c565b6102b56139b7565b60058054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106325780601f1061060757610100808354040283529160200191610632565b820191906000526020600020905b81548152906001019060200180831161061557829003601f168201915b5050505050905090565b60006106506106496139d5565b84846139d9565b5060015b92915050565b61066760006104a46139d5565b61068c5760405162461bcd60e51b815260040161068390614b67565b60405180910390fd5b816001141561069f57600b819055610746565b81600214156106b2576012819055610746565b81600314156106c557600e819055610746565b81600414156106d857600c819055610746565b81600514156106eb576013819055610746565b81600614156106fe57600f819055610746565b816007141561071157600d819055610746565b8160081415610724576014819055610746565b8160091415610737576010819055610746565b81600a14156107465760118190555b60008051602061531b83398151915261075d6139d5565b60405161076a91906145a4565b60405180910390a15050565b600b54601254600e54600c54601354600f54600d5460145460105460115460155460075460ff16909192939495969798999a9b565b60085490565b60006107be848484613ab2565b61082e846107ca6139d5565b6108298560405180606001604052806028815260200161537b602891396001600160a01b038a166000908152600360205260408120906108086139d5565b6001600160a01b031681526020810191909152604001600020549190613bcf565b6139d9565b5060019392505050565b6000818152602081905260409020600201545b919050565b600080805260205260008051602061535b83398151915254610874906104a46139d5565b6108905760405162461bcd60e51b81526004016106839061474a565b600080805260205260008051602061535b833981519152546108b290826124dc565b156108cf5760405162461bcd60e51b815260040161068390614fc2565b816108ec5760405162461bcd60e51b815260040161068390614f58565b6108f68282613bfb565b5050565b600754610100900460ff1690565b60155490565b6000610918611a18565b156109355760405162461bcd60e51b815260040161068390614d38565b600061093f6139d5565b6001600160a01b031614156109665760405162461bcd60e51b815260040161068390615094565b81518351146109875760405162461bcd60e51b8152600401610683906149f7565b600a54835111156109aa5760405162461bcd60e51b815260040161068390614d6f565b60005b83518160ff161015610a2a5760006001600160a01b0316848260ff16815181106109d357fe5b60200260200101516001600160a01b03161415610a025760405162461bcd60e51b81526004016106839061505d565b828160ff1681518110610a1157fe5b60200260200101518201915080806001019150506109ad565b508060026000610a386139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020541015610a775760405162461bcd60e51b815260040161068390614bea565b60005b83518160ff161015610acc57610ac4610a916139d5565b858360ff1681518110610aa057fe5b6020026020010151858460ff1681518110610ab757fe5b6020026020010151613ab2565b600101610a7a565b50505050565b610ada6139d5565b6001600160a01b0316816001600160a01b031614610b0a5760405162461bcd60e51b8152600401610683906150cb565b600080805260205260008051602061535b83398151915254610b2c90826124dc565b15610b495760405162461bcd60e51b815260040161068390614a9f565b6108f68282613c64565b6000610650610b606139d5565b846108298560036000610b716139d5565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490613ccd565b6000610bab611a18565b15610bc85760405162461bcd60e51b815260040161068390614d38565b6001600160a01b038416610bee5760405162461bcd60e51b815260040161068390615094565b8151835114610c0f5760405162461bcd60e51b815260040161068390614c21565b600a5483511115610c325760405162461bcd60e51b815260040161068390614d6f565b60005b83518160ff161015610cb25760006001600160a01b0316848260ff1681518110610c5b57fe5b60200260200101516001600160a01b03161415610c8a5760405162461bcd60e51b81526004016106839061505d565b828160ff1681518110610c9957fe5b6020026020010151820191508080600101915050610c35565b506001600160a01b038416600090815260026020526040902054811115610ceb5760405162461bcd60e51b815260040161068390614bea565b6001600160a01b03841660009081526003602052604081208291610d0d6139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020541015610d4c5760405162461bcd60e51b81526004016106839061492f565b60005b83518160ff161015610dd657610d6e85858360ff1681518110610aa057fe5b610dce85610d7a6139d5565b610829868560ff1681518110610d8c57fe5b602002602001015160405180606001604052806028815260200161537b602891396001600160a01b038b166000908152600360205260408120906108086139d5565b600101610d4f565b5050505050565b610dea60006104a46139d5565b610e065760405162461bcd60e51b815260040161068390614cf2565b610e0e613cf2565b565b610e256526a4a72a22a960d11b6104a46139d5565b610e415760405162461bcd60e51b815260040161068390614a68565b600954600854610e519083613ccd565b1115610e6f5760405162461bcd60e51b815260040161068390614840565b6108f68282613d47565b610e8a610e846139d5565b82613e0e565b50565b610e95611a18565b15610eb25760405162461bcd60e51b815260040161068390614d38565b600481108015610ec25750600081115b610ede5760405162461bcd60e51b81526004016106839061486c565b600080600080600080600080886001141561113357600060046000610f016139d5565b6001600160a01b0316815260208101919091526040016000205411610f385760405162461bcd60e51b815260040161068390614f9d565b8160046000610f456139d5565b6001600160a01b03166001600160a01b031681526020019081526020016000206004015401421015610f895760405162461bcd60e51b815260040161068390614aeb565b600b549550601254945060046000610f9f6139d5565b6001600160a01b03166001600160a01b0316815260200190815260200160002060010154935060046000610fd16139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600001549750600e54915061103b601154611035600460006110116139d5565b6001600160a01b031681526020810191909152604001600020600401544290613eeb565b90613f2d565b9250600460006110496139d5565b6001600160a01b03166001600160a01b0316815260200190815260200160002060030154905060006004600061107d6139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600301819055506000600460006110b26139d5565b6001600160a01b0316815260208101919091526040016000908120919091556004816110dc6139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600401819055506000600460006111116139d5565b6001600160a01b031681526020810191909152604001600020600101556115df565b886002141561138b5760006004600061114a6139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600501541161118b5760405162461bcd60e51b815260040161068390614f9d565b81600460006111986139d5565b6001600160a01b03166001600160a01b0316815260200190815260200160002060090154014210156111dc5760405162461bcd60e51b815260040161068390614aeb565b600c5495506013549450600460006111f26139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600101549350600460006112246139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600501549750600f549150611288601154611035600460006112646139d5565b6001600160a01b031681526020810191909152604001600020600901544290613eeb565b9250600460006112966139d5565b6001600160a01b03166001600160a01b031681526020019081526020016000206008015490506000600460006112ca6139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600301819055506000600460006112ff6139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600501819055506000600460006113346139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600901819055506000600460006113696139d5565b6001600160a01b031681526020810191909152604001600020600601556115df565b88600314156115df576000600460006113a26139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600a0154116113e35760405162461bcd60e51b815260040161068390614f9d565b81600460006113f06139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600e0154014210156114345760405162461bcd60e51b815260040161068390614aeb565b600d54955060145494506004600061144a6139d5565b6001600160a01b03166001600160a01b031681526020019081526020016000206001015493506004600061147c6139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600a0154975060105491506114e0601154611035600460006114bc6139d5565b6001600160a01b031681526020810191909152604001600020600e01544290613eeb565b9250600460006114ee6139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600d015490506000600460006115226139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600301819055506000600460006115576139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600a018190555060006004600061158c6139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600e01819055506000600460006115c16139d5565b6001600160a01b031681526020810191909152604001600020600b01555b6116088161160286816115f28d8c613f2d565b6115fc898c613f6f565b90613f6f565b90613ccd565b965060095461162288600854613ccd90919063ffffffff16565b111561163a5760085460095461163791613eeb565b96505b60006116468883613eeb565b11156116c2576116886116598883613eeb565b600460006116656139d5565b6001600160a01b0316815260208101919091526040016000206012015490613ccd565b600460006116946139d5565b6001600160a01b031681526020810191909152604001600020601201556018546116be9088613ccd565b6018555b6008546116cf9088613ccd565b60085561170b6116df8989613ccd565b600260006116eb6139d5565b6001600160a01b0316815260208101919091526040016000205490613ccd565b600260006117176139d5565b6001600160a01b0316815260208101919091526040016000205560155461173e9089613eeb565b6015556117496139d5565b6001600160a01b031660006000805160206153c783398151915261176d8b8b613ccd565b60405161177a91906145c3565b60405180910390a3505050505050505050565b6000611797611a18565b156117b45760405162461bcd60e51b815260040161068390614d38565b6117c96526a4a72a22a960d11b6104a46139d5565b6117e55760405162461bcd60e51b815260040161068390614a68565b81518351146118065760405162461bcd60e51b815260040161068390614c21565b600a54835111156118295760405162461bcd60e51b815260040161068390614d6f565b60005b83518160ff1610156118a95760006001600160a01b0316848260ff168151811061185257fe5b60200260200101516001600160a01b031614156118815760405162461bcd60e51b81526004016106839061511a565b828160ff168151811061189057fe5b602002602001015182019150808060010191505061182c565b506009546008546118ba9083613ccd565b11156118d85760405162461bcd60e51b815260040161068390614840565b60005b83518160ff161015610acc5761191d848260ff16815181106118f957fe5b6020026020010151848360ff168151811061191057fe5b6020026020010151613d47565b6001016118db565b61193260006104a46139d5565b61194e5760405162461bcd60e51b815260040161068390614b22565b60075460ff16156119715760405162461bcd60e51b8152600401610683906147c7565b6007805460ff1916600117905560008051602061531b8339815191526119956139d5565b6040516119a291906145a4565b60405180910390a1565b6119b960006104a46139d5565b6119d55760405162461bcd60e51b815260040161068390614640565b60075460ff166119f75760405162461bcd60e51b815260040161068390614df4565b6007805460ff1916905560008051602061531b8339815191526119956139d5565b60015460ff1690565b6001600160a01b031660009081526002602052604090205490565b611a4960006104a46139d5565b611a655760405162461bcd60e51b815260040161068390614b67565b8160011415611a9a57600854811015611a905760405162461bcd60e51b815260040161068390614e2b565b6009819055610746565b8160021415611aad57600a819055610746565b816003141561074657601681905560008051602061531b83398151915261075d6139d5565b6000611b04826040518060600160405280602481526020016153a360249139611afd866105996139d5565b9190613bcf565b9050611b1883611b126139d5565b836139d9565b611b228383613e0e565b505050565b600a5490565b611b3a60006104a46139d5565b611b565760405162461bcd60e51b815260040161068390614f14565b610e0e613fa9565b600482108015611b6e5750600082115b611b8a5760405162461bcd60e51b81526004016106839061486c565b611b92611a18565b15611baf5760405162461bcd60e51b815260040161068390614d38565b60075460ff16611bd15760405162461bcd60e51b815260040161068390614ea7565b600080600060046000611be26139d5565b6001600160a01b03908116825260208201929092526040016000206010015416158015611c1757506001600160a01b03841615155b8015611c3c5750611c266139d5565b6001600160a01b0316846001600160a01b031614155b15611c83578360046000611c4e6139d5565b6001600160a01b039081168252602082019290925260400160002060100180546001600160a01b031916929091169190911790555b8460011415611ed657600060046000611c9a6139d5565b6001600160a01b031681526020810191909152604001600020541115611cd25760405162461bcd60e51b815260040161068390614708565b600b549250611cf46012546115fc601154600e54613f2d90919063ffffffff16565b9150611d10606461103560165485613f6f90919063ffffffff16565b9050611d46836040518060400160405280601c815260200160008051602061533b833981519152815250600260006108086139d5565b60026000611d526139d5565b6001600160a01b03168152602081019190915260400160002055600954600854611d7c9084613ccd565b1115611d9a5760405162461bcd60e51b815260040161068390614caa565b60046000611da66139d5565b6001600160a01b0390811682526020820192909252604001600020601001541615611e7657611e1d816004600060046000611ddf6139d5565b6001600160a01b0390811682526020808301939093526040918201600090812060100154909116845291830193909352910190206003015490613ccd565b6004600060046000611e2d6139d5565b6001600160a01b03908116825260208083019390935260409182016000908120601001549091168452918301939093529101902060030155601754611e729082613ccd565b6017555b4260046000611e836139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600401819055508260046000611eb76139d5565b6001600160a01b03168152602081019190915260400160002055612392565b846002141561213657600060046000611eed6139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600501541115611f2f5760405162461bcd60e51b815260040161068390614708565b600c549250611f516013546115fc601154600f54613f2d90919063ffffffff16565b9150611f6d606461103560165485613f6f90919063ffffffff16565b9050611fa3836040518060400160405280601c815260200160008051602061533b833981519152815250600260006108086139d5565b60026000611faf6139d5565b6001600160a01b03168152602081019190915260400160002055600954600854611fd99084613ccd565b1115611ff75760405162461bcd60e51b815260040161068390614caa565b600460006120036139d5565b6001600160a01b03908116825260208201929092526040016000206010015416156120d35761207a81600460006004600061203c6139d5565b6001600160a01b0390811682526020808301939093526040918201600090812060100154909116845291830193909352910190206008015490613ccd565b600460006004600061208a6139d5565b6001600160a01b039081168252602080830193909352604091820160009081206010015490911684529183019390935291019020600801556017546120cf9082613ccd565b6017555b42600460006120e06139d5565b6001600160a01b03166001600160a01b031681526020019081526020016000206009018190555082600460006121146139d5565b6001600160a01b03168152602081019190915260400160002060050155612392565b84600314156123925760006004600061214d6139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600a0154111561218f5760405162461bcd60e51b815260040161068390614708565b600d5492506121b16014546115fc601154601054613f2d90919063ffffffff16565b91506121cd606461103560165485613f6f90919063ffffffff16565b9050612203836040518060400160405280601c815260200160008051602061533b833981519152815250600260006108086139d5565b6002600061220f6139d5565b6001600160a01b031681526020810191909152604001600020556009546008546122399084613ccd565b11156122575760405162461bcd60e51b815260040161068390614caa565b600460006122636139d5565b6001600160a01b0390811682526020820192909252604001600020601001541615612333576122da81600460006004600061229c6139d5565b6001600160a01b039081168252602080830193909352604091820160009081206010015490911684529183019390935291019020600d015490613ccd565b60046000600460006122ea6139d5565b6001600160a01b039081168252602080830193909352604091820160009081206010015490911684529183019390935291019020600d015560175461232f9082613ccd565b6017555b42600460006123406139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600e018190555082600460006123746139d5565b6001600160a01b031681526020810191909152604001600020600a01555b6004600061239e6139d5565b6001600160a01b039081168252602082019290925260400160002060100154161561246e576124158160046000600460006123d76139d5565b6001600160a01b0390811682526020808301939093526040918201600090812060100154909116845291830193909352910190206011015490613ccd565b60046000600460006124256139d5565b6001600160a01b0390811682526020808301939093526040918201600090812060100154909116845291830193909352910190206011015560175461246a9082613ccd565b6017555b60155461247b9084613ccd565b60155560006124886139d5565b6001600160a01b03166000805160206153c7833981519152856040516124ae91906145c3565b60405180910390a35050505050565b60008281526020819052604081206124d59083614001565b9392505050565b60008281526020819052604081206124d5908361400d565b60068054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106325780601f1061060757610100808354040283529160200191610632565b61255d6141ea565b6125656141ea565b506001600160a01b038083166000818152600460208181526040808420815161026081018352815480825260018301548286015260028301549382019390935260038201546060820152818501546080820152600582015460a0820152600682015460c0820152600782015460e082015260088201546101008201526009820154610120820152600a820154610140820152600b80830154610160830152600c830154610180830152600d8301546101a0830152600e8301546101c0830152600f8301546101e0830152601083015490981661020082015260118201546102208201526012909101546102408201529554949093525261269e916126699190613f2d565b6012546011546001600160a01b038716600090815260046020819052604090912001546115fc92918391611035904290613eeb565b604080830191909152600c546001600160a01b038516600090815260046020529190912060050154612708916126d49190613f2d565b6013546011546001600160a01b0387166000908152600460205260409020600901546115fc92918391611035904290613eeb565b60e0820152600d546001600160a01b0384166000908152600460205260409020600a015461276e9161273a9190613f2d565b6014546011546001600160a01b0387166000908152600460205260409020600e01546115fc92918391611035904290613eeb565b610180820152600e546001600160a01b0384166000908152600460208190526040909120015461279d91613ccd565b6080820152600f546001600160a01b0384166000908152600460205260409020600901546127ca91613ccd565b6101208201526010546001600160a01b0384166000908152600460205260409020600e01546127f891613ccd565b6101c08201526001600160a01b03929092166000908152600260205260409020546101e08301525090565b600081565b60006106506128356139d5565b84610829856040518060600160405280602581526020016153e7602591396003600061285f6139d5565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190613bcf565b600061065061289d6139d5565b8484613ab2565b606080600080600080600080600060056006600760019054906101000a900460ff166008546009546128d4611a18565b6016546017546018548854604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152918b918301828280156129635780601f1061293857610100808354040283529160200191612963565b820191906000526020600020905b81548152906001019060200180831161294657829003601f168201915b50508b5460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152959e508d9450925084019050828280156129f15780601f106129c6576101008083540402835291602001916129f1565b820191906000526020600020905b8154815290600101906020018083116129d457829003601f168201915b505050505097508660ff169650985098509850985098509850985098509850909192939495969798565b600080805260205260008051602061535b83398151915254612a3f906104a46139d5565b612a5b5760405162461bcd60e51b81526004016106839061500b565b600080805260208190526001600160a01b03821690612a9b907fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb590614001565b6001600160a01b03161415612ac25760405162461bcd60e51b815260040161068390614b9e565b612ad46000612acf6139d5565b610b49565b612adf6000826108ec565b612af46526a4a72a22a960d11b612acf6139d5565b610e8a6526a4a72a22a960d11b826108ec565b600081815260208190526040812061065490614022565b600482108015612b2e5750600082115b612b4a5760405162461bcd60e51b81526004016106839061486c565b612b52611a18565b15612b6f5760405162461bcd60e51b815260040161068390614d38565b60075460ff16612b915760405162461bcd60e51b815260040161068390614ea7565b600080600080600080600060046000612ba86139d5565b6001600160a01b03908116825260208201929092526040016000206010015416158015612bdd57506001600160a01b03881615155b8015612c025750612bec6139d5565b6001600160a01b0316886001600160a01b031614155b15612c49578760046000612c146139d5565b6001600160a01b039081168252602082019290925260400160002060100180546001600160a01b031916929091169190911790555b8860011415612f4b57600060046000612c606139d5565b6001600160a01b0316815260208101919091526040016000205411612c975760405162461bcd60e51b815260040161068390614f9d565b600b549450601254935060046000612cad6139d5565b6001600160a01b03166001600160a01b0316815260200190815260200160002060010154925060046000612cdf6139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600001549650612d1a601154611035600460006110116139d5565b9150612d4460646110356016546115fc6012546115fc601154600e54613f2d90919063ffffffff16565b9050612d7a856040518060400160405280601c815260200160008051602061533b833981519152815250600260006108086139d5565b60026000612d866139d5565b6001600160a01b03168152602081019190915260400160002055612dbb83611602612db18a89613f2d565b6115fc8689613f6f565b95506000612dde84611602612dd4896110358d82613ccd565b6115fc878a613f6f565b9050600954612df882600854613ccd90919063ffffffff16565b1115612e165760405162461bcd60e51b815260040161068390614caa565b60046000612e226139d5565b6001600160a01b0390811682526020820192909252604001600020601001541615612ea457612e5b826004600060046000611ddf6139d5565b6004600060046000612e6b6139d5565b6001600160a01b039081168252602080830193909352604091820160009081206010015490911684529183019390935291019020600301555b4260046000612eb16139d5565b6001600160a01b03166001600160a01b0316815260200190815260200160002060040181905550612ee886600460006116eb6139d5565b60046000612ef46139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600001819055508660046000612f286139d5565b6001600160a01b031681526020810191909152604001600020600101555061357d565b886002141561326657600060046000612f626139d5565b6001600160a01b03166001600160a01b031681526020019081526020016000206005015411612fa35760405162461bcd60e51b815260040161068390614f9d565b600c549450601354935060046000612fb96139d5565b6001600160a01b03166001600160a01b0316815260200190815260200160002060010154925060046000612feb6139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600501549650613026601154611035600460006112646139d5565b915061305060646110356016546115fc6013546115fc601154600f54613f2d90919063ffffffff16565b9050613086856040518060400160405280601c815260200160008051602061533b833981519152815250600260006108086139d5565b600260006130926139d5565b6001600160a01b031681526020810191909152604001600020556130bd83611602612db18a89613f2d565b955060006130d684611602612dd4896110358d82613ccd565b90506009546130f082600854613ccd90919063ffffffff16565b111561310e5760405162461bcd60e51b815260040161068390614caa565b6004600061311a6139d5565b6001600160a01b039081168252602082019290925260400160002060100154161561319c5761315382600460006004600061203c6139d5565b60046000600460006131636139d5565b6001600160a01b039081168252602080830193909352604091820160009081206010015490911684529183019390935291019020600801555b42600460006131a96139d5565b6001600160a01b03166001600160a01b031681526020019081526020016000206009018190555061320386600460006131e06139d5565b6001600160a01b0316815260208101919091526040016000206005015490613ccd565b6004600061320f6139d5565b6001600160a01b03166001600160a01b031681526020019081526020016000206005018190555086600460006132436139d5565b6001600160a01b031681526020810191909152604001600020600601555061357d565b886003141561357d5760006004600061327d6139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600a0154116132be5760405162461bcd60e51b815260040161068390614f9d565b600d5494506014549350600460006132d46139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600101549250600460006133066139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600a01549650613341601154611035600460006114bc6139d5565b915061336b60646110356016546115fc6014546115fc601154601054613f2d90919063ffffffff16565b90506133a1856040518060400160405280601c815260200160008051602061533b833981519152815250600260006108086139d5565b600260006133ad6139d5565b6001600160a01b031681526020810191909152604001600020556133d883611602612db18a89613f2d565b955060006133f184611602612dd4896110358d82613ccd565b905060095461340b82600854613ccd90919063ffffffff16565b11156134295760405162461bcd60e51b815260040161068390614caa565b600460006134356139d5565b6001600160a01b03908116825260208201929092526040016000206010015416156134b75761346e82600460006004600061229c6139d5565b600460006004600061347e6139d5565b6001600160a01b039081168252602080830193909352604091820160009081206010015490911684529183019390935291019020600d01555b42600460006134c46139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600e018190555061351e86600460006134fb6139d5565b6001600160a01b031681526020810191909152604001600020600a015490613ccd565b6004600061352a6139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600a0181905550866004600061355e6139d5565b6001600160a01b031681526020810191909152604001600020600b0155505b600460006135896139d5565b6001600160a01b039081168252602082019290925260400160002060100154161561361b576135c28160046000600460006123d76139d5565b60046000600460006135d26139d5565b6001600160a01b039081168252602080830193909352604091820160009081206010015490911684529183019390935291019020601101556017546136179082613ccd565b6017555b6015546136289086613ccd565b60155560006136356139d5565b6001600160a01b03166000805160206153c78339815191528760405161177a91906145c3565b613663611a18565b156136805760405162461bcd60e51b815260040161068390614d38565b80518251146136a15760405162461bcd60e51b815260040161068390614c21565b600a54825111156136c45760405162461bcd60e51b815260040161068390614d6f565b60005b82518160ff1610156138305760006001600160a01b0316838260ff16815181106136ed57fe5b60200260200101516001600160a01b0316141561371c5760405162461bcd60e51b815260040161068390614db3565b818160ff168151811061372b57fe5b602002602001015160026000858460ff168151811061374657fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054101561378d5760405162461bcd60e51b8152600401610683906147fe565b818160ff168151811061379c57fe5b602002602001015160036000858460ff16815181106137b757fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006137e96139d5565b6001600160a01b03166001600160a01b031681526020019081526020016000205410156138285760405162461bcd60e51b81526004016106839061492f565b6001016136c7565b5060005b82518160ff161015611b22576000613897838360ff168151811061385457fe5b60200260200101516040518060600160405280602481526020016153a360249139611afd878660ff168151811061388757fe5b60200260200101516105996139d5565b90506138bb848360ff16815181106138ab57fe5b6020026020010151611b126139d5565b6138f1848360ff16815181106138cd57fe5b6020026020010151848460ff16815181106138e457fe5b6020026020010151613e0e565b50600101613834565b6526a4a72a22a960d11b81565b600080805260205260008051602061535b8339815191525461392b906104a46139d5565b6139475760405162461bcd60e51b8152600401610683906149a7565b600080805260205260008051602061535b8339815191525461396990826124dc565b15610b495760405162461bcd60e51b8152600401610683906148a3565b60095490565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b60075460ff1690565b60006124d5836001600160a01b03841661402d565b3390565b6139e1611a18565b156139fe5760405162461bcd60e51b815260040161068390614d38565b6001600160a01b038316613a245760405162461bcd60e51b815260040161068390614ed0565b6001600160a01b038216613a4a5760405162461bcd60e51b8152600401610683906148ed565b6001600160a01b0380841660008181526003602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590613aa59085906145c3565b60405180910390a3505050565b613aba611a18565b15613ad75760405162461bcd60e51b815260040161068390614d38565b6001600160a01b038316613afd5760405162461bcd60e51b815260040161068390614e62565b6001600160a01b038216613b235760405162461bcd60e51b8152600401610683906146c5565b613b60816040518060600160405280602681526020016152f5602691396001600160a01b0386166000908152600260205260409020549190613bcf565b6001600160a01b038085166000908152600260205260408082209390935590841681522054613b8f9082613ccd565b6001600160a01b0380841660008181526002602052604090819020939093559151908516906000805160206153c783398151915290613aa59085906145c3565b60008184841115613bf35760405162461bcd60e51b815260040161068391906145cc565b505050900390565b6000828152602081905260409020613c1390826139c0565b156108f657613c206139d5565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000828152602081905260409020613c7c9082614077565b156108f657613c896139d5565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b6000828201838110156124d55760405162461bcd60e51b815260040161068390614970565b60015460ff16613d145760405162461bcd60e51b815260040161068390614799565b6001805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6119956139d5565b613d4f611a18565b15613d6c5760405162461bcd60e51b815260040161068390614d38565b6001600160a01b038216613d925760405162461bcd60e51b81526004016106839061511a565b600854613d9f9082613ccd565b6008556001600160a01b038216600090815260026020526040902054613dc59082613ccd565b6001600160a01b0383166000818152600260205260408082209390935591519091906000805160206153c783398151915290613e029085906145c3565b60405180910390a35050565b613e16611a18565b15613e335760405162461bcd60e51b815260040161068390614d38565b6001600160a01b038216613e595760405162461bcd60e51b815260040161068390614db3565b613e96816040518060600160405280602281526020016152d3602291396001600160a01b0385166000908152600260205260409020549190613bcf565b6001600160a01b038316600090815260026020526040902055600854613ebc9082613eeb565b6008556040516000906001600160a01b038416906000805160206153c783398151915290613e029085906145c3565b60006124d583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613bcf565b60006124d583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061408c565b600082613f7e57506000610654565b82820282848281613f8b57fe5b04146124d55760405162461bcd60e51b815260040161068390614c69565b60015460ff1615613fcc5760405162461bcd60e51b815260040161068390614a3e565b6001805460ff1916811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586119956139d5565b60006124d583836140c3565b60006124d5836001600160a01b038416614108565b600061065482614120565b60006140398383614108565b61406f57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610654565b506000610654565b60006124d5836001600160a01b038416614124565b600081836140ad5760405162461bcd60e51b815260040161068391906145cc565b5060008385816140b957fe5b0495945050505050565b815460009082106140e65760405162461bcd60e51b815260040161068390614683565b8260000182815481106140f557fe5b9060005260206000200154905092915050565b60009081526001919091016020526040902054151590565b5490565b600081815260018301602052604081205480156141e0578354600019808301919081019060009087908390811061415757fe5b906000526020600020015490508087600001848154811061417457fe5b6000918252602080832090910192909255828152600189810190925260409020908401905586548790806141a457fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610654565b6000915050610654565b6040518061026001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001600081525090565b80356001600160a01b038116811461084b57600080fd5b600082601f8301126142ac578081fd5b81356142bf6142ba826152b4565b615290565b8181529150602080830190848101818402860182018710156142e057600080fd5b60005b84811015614306576142f482614285565b845292820192908201906001016142e3565b505050505092915050565b600082601f830112614321578081fd5b813561432f6142ba826152b4565b81815291506020808301908481018184028601820187101561435057600080fd5b60005b8481101561430657813584529282019290820190600101614353565b600060208284031215614380578081fd5b6124d582614285565b6000806040838503121561439b578081fd5b6143a483614285565b91506143b260208401614285565b90509250929050565b6000806000606084860312156143cf578081fd5b6143d884614285565b92506143e660208501614285565b9150604084013590509250925092565b60008060006060848603121561440a578283fd5b61441384614285565b9250602084013567ffffffffffffffff8082111561442f578384fd5b61443b8783880161429c565b93506040860135915080821115614450578283fd5b5061445d86828701614311565b9150509250925092565b60008060408385031215614479578182fd5b61448283614285565b946020939093013593505050565b600080604083850312156144a2578182fd5b823567ffffffffffffffff808211156144b9578384fd5b6144c58683870161429c565b935060208501359150808211156144da578283fd5b506144e785828601614311565b9150509250929050565b600060208284031215614502578081fd5b5035919050565b6000806040838503121561451b578182fd5b823591506143b260208401614285565b6000806040838503121561453d578182fd5b50508035926020909101359150565b6001600160a01b03169052565b60008151808452815b8181101561457e57602081850181015186830182015201614562565b8181111561458f5782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b901515815260200190565b90815260200190565b6000602082526124d56020830184614559565b60006101208083526145f38184018d614559565b90508281036020840152614607818c614559565b604084019a909a5250506060810196909652608086019490945291151560a085015260c084015260e08301526101009091015292915050565b60208082526023908201527f45524332303a204f6e6c792041444d494e2063616e207061757365207374616b604082015262696e6760e81b606082015260800190565b60208082526022908201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e604082015261647360f01b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526022908201527f416c7265616479205374616b696e672c2055736520696e6372656173655374616040820152616b6560f01b606082015260800190565b6020808252602f908201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60408201526e0818591b5a5b881d1bc819dc985b9d608a1b606082015260800190565b60208082526014908201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604082015260600190565b60208082526019908201527f5374616b696e673a20756e70617573656420616c726561647900000000000000604082015260600190565b60208082526022908201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604082015261636560f01b606082015260800190565b60208082526012908201527145786365656473204d617820537570706c7960701b604082015260600190565b6020808252601a908201527f5374616b696e672054696572204e6f7420417661696c61626c65000000000000604082015260600190565b6020808252602a908201527f416363657373436f6e74726f6c3a2061646d696e2063616e6e6f74207265766f60408201526935b2903434b6b9b2b63360b11b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b60208082526021908201527f5472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636040820152606560f81b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526030908201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60408201526f2061646d696e20746f207265766f6b6560801b606082015260800190565b60208082526027908201527f41646472657373206172726179206c656e677468206e6f7420657175616c20746040820152666f2076616c756560c81b606082015260800190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252601b908201527f45524332303a204f6e6c79204d494e5445522063616e204d696e740000000000604082015260600190565b6020808252602c908201527f416363657373436f6e74726f6c3a2061646d696e2063616e6e6f742072656e6f60408201526b3ab731b2903434b6b9b2b63360a11b606082015260800190565b6020808252601c908201527f5374616b6520636c61696d2064617465206e6f74207265616368656400000000604082015260600190565b60208082526025908201527f45524332303a204f6e6c792041444d494e2063616e20756e7061757365207374604082015264616b696e6760d81b606082015260800190565b6020808252601c908201527f4f6e6c792041444d494e2063616e206368616e676520636f6e66696700000000604082015260600190565b6020808252602c908201527f416363657373436f6e74726f6c3a2061646d696e2063616e6e6f74207472616e60408201526b39b332b9103434b6b9b2b63360a11b606082015260800190565b6020808252601f908201527f5472616e7366657220616d6f756e7420657863656564732062616c616e636500604082015260600190565b60208082526028908201527f41646472657373206172726179206c656e677468206e6f7420657175616c20746040820152671bc8185b5bdd5b9d60c21b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526028908201527f45786365656473204d617820537570706c792c20796f752063616e2774207374604082015267616b65206d6f726560c01b606082015260800190565b60208082526026908201527f45524332303a204f6e6c792041444d494e2063616e20756e706175736520747260408201526530b739b332b960d11b606082015260800190565b6020808252601c908201527f45524332303a20546f6b656e207061757365642062792041444d494e00000000604082015260600190565b60208082526024908201527f5061796f7574206c6973742067726561746572207468616e205f6d617854784c6040820152631a5b5a5d60e21b606082015260800190565b60208082526021908201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60208082526017908201527f5374616b696e673a2070617573656420616c7265616479000000000000000000604082015260600190565b6020808252601f908201527f56616c7565206973206c657373207468616e205f746f74616c537570706c7900604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252600f908201526e14dd185ada5b99ce881c185d5cd959608a1b604082015260600190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526024908201527f45524332303a204f6e6c792041444d494e2063616e207061757365207472616e60408201526339b332b960e11b606082015260800190565b60208082526025908201527f416363657373436f6e74726f6c3a2063616e6e6f74206772616e742061646d696040820152646e526f6c6560d81b606082015260800190565b6020808252600b908201526a4e6f74205374616b696e6760a81b604082015260600190565b60208082526029908201527f416363657373436f6e74726f6c3a2061646d696e2063616e6e6f74206772616e6040820152683a103434b6b9b2b63360b91b606082015260800190565b60208082526032908201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e6040820152711030b236b4b7103a37903a3930b739b332b960711b606082015260800190565b6020808252601c908201527f5472616e7366657220746f20746865207a65726f206164647265737300000000604082015260600190565b6020808252601e908201527f5472616e736665722066726f6d20746865207a65726f20616464726573730000604082015260600190565b6020808252602f908201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560408201526e103937b632b9903337b91039b2b63360891b606082015260800190565b6020808252601f908201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b815181526020808301519082015260408083015190820152606080830151908201526080808301519082015260a0808301519082015260c0808301519082015260e08083015190820152610100808301519082015261012080830151908201526101408083015190820152610160808301519082015261018080830151908201526101a080830151908201526101c080830151908201526101e08083015190820152610200808301516102608301919061520d8285018261454c565b5050610220838101519083015261024092830151929091019190915290565b9b8c5260208c019a909a5260408b019890985260608a0196909652608089019490945260a088019290925260c087015260e086015261010085015261012084015261014083015215156101608201526101800190565b60ff91909116815260200190565b60405181810167ffffffffffffffff811182821017156152ac57fe5b604052919050565b600067ffffffffffffffff8211156152c857fe5b506020908102019056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365df6a61edd5883c71c22024c68c5d861635b382315907d09d2021058937d550635374616b6520616d6f756e7420657863656564732062616c616e636500000000ad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122093fc7fe8b4f7c35db69a869c558ea55d57c84eb1ca0d493e2f2cea83eb8a791364736f6c63430007040033

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061027f5760003560e01c806370a082311161015c578063a457c2d7116100ce578063cc64133511610087578063cc64133514610555578063d539139314610568578063d547741f14610570578063d5abeb0114610583578063dd62ed3e1461058b578063f3bcbf631461059e5761027f565b8063a457c2d7146104d9578063a9059cbb146104ec578063aa339b38146104ff578063ada8f9191461051c578063ca15c8731461052f578063ca7752c9146105425761027f565b80638a61b027116101205780638a61b027146104635780639010d07c1461047657806391d148541461049657806395d89b41146104a9578063a1813fac146104b1578063a217fddf146104d15761027f565b806370a082311461041a57806376dc82941461042d57806379cc6790146104405780638036d590146104535780638456cb591461045b5761027f565b806336568abe116101f557806342966c68116101b957806342966c68146103c957806344c7d6ef146103dc57806346e4959d146103ef578063532a92951461040257806355455df21461040a5780635c975abb146104125761027f565b806336568abe1461037557806339509351146103885780633bb2047f1461039b5780633f4ba83a146103ae57806340c10f19146103b65761027f565b806323b872dd1161024757806323b872dd1461030c578063248a9ca31461031f5780632f2ff15d14610332578063313ce5671461034557806334949cc11461035a57806335bce6e4146103625761027f565b806306fdde0314610284578063095ea7b3146102a25780630e522099146102c25780630e75a63a146102d757806318160ddd146102f7575b600080fd5b61028c6105a6565b60405161029991906145cc565b60405180910390f35b6102b56102b0366004614467565b61063c565b60405161029991906145b8565b6102d56102d036600461452b565b61065a565b005b6102df610776565b6040516102999c9b9a9998979695949392919061522c565b6102ff6107ab565b60405161029991906145c3565b6102b561031a3660046143bb565b6107b1565b6102ff61032d3660046144f1565b610838565b6102d5610340366004614509565b610850565b61034d6108fa565b6040516102999190615282565b6102ff610908565b6102d5610370366004614490565b61090e565b6102d5610383366004614509565b610ad2565b6102b5610396366004614467565b610b53565b6102d56103a93660046143f6565b610ba1565b6102d5610ddd565b6102d56103c4366004614467565b610e10565b6102d56103d73660046144f1565b610e79565b6102d56103ea3660046144f1565b610e8d565b6102d56103fd366004614490565b61178d565b6102d5611925565b6102d56119ac565b6102b5611a18565b6102ff61042836600461436f565b611a21565b6102d561043b36600461452b565b611a3c565b6102d561044e366004614467565b611ad2565b6102ff611b27565b6102d5611b2d565b6102d5610471366004614509565b611b5e565b61048961048436600461452b565b6124bd565b60405161029991906145a4565b6102b56104a4366004614509565b6124dc565b61028c6124f4565b6104c46104bf36600461436f565b612555565b6040516102999190615151565b6102ff612823565b6102b56104e7366004614467565b612828565b6102b56104fa366004614467565b612890565b6105076128a4565b604051610299999897969594939291906145df565b6102d561052a36600461436f565b612a1b565b6102ff61053d3660046144f1565b612b07565b6102d5610550366004614509565b612b1e565b6102d5610563366004614490565b61365b565b6102ff6138fa565b6102d561057e366004614509565b613907565b6102ff613986565b6102ff610599366004614389565b61398c565b6102b56139b7565b60058054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106325780601f1061060757610100808354040283529160200191610632565b820191906000526020600020905b81548152906001019060200180831161061557829003601f168201915b5050505050905090565b60006106506106496139d5565b84846139d9565b5060015b92915050565b61066760006104a46139d5565b61068c5760405162461bcd60e51b815260040161068390614b67565b60405180910390fd5b816001141561069f57600b819055610746565b81600214156106b2576012819055610746565b81600314156106c557600e819055610746565b81600414156106d857600c819055610746565b81600514156106eb576013819055610746565b81600614156106fe57600f819055610746565b816007141561071157600d819055610746565b8160081415610724576014819055610746565b8160091415610737576010819055610746565b81600a14156107465760118190555b60008051602061531b83398151915261075d6139d5565b60405161076a91906145a4565b60405180910390a15050565b600b54601254600e54600c54601354600f54600d5460145460105460115460155460075460ff16909192939495969798999a9b565b60085490565b60006107be848484613ab2565b61082e846107ca6139d5565b6108298560405180606001604052806028815260200161537b602891396001600160a01b038a166000908152600360205260408120906108086139d5565b6001600160a01b031681526020810191909152604001600020549190613bcf565b6139d9565b5060019392505050565b6000818152602081905260409020600201545b919050565b600080805260205260008051602061535b83398151915254610874906104a46139d5565b6108905760405162461bcd60e51b81526004016106839061474a565b600080805260205260008051602061535b833981519152546108b290826124dc565b156108cf5760405162461bcd60e51b815260040161068390614fc2565b816108ec5760405162461bcd60e51b815260040161068390614f58565b6108f68282613bfb565b5050565b600754610100900460ff1690565b60155490565b6000610918611a18565b156109355760405162461bcd60e51b815260040161068390614d38565b600061093f6139d5565b6001600160a01b031614156109665760405162461bcd60e51b815260040161068390615094565b81518351146109875760405162461bcd60e51b8152600401610683906149f7565b600a54835111156109aa5760405162461bcd60e51b815260040161068390614d6f565b60005b83518160ff161015610a2a5760006001600160a01b0316848260ff16815181106109d357fe5b60200260200101516001600160a01b03161415610a025760405162461bcd60e51b81526004016106839061505d565b828160ff1681518110610a1157fe5b60200260200101518201915080806001019150506109ad565b508060026000610a386139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020541015610a775760405162461bcd60e51b815260040161068390614bea565b60005b83518160ff161015610acc57610ac4610a916139d5565b858360ff1681518110610aa057fe5b6020026020010151858460ff1681518110610ab757fe5b6020026020010151613ab2565b600101610a7a565b50505050565b610ada6139d5565b6001600160a01b0316816001600160a01b031614610b0a5760405162461bcd60e51b8152600401610683906150cb565b600080805260205260008051602061535b83398151915254610b2c90826124dc565b15610b495760405162461bcd60e51b815260040161068390614a9f565b6108f68282613c64565b6000610650610b606139d5565b846108298560036000610b716139d5565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490613ccd565b6000610bab611a18565b15610bc85760405162461bcd60e51b815260040161068390614d38565b6001600160a01b038416610bee5760405162461bcd60e51b815260040161068390615094565b8151835114610c0f5760405162461bcd60e51b815260040161068390614c21565b600a5483511115610c325760405162461bcd60e51b815260040161068390614d6f565b60005b83518160ff161015610cb25760006001600160a01b0316848260ff1681518110610c5b57fe5b60200260200101516001600160a01b03161415610c8a5760405162461bcd60e51b81526004016106839061505d565b828160ff1681518110610c9957fe5b6020026020010151820191508080600101915050610c35565b506001600160a01b038416600090815260026020526040902054811115610ceb5760405162461bcd60e51b815260040161068390614bea565b6001600160a01b03841660009081526003602052604081208291610d0d6139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020541015610d4c5760405162461bcd60e51b81526004016106839061492f565b60005b83518160ff161015610dd657610d6e85858360ff1681518110610aa057fe5b610dce85610d7a6139d5565b610829868560ff1681518110610d8c57fe5b602002602001015160405180606001604052806028815260200161537b602891396001600160a01b038b166000908152600360205260408120906108086139d5565b600101610d4f565b5050505050565b610dea60006104a46139d5565b610e065760405162461bcd60e51b815260040161068390614cf2565b610e0e613cf2565b565b610e256526a4a72a22a960d11b6104a46139d5565b610e415760405162461bcd60e51b815260040161068390614a68565b600954600854610e519083613ccd565b1115610e6f5760405162461bcd60e51b815260040161068390614840565b6108f68282613d47565b610e8a610e846139d5565b82613e0e565b50565b610e95611a18565b15610eb25760405162461bcd60e51b815260040161068390614d38565b600481108015610ec25750600081115b610ede5760405162461bcd60e51b81526004016106839061486c565b600080600080600080600080886001141561113357600060046000610f016139d5565b6001600160a01b0316815260208101919091526040016000205411610f385760405162461bcd60e51b815260040161068390614f9d565b8160046000610f456139d5565b6001600160a01b03166001600160a01b031681526020019081526020016000206004015401421015610f895760405162461bcd60e51b815260040161068390614aeb565b600b549550601254945060046000610f9f6139d5565b6001600160a01b03166001600160a01b0316815260200190815260200160002060010154935060046000610fd16139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600001549750600e54915061103b601154611035600460006110116139d5565b6001600160a01b031681526020810191909152604001600020600401544290613eeb565b90613f2d565b9250600460006110496139d5565b6001600160a01b03166001600160a01b0316815260200190815260200160002060030154905060006004600061107d6139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600301819055506000600460006110b26139d5565b6001600160a01b0316815260208101919091526040016000908120919091556004816110dc6139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600401819055506000600460006111116139d5565b6001600160a01b031681526020810191909152604001600020600101556115df565b886002141561138b5760006004600061114a6139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600501541161118b5760405162461bcd60e51b815260040161068390614f9d565b81600460006111986139d5565b6001600160a01b03166001600160a01b0316815260200190815260200160002060090154014210156111dc5760405162461bcd60e51b815260040161068390614aeb565b600c5495506013549450600460006111f26139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600101549350600460006112246139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600501549750600f549150611288601154611035600460006112646139d5565b6001600160a01b031681526020810191909152604001600020600901544290613eeb565b9250600460006112966139d5565b6001600160a01b03166001600160a01b031681526020019081526020016000206008015490506000600460006112ca6139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600301819055506000600460006112ff6139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600501819055506000600460006113346139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600901819055506000600460006113696139d5565b6001600160a01b031681526020810191909152604001600020600601556115df565b88600314156115df576000600460006113a26139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600a0154116113e35760405162461bcd60e51b815260040161068390614f9d565b81600460006113f06139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600e0154014210156114345760405162461bcd60e51b815260040161068390614aeb565b600d54955060145494506004600061144a6139d5565b6001600160a01b03166001600160a01b031681526020019081526020016000206001015493506004600061147c6139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600a0154975060105491506114e0601154611035600460006114bc6139d5565b6001600160a01b031681526020810191909152604001600020600e01544290613eeb565b9250600460006114ee6139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600d015490506000600460006115226139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600301819055506000600460006115576139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600a018190555060006004600061158c6139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600e01819055506000600460006115c16139d5565b6001600160a01b031681526020810191909152604001600020600b01555b6116088161160286816115f28d8c613f2d565b6115fc898c613f6f565b90613f6f565b90613ccd565b965060095461162288600854613ccd90919063ffffffff16565b111561163a5760085460095461163791613eeb565b96505b60006116468883613eeb565b11156116c2576116886116598883613eeb565b600460006116656139d5565b6001600160a01b0316815260208101919091526040016000206012015490613ccd565b600460006116946139d5565b6001600160a01b031681526020810191909152604001600020601201556018546116be9088613ccd565b6018555b6008546116cf9088613ccd565b60085561170b6116df8989613ccd565b600260006116eb6139d5565b6001600160a01b0316815260208101919091526040016000205490613ccd565b600260006117176139d5565b6001600160a01b0316815260208101919091526040016000205560155461173e9089613eeb565b6015556117496139d5565b6001600160a01b031660006000805160206153c783398151915261176d8b8b613ccd565b60405161177a91906145c3565b60405180910390a3505050505050505050565b6000611797611a18565b156117b45760405162461bcd60e51b815260040161068390614d38565b6117c96526a4a72a22a960d11b6104a46139d5565b6117e55760405162461bcd60e51b815260040161068390614a68565b81518351146118065760405162461bcd60e51b815260040161068390614c21565b600a54835111156118295760405162461bcd60e51b815260040161068390614d6f565b60005b83518160ff1610156118a95760006001600160a01b0316848260ff168151811061185257fe5b60200260200101516001600160a01b031614156118815760405162461bcd60e51b81526004016106839061511a565b828160ff168151811061189057fe5b602002602001015182019150808060010191505061182c565b506009546008546118ba9083613ccd565b11156118d85760405162461bcd60e51b815260040161068390614840565b60005b83518160ff161015610acc5761191d848260ff16815181106118f957fe5b6020026020010151848360ff168151811061191057fe5b6020026020010151613d47565b6001016118db565b61193260006104a46139d5565b61194e5760405162461bcd60e51b815260040161068390614b22565b60075460ff16156119715760405162461bcd60e51b8152600401610683906147c7565b6007805460ff1916600117905560008051602061531b8339815191526119956139d5565b6040516119a291906145a4565b60405180910390a1565b6119b960006104a46139d5565b6119d55760405162461bcd60e51b815260040161068390614640565b60075460ff166119f75760405162461bcd60e51b815260040161068390614df4565b6007805460ff1916905560008051602061531b8339815191526119956139d5565b60015460ff1690565b6001600160a01b031660009081526002602052604090205490565b611a4960006104a46139d5565b611a655760405162461bcd60e51b815260040161068390614b67565b8160011415611a9a57600854811015611a905760405162461bcd60e51b815260040161068390614e2b565b6009819055610746565b8160021415611aad57600a819055610746565b816003141561074657601681905560008051602061531b83398151915261075d6139d5565b6000611b04826040518060600160405280602481526020016153a360249139611afd866105996139d5565b9190613bcf565b9050611b1883611b126139d5565b836139d9565b611b228383613e0e565b505050565b600a5490565b611b3a60006104a46139d5565b611b565760405162461bcd60e51b815260040161068390614f14565b610e0e613fa9565b600482108015611b6e5750600082115b611b8a5760405162461bcd60e51b81526004016106839061486c565b611b92611a18565b15611baf5760405162461bcd60e51b815260040161068390614d38565b60075460ff16611bd15760405162461bcd60e51b815260040161068390614ea7565b600080600060046000611be26139d5565b6001600160a01b03908116825260208201929092526040016000206010015416158015611c1757506001600160a01b03841615155b8015611c3c5750611c266139d5565b6001600160a01b0316846001600160a01b031614155b15611c83578360046000611c4e6139d5565b6001600160a01b039081168252602082019290925260400160002060100180546001600160a01b031916929091169190911790555b8460011415611ed657600060046000611c9a6139d5565b6001600160a01b031681526020810191909152604001600020541115611cd25760405162461bcd60e51b815260040161068390614708565b600b549250611cf46012546115fc601154600e54613f2d90919063ffffffff16565b9150611d10606461103560165485613f6f90919063ffffffff16565b9050611d46836040518060400160405280601c815260200160008051602061533b833981519152815250600260006108086139d5565b60026000611d526139d5565b6001600160a01b03168152602081019190915260400160002055600954600854611d7c9084613ccd565b1115611d9a5760405162461bcd60e51b815260040161068390614caa565b60046000611da66139d5565b6001600160a01b0390811682526020820192909252604001600020601001541615611e7657611e1d816004600060046000611ddf6139d5565b6001600160a01b0390811682526020808301939093526040918201600090812060100154909116845291830193909352910190206003015490613ccd565b6004600060046000611e2d6139d5565b6001600160a01b03908116825260208083019390935260409182016000908120601001549091168452918301939093529101902060030155601754611e729082613ccd565b6017555b4260046000611e836139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600401819055508260046000611eb76139d5565b6001600160a01b03168152602081019190915260400160002055612392565b846002141561213657600060046000611eed6139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600501541115611f2f5760405162461bcd60e51b815260040161068390614708565b600c549250611f516013546115fc601154600f54613f2d90919063ffffffff16565b9150611f6d606461103560165485613f6f90919063ffffffff16565b9050611fa3836040518060400160405280601c815260200160008051602061533b833981519152815250600260006108086139d5565b60026000611faf6139d5565b6001600160a01b03168152602081019190915260400160002055600954600854611fd99084613ccd565b1115611ff75760405162461bcd60e51b815260040161068390614caa565b600460006120036139d5565b6001600160a01b03908116825260208201929092526040016000206010015416156120d35761207a81600460006004600061203c6139d5565b6001600160a01b0390811682526020808301939093526040918201600090812060100154909116845291830193909352910190206008015490613ccd565b600460006004600061208a6139d5565b6001600160a01b039081168252602080830193909352604091820160009081206010015490911684529183019390935291019020600801556017546120cf9082613ccd565b6017555b42600460006120e06139d5565b6001600160a01b03166001600160a01b031681526020019081526020016000206009018190555082600460006121146139d5565b6001600160a01b03168152602081019190915260400160002060050155612392565b84600314156123925760006004600061214d6139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600a0154111561218f5760405162461bcd60e51b815260040161068390614708565b600d5492506121b16014546115fc601154601054613f2d90919063ffffffff16565b91506121cd606461103560165485613f6f90919063ffffffff16565b9050612203836040518060400160405280601c815260200160008051602061533b833981519152815250600260006108086139d5565b6002600061220f6139d5565b6001600160a01b031681526020810191909152604001600020556009546008546122399084613ccd565b11156122575760405162461bcd60e51b815260040161068390614caa565b600460006122636139d5565b6001600160a01b0390811682526020820192909252604001600020601001541615612333576122da81600460006004600061229c6139d5565b6001600160a01b039081168252602080830193909352604091820160009081206010015490911684529183019390935291019020600d015490613ccd565b60046000600460006122ea6139d5565b6001600160a01b039081168252602080830193909352604091820160009081206010015490911684529183019390935291019020600d015560175461232f9082613ccd565b6017555b42600460006123406139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600e018190555082600460006123746139d5565b6001600160a01b031681526020810191909152604001600020600a01555b6004600061239e6139d5565b6001600160a01b039081168252602082019290925260400160002060100154161561246e576124158160046000600460006123d76139d5565b6001600160a01b0390811682526020808301939093526040918201600090812060100154909116845291830193909352910190206011015490613ccd565b60046000600460006124256139d5565b6001600160a01b0390811682526020808301939093526040918201600090812060100154909116845291830193909352910190206011015560175461246a9082613ccd565b6017555b60155461247b9084613ccd565b60155560006124886139d5565b6001600160a01b03166000805160206153c7833981519152856040516124ae91906145c3565b60405180910390a35050505050565b60008281526020819052604081206124d59083614001565b9392505050565b60008281526020819052604081206124d5908361400d565b60068054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106325780601f1061060757610100808354040283529160200191610632565b61255d6141ea565b6125656141ea565b506001600160a01b038083166000818152600460208181526040808420815161026081018352815480825260018301548286015260028301549382019390935260038201546060820152818501546080820152600582015460a0820152600682015460c0820152600782015460e082015260088201546101008201526009820154610120820152600a820154610140820152600b80830154610160830152600c830154610180830152600d8301546101a0830152600e8301546101c0830152600f8301546101e0830152601083015490981661020082015260118201546102208201526012909101546102408201529554949093525261269e916126699190613f2d565b6012546011546001600160a01b038716600090815260046020819052604090912001546115fc92918391611035904290613eeb565b604080830191909152600c546001600160a01b038516600090815260046020529190912060050154612708916126d49190613f2d565b6013546011546001600160a01b0387166000908152600460205260409020600901546115fc92918391611035904290613eeb565b60e0820152600d546001600160a01b0384166000908152600460205260409020600a015461276e9161273a9190613f2d565b6014546011546001600160a01b0387166000908152600460205260409020600e01546115fc92918391611035904290613eeb565b610180820152600e546001600160a01b0384166000908152600460208190526040909120015461279d91613ccd565b6080820152600f546001600160a01b0384166000908152600460205260409020600901546127ca91613ccd565b6101208201526010546001600160a01b0384166000908152600460205260409020600e01546127f891613ccd565b6101c08201526001600160a01b03929092166000908152600260205260409020546101e08301525090565b600081565b60006106506128356139d5565b84610829856040518060600160405280602581526020016153e7602591396003600061285f6139d5565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190613bcf565b600061065061289d6139d5565b8484613ab2565b606080600080600080600080600060056006600760019054906101000a900460ff166008546009546128d4611a18565b6016546017546018548854604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152918b918301828280156129635780601f1061293857610100808354040283529160200191612963565b820191906000526020600020905b81548152906001019060200180831161294657829003601f168201915b50508b5460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152959e508d9450925084019050828280156129f15780601f106129c6576101008083540402835291602001916129f1565b820191906000526020600020905b8154815290600101906020018083116129d457829003601f168201915b505050505097508660ff169650985098509850985098509850985098509850909192939495969798565b600080805260205260008051602061535b83398151915254612a3f906104a46139d5565b612a5b5760405162461bcd60e51b81526004016106839061500b565b600080805260208190526001600160a01b03821690612a9b907fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb590614001565b6001600160a01b03161415612ac25760405162461bcd60e51b815260040161068390614b9e565b612ad46000612acf6139d5565b610b49565b612adf6000826108ec565b612af46526a4a72a22a960d11b612acf6139d5565b610e8a6526a4a72a22a960d11b826108ec565b600081815260208190526040812061065490614022565b600482108015612b2e5750600082115b612b4a5760405162461bcd60e51b81526004016106839061486c565b612b52611a18565b15612b6f5760405162461bcd60e51b815260040161068390614d38565b60075460ff16612b915760405162461bcd60e51b815260040161068390614ea7565b600080600080600080600060046000612ba86139d5565b6001600160a01b03908116825260208201929092526040016000206010015416158015612bdd57506001600160a01b03881615155b8015612c025750612bec6139d5565b6001600160a01b0316886001600160a01b031614155b15612c49578760046000612c146139d5565b6001600160a01b039081168252602082019290925260400160002060100180546001600160a01b031916929091169190911790555b8860011415612f4b57600060046000612c606139d5565b6001600160a01b0316815260208101919091526040016000205411612c975760405162461bcd60e51b815260040161068390614f9d565b600b549450601254935060046000612cad6139d5565b6001600160a01b03166001600160a01b0316815260200190815260200160002060010154925060046000612cdf6139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600001549650612d1a601154611035600460006110116139d5565b9150612d4460646110356016546115fc6012546115fc601154600e54613f2d90919063ffffffff16565b9050612d7a856040518060400160405280601c815260200160008051602061533b833981519152815250600260006108086139d5565b60026000612d866139d5565b6001600160a01b03168152602081019190915260400160002055612dbb83611602612db18a89613f2d565b6115fc8689613f6f565b95506000612dde84611602612dd4896110358d82613ccd565b6115fc878a613f6f565b9050600954612df882600854613ccd90919063ffffffff16565b1115612e165760405162461bcd60e51b815260040161068390614caa565b60046000612e226139d5565b6001600160a01b0390811682526020820192909252604001600020601001541615612ea457612e5b826004600060046000611ddf6139d5565b6004600060046000612e6b6139d5565b6001600160a01b039081168252602080830193909352604091820160009081206010015490911684529183019390935291019020600301555b4260046000612eb16139d5565b6001600160a01b03166001600160a01b0316815260200190815260200160002060040181905550612ee886600460006116eb6139d5565b60046000612ef46139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600001819055508660046000612f286139d5565b6001600160a01b031681526020810191909152604001600020600101555061357d565b886002141561326657600060046000612f626139d5565b6001600160a01b03166001600160a01b031681526020019081526020016000206005015411612fa35760405162461bcd60e51b815260040161068390614f9d565b600c549450601354935060046000612fb96139d5565b6001600160a01b03166001600160a01b0316815260200190815260200160002060010154925060046000612feb6139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600501549650613026601154611035600460006112646139d5565b915061305060646110356016546115fc6013546115fc601154600f54613f2d90919063ffffffff16565b9050613086856040518060400160405280601c815260200160008051602061533b833981519152815250600260006108086139d5565b600260006130926139d5565b6001600160a01b031681526020810191909152604001600020556130bd83611602612db18a89613f2d565b955060006130d684611602612dd4896110358d82613ccd565b90506009546130f082600854613ccd90919063ffffffff16565b111561310e5760405162461bcd60e51b815260040161068390614caa565b6004600061311a6139d5565b6001600160a01b039081168252602082019290925260400160002060100154161561319c5761315382600460006004600061203c6139d5565b60046000600460006131636139d5565b6001600160a01b039081168252602080830193909352604091820160009081206010015490911684529183019390935291019020600801555b42600460006131a96139d5565b6001600160a01b03166001600160a01b031681526020019081526020016000206009018190555061320386600460006131e06139d5565b6001600160a01b0316815260208101919091526040016000206005015490613ccd565b6004600061320f6139d5565b6001600160a01b03166001600160a01b031681526020019081526020016000206005018190555086600460006132436139d5565b6001600160a01b031681526020810191909152604001600020600601555061357d565b886003141561357d5760006004600061327d6139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600a0154116132be5760405162461bcd60e51b815260040161068390614f9d565b600d5494506014549350600460006132d46139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600101549250600460006133066139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600a01549650613341601154611035600460006114bc6139d5565b915061336b60646110356016546115fc6014546115fc601154601054613f2d90919063ffffffff16565b90506133a1856040518060400160405280601c815260200160008051602061533b833981519152815250600260006108086139d5565b600260006133ad6139d5565b6001600160a01b031681526020810191909152604001600020556133d883611602612db18a89613f2d565b955060006133f184611602612dd4896110358d82613ccd565b905060095461340b82600854613ccd90919063ffffffff16565b11156134295760405162461bcd60e51b815260040161068390614caa565b600460006134356139d5565b6001600160a01b03908116825260208201929092526040016000206010015416156134b75761346e82600460006004600061229c6139d5565b600460006004600061347e6139d5565b6001600160a01b039081168252602080830193909352604091820160009081206010015490911684529183019390935291019020600d01555b42600460006134c46139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600e018190555061351e86600460006134fb6139d5565b6001600160a01b031681526020810191909152604001600020600a015490613ccd565b6004600061352a6139d5565b6001600160a01b03166001600160a01b03168152602001908152602001600020600a0181905550866004600061355e6139d5565b6001600160a01b031681526020810191909152604001600020600b0155505b600460006135896139d5565b6001600160a01b039081168252602082019290925260400160002060100154161561361b576135c28160046000600460006123d76139d5565b60046000600460006135d26139d5565b6001600160a01b039081168252602080830193909352604091820160009081206010015490911684529183019390935291019020601101556017546136179082613ccd565b6017555b6015546136289086613ccd565b60155560006136356139d5565b6001600160a01b03166000805160206153c78339815191528760405161177a91906145c3565b613663611a18565b156136805760405162461bcd60e51b815260040161068390614d38565b80518251146136a15760405162461bcd60e51b815260040161068390614c21565b600a54825111156136c45760405162461bcd60e51b815260040161068390614d6f565b60005b82518160ff1610156138305760006001600160a01b0316838260ff16815181106136ed57fe5b60200260200101516001600160a01b0316141561371c5760405162461bcd60e51b815260040161068390614db3565b818160ff168151811061372b57fe5b602002602001015160026000858460ff168151811061374657fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054101561378d5760405162461bcd60e51b8152600401610683906147fe565b818160ff168151811061379c57fe5b602002602001015160036000858460ff16815181106137b757fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006137e96139d5565b6001600160a01b03166001600160a01b031681526020019081526020016000205410156138285760405162461bcd60e51b81526004016106839061492f565b6001016136c7565b5060005b82518160ff161015611b22576000613897838360ff168151811061385457fe5b60200260200101516040518060600160405280602481526020016153a360249139611afd878660ff168151811061388757fe5b60200260200101516105996139d5565b90506138bb848360ff16815181106138ab57fe5b6020026020010151611b126139d5565b6138f1848360ff16815181106138cd57fe5b6020026020010151848460ff16815181106138e457fe5b6020026020010151613e0e565b50600101613834565b6526a4a72a22a960d11b81565b600080805260205260008051602061535b8339815191525461392b906104a46139d5565b6139475760405162461bcd60e51b8152600401610683906149a7565b600080805260205260008051602061535b8339815191525461396990826124dc565b15610b495760405162461bcd60e51b8152600401610683906148a3565b60095490565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b60075460ff1690565b60006124d5836001600160a01b03841661402d565b3390565b6139e1611a18565b156139fe5760405162461bcd60e51b815260040161068390614d38565b6001600160a01b038316613a245760405162461bcd60e51b815260040161068390614ed0565b6001600160a01b038216613a4a5760405162461bcd60e51b8152600401610683906148ed565b6001600160a01b0380841660008181526003602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590613aa59085906145c3565b60405180910390a3505050565b613aba611a18565b15613ad75760405162461bcd60e51b815260040161068390614d38565b6001600160a01b038316613afd5760405162461bcd60e51b815260040161068390614e62565b6001600160a01b038216613b235760405162461bcd60e51b8152600401610683906146c5565b613b60816040518060600160405280602681526020016152f5602691396001600160a01b0386166000908152600260205260409020549190613bcf565b6001600160a01b038085166000908152600260205260408082209390935590841681522054613b8f9082613ccd565b6001600160a01b0380841660008181526002602052604090819020939093559151908516906000805160206153c783398151915290613aa59085906145c3565b60008184841115613bf35760405162461bcd60e51b815260040161068391906145cc565b505050900390565b6000828152602081905260409020613c1390826139c0565b156108f657613c206139d5565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000828152602081905260409020613c7c9082614077565b156108f657613c896139d5565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b6000828201838110156124d55760405162461bcd60e51b815260040161068390614970565b60015460ff16613d145760405162461bcd60e51b815260040161068390614799565b6001805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6119956139d5565b613d4f611a18565b15613d6c5760405162461bcd60e51b815260040161068390614d38565b6001600160a01b038216613d925760405162461bcd60e51b81526004016106839061511a565b600854613d9f9082613ccd565b6008556001600160a01b038216600090815260026020526040902054613dc59082613ccd565b6001600160a01b0383166000818152600260205260408082209390935591519091906000805160206153c783398151915290613e029085906145c3565b60405180910390a35050565b613e16611a18565b15613e335760405162461bcd60e51b815260040161068390614d38565b6001600160a01b038216613e595760405162461bcd60e51b815260040161068390614db3565b613e96816040518060600160405280602281526020016152d3602291396001600160a01b0385166000908152600260205260409020549190613bcf565b6001600160a01b038316600090815260026020526040902055600854613ebc9082613eeb565b6008556040516000906001600160a01b038416906000805160206153c783398151915290613e029085906145c3565b60006124d583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613bcf565b60006124d583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061408c565b600082613f7e57506000610654565b82820282848281613f8b57fe5b04146124d55760405162461bcd60e51b815260040161068390614c69565b60015460ff1615613fcc5760405162461bcd60e51b815260040161068390614a3e565b6001805460ff1916811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586119956139d5565b60006124d583836140c3565b60006124d5836001600160a01b038416614108565b600061065482614120565b60006140398383614108565b61406f57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610654565b506000610654565b60006124d5836001600160a01b038416614124565b600081836140ad5760405162461bcd60e51b815260040161068391906145cc565b5060008385816140b957fe5b0495945050505050565b815460009082106140e65760405162461bcd60e51b815260040161068390614683565b8260000182815481106140f557fe5b9060005260206000200154905092915050565b60009081526001919091016020526040902054151590565b5490565b600081815260018301602052604081205480156141e0578354600019808301919081019060009087908390811061415757fe5b906000526020600020015490508087600001848154811061417457fe5b6000918252602080832090910192909255828152600189810190925260409020908401905586548790806141a457fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610654565b6000915050610654565b6040518061026001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001600081525090565b80356001600160a01b038116811461084b57600080fd5b600082601f8301126142ac578081fd5b81356142bf6142ba826152b4565b615290565b8181529150602080830190848101818402860182018710156142e057600080fd5b60005b84811015614306576142f482614285565b845292820192908201906001016142e3565b505050505092915050565b600082601f830112614321578081fd5b813561432f6142ba826152b4565b81815291506020808301908481018184028601820187101561435057600080fd5b60005b8481101561430657813584529282019290820190600101614353565b600060208284031215614380578081fd5b6124d582614285565b6000806040838503121561439b578081fd5b6143a483614285565b91506143b260208401614285565b90509250929050565b6000806000606084860312156143cf578081fd5b6143d884614285565b92506143e660208501614285565b9150604084013590509250925092565b60008060006060848603121561440a578283fd5b61441384614285565b9250602084013567ffffffffffffffff8082111561442f578384fd5b61443b8783880161429c565b93506040860135915080821115614450578283fd5b5061445d86828701614311565b9150509250925092565b60008060408385031215614479578182fd5b61448283614285565b946020939093013593505050565b600080604083850312156144a2578182fd5b823567ffffffffffffffff808211156144b9578384fd5b6144c58683870161429c565b935060208501359150808211156144da578283fd5b506144e785828601614311565b9150509250929050565b600060208284031215614502578081fd5b5035919050565b6000806040838503121561451b578182fd5b823591506143b260208401614285565b6000806040838503121561453d578182fd5b50508035926020909101359150565b6001600160a01b03169052565b60008151808452815b8181101561457e57602081850181015186830182015201614562565b8181111561458f5782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b901515815260200190565b90815260200190565b6000602082526124d56020830184614559565b60006101208083526145f38184018d614559565b90508281036020840152614607818c614559565b604084019a909a5250506060810196909652608086019490945291151560a085015260c084015260e08301526101009091015292915050565b60208082526023908201527f45524332303a204f6e6c792041444d494e2063616e207061757365207374616b604082015262696e6760e81b606082015260800190565b60208082526022908201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e604082015261647360f01b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526022908201527f416c7265616479205374616b696e672c2055736520696e6372656173655374616040820152616b6560f01b606082015260800190565b6020808252602f908201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60408201526e0818591b5a5b881d1bc819dc985b9d608a1b606082015260800190565b60208082526014908201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604082015260600190565b60208082526019908201527f5374616b696e673a20756e70617573656420616c726561647900000000000000604082015260600190565b60208082526022908201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604082015261636560f01b606082015260800190565b60208082526012908201527145786365656473204d617820537570706c7960701b604082015260600190565b6020808252601a908201527f5374616b696e672054696572204e6f7420417661696c61626c65000000000000604082015260600190565b6020808252602a908201527f416363657373436f6e74726f6c3a2061646d696e2063616e6e6f74207265766f60408201526935b2903434b6b9b2b63360b11b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b60208082526021908201527f5472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636040820152606560f81b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526030908201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60408201526f2061646d696e20746f207265766f6b6560801b606082015260800190565b60208082526027908201527f41646472657373206172726179206c656e677468206e6f7420657175616c20746040820152666f2076616c756560c81b606082015260800190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252601b908201527f45524332303a204f6e6c79204d494e5445522063616e204d696e740000000000604082015260600190565b6020808252602c908201527f416363657373436f6e74726f6c3a2061646d696e2063616e6e6f742072656e6f60408201526b3ab731b2903434b6b9b2b63360a11b606082015260800190565b6020808252601c908201527f5374616b6520636c61696d2064617465206e6f74207265616368656400000000604082015260600190565b60208082526025908201527f45524332303a204f6e6c792041444d494e2063616e20756e7061757365207374604082015264616b696e6760d81b606082015260800190565b6020808252601c908201527f4f6e6c792041444d494e2063616e206368616e676520636f6e66696700000000604082015260600190565b6020808252602c908201527f416363657373436f6e74726f6c3a2061646d696e2063616e6e6f74207472616e60408201526b39b332b9103434b6b9b2b63360a11b606082015260800190565b6020808252601f908201527f5472616e7366657220616d6f756e7420657863656564732062616c616e636500604082015260600190565b60208082526028908201527f41646472657373206172726179206c656e677468206e6f7420657175616c20746040820152671bc8185b5bdd5b9d60c21b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526028908201527f45786365656473204d617820537570706c792c20796f752063616e2774207374604082015267616b65206d6f726560c01b606082015260800190565b60208082526026908201527f45524332303a204f6e6c792041444d494e2063616e20756e706175736520747260408201526530b739b332b960d11b606082015260800190565b6020808252601c908201527f45524332303a20546f6b656e207061757365642062792041444d494e00000000604082015260600190565b60208082526024908201527f5061796f7574206c6973742067726561746572207468616e205f6d617854784c6040820152631a5b5a5d60e21b606082015260800190565b60208082526021908201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60208082526017908201527f5374616b696e673a2070617573656420616c7265616479000000000000000000604082015260600190565b6020808252601f908201527f56616c7565206973206c657373207468616e205f746f74616c537570706c7900604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252600f908201526e14dd185ada5b99ce881c185d5cd959608a1b604082015260600190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526024908201527f45524332303a204f6e6c792041444d494e2063616e207061757365207472616e60408201526339b332b960e11b606082015260800190565b60208082526025908201527f416363657373436f6e74726f6c3a2063616e6e6f74206772616e742061646d696040820152646e526f6c6560d81b606082015260800190565b6020808252600b908201526a4e6f74205374616b696e6760a81b604082015260600190565b60208082526029908201527f416363657373436f6e74726f6c3a2061646d696e2063616e6e6f74206772616e6040820152683a103434b6b9b2b63360b91b606082015260800190565b60208082526032908201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e6040820152711030b236b4b7103a37903a3930b739b332b960711b606082015260800190565b6020808252601c908201527f5472616e7366657220746f20746865207a65726f206164647265737300000000604082015260600190565b6020808252601e908201527f5472616e736665722066726f6d20746865207a65726f20616464726573730000604082015260600190565b6020808252602f908201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560408201526e103937b632b9903337b91039b2b63360891b606082015260800190565b6020808252601f908201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b815181526020808301519082015260408083015190820152606080830151908201526080808301519082015260a0808301519082015260c0808301519082015260e08083015190820152610100808301519082015261012080830151908201526101408083015190820152610160808301519082015261018080830151908201526101a080830151908201526101c080830151908201526101e08083015190820152610200808301516102608301919061520d8285018261454c565b5050610220838101519083015261024092830151929091019190915290565b9b8c5260208c019a909a5260408b019890985260608a0196909652608089019490945260a088019290925260c087015260e086015261010085015261012084015261014083015215156101608201526101800190565b60ff91909116815260200190565b60405181810167ffffffffffffffff811182821017156152ac57fe5b604052919050565b600067ffffffffffffffff8211156152c857fe5b506020908102019056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365df6a61edd5883c71c22024c68c5d861635b382315907d09d2021058937d550635374616b6520616d6f756e7420657863656564732062616c616e636500000000ad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122093fc7fe8b4f7c35db69a869c558ea55d57c84eb1ca0d493e2f2cea83eb8a791364736f6c63430007040033

Deployed Bytecode Sourcemap

12531:26702:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14742:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17447:169;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;19633:862::-;;;;;;:::i;:::-;;:::i;:::-;;16630:341;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;15043:108::-;;;:::i;:::-;;;;;;;:::i;17624:321::-;;;;;;:::i;:::-;;:::i;8388:114::-;;;;;;:::i;:::-;;:::i;8510:446::-;;;;;;:::i;:::-;;:::i;14944:91::-;;;:::i;:::-;;;;;;;:::i;19029:104::-;;;:::i;32835:777::-;;;;;;:::i;:::-;;:::i;9868:330::-;;;;;;:::i;:::-;;:::i;17953:218::-;;;;;;:::i;:::-;;:::i;33619:1011::-;;;;;;:::i;:::-;;:::i;37293:166::-;;;:::i;34639:260::-;;;;;;:::i;:::-;;:::i;35704:91::-;;;;;;:::i;:::-;;:::i;25608:3465::-;;;;;;:::i;:::-;;:::i;34911:777::-;;;;;;:::i;:::-;;:::i;18740:272::-;;;:::i;18466:266::-;;;:::i;11988:78::-;;;:::i;15159:127::-;;;;;;:::i;:::-;;:::i;19147:477::-;;;;;;:::i;:::-;;:::i;35803:293::-;;;;;;:::i;:::-;;:::i;15508:97::-;;;:::i;37125:160::-;;;:::i;29085:3739::-;;;;;;:::i;:::-;;:::i;8242:138::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;7960:139::-;;;;;;:::i;:::-;;:::i;14841:95::-;;;:::i;15780:835::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;7537:49::-;;;:::i;18179:269::-;;;;;;:::i;:::-;;:::i;17264:175::-;;;;;;:::i;:::-;;:::i;16983:265::-;;;:::i;:::-;;;;;;;;;;;;;;;:::i;8968:517::-;;;;;;:::i;:::-;;:::i;8107:127::-;;;;;;:::i;:::-;;:::i;20511:5085::-;;;;;;:::i;:::-;;:::i;36110:998::-;;;;;;:::i;:::-;;:::i;7593:46::-;;;:::i;9497:363::-;;;;;;:::i;:::-;;:::i;15298:95::-;;;:::i;15617:151::-;;;;;;:::i;:::-;;:::i;15405:90::-;;;:::i;14742:91::-;14820:5;14813:12;;;;;;;;-1:-1:-1;;14813:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14787:13;;14813:12;;14820:5;;14813:12;;14820:5;14813:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14742:91;:::o;17447:169::-;17530:4;17547:39;17556:12;:10;:12::i;:::-;17570:7;17579:6;17547:8;:39::i;:::-;-1:-1:-1;17604:4:0;17447:169;;;;;:::o;19633:862::-;19715:41;7582:4;19743:12;:10;:12::i;19715:41::-;19707:82;;;;-1:-1:-1;;;19707:82:0;;;;;;;:::i;:::-;;;;;;;;;19803:2;19809:1;19803:7;19800:651;;;19830:13;:21;;;19800:651;;;19872:2;19878:1;19872:7;19869:582;;;19895:9;:17;;;19869:582;;;19934:2;19940:1;19934:7;19931:520;;;19957:11;:19;;;19931:520;;;19999:2;20005:1;19999:7;19996:455;;;20026:13;:21;;;19996:455;;;20068:2;20074:1;20068:7;20065:386;;;20091:9;:17;;;20065:386;;;20130:2;20136:1;20130:7;20127:324;;;20153:11;:19;;;20127:324;;;20195:2;20201:1;20195:7;20192:259;;;20222:13;:21;;;20192:259;;;20264:2;20270:1;20264:7;20261:190;;;20287:9;:17;;;20261:190;;;20326:2;20332:1;20326:7;20323:128;;;20349:11;:19;;;20323:128;;;20391:2;20397;20391:8;20388:63;;;20415:15;:23;;;20388:63;-1:-1:-1;;;;;;;;;;;20474:12:0;:10;:12::i;:::-;20466:21;;;;;;:::i;:::-;;;;;;;;19633:862;;:::o;16630:341::-;16807:13;;16822:9;;16833:11;;16846:13;;16861:9;;16872:11;;16885:13;;16900:9;;16911:11;;16924:15;;16941:11;;16954:8;;;;16630:341;;;;;;;;;;;;:::o;15043:108::-;15131:12;;15043:108;:::o;17624:321::-;17730:4;17747:36;17757:6;17765:9;17776:6;17747:9;:36::i;:::-;17794:121;17803:6;17811:12;:10;:12::i;:::-;17825:89;17863:6;17825:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17825:19:0;;;;;;:11;:19;;;;;;17845:12;:10;:12::i;:::-;-1:-1:-1;;;;;17825:33:0;;;;;;;;;;;;-1:-1:-1;17825:33:0;;;:89;:37;:89::i;:::-;17794:8;:121::i;:::-;-1:-1:-1;17933:4:0;17624:321;;;;;:::o;8388:114::-;8445:7;8472:12;;;;;;;;;;:22;;;8388:114;;;;:::o;8510:446::-;8602:6;:26;;;;;-1:-1:-1;;;;;;;;;;;8602:36:0;8594:59;;8640:12;:10;:12::i;8594:59::-;8586:119;;;;-1:-1:-1;;;8586:119:0;;;;;;;:::i;:::-;8733:6;:26;;;;;-1:-1:-1;;;;;;;;;;;8733:36:0;8725:54;;8771:7;8725;:54::i;:::-;8724:55;8716:109;;;;-1:-1:-1;;;8716:109:0;;;;;;;:::i;:::-;8844:26;8836:76;;;;-1:-1:-1;;;8836:76:0;;;;;;;:::i;:::-;8923:25;8934:4;8940:7;8923:10;:25::i;:::-;8510:446;;:::o;14944:91::-;15018:9;;;;;;;;14944:91::o;19029:104::-;19113:11;;19029:104;:::o;32835:777::-;32927:12;32960:8;:6;:8::i;:::-;32959:9;32951:50;;;;-1:-1:-1;;;32951:50:0;;;;;;;:::i;:::-;33044:1;33020:12;:10;:12::i;:::-;-1:-1:-1;;;;;33020:26:0;;;33012:69;;;;-1:-1:-1;;;33012:69:0;;;;;;;:::i;:::-;33107:6;:13;33094:2;:9;:26;33086:78;;;;-1:-1:-1;;;33086:78:0;;;;;;;:::i;:::-;33190:11;;33177:2;:9;:24;;33169:73;;;;-1:-1:-1;;;33169:73:0;;;;;;;:::i;:::-;33258:7;33253:169;33275:2;:9;33271:1;:13;;;33253:169;;;33331:1;-1:-1:-1;;;;;33314:19:0;:2;33317:1;33314:5;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33314:19:0;;;33306:60;;;;-1:-1:-1;;;33306:60:0;;;;;;;:::i;:::-;33389:6;33396:1;33389:9;;;;;;;;;;;;;;;;33381:17;;;;33286:3;;;;;;;33253:169;;;;33469:4;33442:9;:23;33452:12;:10;:12::i;:::-;-1:-1:-1;;;;;33442:23:0;-1:-1:-1;;;;;33442:23:0;;;;;;;;;;;;;:31;;33434:75;;;;-1:-1:-1;;;33434:75:0;;;;;;;:::i;:::-;33519:7;33514:94;33536:2;:9;33532:1;:13;;;33514:94;;;33561:41;33571:12;:10;:12::i;:::-;33585:2;33588:1;33585:5;;;;;;;;;;;;;;;;33592:6;33599:1;33592:9;;;;;;;;;;;;;;;;33561;:41::i;:::-;33547:3;;33514:94;;;;32835:777;;;:::o;9868:330::-;9966:12;:10;:12::i;:::-;-1:-1:-1;;;;;9955:23:0;:7;-1:-1:-1;;;;;9955:23:0;;9947:83;;;;-1:-1:-1;;;9947:83:0;;;;;;;:::i;:::-;10058:6;:26;;;;;-1:-1:-1;;;;;;;;;;;10058:36:0;10050:54;;10096:7;10050;:54::i;:::-;10049:55;10041:112;;;;-1:-1:-1;;;10041:112:0;;;;;;;:::i;:::-;10164:26;10176:4;10182:7;10164:11;:26::i;17953:218::-;18041:4;18058:83;18067:12;:10;:12::i;:::-;18081:7;18090:50;18129:10;18090:11;:25;18102:12;:10;:12::i;:::-;-1:-1:-1;;;;;18090:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;18090:25:0;;;:34;;;;;;;;;;;:38;:50::i;33619:1011::-;33731:12;33764:8;:6;:8::i;:::-;33763:9;33755:50;;;;-1:-1:-1;;;33755:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33824:20:0;;33816:63;;;;-1:-1:-1;;;33816:63:0;;;;;;;:::i;:::-;33905:6;:13;33892:2;:9;:26;33884:79;;;;-1:-1:-1;;;33884:79:0;;;;;;;:::i;:::-;33989:11;;33976:2;:9;:24;;33968:73;;;;-1:-1:-1;;;33968:73:0;;;;;;;:::i;:::-;34057:7;34052:157;34074:2;:9;34070:1;:13;;;34052:157;;;34130:1;-1:-1:-1;;;;;34113:19:0;:2;34116:1;34113:5;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34113:19:0;;;34105:60;;;;-1:-1:-1;;;34105:60:0;;;;;;;:::i;:::-;34188:6;34195:1;34188:9;;;;;;;;;;;;;;;;34180:17;;;;34085:3;;;;;;;34052:157;;;-1:-1:-1;;;;;;34229:17:0;;;;;;:9;:17;;;;;;:25;-1:-1:-1;34229:25:0;34221:69;;;;-1:-1:-1;;;34221:69:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34309:19:0;;;;;;:11;:19;;;;;34346:4;;34329:12;:10;:12::i;:::-;-1:-1:-1;;;;;34309:33:0;-1:-1:-1;;;;;34309:33:0;;;;;;;;;;;;;:41;;34301:87;;;;-1:-1:-1;;;34301:87:0;;;;;;;:::i;:::-;34398:7;34393:233;34415:2;:9;34411:1;:13;;;34393:233;;;34446:35;34456:6;34464:2;34467:1;34464:5;;;;;;;;;34446:35;34496:124;34505:6;34513:12;:10;:12::i;:::-;34527:92;34565:6;34572:1;34565:9;;;;;;;;;;;;;;;;34527:92;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34527:19:0;;;;;;:11;:19;;;;;;34547:12;:10;:12::i;34496:124::-;34426:3;;34393:233;;;;33619:1011;;;;:::o;37293:166::-;37346:41;7582:4;37374:12;:10;:12::i;37346:41::-;37338:92;;;;-1:-1:-1;;;37338:92:0;;;;;;;:::i;:::-;37441:10;:8;:10::i;:::-;37293:166::o;34639:260::-;34715:34;-1:-1:-1;;;34736:12:0;:10;:12::i;34715:34::-;34707:74;;;;-1:-1:-1;;;34707:74:0;;;;;;;:::i;:::-;34830:10;;34801:12;;:24;;34818:6;34801:16;:24::i;:::-;34800:40;;34792:71;;;;-1:-1:-1;;;34792:71:0;;;;;;;:::i;:::-;34874:17;34880:2;34884:6;34874:5;:17::i;35704:91::-;35760:27;35766:12;:10;:12::i;:::-;35780:6;35760:5;:27::i;:::-;35704:91;:::o;25608:3465::-;25677:8;:6;:8::i;:::-;25676:9;25668:50;;;;-1:-1:-1;;;25668:50:0;;;;;;;:::i;:::-;25744:1;25737:4;:8;:20;;;;;25756:1;25749:4;:8;25737:20;25729:59;;;;-1:-1:-1;;;25729:59:0;;;;;;;:::i;:::-;25799:19;25833;25867:18;25900:14;25929:15;25959:12;25986:16;26017:15;26050:4;26058:1;26050:9;26047:2285;;;26111:1;26083:6;:20;26090:12;:10;:12::i;:::-;-1:-1:-1;;;;;26083:20:0;;;;;;;;;;;;-1:-1:-1;26083:20:0;:25;:29;26075:53;;;;-1:-1:-1;;;26075:53:0;;;;;;;:::i;:::-;26200:8;26171:6;:20;26178:12;:10;:12::i;:::-;-1:-1:-1;;;;;26171:20:0;-1:-1:-1;;;;;26171:20:0;;;;;;;;;;;;:26;;;:37;26151:15;:58;;26143:99;;;;-1:-1:-1;;;26143:99:0;;;;;;;:::i;:::-;26270:13;;26257:26;;26307:9;;26298:18;;26341:6;:20;26348:12;:10;:12::i;:::-;-1:-1:-1;;;;;26341:20:0;-1:-1:-1;;;;;26341:20:0;;;;;;;;;;;;:26;;;26331:36;;26396:6;:20;26403:12;:10;:12::i;:::-;-1:-1:-1;;;;;26396:20:0;-1:-1:-1;;;;;26396:20:0;;;;;;;;;;;;:25;;;26382:39;;26447:11;;26436:22;;26480:70;26534:15;;26481:47;26501:6;:20;26508:12;:10;:12::i;:::-;-1:-1:-1;;;;;26501:20:0;;;;;;;;;;;;-1:-1:-1;26501:20:0;:26;;;26481:15;;:19;:47::i;:::-;26480:53;;:70::i;:::-;26473:77;;26575:6;:20;26582:12;:10;:12::i;:::-;-1:-1:-1;;;;;26575:20:0;-1:-1:-1;;;;;26575:20:0;;;;;;;;;;;;:26;;;26565:36;;26645:1;26616:6;:20;26623:12;:10;:12::i;:::-;-1:-1:-1;;;;;26616:20:0;-1:-1:-1;;;;;26616:20:0;;;;;;;;;;;;:26;;:30;;;;26689:1;26661:6;:20;26668:12;:10;:12::i;:::-;-1:-1:-1;;;;;26661:20:0;;;;;;;;;;;;-1:-1:-1;26661:20:0;;;:29;;;;26705:6;-1:-1:-1;26712:12:0;:10;:12::i;:::-;-1:-1:-1;;;;;26705:20:0;-1:-1:-1;;;;;26705:20:0;;;;;;;;;;;;:26;;:30;;;;26779:1;26750:6;:20;26757:12;:10;:12::i;:::-;-1:-1:-1;;;;;26750:20:0;;;;;;;;;;;;-1:-1:-1;26750:20:0;:26;;:30;26047:2285;;;26813:4;26821:1;26813:9;26810:1522;;;26874:1;26846:6;:20;26853:12;:10;:12::i;:::-;-1:-1:-1;;;;;26846:20:0;-1:-1:-1;;;;;26846:20:0;;;;;;;;;;;;:25;;;:29;26838:53;;;;-1:-1:-1;;;26838:53:0;;;;;;;:::i;:::-;26963:8;26934:6;:20;26941:12;:10;:12::i;:::-;-1:-1:-1;;;;;26934:20:0;-1:-1:-1;;;;;26934:20:0;;;;;;;;;;;;:26;;;:37;26914:15;:58;;26906:99;;;;-1:-1:-1;;;26906:99:0;;;;;;;:::i;:::-;27033:13;;27020:26;;27070:9;;27061:18;;27105:6;:20;27112:12;:10;:12::i;:::-;-1:-1:-1;;;;;27105:20:0;-1:-1:-1;;;;;27105:20:0;;;;;;;;;;;;:26;;;27095:36;;27160:6;:20;27167:12;:10;:12::i;:::-;-1:-1:-1;;;;;27160:20:0;-1:-1:-1;;;;;27160:20:0;;;;;;;;;;;;:25;;;27146:39;;27211:11;;27200:22;;27244:70;27298:15;;27245:47;27265:6;:20;27272:12;:10;:12::i;:::-;-1:-1:-1;;;;;27265:20:0;;;;;;;;;;;;-1:-1:-1;27265:20:0;:26;;;27245:15;;:19;:47::i;27244:70::-;27237:77;;27339:6;:20;27346:12;:10;:12::i;:::-;-1:-1:-1;;;;;27339:20:0;-1:-1:-1;;;;;27339:20:0;;;;;;;;;;;;:26;;;27329:36;;27409:1;27380:6;:20;27387:12;:10;:12::i;:::-;-1:-1:-1;;;;;27380:20:0;-1:-1:-1;;;;;27380:20:0;;;;;;;;;;;;:26;;:30;;;;27453:1;27425:6;:20;27432:12;:10;:12::i;:::-;-1:-1:-1;;;;;27425:20:0;-1:-1:-1;;;;;27425:20:0;;;;;;;;;;;;:25;;:29;;;;27498:1;27469:6;:20;27476:12;:10;:12::i;:::-;-1:-1:-1;;;;;27469:20:0;-1:-1:-1;;;;;27469:20:0;;;;;;;;;;;;:26;;:30;;;;27543:1;27514:6;:20;27521:12;:10;:12::i;:::-;-1:-1:-1;;;;;27514:20:0;;;;;;;;;;;;-1:-1:-1;27514:20:0;:26;;:30;26810:1522;;;27577:4;27585:1;27577:9;27574:758;;;27638:1;27610:6;:20;27617:12;:10;:12::i;:::-;-1:-1:-1;;;;;27610:20:0;-1:-1:-1;;;;;27610:20:0;;;;;;;;;;;;:25;;;:29;27602:53;;;;-1:-1:-1;;;27602:53:0;;;;;;;:::i;:::-;27727:8;27698:6;:20;27705:12;:10;:12::i;:::-;-1:-1:-1;;;;;27698:20:0;-1:-1:-1;;;;;27698:20:0;;;;;;;;;;;;:26;;;:37;27678:15;:58;;27670:99;;;;-1:-1:-1;;;27670:99:0;;;;;;;:::i;:::-;27797:13;;27784:26;;27834:9;;27825:18;;27869:6;:20;27876:12;:10;:12::i;:::-;-1:-1:-1;;;;;27869:20:0;-1:-1:-1;;;;;27869:20:0;;;;;;;;;;;;:26;;;27859:36;;27924:6;:20;27931:12;:10;:12::i;:::-;-1:-1:-1;;;;;27924:20:0;-1:-1:-1;;;;;27924:20:0;;;;;;;;;;;;:25;;;27910:39;;27975:11;;27964:22;;28008:70;28062:15;;28009:47;28029:6;:20;28036:12;:10;:12::i;:::-;-1:-1:-1;;;;;28029:20:0;;;;;;;;;;;;-1:-1:-1;28029:20:0;:26;;;28009:15;;:19;:47::i;28008:70::-;28001:77;;28103:6;:20;28110:12;:10;:12::i;:::-;-1:-1:-1;;;;;28103:20:0;-1:-1:-1;;;;;28103:20:0;;;;;;;;;;;;:26;;;28093:36;;28173:1;28144:6;:20;28151:12;:10;:12::i;:::-;-1:-1:-1;;;;;28144:20:0;-1:-1:-1;;;;;28144:20:0;;;;;;;;;;;;:26;;:30;;;;28217:1;28189:6;:20;28196:12;:10;:12::i;:::-;-1:-1:-1;;;;;28189:20:0;-1:-1:-1;;;;;28189:20:0;;;;;;;;;;;;:25;;:29;;;;28262:1;28233:6;:20;28240:12;:10;:12::i;:::-;-1:-1:-1;;;;;28233:20:0;-1:-1:-1;;;;;28233:20:0;;;;;;;;;;;;:26;;:30;;;;28307:1;28278:6;:20;28285:12;:10;:12::i;:::-;-1:-1:-1;;;;;28278:20:0;;;;;;;;;;;;-1:-1:-1;28278:20:0;:26;;:30;27574:758;28356:75;28423:7;28356:62;28410:7;28356:62;28377:27;:11;28393:10;28377:15;:27::i;:::-;28356:16;:4;28365:6;28356:8;:16::i;:::-;:20;;:49::i;:::-;:53;;:62::i;:75::-;28342:89;;28479:10;;28446:29;28463:11;28446:12;;:16;;:29;;;;:::i;:::-;28445:44;28442:117;;;28534:12;;28519:10;;:28;;:14;:28::i;:::-;28505:42;;28442:117;28599:1;28572:24;:11;28588:7;28572:15;:24::i;:::-;:28;28569:207;;;28649:60;28684:24;:11;28700:7;28684:15;:24::i;:::-;28649:6;:20;28656:12;:10;:12::i;:::-;-1:-1:-1;;;;;28649:20:0;;;;;;;;;;;;-1:-1:-1;28649:20:0;:30;;;;:34;:60::i;:::-;28616:6;:20;28623:12;:10;:12::i;:::-;-1:-1:-1;;;;;28616:20:0;;;;;;;;;;;;-1:-1:-1;28616:20:0;:30;;:93;28737:10;;:27;;28752:11;28737:14;:27::i;:::-;28724:10;:40;28569:207;28801:12;;:29;;28818:11;28801:16;:29::i;:::-;28786:12;:44;28867:57;28895:28;:11;28911;28895:15;:28::i;:::-;28867:9;:23;28877:12;:10;:12::i;:::-;-1:-1:-1;;;;;28867:23:0;;;;;;;;;;;;-1:-1:-1;28867:23:0;;;:27;:57::i;:::-;28841:9;:23;28851:12;:10;:12::i;:::-;-1:-1:-1;;;;;28841:23:0;;;;;;;;;;;;-1:-1:-1;28841:23:0;:83;28949:11;;:28;;28965:11;28949:15;:28::i;:::-;28935:11;:42;29022:12;:10;:12::i;:::-;-1:-1:-1;;;;;29001:64:0;29018:1;-1:-1:-1;;;;;;;;;;;29036:28:0;:11;29052;29036:15;:28::i;:::-;29001:64;;;;;;:::i;:::-;;;;;;;;25608:3465;;;;;;;;;:::o;34911:777::-;35002:12;35038:8;:6;:8::i;:::-;35037:9;35029:50;;;;-1:-1:-1;;;35029:50:0;;;;;;;:::i;:::-;35106:34;-1:-1:-1;;;35127:12:0;:10;:12::i;35106:34::-;35098:74;;;;-1:-1:-1;;;35098:74:0;;;;;;;:::i;:::-;35198:6;:13;35185:2;:9;:26;35177:79;;;;-1:-1:-1;;;35177:79:0;;;;;;;:::i;:::-;35282:11;;35269:2;:9;:24;;35261:73;;;;-1:-1:-1;;;35261:73:0;;;;;;;:::i;:::-;35358:7;35353:160;35375:2;:9;35371:1;:13;;;35353:160;;;35431:1;-1:-1:-1;;;;;35414:19:0;:2;35417:1;35414:5;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35414:19:0;;;35406:63;;;;-1:-1:-1;;;35406:63:0;;;;;;;:::i;:::-;35492:6;35499:1;35492:9;;;;;;;;;;;;;;;;35484:17;;;;35386:3;;;;;;;35353:160;;;-1:-1:-1;35559:10:0;;35532:12;;:22;;35549:4;35532:16;:22::i;:::-;35531:38;;35523:69;;;;-1:-1:-1;;;35523:69:0;;;;;;;:::i;:::-;35602:7;35597:76;35619:2;:9;35615:1;:13;;;35597:76;;;35644:23;35650:2;35653:1;35650:5;;;;;;;;;;;;;;;;35657:6;35664:1;35657:9;;;;;;;;;;;;;;;;35644:5;:23::i;:::-;35630:3;;35597:76;;18740:272;18800:41;7582:4;18828:12;:10;:12::i;18800:41::-;18792:91;;;;-1:-1:-1;;;18792:91:0;;;;;;;:::i;:::-;18903:8;;;;18902:9;18894:47;;;;-1:-1:-1;;;18894:47:0;;;;;;;:::i;:::-;18952:8;:15;;-1:-1:-1;;18952:15:0;18963:4;18952:15;;;-1:-1:-1;;;;;;;;;;;18991:12:0;:10;:12::i;:::-;18983:21;;;;;;:::i;:::-;;;;;;;;18740:272::o;18466:266::-;18524:41;7582:4;18552:12;:10;:12::i;18524:41::-;18516:89;;;;-1:-1:-1;;;18516:89:0;;;;;;;:::i;:::-;18624:8;;;;18616:44;;;;-1:-1:-1;;;18616:44:0;;;;;;;:::i;:::-;18671:8;:16;;-1:-1:-1;;18671:16:0;;;-1:-1:-1;;;;;;;;;;;18711:12:0;:10;:12::i;11988:78::-;12051:7;;;;11988:78;:::o;15159:127::-;-1:-1:-1;;;;;15260:18:0;15233:7;15260:18;;;:9;:18;;;;;;;15159:127::o;19147:477::-;19231:41;7582:4;19259:12;:10;:12::i;19231:41::-;19223:82;;;;-1:-1:-1;;;19223:82:0;;;;;;;:::i;:::-;19319:2;19325:1;19319:7;19316:264;;;19359:12;;19350:5;:21;;19342:65;;;;-1:-1:-1;;;19342:65:0;;;;;;;:::i;:::-;19426:10;:18;;;19316:264;;;19465:2;19471:1;19465:7;19462:118;;;19488:11;:19;;;19462:118;;;19530:2;19536:1;19530:7;19527:53;;;19553:7;:15;;;-1:-1:-1;;;;;;;;;;;19603:12:0;:10;:12::i;35803:293::-;35880:26;35909:84;35946:6;35909:84;;;;;;;;;;;;;;;;;:32;35919:7;35928:12;:10;:12::i;35909:32::-;:36;:84;:36;:84::i;:::-;35880:113;;36004:51;36013:7;36022:12;:10;:12::i;:::-;36036:18;36004:8;:51::i;:::-;36066:22;36072:7;36081:6;36066:5;:22::i;:::-;35803:293;;;:::o;15508:97::-;15585:11;;15508:97;:::o;37125:160::-;37176:41;7582:4;37204:12;:10;:12::i;37176:41::-;37168:90;;;;-1:-1:-1;;;37168:90:0;;;;;;;:::i;:::-;37269:8;:6;:8::i;29085:3739::-;29176:1;29169:4;:8;:20;;;;;29188:1;29181:4;:8;29169:20;29161:59;;;;-1:-1:-1;;;29161:59:0;;;;;;;:::i;:::-;29240:8;:6;:8::i;:::-;29239:9;29231:50;;;;-1:-1:-1;;;29231:50:0;;;;;;;:::i;:::-;29300:8;;;;29292:36;;;;-1:-1:-1;;;29292:36:0;;;;;;;:::i;:::-;29347:18;29380;29413:14;29445:6;:20;29452:12;:10;:12::i;:::-;-1:-1:-1;;;;;29445:20:0;;;;;;;;;;;;;;-1:-1:-1;29445:20:0;:27;;;;:73;:129;;;;-1:-1:-1;;;;;;29522:52:0;;;;29445:129;:155;;;;;29588:12;:10;:12::i;:::-;-1:-1:-1;;;;;29578:22:0;:6;-1:-1:-1;;;;;29578:22:0;;;29445:155;29442:222;;;29646:6;29616;:20;29623:12;:10;:12::i;:::-;-1:-1:-1;;;;;29616:20:0;;;;;;;;;;;;;;-1:-1:-1;29616:20:0;:27;;:36;;-1:-1:-1;;;;;;29616:36:0;;;;;;;;;;;29442:222;29685:4;29693:1;29685:9;29682:2752;;;29748:1;29720:6;:20;29727:12;:10;:12::i;:::-;-1:-1:-1;;;;;29720:20:0;;;;;;;;;;;;-1:-1:-1;29720:20:0;:25;:29;29718:32;29710:79;;;;-1:-1:-1;;;29710:79:0;;;;;;;:::i;:::-;29817:13;;29804:26;;29858:47;29895:9;;29858:32;29874:15;;29858:11;;:15;;:32;;;;:::i;:47::-;29845:60;;29929:32;29957:3;29929:23;29944:7;;29929:10;:14;;:23;;;;:::i;:32::-;29920:41;;30002:71;30030:10;30002:71;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;30002:71:0;;;:9;:23;30012:12;:10;:12::i;30002:71::-;29976:9;:23;29986:12;:10;:12::i;:::-;-1:-1:-1;;;;;29976:23:0;;;;;;;;;;;;-1:-1:-1;29976:23:0;:97;30128:10;;30096:12;;:28;;30113:10;30096:16;:28::i;:::-;:42;;30088:95;;;;-1:-1:-1;;;30088:95:0;;;;;;;:::i;:::-;30203:6;:20;30210:12;:10;:12::i;:::-;-1:-1:-1;;;;;30203:20:0;;;;;;;;;;;;;;-1:-1:-1;30203:20:0;:27;;;;:73;30200:259;;30340:53;30386:6;30340;:35;30347:6;:20;30354:12;:10;:12::i;:::-;-1:-1:-1;;;;;30347:20:0;;;;;;;;;;;;;;;;;-1:-1:-1;30347:20:0;;;:27;;;;;;30340:35;;;;;;;;;;;;;:41;;;;:45;:53::i;:::-;30296:6;:35;30303:6;:20;30310:12;:10;:12::i;:::-;-1:-1:-1;;;;;30303:20:0;;;;;;;;;;;;;;;;;-1:-1:-1;30303:20:0;;;:27;;;;;;30296:35;;;;;;;;;;;;;:41;;:97;30423:8;;:20;;30436:6;30423:12;:20::i;:::-;30412:8;:31;30200:259;30502:15;30473:6;:20;30480:12;:10;:12::i;:::-;-1:-1:-1;;;;;30473:20:0;-1:-1:-1;;;;;30473:20:0;;;;;;;;;;;;:26;;:44;;;;30561:10;30533:6;:20;30540:12;:10;:12::i;:::-;-1:-1:-1;;;;;30533:20:0;;;;;;;;;;;;-1:-1:-1;30533:20:0;:38;29682:2752;;;30604:4;30612:1;30604:9;30601:1833;;;30667:1;30639:6;:20;30646:12;:10;:12::i;:::-;-1:-1:-1;;;;;30639:20:0;-1:-1:-1;;;;;30639:20:0;;;;;;;;;;;;:25;;;:29;30637:32;30629:79;;;;-1:-1:-1;;;30629:79:0;;;;;;;:::i;:::-;30736:13;;30723:26;;30777:47;30814:9;;30777:32;30793:15;;30777:11;;:15;;:32;;;;:::i;:47::-;30764:60;;30848:32;30876:3;30848:23;30863:7;;30848:10;:14;;:23;;;;:::i;:32::-;30839:41;;30921:71;30949:10;30921:71;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;30921:71:0;;;:9;:23;30931:12;:10;:12::i;30921:71::-;30895:9;:23;30905:12;:10;:12::i;:::-;-1:-1:-1;;;;;30895:23:0;;;;;;;;;;;;-1:-1:-1;30895:23:0;:97;31047:10;;31015:12;;:28;;31032:10;31015:16;:28::i;:::-;:42;;31007:95;;;;-1:-1:-1;;;31007:95:0;;;;;;;:::i;:::-;31120:6;:20;31127:12;:10;:12::i;:::-;-1:-1:-1;;;;;31120:20:0;;;;;;;;;;;;;;-1:-1:-1;31120:20:0;:27;;;;:73;31117:259;;31257:53;31303:6;31257;:35;31264:6;:20;31271:12;:10;:12::i;:::-;-1:-1:-1;;;;;31264:20:0;;;;;;;;;;;;;;;;;-1:-1:-1;31264:20:0;;;:27;;;;;;31257:35;;;;;;;;;;;;;:41;;;;:45;:53::i;:::-;31213:6;:35;31220:6;:20;31227:12;:10;:12::i;:::-;-1:-1:-1;;;;;31220:20:0;;;;;;;;;;;;;;;;;-1:-1:-1;31220:20:0;;;:27;;;;;;31213:35;;;;;;;;;;;;;:41;;:97;31340:8;;:20;;31353:6;31340:12;:20::i;:::-;31329:8;:31;31117:259;31421:15;31392:6;:20;31399:12;:10;:12::i;:::-;-1:-1:-1;;;;;31392:20:0;-1:-1:-1;;;;;31392:20:0;;;;;;;;;;;;:26;;:44;;;;31480:10;31452:6;:20;31459:12;:10;:12::i;:::-;-1:-1:-1;;;;;31452:20:0;;;;;;;;;;;;-1:-1:-1;31452:20:0;:25;;:38;30601:1833;;;31523:4;31531:1;31523:9;31520:914;;;31586:1;31558:6;:20;31565:12;:10;:12::i;:::-;-1:-1:-1;;;;;31558:20:0;-1:-1:-1;;;;;31558:20:0;;;;;;;;;;;;:25;;;:29;31556:32;31548:79;;;;-1:-1:-1;;;31548:79:0;;;;;;;:::i;:::-;31655:13;;31642:26;;31696:47;31733:9;;31696:32;31712:15;;31696:11;;:15;;:32;;;;:::i;:47::-;31683:60;;31767:32;31795:3;31767:23;31782:7;;31767:10;:14;;:23;;;;:::i;:32::-;31758:41;;31840:71;31868:10;31840:71;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;31840:71:0;;;:9;:23;31850:12;:10;:12::i;31840:71::-;31814:9;:23;31824:12;:10;:12::i;:::-;-1:-1:-1;;;;;31814:23:0;;;;;;;;;;;;-1:-1:-1;31814:23:0;:97;31966:10;;31934:12;;:28;;31951:10;31934:16;:28::i;:::-;:42;;31926:95;;;;-1:-1:-1;;;31926:95:0;;;;;;;:::i;:::-;32041:6;:20;32048:12;:10;:12::i;:::-;-1:-1:-1;;;;;32041:20:0;;;;;;;;;;;;;;-1:-1:-1;32041:20:0;:27;;;;:73;32038:259;;32178:53;32224:6;32178;:35;32185:6;:20;32192:12;:10;:12::i;:::-;-1:-1:-1;;;;;32185:20:0;;;;;;;;;;;;;;;;;-1:-1:-1;32185:20:0;;;:27;;;;;;32178:35;;;;;;;;;;;;;:41;;;;:45;:53::i;:::-;32134:6;:35;32141:6;:20;32148:12;:10;:12::i;:::-;-1:-1:-1;;;;;32141:20:0;;;;;;;;;;;;;;;;;-1:-1:-1;32141:20:0;;;:27;;;;;;32134:35;;;;;;;;;;;;;:41;;:97;32261:8;;:20;;32274:6;32261:12;:20::i;:::-;32250:8;:31;32038:259;32341:15;32312:6;:20;32319:12;:10;:12::i;:::-;-1:-1:-1;;;;;32312:20:0;-1:-1:-1;;;;;32312:20:0;;;;;;;;;;;;:26;;:44;;;;32400:10;32372:6;:20;32379:12;:10;:12::i;:::-;-1:-1:-1;;;;;32372:20:0;;;;;;;;;;;;-1:-1:-1;32372:20:0;:25;;:38;31520:914;32447:6;:20;32454:12;:10;:12::i;:::-;-1:-1:-1;;;;;32447:20:0;;;;;;;;;;;;;;-1:-1:-1;32447:20:0;:27;;;;:73;32444:251;;32582:55;32630:6;32582;:35;32589:6;:20;32596:12;:10;:12::i;:::-;-1:-1:-1;;;;;32589:20:0;;;;;;;;;;;;;;;;;-1:-1:-1;32589:20:0;;;:27;;;;;;32582:35;;;;;;;;;;;;;:43;;;;:47;:55::i;:::-;32536:6;:35;32543:6;:20;32550:12;:10;:12::i;:::-;-1:-1:-1;;;;;32543:20:0;;;;;;;;;;;;;;;;;-1:-1:-1;32543:20:0;;;:27;;;;;;32536:35;;;;;;;;;;;;;:43;;:101;32663:8;;:20;;32676:6;32663:12;:20::i;:::-;32652:8;:31;32444:251;32727:11;;:27;;32743:10;32727:15;:27::i;:::-;32713:11;:41;32801:1;32779:12;:10;:12::i;:::-;-1:-1:-1;;;;;32770:46:0;-1:-1:-1;;;;;;;;;;;32805:10:0;32770:46;;;;;;:::i;:::-;;;;;;;;29085:3739;;;;;:::o;8242:138::-;8315:7;8342:12;;;;;;;;;;:30;;8366:5;8342:23;:30::i;:::-;8335:37;8242:138;-1:-1:-1;;;8242:138:0:o;7960:139::-;8029:4;8053:12;;;;;;;;;;:38;;8083:7;8053:29;:38::i;14841:95::-;14921:7;14914:14;;;;;;;;-1:-1:-1;;14914:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14888:13;;14914:14;;14921:7;;14914:14;;14921:7;14914:14;;;;;;;;;;;;;;;;;;;;;;;;15780:835;15846:12;;:::i;:::-;15872:16;;:::i;:::-;-1:-1:-1;;;;;;15905:15:0;;;;;;;:6;:15;;;;;;;;15899:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16053:13;;16028:15;;;;;15943:125;;16028:39;;15899:21;16028:24;:39::i;:::-;16013:9;;15992:15;;-1:-1:-1;;;;;15964:15:0;;;;;;:6;:15;;;;;;;;:21;;15943:80;;16013:9;15943:80;;15944:42;;:15;;:19;:42::i;15943:125::-;15931:9;;;;:137;;;;16201:13;;-1:-1:-1;;;;;16176:15:0;;;;;;:6;:15;;;;;;:20;;;16091:125;;16176:39;;:20;:24;:39::i;:::-;16161:9;;16140:15;;-1:-1:-1;;;;;16112:15:0;;;;;;:6;:15;;;;;:21;;;16091:80;;16161:9;16091:80;;16092:42;;:15;;:19;:42::i;16091:125::-;16079:9;;;:137;16349:13;;-1:-1:-1;;;;;16324:15:0;;;;;;:6;:15;;;;;:20;;;16239:125;;16324:39;;:20;:24;:39::i;:::-;16309:9;;16288:15;;-1:-1:-1;;;;;16260:15:0;;;;;;:6;:15;;;;;:21;;;16239:80;;16309:9;16239:80;;16240:42;;:15;;:19;:42::i;16239:125::-;16227:9;;;:137;16413:11;;-1:-1:-1;;;;;16387:15:0;;;;;;:6;:15;;;;;;;;:21;;:38;;:25;:38::i;:::-;16375:9;;;:50;16474:11;;-1:-1:-1;;;;;16448:15:0;;;;;;:6;:15;;;;;:21;;;:38;;:25;:38::i;:::-;16436:9;;;:50;16535:11;;-1:-1:-1;;;;;16509:15:0;;;;;;:6;:15;;;;;:21;;;:38;;:25;:38::i;:::-;16497:9;;;:50;-1:-1:-1;;;;;16568:18:0;;;;;;;;:9;:18;;;;;;16558:7;;;:28;-1:-1:-1;16497:9:0;15780:835::o;7537:49::-;7582:4;7537:49;:::o;18179:269::-;18272:4;18289:129;18298:12;:10;:12::i;:::-;18312:7;18321:96;18360:15;18321:96;;;;;;;;;;;;;;;;;:11;:25;18333:12;:10;:12::i;:::-;-1:-1:-1;;;;;18321:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;18321:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;17264:175::-;17350:4;17367:42;17377:12;:10;:12::i;:::-;17391:9;17402:6;17367:9;:42::i;16983:265::-;17038:13;17053;17068:7;17077;17086;17095:4;17101:7;17110;17119;17147:5;17154:7;17163:9;;;;;;;;;;;17174:12;;17188:10;;17200:8;:6;:8::i;:::-;17210:7;;17219:8;;17229:10;;17139:101;;;;;;;;-1:-1:-1;;17139:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17139:101:0;;;;;;;;;;;;;-1:-1:-1;;17139:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17139:101:0;;-1:-1:-1;17139:101:0;-1:-1:-1;17139:101:0;;;-1:-1:-1;17139:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16983:265;;;;;;;;;:::o;8968:517::-;9054:6;:26;;;;;-1:-1:-1;;;;;;;;;;;9054:36:0;9046:59;;9092:12;:10;:12::i;9046:59::-;9038:122;;;;-1:-1:-1;;;9038:122:0;;;;;;;:::i;:::-;9217:1;9179:26;;;;;;;-1:-1:-1;;;;;9179:51:0;;;:40;;:26;;:37;:40::i;:::-;-1:-1:-1;;;;;9179:51:0;;;9171:108;;;;-1:-1:-1;;;9171:108:0;;;;;;;:::i;:::-;9290:45;7582:4;9322:12;:10;:12::i;:::-;9290:11;:45::i;:::-;9346:39;7582:4;9377:7;9346:10;:39::i;:::-;9396:38;-1:-1:-1;;;9421:12:0;:10;:12::i;9396:38::-;9445:32;-1:-1:-1;;;9469:7:0;9445:10;:32::i;8107:127::-;8170:7;8197:12;;;;;;;;;;:29;;:27;:29::i;20511:5085::-;20605:1;20598:4;:8;:20;;;;;20617:1;20610:4;:8;20598:20;20590:59;;;;-1:-1:-1;;;20590:59:0;;;;;;;:::i;:::-;20669:8;:6;:8::i;:::-;20668:9;20660:50;;;;-1:-1:-1;;;20660:50:0;;;;;;;:::i;:::-;20729:8;;;;20721:36;;;;-1:-1:-1;;;20721:36:0;;;;;;;:::i;:::-;20776:19;20810;20844:18;20877:14;20906:15;20936:12;20963:14;20995:6;:20;21002:12;:10;:12::i;:::-;-1:-1:-1;;;;;20995:20:0;;;;;;;;;;;;;;-1:-1:-1;20995:20:0;:27;;;;:73;:129;;;;-1:-1:-1;;;;;;21072:52:0;;;;20995:129;:155;;;;;21138:12;:10;:12::i;:::-;-1:-1:-1;;;;;21128:22:0;:6;-1:-1:-1;;;;;21128:22:0;;;20995:155;20992:222;;;21196:6;21166;:20;21173:12;:10;:12::i;:::-;-1:-1:-1;;;;;21166:20:0;;;;;;;;;;;;;;-1:-1:-1;21166:20:0;:27;;:36;;-1:-1:-1;;;;;;21166:36:0;;;;;;;;;;;20992:222;21236:4;21244:1;21236:9;21233:3972;;;21297:1;21269:6;:20;21276:12;:10;:12::i;:::-;-1:-1:-1;;;;;21269:20:0;;;;;;;;;;;;-1:-1:-1;21269:20:0;:25;:29;21261:53;;;;-1:-1:-1;;;21261:53:0;;;;;;;:::i;:::-;21342:13;;21329:26;;21379:9;;21370:18;;21413:6;:20;21420:12;:10;:12::i;:::-;-1:-1:-1;;;;;21413:20:0;-1:-1:-1;;;;;21413:20:0;;;;;;;;;;;;:26;;;21403:36;;21468:6;:20;21475:12;:10;:12::i;:::-;-1:-1:-1;;;;;21468:20:0;-1:-1:-1;;;;;21468:20:0;;;;;;;;;;;;:25;;;21454:39;;21515:70;21569:15;;21516:47;21536:6;:20;21543:12;:10;:12::i;21515:70::-;21508:77;;21609:69;21674:3;21609:60;21661:7;;21609:47;21646:9;;21609:32;21625:15;;21609:11;;:15;;:32;;;;:::i;:69::-;21600:78;;21719:71;21747:10;21719:71;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21719:71:0;;;:9;:23;21729:12;:10;:12::i;21719:71::-;21693:9;:23;21703:12;:10;:12::i;:::-;-1:-1:-1;;;;;21693:23:0;;;;;;;;;;;;-1:-1:-1;21693:23:0;:97;21819:62;21873:7;21819:49;21840:27;:11;21856:10;21840:15;:27::i;:::-;21819:16;:4;21828:6;21819:8;:16::i;:62::-;21805:76;-1:-1:-1;21896:18:0;21917:78;21987:7;21917:65;21938:43;21970:10;21938:27;:11;21970:10;21938:15;:27::i;:43::-;21917:16;:4;21926:6;21917:8;:16::i;:78::-;21896:99;;22050:10;;22018:28;22035:10;22018:12;;:16;;:28;;;;:::i;:::-;:42;;22010:95;;;;-1:-1:-1;;;22010:95:0;;;;;;;:::i;:::-;22123:6;:20;22130:12;:10;:12::i;:::-;-1:-1:-1;;;;;22123:20:0;;;;;;;;;;;;;;-1:-1:-1;22123:20:0;:27;;;;:73;22120:209;;22260:53;22306:6;22260;:35;22267:6;:20;22274:12;:10;:12::i;22260:53::-;22216:6;:35;22223:6;:20;22230:12;:10;:12::i;:::-;-1:-1:-1;;;;;22223:20:0;;;;;;;;;;;;;;;;;-1:-1:-1;22223:20:0;;;:27;;;;;;22216:35;;;;;;;;;;;;;:41;;:97;22120:209;22373:15;22344:6;:20;22351:12;:10;:12::i;:::-;-1:-1:-1;;;;;22344:20:0;-1:-1:-1;;;;;22344:20:0;;;;;;;;;;;;:26;;:44;;;;22431:41;22461:10;22431:6;:20;22438:12;:10;:12::i;22431:41::-;22403:6;:20;22410:12;:10;:12::i;:::-;-1:-1:-1;;;;;22403:20:0;-1:-1:-1;;;;;22403:20:0;;;;;;;;;;;;:25;;:69;;;;22516:11;22487:6;:20;22494:12;:10;:12::i;:::-;-1:-1:-1;;;;;22487:20:0;;;;;;;;;;;;-1:-1:-1;22487:20:0;:26;;:40;-1:-1:-1;21233:3972:0;;;22560:4;22568:1;22560:9;22557:2648;;;22621:1;22593:6;:20;22600:12;:10;:12::i;:::-;-1:-1:-1;;;;;22593:20:0;-1:-1:-1;;;;;22593:20:0;;;;;;;;;;;;:25;;;:29;22585:53;;;;-1:-1:-1;;;22585:53:0;;;;;;;:::i;:::-;22666:13;;22653:26;;22703:9;;22694:18;;22738:6;:20;22745:12;:10;:12::i;:::-;-1:-1:-1;;;;;22738:20:0;-1:-1:-1;;;;;22738:20:0;;;;;;;;;;;;:26;;;22728:36;;22793:6;:20;22800:12;:10;:12::i;:::-;-1:-1:-1;;;;;22793:20:0;-1:-1:-1;;;;;22793:20:0;;;;;;;;;;;;:25;;;22779:39;;22840:70;22894:15;;22841:47;22861:6;:20;22868:12;:10;:12::i;22840:70::-;22833:77;;22934:69;22999:3;22934:60;22986:7;;22934:47;22971:9;;22934:32;22950:15;;22934:11;;:15;;:32;;;;:::i;:69::-;22925:78;;23044:71;23072:10;23044:71;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23044:71:0;;;:9;:23;23054:12;:10;:12::i;23044:71::-;23018:9;:23;23028:12;:10;:12::i;:::-;-1:-1:-1;;;;;23018:23:0;;;;;;;;;;;;-1:-1:-1;23018:23:0;:97;23144:62;23198:7;23144:49;23165:27;:11;23181:10;23165:15;:27::i;23144:62::-;23130:76;-1:-1:-1;23221:18:0;23242:78;23312:7;23242:65;23263:43;23295:10;23263:27;:11;23295:10;23263:15;:27::i;23242:78::-;23221:99;;23375:10;;23343:28;23360:10;23343:12;;:16;;:28;;;;:::i;:::-;:42;;23335:95;;;;-1:-1:-1;;;23335:95:0;;;;;;;:::i;:::-;23452:6;:20;23459:12;:10;:12::i;:::-;-1:-1:-1;;;;;23452:20:0;;;;;;;;;;;;;;-1:-1:-1;23452:20:0;:27;;;;:73;23449:209;;23589:53;23635:6;23589;:35;23596:6;:20;23603:12;:10;:12::i;23589:53::-;23545:6;:35;23552:6;:20;23559:12;:10;:12::i;:::-;-1:-1:-1;;;;;23552:20:0;;;;;;;;;;;;;;;;;-1:-1:-1;23552:20:0;;;:27;;;;;;23545:35;;;;;;;;;;;;;:41;;:97;23449:209;23702:15;23673:6;:20;23680:12;:10;:12::i;:::-;-1:-1:-1;;;;;23673:20:0;-1:-1:-1;;;;;23673:20:0;;;;;;;;;;;;:26;;:44;;;;23760:41;23790:10;23760:6;:20;23767:12;:10;:12::i;:::-;-1:-1:-1;;;;;23760:20:0;;;;;;;;;;;;-1:-1:-1;23760:20:0;:25;;;;:29;:41::i;:::-;23732:6;:20;23739:12;:10;:12::i;:::-;-1:-1:-1;;;;;23732:20:0;-1:-1:-1;;;;;23732:20:0;;;;;;;;;;;;:25;;:69;;;;23845:11;23816:6;:20;23823:12;:10;:12::i;:::-;-1:-1:-1;;;;;23816:20:0;;;;;;;;;;;;-1:-1:-1;23816:20:0;:26;;:40;-1:-1:-1;22557:2648:0;;;23889:4;23897:1;23889:9;23886:1319;;;23950:1;23922:6;:20;23929:12;:10;:12::i;:::-;-1:-1:-1;;;;;23922:20:0;-1:-1:-1;;;;;23922:20:0;;;;;;;;;;;;:25;;;:29;23914:53;;;;-1:-1:-1;;;23914:53:0;;;;;;;:::i;:::-;23995:13;;23982:26;;24032:9;;24023:18;;24067:6;:20;24074:12;:10;:12::i;:::-;-1:-1:-1;;;;;24067:20:0;-1:-1:-1;;;;;24067:20:0;;;;;;;;;;;;:26;;;24057:36;;24122:6;:20;24129:12;:10;:12::i;:::-;-1:-1:-1;;;;;24122:20:0;-1:-1:-1;;;;;24122:20:0;;;;;;;;;;;;:25;;;24108:39;;24169:70;24223:15;;24170:47;24190:6;:20;24197:12;:10;:12::i;24169:70::-;24162:77;;24263:69;24328:3;24263:60;24315:7;;24263:47;24300:9;;24263:32;24279:15;;24263:11;;:15;;:32;;;;:::i;:69::-;24254:78;;24373:71;24401:10;24373:71;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;24373:71:0;;;:9;:23;24383:12;:10;:12::i;24373:71::-;24347:9;:23;24357:12;:10;:12::i;:::-;-1:-1:-1;;;;;24347:23:0;;;;;;;;;;;;-1:-1:-1;24347:23:0;:97;24473:62;24527:7;24473:49;24494:27;:11;24510:10;24494:15;:27::i;24473:62::-;24459:76;-1:-1:-1;24550:18:0;24571:78;24641:7;24571:65;24592:43;24624:10;24592:27;:11;24624:10;24592:15;:27::i;24571:78::-;24550:99;;24704:10;;24672:28;24689:10;24672:12;;:16;;:28;;;;:::i;:::-;:42;;24664:95;;;;-1:-1:-1;;;24664:95:0;;;;;;;:::i;:::-;24778:6;:20;24785:12;:10;:12::i;:::-;-1:-1:-1;;;;;24778:20:0;;;;;;;;;;;;;;-1:-1:-1;24778:20:0;:27;;;;:73;24775:209;;24915:53;24961:6;24915;:35;24922:6;:20;24929:12;:10;:12::i;24915:53::-;24871:6;:35;24878:6;:20;24885:12;:10;:12::i;:::-;-1:-1:-1;;;;;24878:20:0;;;;;;;;;;;;;;;;;-1:-1:-1;24878:20:0;;;:27;;;;;;24871:35;;;;;;;;;;;;;:41;;:97;24775:209;25027:15;24998:6;:20;25005:12;:10;:12::i;:::-;-1:-1:-1;;;;;24998:20:0;-1:-1:-1;;;;;24998:20:0;;;;;;;;;;;;:26;;:44;;;;25085:41;25115:10;25085:6;:20;25092:12;:10;:12::i;:::-;-1:-1:-1;;;;;25085:20:0;;;;;;;;;;;;-1:-1:-1;25085:20:0;:25;;;;:29;:41::i;:::-;25057:6;:20;25064:12;:10;:12::i;:::-;-1:-1:-1;;;;;25057:20:0;-1:-1:-1;;;;;25057:20:0;;;;;;;;;;;;:25;;:69;;;;25170:11;25141:6;:20;25148:12;:10;:12::i;:::-;-1:-1:-1;;;;;25141:20:0;;;;;;;;;;;;-1:-1:-1;25141:20:0;:26;;:40;-1:-1:-1;23886:1319:0;25219:6;:20;25226:12;:10;:12::i;:::-;-1:-1:-1;;;;;25219:20:0;;;;;;;;;;;;;;-1:-1:-1;25219:20:0;:27;;;;:73;25216:251;;25354:55;25402:6;25354;:35;25361:6;:20;25368:12;:10;:12::i;25354:55::-;25308:6;:35;25315:6;:20;25322:12;:10;:12::i;:::-;-1:-1:-1;;;;;25315:20:0;;;;;;;;;;;;;;;;;-1:-1:-1;25315:20:0;;;:27;;;;;;25308:35;;;;;;;;;;;;;:43;;:101;25435:8;;:20;;25448:6;25435:12;:20::i;:::-;25424:8;:31;25216:251;25499:11;;:27;;25515:10;25499:15;:27::i;:::-;25485:11;:41;25573:1;25551:12;:10;:12::i;:::-;-1:-1:-1;;;;;25542:46:0;-1:-1:-1;;;;;;;;;;;25577:10:0;25542:46;;;;;;:::i;36110:998::-;36219:8;:6;:8::i;:::-;36218:9;36210:50;;;;-1:-1:-1;;;36210:50:0;;;;;;;:::i;:::-;36291:6;:13;36273:7;:14;:31;36265:84;;;;-1:-1:-1;;;36265:84:0;;;;;;;:::i;:::-;36380:11;;36362:7;:14;:29;;36354:78;;;;-1:-1:-1;;;36354:78:0;;;;;;;:::i;:::-;36450:7;36445:347;36467:7;:14;36463:1;:18;;;36445:347;;;36533:1;-1:-1:-1;;;;;36511:24:0;:7;36519:1;36511:10;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36511:24:0;;;36503:70;;;;-1:-1:-1;;;36503:70:0;;;;;;;:::i;:::-;36621:6;36628:1;36621:9;;;;;;;;;;;;;;;;36596;:21;36606:7;36614:1;36606:10;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36596:21:0;-1:-1:-1;;;;;36596:21:0;;;;;;;;;;;;;:34;;36588:81;;;;-1:-1:-1;;;36588:81:0;;;;;;;:::i;:::-;36733:6;36740:1;36733:9;;;;;;;;;;;;;;;;36692:11;:23;36704:7;36712:1;36704:10;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36692:23:0;-1:-1:-1;;;;;36692:23:0;;;;;;;;;;;;:37;36716:12;:10;:12::i;:::-;-1:-1:-1;;;;;36692:37:0;-1:-1:-1;;;;;36692:37:0;;;;;;;;;;;;;:50;;36684:96;;;;-1:-1:-1;;;36684:96:0;;;;;;;:::i;:::-;36483:3;;36445:347;;;;36801:7;36796:295;36818:7;:14;36814:1;:18;;;36796:295;;;36854:26;36883:90;36923:6;36930:1;36923:9;;;;;;;;;;;;;;;;36883:90;;;;;;;;;;;;;;;;;:35;36893:7;36901:1;36893:10;;;;;;;;;;;;;;;;36905:12;:10;:12::i;36883:90::-;36854:119;;36988:54;36997:7;37005:1;36997:10;;;;;;;;;;;;;;;;37009:12;:10;:12::i;36988:54::-;37057:28;37063:7;37071:1;37063:10;;;;;;;;;;;;;;;;37075:6;37082:1;37075:9;;;;;;;;;;;;;;;;37057:5;:28::i;:::-;-1:-1:-1;36834:3:0;;36796:295;;7593:46;-1:-1:-1;;;7593:46:0;:::o;9497:363::-;9590:6;:26;;;;;-1:-1:-1;;;;;;;;;;;9590:36:0;9582:59;;9628:12;:10;:12::i;9582:59::-;9574:120;;;;-1:-1:-1;;;9574:120:0;;;;;;;:::i;:::-;9722:6;:26;;;;;-1:-1:-1;;;;;;;;;;;9722:36:0;9714:54;;9760:7;9714;:54::i;:::-;9713:55;9705:110;;;;-1:-1:-1;;;9705:110:0;;;;;;;:::i;15298:95::-;15375:10;;15298:95;:::o;15617:151::-;-1:-1:-1;;;;;15733:18:0;;;15706:7;15733:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;15617:151::o;15405:90::-;15478:8;;;;15405:90;:::o;4269:143::-;4339:4;4363:41;4368:3;-1:-1:-1;;;;;4388:14:0;;4363:4;:41::i;130:106::-;218:10;130:106;:::o;38823:405::-;38926:8;:6;:8::i;:::-;38925:9;38917:50;;;;-1:-1:-1;;;38917:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38986:19:0;;38978:68;;;;-1:-1:-1;;;38978:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39065:21:0;;39057:68;;;;-1:-1:-1;;;39057:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39136:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;39188:32;;;;;39166:6;;39188:32;:::i;:::-;;;;;;;;38823:405;;;:::o;37471:538::-;37578:8;:6;:8::i;:::-;37577:9;37569:50;;;;-1:-1:-1;;;37569:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37638:20:0;;37630:70;;;;-1:-1:-1;;;37630:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37719:23:0;;37711:71;;;;-1:-1:-1;;;37711:71:0;;;;;;;:::i;:::-;37813;37835:6;37813:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37813:17:0;;;;;;:9;:17;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;37793:17:0;;;;;;;:9;:17;;;;;;:91;;;;37918:20;;;;;;;:32;;37943:6;37918:24;:32::i;:::-;-1:-1:-1;;;;;37895:20:0;;;;;;;:9;:20;;;;;;;:55;;;;37966:35;;;;;;-1:-1:-1;;;;;;;;;;;37966:35:0;;;37994:6;;37966:35;:::i;6140:190::-;6226:7;6262:12;6254:6;;;;6246:29;;;;-1:-1:-1;;;6246:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;6298:5:0;;;6140:190::o;10655:188::-;10729:6;:12;;;;;;;;;;:33;;10754:7;10729:24;:33::i;:::-;10725:111;;;10811:12;:10;:12::i;:::-;-1:-1:-1;;;;;10784:40:0;10802:7;-1:-1:-1;;;;;10784:40:0;10796:4;10784:40;;;;;;;;;;10655:188;;:::o;10851:192::-;10926:6;:12;;;;;;;;;;:36;;10954:7;10926:27;:36::i;:::-;10922:114;;;11011:12;:10;:12::i;:::-;-1:-1:-1;;;;;10984:40:0;11002:7;-1:-1:-1;;;;;10984:40:0;10996:4;10984:40;;;;;;;;;;10851:192;;:::o;5809:179::-;5867:7;5899:5;;;5923:6;;;;5915:46;;;;-1:-1:-1;;;5915:46:0;;;;;;;:::i;12402:120::-;12216:7;;;;12208:40;;;;-1:-1:-1;;;12208:40:0;;;;;;;:::i;:::-;12461:7:::1;:15:::0;;-1:-1:-1;;12461:15:0::1;::::0;;12492:22:::1;12501:12;:10;:12::i;38017:375::-:0;38102:8;:6;:8::i;:::-;38101:9;38093:50;;;;-1:-1:-1;;;38093:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38162:21:0;;38154:65;;;;-1:-1:-1;;;38154:65:0;;;;;;;:::i;:::-;38245:12;;:24;;38262:6;38245:16;:24::i;:::-;38230:12;:39;-1:-1:-1;;;;;38301:18:0;;;;;;:9;:18;;;;;;:30;;38324:6;38301:22;:30::i;:::-;-1:-1:-1;;;;;38280:18:0;;;;;;:9;:18;;;;;;:51;;;;38347:37;;38280:18;;;-1:-1:-1;;;;;;;;;;;38347:37:0;;;38377:6;;38347:37;:::i;:::-;;;;;;;;38017:375;;:::o;38400:415::-;38485:8;:6;:8::i;:::-;38484:9;38476:50;;;;-1:-1:-1;;;38476:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38545:21:0;;38537:67;;;;-1:-1:-1;;;38537:67:0;;;;;;;:::i;:::-;38636:68;38659:6;38636:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38636:18:0;;;;;;:9;:18;;;;;;;:68;:22;:68::i;:::-;-1:-1:-1;;;;;38615:18:0;;;;;;:9;:18;;;;;:89;38730:12;;:24;;38747:6;38730:16;:24::i;:::-;38715:12;:39;38770:37;;38796:1;;-1:-1:-1;;;;;38770:37:0;;;-1:-1:-1;;;;;;;;;;;38770:37:0;;;38800:6;;38770:37;:::i;5996:136::-;6054:7;6081:43;6085:1;6088;6081:43;;;;;;;;;;;;;;;;;:3;:43::i;6592:132::-;6650:7;6677:39;6681:1;6684;6677:39;;;;;;;;;;;;;;;;;:3;:39::i;6338:246::-;6396:7;6420:6;6416:47;;-1:-1:-1;6450:1:0;6443:8;;6416:47;6485:5;;;6489:1;6485;:5;:1;6509:5;;;;;:10;6501:56;;;;-1:-1:-1;;;6501:56:0;;;;;;;:::i;12276:118::-;12119:7;;;;12118:8;12110:37;;;;-1:-1:-1;;;12110:37:0;;;;;;;:::i;:::-;12346:4:::1;12336:14:::0;;-1:-1:-1;;12336:14:0::1;::::0;::::1;::::0;;12366:20:::1;12373:12;:10;:12::i;4868:149::-:0;4942:7;4985:22;4989:3;5001:5;4985:3;:22::i;4577:158::-;4657:4;4681:46;4691:3;-1:-1:-1;;;;;4711:14:0;;4681:9;:46::i;4743:117::-;4806:7;4833:19;4841:3;4833:7;:19::i;2825:291::-;2888:4;2910:21;2920:3;2925:5;2910:9;:21::i;:::-;2905:204;;-1:-1:-1;2948:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;3008:18;;2986:19;;;:12;;;:19;;;;;;:40;;;;3041:11;;2905:204;-1:-1:-1;3092:5:0;3085:12;;4420:149;4493:4;4517:44;4525:3;-1:-1:-1;;;;;4545:14:0;;4517:7;:44::i;6732:189::-;6818:7;6853:12;6846:5;6838:28;;;;-1:-1:-1;;;6838:28:0;;;;;;;;:::i;:::-;;6877:9;6893:1;6889;:5;;;;;;;6732:189;-1:-1:-1;;;;;6732:189:0:o;4002:204::-;4097:18;;4069:7;;4097:26;-1:-1:-1;4089:73:0;;;;-1:-1:-1;;;4089:73:0;;;;;;;:::i;:::-;4180:3;:11;;4192:5;4180:18;;;;;;;;;;;;;;;;4173:25;;4002:204;;;;:::o;3748:129::-;3821:4;3845:19;;;:12;;;;;:19;;;;;;:24;;;3748:129::o;3885:109::-;3968:18;;3885:109::o;3124:616::-;3190:4;3230:19;;;:12;;;:19;;;;;;3266:15;;3262:471;;3373:18;;-1:-1:-1;;3324:14:0;;;;3373:22;;;;3300:21;;3373:3;;:22;;3430;;;;;;;;;;;;;;3410:42;;3496:9;3467:3;:11;;3479:13;3467:26;;;;;;;;;;;;;;;;;;;:38;;;;3520:23;;;3562:1;3520:12;;;:23;;;;;;3546:17;;;3520:43;;3578:17;;3520:3;;3578:17;;;;;;;;;;;;;;;;;;;;;;3617:3;:12;;:19;3630:5;3617:19;;;;;;;;;;;3610:26;;;3658:4;3651:11;;;;;;;;3262:471;3716:5;3709:12;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:175:1:-;84:20;;-1:-1:-1;;;;;133:31:1;;123:42;;113:2;;179:1;176;169:12;194:700;;307:3;300:4;292:6;288:17;284:27;274:2;;329:5;322;315:20;274:2;373:6;360:20;398:69;413:53;459:6;413:53;:::i;:::-;398:69;:::i;:::-;501:21;;;389:78;-1:-1:-1;541:4:1;561:14;;;;595:15;;;641;;;629:28;;625:37;;622:46;-1:-1:-1;619:2:1;;;681:1;678;671:12;619:2;703:1;713:175;727:6;724:1;721:13;713:175;;;788:25;809:3;788:25;:::i;:::-;776:38;;834:12;;;;866;;;;749:1;742:9;713:175;;;717:3;;;;;264:630;;;;:::o;899:692::-;;1012:3;1005:4;997:6;993:17;989:27;979:2;;1034:5;1027;1020:20;979:2;1078:6;1065:20;1103:69;1118:53;1164:6;1118:53;:::i;1103:69::-;1206:21;;;1094:78;-1:-1:-1;1246:4:1;1266:14;;;;1300:15;;;1346;;;1334:28;;1330:37;;1327:46;-1:-1:-1;1324:2:1;;;1386:1;1383;1376:12;1324:2;1408:1;1418:167;1432:6;1429:1;1426:13;1418:167;;;1493:17;;1481:30;;1531:12;;;;1563;;;;1454:1;1447:9;1418:167;;1596:198;;1708:2;1696:9;1687:7;1683:23;1679:32;1676:2;;;1729:6;1721;1714:22;1676:2;1757:31;1778:9;1757:31;:::i;1799:274::-;;;1928:2;1916:9;1907:7;1903:23;1899:32;1896:2;;;1949:6;1941;1934:22;1896:2;1977:31;1998:9;1977:31;:::i;:::-;1967:41;;2027:40;2063:2;2052:9;2048:18;2027:40;:::i;:::-;2017:50;;1886:187;;;;;:::o;2078:342::-;;;;2224:2;2212:9;2203:7;2199:23;2195:32;2192:2;;;2245:6;2237;2230:22;2192:2;2273:31;2294:9;2273:31;:::i;:::-;2263:41;;2323:40;2359:2;2348:9;2344:18;2323:40;:::i;:::-;2313:50;;2410:2;2399:9;2395:18;2382:32;2372:42;;2182:238;;;;;:::o;2425:713::-;;;;2621:2;2609:9;2600:7;2596:23;2592:32;2589:2;;;2642:6;2634;2627:22;2589:2;2670:31;2691:9;2670:31;:::i;:::-;2660:41;;2752:2;2741:9;2737:18;2724:32;2775:18;2816:2;2808:6;2805:14;2802:2;;;2837:6;2829;2822:22;2802:2;2865:67;2924:7;2915:6;2904:9;2900:22;2865:67;:::i;:::-;2855:77;;2985:2;2974:9;2970:18;2957:32;2941:48;;3014:2;3004:8;3001:16;2998:2;;;3035:6;3027;3020:22;2998:2;;3063:69;3124:7;3113:8;3102:9;3098:24;3063:69;:::i;:::-;3053:79;;;2579:559;;;;;:::o;3143:266::-;;;3272:2;3260:9;3251:7;3247:23;3243:32;3240:2;;;3293:6;3285;3278:22;3240:2;3321:31;3342:9;3321:31;:::i;:::-;3311:41;3399:2;3384:18;;;;3371:32;;-1:-1:-1;;;3230:179:1:o;3414:637::-;;;3593:2;3581:9;3572:7;3568:23;3564:32;3561:2;;;3614:6;3606;3599:22;3561:2;3659:9;3646:23;3688:18;3729:2;3721:6;3718:14;3715:2;;;3750:6;3742;3735:22;3715:2;3778:67;3837:7;3828:6;3817:9;3813:22;3778:67;:::i;:::-;3768:77;;3898:2;3887:9;3883:18;3870:32;3854:48;;3927:2;3917:8;3914:16;3911:2;;;3948:6;3940;3933:22;3911:2;;3976:69;4037:7;4026:8;4015:9;4011:24;3976:69;:::i;:::-;3966:79;;;3551:500;;;;;:::o;4056:190::-;;4168:2;4156:9;4147:7;4143:23;4139:32;4136:2;;;4189:6;4181;4174:22;4136:2;-1:-1:-1;4217:23:1;;4126:120;-1:-1:-1;4126:120:1:o;4251:266::-;;;4380:2;4368:9;4359:7;4355:23;4351:32;4348:2;;;4401:6;4393;4386:22;4348:2;4442:9;4429:23;4419:33;;4471:40;4507:2;4496:9;4492:18;4471:40;:::i;4522:258::-;;;4651:2;4639:9;4630:7;4626:23;4622:32;4619:2;;;4672:6;4664;4657:22;4619:2;-1:-1:-1;;4700:23:1;;;4770:2;4755:18;;;4742:32;;-1:-1:-1;4609:171:1:o;5514:106::-;-1:-1:-1;;;;;5582:31:1;5570:44;;5560:60::o;5625:478::-;;5707:5;5701:12;5734:6;5729:3;5722:19;5759:3;5771:162;5785:6;5782:1;5779:13;5771:162;;;5847:4;5903:13;;;5899:22;;5893:29;5875:11;;;5871:20;;5864:59;5800:12;5771:162;;;5951:6;5948:1;5945:13;5942:2;;;6017:3;6010:4;6001:6;5996:3;5992:16;5988:27;5981:40;5942:2;-1:-1:-1;6085:2:1;6064:15;-1:-1:-1;;6060:29:1;6051:39;;;;6092:4;6047:50;;5677:426;-1:-1:-1;;5677:426:1:o;6108:203::-;-1:-1:-1;;;;;6272:32:1;;;;6254:51;;6242:2;6227:18;;6209:102::o;6532:187::-;6697:14;;6690:22;6672:41;;6660:2;6645:18;;6627:92::o;6724:177::-;6870:25;;;6858:2;6843:18;;6825:76::o;6906:222::-;;7055:2;7044:9;7037:21;7075:47;7118:2;7107:9;7103:18;7095:6;7075:47;:::i;7133:921::-;;7512:3;7542:2;7531:9;7524:21;7568:47;7611:2;7600:9;7596:18;7588:6;7568:47;:::i;:::-;7554:61;;7663:9;7655:6;7651:22;7646:2;7635:9;7631:18;7624:50;7691:35;7719:6;7711;7691:35;:::i;:::-;7757:2;7742:18;;7735:34;;;;-1:-1:-1;;7800:2:1;7785:18;;7778:34;;;;7843:3;7828:19;;7821:35;;;;7900:14;;7893:22;7887:3;7872:19;;7865:51;7947:3;7932:19;;7925:35;7991:3;7976:19;;7969:35;8035:3;8020:19;;;8013:35;7683:43;7492:562;-1:-1:-1;;7492:562:1:o;8059:399::-;8261:2;8243:21;;;8300:2;8280:18;;;8273:30;8339:34;8334:2;8319:18;;8312:62;-1:-1:-1;;;8405:2:1;8390:18;;8383:33;8448:3;8433:19;;8233:225::o;8463:398::-;8665:2;8647:21;;;8704:2;8684:18;;;8677:30;8743:34;8738:2;8723:18;;8716:62;-1:-1:-1;;;8809:2:1;8794:18;;8787:32;8851:3;8836:19;;8637:224::o;8866:399::-;9068:2;9050:21;;;9107:2;9087:18;;;9080:30;9146:34;9141:2;9126:18;;9119:62;-1:-1:-1;;;9212:2:1;9197:18;;9190:33;9255:3;9240:19;;9040:225::o;9270:398::-;9472:2;9454:21;;;9511:2;9491:18;;;9484:30;9550:34;9545:2;9530:18;;9523:62;-1:-1:-1;;;9616:2:1;9601:18;;9594:32;9658:3;9643:19;;9444:224::o;9673:411::-;9875:2;9857:21;;;9914:2;9894:18;;;9887:30;9953:34;9948:2;9933:18;;9926:62;-1:-1:-1;;;10019:2:1;10004:18;;9997:45;10074:3;10059:19;;9847:237::o;10089:344::-;10291:2;10273:21;;;10330:2;10310:18;;;10303:30;-1:-1:-1;;;10364:2:1;10349:18;;10342:50;10424:2;10409:18;;10263:170::o;10438:349::-;10640:2;10622:21;;;10679:2;10659:18;;;10652:30;10718:27;10713:2;10698:18;;10691:55;10778:2;10763:18;;10612:175::o;10792:398::-;10994:2;10976:21;;;11033:2;11013:18;;;11006:30;11072:34;11067:2;11052:18;;11045:62;-1:-1:-1;;;11138:2:1;11123:18;;11116:32;11180:3;11165:19;;10966:224::o;11195:342::-;11397:2;11379:21;;;11436:2;11416:18;;;11409:30;-1:-1:-1;;;11470:2:1;11455:18;;11448:48;11528:2;11513:18;;11369:168::o;11542:350::-;11744:2;11726:21;;;11783:2;11763:18;;;11756:30;11822:28;11817:2;11802:18;;11795:56;11883:2;11868:18;;11716:176::o;11897:406::-;12099:2;12081:21;;;12138:2;12118:18;;;12111:30;12177:34;12172:2;12157:18;;12150:62;-1:-1:-1;;;12243:2:1;12228:18;;12221:40;12293:3;12278:19;;12071:232::o;12308:398::-;12510:2;12492:21;;;12549:2;12529:18;;;12522:30;12588:34;12583:2;12568:18;;12561:62;-1:-1:-1;;;12654:2:1;12639:18;;12632:32;12696:3;12681:19;;12482:224::o;12711:397::-;12913:2;12895:21;;;12952:2;12932:18;;;12925:30;12991:34;12986:2;12971:18;;12964:62;-1:-1:-1;;;13057:2:1;13042:18;;13035:31;13098:3;13083:19;;12885:223::o;13113:351::-;13315:2;13297:21;;;13354:2;13334:18;;;13327:30;13393:29;13388:2;13373:18;;13366:57;13455:2;13440:18;;13287:177::o;13469:412::-;13671:2;13653:21;;;13710:2;13690:18;;;13683:30;13749:34;13744:2;13729:18;;13722:62;-1:-1:-1;;;13815:2:1;13800:18;;13793:46;13871:3;13856:19;;13643:238::o;13886:403::-;14088:2;14070:21;;;14127:2;14107:18;;;14100:30;14166:34;14161:2;14146:18;;14139:62;-1:-1:-1;;;14232:2:1;14217:18;;14210:37;14279:3;14264:19;;14060:229::o;14294:340::-;14496:2;14478:21;;;14535:2;14515:18;;;14508:30;-1:-1:-1;;;14569:2:1;14554:18;;14547:46;14625:2;14610:18;;14468:166::o;14639:351::-;14841:2;14823:21;;;14880:2;14860:18;;;14853:30;14919:29;14914:2;14899:18;;14892:57;14981:2;14966:18;;14813:177::o;14995:408::-;15197:2;15179:21;;;15236:2;15216:18;;;15209:30;15275:34;15270:2;15255:18;;15248:62;-1:-1:-1;;;15341:2:1;15326:18;;15319:42;15393:3;15378:19;;15169:234::o;15408:352::-;15610:2;15592:21;;;15649:2;15629:18;;;15622:30;15688;15683:2;15668:18;;15661:58;15751:2;15736:18;;15582:178::o;15765:401::-;15967:2;15949:21;;;16006:2;15986:18;;;15979:30;16045:34;16040:2;16025:18;;16018:62;-1:-1:-1;;;16111:2:1;16096:18;;16089:35;16156:3;16141:19;;15939:227::o;16171:352::-;16373:2;16355:21;;;16412:2;16392:18;;;16385:30;16451;16446:2;16431:18;;16424:58;16514:2;16499:18;;16345:178::o;16528:408::-;16730:2;16712:21;;;16769:2;16749:18;;;16742:30;16808:34;16803:2;16788:18;;16781:62;-1:-1:-1;;;16874:2:1;16859:18;;16852:42;16926:3;16911:19;;16702:234::o;16941:355::-;17143:2;17125:21;;;17182:2;17162:18;;;17155:30;17221:33;17216:2;17201:18;;17194:61;17287:2;17272:18;;17115:181::o;17301:404::-;17503:2;17485:21;;;17542:2;17522:18;;;17515:30;17581:34;17576:2;17561:18;;17554:62;-1:-1:-1;;;17647:2:1;17632:18;;17625:38;17695:3;17680:19;;17475:230::o;17710:397::-;17912:2;17894:21;;;17951:2;17931:18;;;17924:30;17990:34;17985:2;17970:18;;17963:62;-1:-1:-1;;;18056:2:1;18041:18;;18034:31;18097:3;18082:19;;17884:223::o;18112:404::-;18314:2;18296:21;;;18353:2;18333:18;;;18326:30;18392:34;18387:2;18372:18;;18365:62;-1:-1:-1;;;18458:2:1;18443:18;;18436:38;18506:3;18491:19;;18286:230::o;18521:402::-;18723:2;18705:21;;;18762:2;18742:18;;;18735:30;18801:34;18796:2;18781:18;;18774:62;-1:-1:-1;;;18867:2:1;18852:18;;18845:36;18913:3;18898:19;;18695:228::o;18928:352::-;19130:2;19112:21;;;19169:2;19149:18;;;19142:30;19208;19203:2;19188:18;;19181:58;19271:2;19256:18;;19102:178::o;19285:400::-;19487:2;19469:21;;;19526:2;19506:18;;;19499:30;19565:34;19560:2;19545:18;;19538:62;-1:-1:-1;;;19631:2:1;19616:18;;19609:34;19675:3;19660:19;;19459:226::o;19690:397::-;19892:2;19874:21;;;19931:2;19911:18;;;19904:30;19970:34;19965:2;19950:18;;19943:62;-1:-1:-1;;;20036:2:1;20021:18;;20014:31;20077:3;20062:19;;19864:223::o;20092:347::-;20294:2;20276:21;;;20333:2;20313:18;;;20306:30;20372:25;20367:2;20352:18;;20345:53;20430:2;20415:18;;20266:173::o;20444:355::-;20646:2;20628:21;;;20685:2;20665:18;;;20658:30;20724:33;20719:2;20704:18;;20697:61;20790:2;20775:18;;20618:181::o;20804:401::-;21006:2;20988:21;;;21045:2;21025:18;;;21018:30;21084:34;21079:2;21064:18;;21057:62;-1:-1:-1;;;21150:2:1;21135:18;;21128:35;21195:3;21180:19;;20978:227::o;21210:339::-;21412:2;21394:21;;;21451:2;21431:18;;;21424:30;-1:-1:-1;;;21485:2:1;21470:18;;21463:45;21540:2;21525:18;;21384:165::o;21554:400::-;21756:2;21738:21;;;21795:2;21775:18;;;21768:30;21834:34;21829:2;21814:18;;21807:62;-1:-1:-1;;;21900:2:1;21885:18;;21878:34;21944:3;21929:19;;21728:226::o;21959:400::-;22161:2;22143:21;;;22200:2;22180:18;;;22173:30;22239:34;22234:2;22219:18;;22212:62;-1:-1:-1;;;22305:2:1;22290:18;;22283:34;22349:3;22334:19;;22133:226::o;22364:401::-;22566:2;22548:21;;;22605:2;22585:18;;;22578:30;22644:34;22639:2;22624:18;;22617:62;-1:-1:-1;;;22710:2:1;22695:18;;22688:35;22755:3;22740:19;;22538:227::o;22770:335::-;22972:2;22954:21;;;23011:2;22991:18;;;22984:30;-1:-1:-1;;;23045:2:1;23030:18;;23023:41;23096:2;23081:18;;22944:161::o;23110:405::-;23312:2;23294:21;;;23351:2;23331:18;;;23324:30;23390:34;23385:2;23370:18;;23363:62;-1:-1:-1;;;23456:2:1;23441:18;;23434:39;23505:3;23490:19;;23284:231::o;23520:414::-;23722:2;23704:21;;;23761:2;23741:18;;;23734:30;23800:34;23795:2;23780:18;;23773:62;-1:-1:-1;;;23866:2:1;23851:18;;23844:48;23924:3;23909:19;;23694:240::o;23939:352::-;24141:2;24123:21;;;24180:2;24160:18;;;24153:30;24219;24214:2;24199:18;;24192:58;24282:2;24267:18;;24113:178::o;24296:354::-;24498:2;24480:21;;;24537:2;24517:18;;;24510:30;24576:32;24571:2;24556:18;;24549:60;24641:2;24626:18;;24470:180::o;24655:411::-;24857:2;24839:21;;;24896:2;24876:18;;;24869:30;24935:34;24930:2;24915:18;;24908:62;-1:-1:-1;;;25001:2:1;24986:18;;24979:45;25056:3;25041:19;;24829:237::o;25071:355::-;25273:2;25255:21;;;25312:2;25292:18;;;25285:30;25351:33;25346:2;25331:18;;25324:61;25417:2;25402:18;;25245:181::o;25431:1657::-;25642:13;;25624:32;;25712:4;25700:17;;;25694:24;25672:20;;;25665:54;25775:4;25763:17;;;25757:24;25735:20;;;25728:54;25838:4;25826:17;;;25820:24;25798:20;;;25791:54;25901:4;25889:17;;;25883:24;25861:20;;;25854:54;25964:4;25952:17;;;25946:24;25924:20;;;25917:54;26027:4;26015:17;;;26009:24;25987:20;;;25980:54;26090:4;26078:17;;;26072:24;26050:20;;;26043:54;26116:6;26164:15;;;26158:22;26138:18;;;26131:50;26200:6;26248:15;;;26242:22;26222:18;;;26215:50;26284:6;26332:15;;;26326:22;26306:18;;;26299:50;26368:6;26416:15;;;26410:22;26390:18;;;26383:50;26452:6;26500:15;;;26494:22;26474:18;;;26467:50;26536:6;26584:15;;;26578:22;26558:18;;;26551:50;26620:6;26668:15;;;26662:22;26642:18;;;26635:50;26704:6;26752:15;;;26746:22;26726:18;;;26719:50;26788:6;26829:15;;;26823:22;25611:3;25596:19;;;26788:6;26854:54;26889:18;;;26823:22;26854:54;:::i;:::-;-1:-1:-1;;26928:6:1;26977:16;;;26971:23;26950:19;;;26943:52;27015:6;27064:16;;;27058:23;27037:19;;;;27030:52;;;;25578:1510;:::o;27275:981::-;27726:25;;;27782:2;27767:18;;27760:34;;;;27825:2;27810:18;;27803:34;;;;27868:2;27853:18;;27846:34;;;;27911:3;27896:19;;27889:35;;;;27955:3;27940:19;;27933:35;;;;27999:3;27984:19;;27977:35;28043:3;28028:19;;28021:35;28087:3;28072:19;;28065:35;28131:3;28116:19;;28109:35;28175:3;28160:19;;28153:36;28233:15;28226:23;28220:3;28205:19;;28198:52;27713:3;27698:19;;27680:576::o;28261:184::-;28433:4;28421:17;;;;28403:36;;28391:2;28376:18;;28358:87::o;28450:242::-;28520:2;28514:9;28550:17;;;28597:18;28582:34;;28618:22;;;28579:62;28576:2;;;28644:9;28576:2;28671;28664:22;28494:198;;-1:-1:-1;28494:198:1:o;28697:183::-;;28796:18;28788:6;28785:30;28782:2;;;28818:9;28782:2;-1:-1:-1;28869:4:1;28850:17;;;28846:28;;28772:108::o

Swarm Source

ipfs://93fc7fe8b4f7c35db69a869c558ea55d57c84eb1ca0d493e2f2cea83eb8a7913
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.