ETH Price: $3,296.86 (-3.37%)
Gas: 20 Gwei

Token

Martian Essence (MES)
 

Overview

Max Total Supply

10,324,408.378 MES

Holders

352

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
bito94.eth
Balance
68.4186 MES

Value
$0.00
0xe216e8ab691bda159d0f2a559a36cd102d8fd9d4
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:
MartianEssence

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-03
*/

//SPDX-License-Identifier: Delayed Release MIT
pragma solidity ^0.8.0;

/*
    ERC20I (ERC20 0xInuarashi Edition)
    Minified and Gas Optimized
    From the efforts of the 0x Collective
    https://0xcollective.net
*/

contract ERC20I {
    // Token Params
    string public name;
    string public symbol;
    constructor(string memory name_, string memory symbol_) {
        name = name_;
        symbol = symbol_;
    }

    // Decimals
    uint8 public constant decimals = 18;

    // Supply
    uint256 public totalSupply;
    
    // Mappings of Balances
    mapping(address => uint256) public balanceOf;
    mapping(address => mapping(address => uint256)) public allowance;

    // Events
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);

    // Internal Functions
    function _mint(address to_, uint256 amount_) internal {
        totalSupply += amount_;
        balanceOf[to_] += amount_;
        emit Transfer(address(0x0), to_, amount_);
    }
    function _burn(address from_, uint256 amount_) internal {
        balanceOf[from_] -= amount_;
        totalSupply -= amount_;
        emit Transfer(from_, address(0x0), amount_);
    }

    // Public Functions
    function approve(address spender_, uint256 amount_) public virtual returns (bool) {
        allowance[msg.sender][spender_] = amount_;
        emit Approval(msg.sender, spender_, amount_);
        return true;
    }
    function transfer(address to_, uint256 amount_) public virtual returns (bool) {
        balanceOf[msg.sender] -= amount_;
        balanceOf[to_] += amount_;
        emit Transfer(msg.sender, to_, amount_);
        return true;
    }
    function transferFrom(address from_, address to_, uint256 amount_) public virtual returns (bool) {
        if (allowance[from_][msg.sender] != type(uint256).max) {
            allowance[from_][msg.sender] -= amount_; }
        balanceOf[from_] -= amount_;
        balanceOf[to_] += amount_;
        emit Transfer(from_, to_, amount_);
        return true;
    }

    // 0xInuarashi Custom Functions
    function multiTransfer(address[] memory to_, uint256[] memory amounts_) public virtual {
        require(to_.length == amounts_.length, "ERC20I: To and Amounts length Mismatch!");
        for (uint256 i = 0; i < to_.length; i++) {
            transfer(to_[i], amounts_[i]);
        }
    }
    function multiTransferFrom(address[] memory from_, address[] memory to_, uint256[] memory amounts_) public virtual {
        require(from_.length == to_.length && from_.length == amounts_.length, "ERC20I: From, To, and Amounts length Mismatch!");
        for (uint256 i = 0; i < from_.length; i++) {
            transferFrom(from_[i], to_[i], amounts_[i]);
        }
    }
}

abstract contract ERC20IBurnable is ERC20I {
    function burn(uint256 amount_) external virtual {
        _burn(msg.sender, amount_);
    }
    function burnFrom(address from_, uint256 amount_) public virtual {
        uint256 _currentAllowance = allowance[from_][msg.sender];
        require(_currentAllowance >= amount_, "ERC20IBurnable: Burn amount requested exceeds allowance!");

        if (allowance[from_][msg.sender] != type(uint256).max) {
            allowance[from_][msg.sender] -= amount_; }

        _burn(from_, amount_);
    }
}

abstract contract Ownable {
    address public owner;
    constructor() { 
        owner = msg.sender; 
    }
    modifier onlyOwner { 
        require(owner == msg.sender, "Ownable: caller is not the owner"); 
        _; 
    }
    function transferOwnership(address newOwner_) public virtual onlyOwner {
        owner = newOwner_; 
    }
}

interface iMES {
    struct Yield { uint40 yieldRate_; uint40 lastUpdatedTime_; uint176 pendingRewards_; }
    function raw_getTotalClaimableTokens(address address_) external view returns (uint256);
    function addressToYield(address address_) external view returns (Yield memory);
}

contract MartianEssence is ERC20IBurnable, Ownable {

    // Constructor and Treasury Mints
    constructor() ERC20I("Martian Essence", "MES") {

        // Treasury Mint. We will never use this, except to benefit the community.
        // This is 10M and is around 5% of the theoretical total supply.
        _mint(msg.sender, 10000000 ether);
    }

    // Interface with Old MES
    iMES public oMES = iMES(0x984b6968132DA160122ddfddcc4461C995741513);
    function setoMEs(address address_) external onlyOwner {
        oMES = iMES(address_);
    }

    // Times
    uint40 public yieldStartTime = 1638619200; // 2021-12-04_07-00-00 EST
    uint40 public yieldEndTime = 1956502800; // 2031-12-31_12-00-00 EST
    function setYieldEndTime(uint40 yieldEndTime_) external onlyOwner { 
        yieldEndTime = yieldEndTime_; }

    // Controllers
    mapping(address => bool) public mesControllers; 
    function setController(address address_, bool bool_) external onlyOwner {
        mesControllers[address_] = bool_; }
    modifier onlyControllers { 
        require(mesControllers[msg.sender], "You are not a controller!"); _; }

    // Yield Info
    uint256 public globalModulus = (10 ** 14);
    uint40 public halvingRate = 1; // This is not used

    struct Yield {
        uint40 yieldRate_;
        uint40 lastUpdatedTime_;
        uint176 pendingRewards_;
    }

    mapping(address => Yield) public addressToYield;

    function setHalvingRate(uint40 rate_) external onlyOwner {
        halvingRate = rate_; }

    // Events
    event Claim(address to_, uint256 amount_);

    // Administration
    function setYieldRate(address address_, uint256 yieldRate_) external onlyControllers {
        uint40 _yieldRate = uint40(yieldRate_ / globalModulus);
        addressToYield[address_].yieldRate_ = _yieldRate;
    }
    function addYieldRate(address address_, uint256 yieldRateAdd_) external onlyControllers {
        uint40 _yieldRateAdd = uint40(yieldRateAdd_ / globalModulus);
        addressToYield[address_].yieldRate_ += _yieldRateAdd;
    }
    function subYieldRate(address address_, uint256 yieldRateSub_) external onlyControllers {
        uint40 _yieldRateSub = uint40(yieldRateSub_ / globalModulus);
        addressToYield[address_].yieldRate_ -= _yieldRateSub;
    }

    // Credits System
    function deductCredits(address address_, uint256 amount_) external onlyControllers {
        uint40 _amount = uint40(amount_ / globalModulus);
        require(addressToYield[address_].pendingRewards_ >= _amount, "Not enough credits!");
        addressToYield[address_].pendingRewards_ -= _amount;
    }
    function addCredits(address address_, uint256 amount_) external onlyControllers {
        uint40 _amount = uint40(amount_ / globalModulus);
        addressToYield[address_].pendingRewards_ += _amount;
    }

    // ERC20 Burn (Stacked Functions!)
    function burn(address from_, uint256 amount_) external onlyControllers {
        _burn(from_, amount_);
    }

    // ERC20 Airdrop for Migration
    function airdropMigration(address[] calldata addresses_, uint256[] calldata amounts_) external onlyOwner {
        require(addresses_.length == amounts_.length,
            "Array length mismatch!");
        
        for (uint256 i = 0; i < addresses_.length; i++) {
            _mint(addresses_[i], amounts_[i]);
        }
    }

    // Migrator: Unstuck Addresses
    function migrateSetNewYieldInfos(address[] calldata addresses_, uint40[] calldata lastUpdatedTimes_,
    uint40[] calldata yieldRates_, uint176[] calldata pendingRewards_) external onlyOwner {
        require(addresses_.length == lastUpdatedTimes_.length
            && addresses_.length == yieldRates_.length
            && addresses_.length == pendingRewards_.length,
            "Array lengths mismatch!");
        
        for (uint256 i = 0; i < addresses_.length; i++) {
            addressToYield[addresses_[i]].lastUpdatedTime_ = lastUpdatedTimes_[i];
            addressToYield[addresses_[i]].yieldRate_ = yieldRates_[i];
            addressToYield[addresses_[i]].pendingRewards_ = pendingRewards_[i];
        }
    }

    // Internal View Functions
    function __getSmallerValueUint40(uint40 a, uint40 b) internal pure returns (uint40) {
        return a < b ? a : b;
    }
    function __getTimestamp() internal view returns (uint40) {
        return __getSmallerValueUint40(uint40(block.timestamp), yieldEndTime);
    }
    function __calculateYieldReward(address address_) internal view returns (uint176) {
        // ~0xInuarashi: The fixed calculation code...
        uint256 _totalYieldRate = uint256(addressToYield[address_].yieldRate_); 
        
        if (_totalYieldRate == 0) { return 0; }
        
        uint256 _time = uint256(__getSmallerValueUint40(uint40(block.timestamp), yieldEndTime));
        uint256 _lastUpdate = uint256(addressToYield[address_].lastUpdatedTime_);

        if (_lastUpdate > yieldStartTime) {
            return uint176( (_totalYieldRate * (_time - _lastUpdate) / 1 days) / halvingRate);
        } else {
            return 0;
        }
    }

    // Migration Logic
    bool public migrationEnabled = true;
    function setMigrationEnabled(bool bool_) external onlyOwner { migrationEnabled = bool_; }

    function __migrateRewards(address address_) internal {
        require(migrationEnabled,
            "Migration is not enabled!");
        
        uint40 _time = __getTimestamp();
        uint40 _lastUpdate = addressToYield[address_].lastUpdatedTime_;

        require(_lastUpdate == 0,
            "You have already migrated!");
        
        // Set the time. This starts the yield again.
        addressToYield[address_].lastUpdatedTime_ = _time;
        
        // Claim their rewards for them from the old contract
        uint176 _pendingRewards = uint176(oMES.raw_getTotalClaimableTokens(address_));

        if (_pendingRewards > 0) {
            addressToYield[address_].pendingRewards_ = _pendingRewards;
        }

        // Set their yield rate to the previous contract's yield rate
        uint40 _yieldRate = oMES.addressToYield(address_).yieldRate_;

        if (_yieldRate > 0) {
            addressToYield[address_].yieldRate_ = _yieldRate;
        }
    }

    function migrateRewards(address[] calldata addresses_) public {
        require(migrationEnabled,
            "Migration is not enabled!");
    
        for (uint256 i = 0; i < addresses_.length; i++) {
            __migrateRewards(addresses_[i]);
        }
    }

    // Internal Write Functions
    function __updateYieldReward(address address_) internal {
        uint40 _time = __getSmallerValueUint40(uint40(block.timestamp), yieldEndTime);
        uint40 _lastUpdate = addressToYield[address_].lastUpdatedTime_;

        if (_lastUpdate > 0) { 
            addressToYield[address_].pendingRewards_ += __calculateYieldReward(address_); 
        } else {
            // Migrate Rewards Logic if _lastUpdate is 0
            if (migrationEnabled) {
                __migrateRewards(address_);
            }
        }

        if (_lastUpdate != yieldEndTime) { 
            addressToYield[address_].lastUpdatedTime_ = _time; 
        }
    }

    function __claimYieldReward(address address_) internal {
        uint176 _pendingRewards = addressToYield[address_].pendingRewards_;

        if (_pendingRewards > 0) { 
            addressToYield[address_].pendingRewards_ = 0;

            uint256 _expandedReward = uint256(_pendingRewards * globalModulus);

            _mint(address_, _expandedReward);
            emit Claim(address_, _expandedReward);
        } 
    }

    // Public Write Functions
    function updateReward(address address_) public {
        __updateYieldReward(address_); 
    }
    function claimTokens(address address_) public {
        __updateYieldReward(address_);
        __claimYieldReward(address_);
    }

    // Public Write Multi-Functions
    function multiUpdateReward(address[] memory addresses_) public {
        for (uint256 i = 0; i < addresses_.length; i++) {
            updateReward(addresses_[i]);
        }
    }
    function multiClaimTokens(address[] memory addresses_) public {
        for (uint256 i = 0; i < addresses_.length; i++) {
            claimTokens(addresses_[i]);
        }
    }

    // Public View Functions
    function getStorageClaimableTokens(address address_) public view returns (uint256) {
        return uint256( uint256(addressToYield[address_].pendingRewards_) * globalModulus);
    }
    function getPendingClaimableTokens(address address_) public view returns (uint256) {
        return uint256( uint256(__calculateYieldReward(address_)) * globalModulus);
    }
    function getTotalClaimableTokens(address address_) public view returns (uint256) {
        return getStorageClaimableTokens(address_) + getPendingClaimableTokens(address_);
    }
    function getYieldRateOfAddress(address address_) public view returns (uint256) {
        return uint256( uint256(addressToYield[address_].yieldRate_) * globalModulus); 
    }
    function raw_getStorageClaimableTokens(address address_) public view returns (uint256) {
        return uint256(addressToYield[address_].pendingRewards_);
    }
    function raw_getPendingClaimableTokens(address address_) public view returns (uint256) {
        return uint256(__calculateYieldReward(address_));
    }
    function raw_getTotalClaimableTokens(address address_) public view returns (uint256) {
        return raw_getStorageClaimableTokens(address_) + raw_getPendingClaimableTokens(address_);
    }

}

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":"to_","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"Claim","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"},{"inputs":[{"internalType":"address","name":"address_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"addCredits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"},{"internalType":"uint256","name":"yieldRateAdd_","type":"uint256"}],"name":"addYieldRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressToYield","outputs":[{"internalType":"uint40","name":"yieldRate_","type":"uint40"},{"internalType":"uint40","name":"lastUpdatedTime_","type":"uint40"},{"internalType":"uint176","name":"pendingRewards_","type":"uint176"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses_","type":"address[]"},{"internalType":"uint256[]","name":"amounts_","type":"uint256[]"}],"name":"airdropMigration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","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":"","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":"from_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"claimTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"deductCredits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"getPendingClaimableTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"getStorageClaimableTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"getTotalClaimableTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"getYieldRateOfAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"globalModulus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"halvingRate","outputs":[{"internalType":"uint40","name":"","type":"uint40"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mesControllers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses_","type":"address[]"}],"name":"migrateRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses_","type":"address[]"},{"internalType":"uint40[]","name":"lastUpdatedTimes_","type":"uint40[]"},{"internalType":"uint40[]","name":"yieldRates_","type":"uint40[]"},{"internalType":"uint176[]","name":"pendingRewards_","type":"uint176[]"}],"name":"migrateSetNewYieldInfos","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"migrationEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses_","type":"address[]"}],"name":"multiClaimTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"to_","type":"address[]"},{"internalType":"uint256[]","name":"amounts_","type":"uint256[]"}],"name":"multiTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"from_","type":"address[]"},{"internalType":"address[]","name":"to_","type":"address[]"},{"internalType":"uint256[]","name":"amounts_","type":"uint256[]"}],"name":"multiTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses_","type":"address[]"}],"name":"multiUpdateReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oMES","outputs":[{"internalType":"contract iMES","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"raw_getPendingClaimableTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"raw_getStorageClaimableTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"raw_getTotalClaimableTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"},{"internalType":"bool","name":"bool_","type":"bool"}],"name":"setController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint40","name":"rate_","type":"uint40"}],"name":"setHalvingRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"bool_","type":"bool"}],"name":"setMigrationEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint40","name":"yieldEndTime_","type":"uint40"}],"name":"setYieldEndTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"},{"internalType":"uint256","name":"yieldRate_","type":"uint256"}],"name":"setYieldRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"setoMEs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"},{"internalType":"uint256","name":"yieldRateSub_","type":"uint256"}],"name":"subYieldRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from_","type":"address"},{"internalType":"address","name":"to_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner_","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"updateReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"yieldEndTime","outputs":[{"internalType":"uint40","name":"","type":"uint40"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"yieldStartTime","outputs":[{"internalType":"uint40","name":"","type":"uint40"}],"stateMutability":"view","type":"function"}]

6080604052600680546001600160f01b0319167c749ddd100061ab5840984b6968132da160122ddfddcc4461c995741513179055655af3107a40006008556009805464ffffffffff19166001908117909155600b805460ff191690911790553480156200006b57600080fd5b50604080518082018252600f81526e4d61727469616e20457373656e636560881b6020808301918252835180850190945260038452624d455360e81b908401528151919291620000be9160009162000196565b508051620000d490600190602084019062000196565b5050600580546001600160a01b031916339081179091556200010391506a084595161401484a00000062000109565b620002a0565b80600260008282546200011d91906200023c565b90915550506001600160a01b038216600090815260036020526040812080548392906200014c9084906200023c565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b828054620001a49062000263565b90600052602060002090601f016020900481019282620001c8576000855562000213565b82601f10620001e357805160ff191683800117855562000213565b8280016001018555821562000213579182015b8281111562000213578251825591602001919060010190620001f6565b506200022192915062000225565b5090565b5b8082111562000221576000815560010162000226565b600082198211156200025e57634e487b7160e01b600052601160045260246000fd5b500190565b600181811c908216806200027857607f821691505b602082108114156200029a57634e487b7160e01b600052602260045260246000fd5b50919050565b61267580620002b06000396000f3fe608060405234801561001057600080fd5b50600436106102a05760003560e01c80637e6335f411610167578063ba521580116100ce578063e0dba60f11610087578063e0dba60f146106a0578063eb0d22be146106b3578063ef3baf6b146106bc578063f2fde38b146106cf578063fd435e88146106e2578063fe216f06146106f557600080fd5b8063ba521580146105b7578063c071bd3d146105ca578063c7e6cc3f1461063c578063cbeb54311461064f578063dd62ed3e14610662578063df8de3e71461068d57600080fd5b80639b390135116101205780639b390135146105455780639dc29fac14610558578063a3f0a43a1461056b578063a7e794831461057e578063a9059cbb14610591578063b5862c25146105a457600080fd5b80637e6335f4146104c857806382596f01146104d9578063871ff405146104ec5780638da5cb5b146104ff578063901138931461052a57806395d89b411461053d57600080fd5b806342966c681161020b5780636977e17d116101c45780636977e17d1461044457806370a0823114610457578063752fd6101461047757806379cc67901461048a5780637bde17a31461049d5780637c073ede146104b057600080fd5b806342966c68146103c2578063521c27f2146103d5578063632447c9146103e8578063649d35fd146103fb578063661acfb11461040e578063662f2fcd1461042157600080fd5b8063261f77f11161025d578063261f77f114610334578063313ce56714610347578063314ca0391461036157806335b944bf1461038f578063403eea961461039c5780634051584f146103af57600080fd5b806302b343b1146102a557806306fdde03146102cb578063095ea7b3146102e057806318160ddd146103035780631e89d5451461030c57806323b872dd14610321575b600080fd5b6102b86102b3366004611ed6565b610708565b6040519081526020015b60405180910390f35b6102d3610733565b6040516102c29190612348565b6102f36102ee366004611f8a565b6107c1565b60405190151581526020016102c2565b6102b860025481565b61031f61031a3660046121eb565b61082d565b005b6102f361032f366004611f24565b6108f3565b61031f610342366004611ff6565b6109f9565b61034f601281565b60405160ff90911681526020016102c2565b60065461037990600160c81b900464ffffffffff1681565b60405164ffffffffff90911681526020016102c2565b600b546102f39060ff1681565b61031f6103aa366004612126565b610ad7565b61031f6103bd366004611f8a565b610b1b565b61031f6103d03660046122f9565b610b92565b61031f6103e336600461224f565b610b9f565b61031f6103f6366004611ed6565b610bdc565b6102b8610409366004611ed6565b610be5565b61031f61041c366004611fb4565b610c22565b6102f361042f366004611ed6565b60076020526000908152604090205460ff1681565b61031f61045236600461232b565b610cbc565b6102b8610465366004611ed6565b60036020526000908152604090205481565b6102b8610485366004611ed6565b610d04565b61031f610498366004611f8a565b610d25565b61031f6104ab366004612163565b610e2e565b60065461037990600160a01b900464ffffffffff1681565b6009546103799064ffffffffff1681565b61031f6104e7366004611f8a565b610f1e565b61031f6104fa366004611f8a565b611041565b600554610512906001600160a01b031681565b6040516001600160a01b0390911681526020016102c2565b600654610512906001600160a01b031681565b6102d36110c7565b61031f61055336600461232b565b6110d4565b61031f610566366004611f8a565b611126565b6102b8610579366004611ed6565b61115f565b61031f61058c366004612126565b61117d565b6102f361059f366004611f8a565b6111bd565b61031f6105b2366004611f8a565b61123b565b6102b86105c5366004611ed6565b6112d3565b61060f6105d8366004611ed6565b600a6020526000908152604090205464ffffffffff80821691600160281b810490911690600160501b90046001600160b01b031683565b6040805164ffffffffff94851681529390921660208401526001600160b01b0316908201526060016102c2565b6102b861064a366004611ed6565b6112e7565b61031f61065d366004611ed6565b611315565b6102b8610670366004611ef1565b600460209081526000928352604080842090915290825290205481565b61031f61069b366004611ed6565b611361565b61031f6106ae366004611f60565b611373565b6102b860085481565b6102b86106ca366004611ed6565b6113c8565b61031f6106dd366004611ed6565b6113e2565b61031f6106f0366004611f8a565b61142e565b61031f610703366004612062565b6114a1565b6001600160a01b03166000908152600a6020526040902054600160501b90046001600160b01b031690565b600080546107409061255f565b80601f016020809104026020016040519081016040528092919081815260200182805461076c9061255f565b80156107b95780601f1061078e576101008083540402835291602001916107b9565b820191906000526020600020905b81548152906001019060200180831161079c57829003601f168201915b505050505081565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061081c9086815260200190565b60405180910390a350600192915050565b80518251146108935760405162461bcd60e51b815260206004820152602760248201527f4552433230493a20546f20616e6420416d6f756e7473206c656e677468204d69604482015266736d617463682160c81b60648201526084015b60405180910390fd5b60005b82518110156108ee576108db8382815181106108b4576108b46125cb565b60200260200101518383815181106108ce576108ce6125cb565b60200260200101516111bd565b50806108e68161259a565b915050610896565b505050565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914610958576001600160a01b03841660009081526004602090815260408083203384529091528120805484929061095290849061252a565b90915550505b6001600160a01b0384166000908152600360205260408120805484929061098090849061252a565b90915550506001600160a01b038316600090815260036020526040812080548492906109ad908490612489565b92505081905550826001600160a01b0316846001600160a01b0316600080516020612620833981519152846040516109e791815260200190565b60405180910390a35060019392505050565b6005546001600160a01b03163314610a235760405162461bcd60e51b815260040161088a9061239d565b828114610a6b5760405162461bcd60e51b81526020600482015260166024820152754172726179206c656e677468206d69736d617463682160501b604482015260640161088a565b60005b83811015610ad057610abe858583818110610a8b57610a8b6125cb565b9050602002016020810190610aa09190611ed6565b848484818110610ab257610ab26125cb565b90506020020135611702565b80610ac88161259a565b915050610a6e565b5050505050565b60005b8151811015610b1757610b05828281518110610af857610af86125cb565b6020026020010151610bdc565b80610b0f8161259a565b915050610ada565b5050565b3360009081526007602052604090205460ff16610b4a5760405162461bcd60e51b815260040161088a906123d2565b600060085482610b5a91906124c1565b6001600160a01b03939093166000908152600a60205260409020805464ffffffffff191664ffffffffff909416939093179092555050565b610b9c338261177a565b50565b6005546001600160a01b03163314610bc95760405162461bcd60e51b815260040161088a9061239d565b600b805460ff1916911515919091179055565b610b9c816117ec565b6008546001600160a01b0382166000908152600a60205260408120549091610c1c91600160501b90046001600160b01b03166124e3565b92915050565b600b5460ff16610c705760405162461bcd60e51b81526020600482015260196024820152784d6967726174696f6e206973206e6f7420656e61626c65642160381b604482015260640161088a565b60005b818110156108ee57610caa838383818110610c9057610c906125cb565b9050602002016020810190610ca59190611ed6565b611915565b80610cb48161259a565b915050610c73565b6005546001600160a01b03163314610ce65760405162461bcd60e51b815260040161088a9061239d565b6009805464ffffffffff191664ffffffffff92909216919091179055565b6000600854610d1283611ba2565b6001600160b01b0316610c1c91906124e3565b6001600160a01b038216600090815260046020908152604080832033845290915290205481811015610dbf5760405162461bcd60e51b815260206004820152603860248201527f4552433230494275726e61626c653a204275726e20616d6f756e74207265717560448201527f6573746564206578636565647320616c6c6f77616e6365210000000000000000606482015260840161088a565b6001600160a01b038316600090815260046020908152604080832033845290915290205460001914610e24576001600160a01b038316600090815260046020908152604080832033845290915281208054849290610e1e90849061252a565b90915550505b6108ee838361177a565b81518351148015610e40575080518351145b610ea35760405162461bcd60e51b815260206004820152602e60248201527f4552433230493a2046726f6d2c20546f2c20616e6420416d6f756e7473206c6560448201526d6e677468204d69736d617463682160901b606482015260840161088a565b60005b8351811015610f1857610f05848281518110610ec457610ec46125cb565b6020026020010151848381518110610ede57610ede6125cb565b6020026020010151848481518110610ef857610ef86125cb565b60200260200101516108f3565b5080610f108161259a565b915050610ea6565b50505050565b3360009081526007602052604090205460ff16610f4d5760405162461bcd60e51b815260040161088a906123d2565b600060085482610f5d91906124c1565b6001600160a01b0384166000908152600a602052604090205490915064ffffffffff8216600160501b9091046001600160b01b03161015610fd65760405162461bcd60e51b81526020600482015260136024820152724e6f7420656e6f75676820637265646974732160681b604482015260640161088a565b6001600160a01b0383166000908152600a60208190526040909120805464ffffffffff84169290611018908490600160501b90046001600160b01b0316612502565b92506101000a8154816001600160b01b0302191690836001600160b01b03160217905550505050565b3360009081526007602052604090205460ff166110705760405162461bcd60e51b815260040161088a906123d2565b60006008548261108091906124c1565b6001600160a01b0384166000908152600a60208190526040909120805492935064ffffffffff841692909190611018908490600160501b90046001600160b01b031661245e565b600180546107409061255f565b6005546001600160a01b031633146110fe5760405162461bcd60e51b815260040161088a9061239d565b6006805464ffffffffff909216600160c81b0264ffffffffff60c81b19909216919091179055565b3360009081526007602052604090205460ff166111555760405162461bcd60e51b815260040161088a906123d2565b610b17828261177a565b600061116a82610d04565b61117383610be5565b610c1c9190612489565b60005b8151811015610b17576111ab82828151811061119e5761119e6125cb565b6020026020010151611361565b806111b58161259a565b915050611180565b336000908152600360205260408120805483919083906111de90849061252a565b90915550506001600160a01b0383166000908152600360205260408120805484929061120b908490612489565b90915550506040518281526001600160a01b0384169033906000805160206126208339815191529060200161081c565b3360009081526007602052604090205460ff1661126a5760405162461bcd60e51b815260040161088a906123d2565b60006008548261127a91906124c1565b6001600160a01b0384166000908152600a60205260408120805492935083929091906112ae90849064ffffffffff166124a1565b92506101000a81548164ffffffffff021916908364ffffffffff160217905550505050565b60006112de826113c8565b61117383610708565b6008546001600160a01b0382166000908152600a60205260408120549091610c1c9164ffffffffff166124e3565b6005546001600160a01b0316331461133f5760405162461bcd60e51b815260040161088a9061239d565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b61136a816117ec565b610b9c81611c7b565b6005546001600160a01b0316331461139d5760405162461bcd60e51b815260040161088a9061239d565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b60006113d382611ba2565b6001600160b01b031692915050565b6005546001600160a01b0316331461140c5760405162461bcd60e51b815260040161088a9061239d565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b3360009081526007602052604090205460ff1661145d5760405162461bcd60e51b815260040161088a906123d2565b60006008548261146d91906124c1565b6001600160a01b0384166000908152600a60205260408120805492935083929091906112ae90849064ffffffffff16612541565b6005546001600160a01b031633146114cb5760405162461bcd60e51b815260040161088a9061239d565b86851480156114d957508683145b80156114e457508681145b6115305760405162461bcd60e51b815260206004820152601760248201527f4172726179206c656e67746873206d69736d6174636821000000000000000000604482015260640161088a565b60005b878110156116f75786868281811061154d5761154d6125cb565b9050602002016020810190611562919061232b565b600a60008b8b85818110611578576115786125cb565b905060200201602081019061158d9190611ed6565b6001600160a01b031681526020810191909152604001600020805464ffffffffff92909216600160281b0269ffffffffff0000000000199092169190911790558484828181106115df576115df6125cb565b90506020020160208101906115f4919061232b565b600a60008b8b8581811061160a5761160a6125cb565b905060200201602081019061161f9190611ed6565b6001600160a01b031681526020810191909152604001600020805464ffffffffff191664ffffffffff92909216919091179055828282818110611664576116646125cb565b905060200201602081019061167991906122dc565b600a60008b8b8581811061168f5761168f6125cb565b90506020020160208101906116a49190611ed6565b6001600160a01b03168152602081019190915260400160002080546001600160b01b0392909216600160501b0269ffffffffffffffffffff909216919091179055806116ef8161259a565b915050611533565b505050505050505050565b80600260008282546117149190612489565b90915550506001600160a01b03821660009081526003602052604081208054839290611741908490612489565b90915550506040518181526001600160a01b03831690600090600080516020612620833981519152906020015b60405180910390a35050565b6001600160a01b038216600090815260036020526040812080548392906117a290849061252a565b9250508190555080600260008282546117bb919061252a565b90915550506040518181526000906001600160a01b038416906000805160206126208339815191529060200161176e565b600061180b42600660199054906101000a900464ffffffffff16611d3b565b6001600160a01b0383166000908152600a6020526040902054909150600160281b900464ffffffffff1680156118a85761184483611ba2565b6001600160a01b0384166000908152600a60208190526040909120805490919061187f908490600160501b90046001600160b01b031661245e565b92506101000a8154816001600160b01b0302191690836001600160b01b031602179055506118bc565b600b5460ff16156118bc576118bc83611915565b60065464ffffffffff828116600160c81b90920416146108ee576001600160a01b0383166000908152600a60205260409020805464ffffffffff8416600160281b0269ffffffffff000000000019909116179055505050565b600b5460ff166119635760405162461bcd60e51b81526020600482015260196024820152784d6967726174696f6e206973206e6f7420656e61626c65642160381b604482015260640161088a565b600061196d611d61565b6001600160a01b0383166000908152600a6020526040902054909150600160281b900464ffffffffff1680156119e55760405162461bcd60e51b815260206004820152601a60248201527f596f75206861766520616c7265616479206d6967726174656421000000000000604482015260640161088a565b6001600160a01b038381166000818152600a6020526040808220805469ffffffffff00000000001916600160281b64ffffffffff8916021790556006549051630174a42b60e71b815260048101939093529092169063ba5215809060240160206040518083038186803b158015611a5b57600080fd5b505afa158015611a6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a939190612312565b90506001600160b01b03811615611ade576001600160a01b0384166000908152600a60205260409020805469ffffffffffffffffffff16600160501b6001600160b01b038416021790555b60065460405163c071bd3d60e01b81526001600160a01b038681166004830152600092169063c071bd3d9060240160606040518083038186803b158015611b2457600080fd5b505afa158015611b38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5c919061226a565b51905064ffffffffff811615610ad0576001600160a01b0385166000908152600a60205260409020805464ffffffffff831664ffffffffff199091161790555050505050565b6001600160a01b0381166000908152600a602052604081205464ffffffffff1680611bd05750600092915050565b6000611bef42600660199054906101000a900464ffffffffff16611d3b565b6001600160a01b0385166000908152600a602052604090205460065464ffffffffff9283169350600160281b909104821691600160a01b90910416811115611c705760095464ffffffffff1662015180611c49838561252a565b611c5390866124e3565b611c5d91906124c1565b611c6791906124c1565b95945050505050565b506000949350505050565b6001600160a01b0381166000908152600a6020526040902054600160501b90046001600160b01b03168015610b17576001600160a01b0382166000908152600a60205260408120805469ffffffffffffffffffff169055600854611ce8906001600160b01b0384166124e3565b9050611cf48382611702565b604080516001600160a01b0385168152602081018390527f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d4910160405180910390a1505050565b60008164ffffffffff168364ffffffffff1610611d585781611d5a565b825b9392505050565b6000611d8042600660199054906101000a900464ffffffffff16611d3b565b905090565b80356001600160a01b0381168114611d9c57600080fd5b919050565b60008083601f840112611db357600080fd5b50813567ffffffffffffffff811115611dcb57600080fd5b6020830191508360208260051b8501011115611de657600080fd5b9250929050565b600082601f830112611dfe57600080fd5b81356020611e13611e0e8361243a565b612409565b80838252828201915082860187848660051b8901011115611e3357600080fd5b60005b85811015611e5957611e4782611d85565b84529284019290840190600101611e36565b5090979650505050505050565b600082601f830112611e7757600080fd5b81356020611e87611e0e8361243a565b80838252828201915082860187848660051b8901011115611ea757600080fd5b60005b85811015611e5957813584529284019290840190600101611eaa565b80358015158114611d9c57600080fd5b600060208284031215611ee857600080fd5b611d5a82611d85565b60008060408385031215611f0457600080fd5b611f0d83611d85565b9150611f1b60208401611d85565b90509250929050565b600080600060608486031215611f3957600080fd5b611f4284611d85565b9250611f5060208501611d85565b9150604084013590509250925092565b60008060408385031215611f7357600080fd5b611f7c83611d85565b9150611f1b60208401611ec6565b60008060408385031215611f9d57600080fd5b611fa683611d85565b946020939093013593505050565b60008060208385031215611fc757600080fd5b823567ffffffffffffffff811115611fde57600080fd5b611fea85828601611da1565b90969095509350505050565b6000806000806040858703121561200c57600080fd5b843567ffffffffffffffff8082111561202457600080fd5b61203088838901611da1565b9096509450602087013591508082111561204957600080fd5b5061205687828801611da1565b95989497509550505050565b6000806000806000806000806080898b03121561207e57600080fd5b883567ffffffffffffffff8082111561209657600080fd5b6120a28c838d01611da1565b909a50985060208b01359150808211156120bb57600080fd5b6120c78c838d01611da1565b909850965060408b01359150808211156120e057600080fd5b6120ec8c838d01611da1565b909650945060608b013591508082111561210557600080fd5b506121128b828c01611da1565b999c989b5096995094979396929594505050565b60006020828403121561213857600080fd5b813567ffffffffffffffff81111561214f57600080fd5b61215b84828501611ded565b949350505050565b60008060006060848603121561217857600080fd5b833567ffffffffffffffff8082111561219057600080fd5b61219c87838801611ded565b945060208601359150808211156121b257600080fd5b6121be87838801611ded565b935060408601359150808211156121d457600080fd5b506121e186828701611e66565b9150509250925092565b600080604083850312156121fe57600080fd5b823567ffffffffffffffff8082111561221657600080fd5b61222286838701611ded565b9350602085013591508082111561223857600080fd5b5061224585828601611e66565b9150509250929050565b60006020828403121561226157600080fd5b611d5a82611ec6565b60006060828403121561227c57600080fd5b6040516060810181811067ffffffffffffffff8211171561229f5761229f6125e1565b60405282516122ad8161260c565b815260208301516122bd8161260c565b602082015260408301516122d0816125f7565b60408201529392505050565b6000602082840312156122ee57600080fd5b8135611d5a816125f7565b60006020828403121561230b57600080fd5b5035919050565b60006020828403121561232457600080fd5b5051919050565b60006020828403121561233d57600080fd5b8135611d5a8161260c565b600060208083528351808285015260005b8181101561237557858101830151858201604001528201612359565b81811115612387576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526019908201527f596f7520617265206e6f74206120636f6e74726f6c6c65722100000000000000604082015260600190565b604051601f8201601f1916810167ffffffffffffffff81118282101715612432576124326125e1565b604052919050565b600067ffffffffffffffff821115612454576124546125e1565b5060051b60200190565b60006001600160b01b03828116848216808303821115612480576124806125b5565b01949350505050565b6000821982111561249c5761249c6125b5565b500190565b600064ffffffffff808316818516808303821115612480576124806125b5565b6000826124de57634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156124fd576124fd6125b5565b500290565b60006001600160b01b0383811690831681811015612522576125226125b5565b039392505050565b60008282101561253c5761253c6125b5565b500390565b600064ffffffffff83811690831681811015612522576125226125b5565b600181811c9082168061257357607f821691505b6020821081141561259457634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156125ae576125ae6125b5565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160b01b0381168114610b9c57600080fd5b64ffffffffff81168114610b9c57600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212205609440c20921ab3a380f5a77e1ddfd8516fc51115f00aecb5d38c78a11cf3b164736f6c63430008070033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102a05760003560e01c80637e6335f411610167578063ba521580116100ce578063e0dba60f11610087578063e0dba60f146106a0578063eb0d22be146106b3578063ef3baf6b146106bc578063f2fde38b146106cf578063fd435e88146106e2578063fe216f06146106f557600080fd5b8063ba521580146105b7578063c071bd3d146105ca578063c7e6cc3f1461063c578063cbeb54311461064f578063dd62ed3e14610662578063df8de3e71461068d57600080fd5b80639b390135116101205780639b390135146105455780639dc29fac14610558578063a3f0a43a1461056b578063a7e794831461057e578063a9059cbb14610591578063b5862c25146105a457600080fd5b80637e6335f4146104c857806382596f01146104d9578063871ff405146104ec5780638da5cb5b146104ff578063901138931461052a57806395d89b411461053d57600080fd5b806342966c681161020b5780636977e17d116101c45780636977e17d1461044457806370a0823114610457578063752fd6101461047757806379cc67901461048a5780637bde17a31461049d5780637c073ede146104b057600080fd5b806342966c68146103c2578063521c27f2146103d5578063632447c9146103e8578063649d35fd146103fb578063661acfb11461040e578063662f2fcd1461042157600080fd5b8063261f77f11161025d578063261f77f114610334578063313ce56714610347578063314ca0391461036157806335b944bf1461038f578063403eea961461039c5780634051584f146103af57600080fd5b806302b343b1146102a557806306fdde03146102cb578063095ea7b3146102e057806318160ddd146103035780631e89d5451461030c57806323b872dd14610321575b600080fd5b6102b86102b3366004611ed6565b610708565b6040519081526020015b60405180910390f35b6102d3610733565b6040516102c29190612348565b6102f36102ee366004611f8a565b6107c1565b60405190151581526020016102c2565b6102b860025481565b61031f61031a3660046121eb565b61082d565b005b6102f361032f366004611f24565b6108f3565b61031f610342366004611ff6565b6109f9565b61034f601281565b60405160ff90911681526020016102c2565b60065461037990600160c81b900464ffffffffff1681565b60405164ffffffffff90911681526020016102c2565b600b546102f39060ff1681565b61031f6103aa366004612126565b610ad7565b61031f6103bd366004611f8a565b610b1b565b61031f6103d03660046122f9565b610b92565b61031f6103e336600461224f565b610b9f565b61031f6103f6366004611ed6565b610bdc565b6102b8610409366004611ed6565b610be5565b61031f61041c366004611fb4565b610c22565b6102f361042f366004611ed6565b60076020526000908152604090205460ff1681565b61031f61045236600461232b565b610cbc565b6102b8610465366004611ed6565b60036020526000908152604090205481565b6102b8610485366004611ed6565b610d04565b61031f610498366004611f8a565b610d25565b61031f6104ab366004612163565b610e2e565b60065461037990600160a01b900464ffffffffff1681565b6009546103799064ffffffffff1681565b61031f6104e7366004611f8a565b610f1e565b61031f6104fa366004611f8a565b611041565b600554610512906001600160a01b031681565b6040516001600160a01b0390911681526020016102c2565b600654610512906001600160a01b031681565b6102d36110c7565b61031f61055336600461232b565b6110d4565b61031f610566366004611f8a565b611126565b6102b8610579366004611ed6565b61115f565b61031f61058c366004612126565b61117d565b6102f361059f366004611f8a565b6111bd565b61031f6105b2366004611f8a565b61123b565b6102b86105c5366004611ed6565b6112d3565b61060f6105d8366004611ed6565b600a6020526000908152604090205464ffffffffff80821691600160281b810490911690600160501b90046001600160b01b031683565b6040805164ffffffffff94851681529390921660208401526001600160b01b0316908201526060016102c2565b6102b861064a366004611ed6565b6112e7565b61031f61065d366004611ed6565b611315565b6102b8610670366004611ef1565b600460209081526000928352604080842090915290825290205481565b61031f61069b366004611ed6565b611361565b61031f6106ae366004611f60565b611373565b6102b860085481565b6102b86106ca366004611ed6565b6113c8565b61031f6106dd366004611ed6565b6113e2565b61031f6106f0366004611f8a565b61142e565b61031f610703366004612062565b6114a1565b6001600160a01b03166000908152600a6020526040902054600160501b90046001600160b01b031690565b600080546107409061255f565b80601f016020809104026020016040519081016040528092919081815260200182805461076c9061255f565b80156107b95780601f1061078e576101008083540402835291602001916107b9565b820191906000526020600020905b81548152906001019060200180831161079c57829003601f168201915b505050505081565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061081c9086815260200190565b60405180910390a350600192915050565b80518251146108935760405162461bcd60e51b815260206004820152602760248201527f4552433230493a20546f20616e6420416d6f756e7473206c656e677468204d69604482015266736d617463682160c81b60648201526084015b60405180910390fd5b60005b82518110156108ee576108db8382815181106108b4576108b46125cb565b60200260200101518383815181106108ce576108ce6125cb565b60200260200101516111bd565b50806108e68161259a565b915050610896565b505050565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914610958576001600160a01b03841660009081526004602090815260408083203384529091528120805484929061095290849061252a565b90915550505b6001600160a01b0384166000908152600360205260408120805484929061098090849061252a565b90915550506001600160a01b038316600090815260036020526040812080548492906109ad908490612489565b92505081905550826001600160a01b0316846001600160a01b0316600080516020612620833981519152846040516109e791815260200190565b60405180910390a35060019392505050565b6005546001600160a01b03163314610a235760405162461bcd60e51b815260040161088a9061239d565b828114610a6b5760405162461bcd60e51b81526020600482015260166024820152754172726179206c656e677468206d69736d617463682160501b604482015260640161088a565b60005b83811015610ad057610abe858583818110610a8b57610a8b6125cb565b9050602002016020810190610aa09190611ed6565b848484818110610ab257610ab26125cb565b90506020020135611702565b80610ac88161259a565b915050610a6e565b5050505050565b60005b8151811015610b1757610b05828281518110610af857610af86125cb565b6020026020010151610bdc565b80610b0f8161259a565b915050610ada565b5050565b3360009081526007602052604090205460ff16610b4a5760405162461bcd60e51b815260040161088a906123d2565b600060085482610b5a91906124c1565b6001600160a01b03939093166000908152600a60205260409020805464ffffffffff191664ffffffffff909416939093179092555050565b610b9c338261177a565b50565b6005546001600160a01b03163314610bc95760405162461bcd60e51b815260040161088a9061239d565b600b805460ff1916911515919091179055565b610b9c816117ec565b6008546001600160a01b0382166000908152600a60205260408120549091610c1c91600160501b90046001600160b01b03166124e3565b92915050565b600b5460ff16610c705760405162461bcd60e51b81526020600482015260196024820152784d6967726174696f6e206973206e6f7420656e61626c65642160381b604482015260640161088a565b60005b818110156108ee57610caa838383818110610c9057610c906125cb565b9050602002016020810190610ca59190611ed6565b611915565b80610cb48161259a565b915050610c73565b6005546001600160a01b03163314610ce65760405162461bcd60e51b815260040161088a9061239d565b6009805464ffffffffff191664ffffffffff92909216919091179055565b6000600854610d1283611ba2565b6001600160b01b0316610c1c91906124e3565b6001600160a01b038216600090815260046020908152604080832033845290915290205481811015610dbf5760405162461bcd60e51b815260206004820152603860248201527f4552433230494275726e61626c653a204275726e20616d6f756e74207265717560448201527f6573746564206578636565647320616c6c6f77616e6365210000000000000000606482015260840161088a565b6001600160a01b038316600090815260046020908152604080832033845290915290205460001914610e24576001600160a01b038316600090815260046020908152604080832033845290915281208054849290610e1e90849061252a565b90915550505b6108ee838361177a565b81518351148015610e40575080518351145b610ea35760405162461bcd60e51b815260206004820152602e60248201527f4552433230493a2046726f6d2c20546f2c20616e6420416d6f756e7473206c6560448201526d6e677468204d69736d617463682160901b606482015260840161088a565b60005b8351811015610f1857610f05848281518110610ec457610ec46125cb565b6020026020010151848381518110610ede57610ede6125cb565b6020026020010151848481518110610ef857610ef86125cb565b60200260200101516108f3565b5080610f108161259a565b915050610ea6565b50505050565b3360009081526007602052604090205460ff16610f4d5760405162461bcd60e51b815260040161088a906123d2565b600060085482610f5d91906124c1565b6001600160a01b0384166000908152600a602052604090205490915064ffffffffff8216600160501b9091046001600160b01b03161015610fd65760405162461bcd60e51b81526020600482015260136024820152724e6f7420656e6f75676820637265646974732160681b604482015260640161088a565b6001600160a01b0383166000908152600a60208190526040909120805464ffffffffff84169290611018908490600160501b90046001600160b01b0316612502565b92506101000a8154816001600160b01b0302191690836001600160b01b03160217905550505050565b3360009081526007602052604090205460ff166110705760405162461bcd60e51b815260040161088a906123d2565b60006008548261108091906124c1565b6001600160a01b0384166000908152600a60208190526040909120805492935064ffffffffff841692909190611018908490600160501b90046001600160b01b031661245e565b600180546107409061255f565b6005546001600160a01b031633146110fe5760405162461bcd60e51b815260040161088a9061239d565b6006805464ffffffffff909216600160c81b0264ffffffffff60c81b19909216919091179055565b3360009081526007602052604090205460ff166111555760405162461bcd60e51b815260040161088a906123d2565b610b17828261177a565b600061116a82610d04565b61117383610be5565b610c1c9190612489565b60005b8151811015610b17576111ab82828151811061119e5761119e6125cb565b6020026020010151611361565b806111b58161259a565b915050611180565b336000908152600360205260408120805483919083906111de90849061252a565b90915550506001600160a01b0383166000908152600360205260408120805484929061120b908490612489565b90915550506040518281526001600160a01b0384169033906000805160206126208339815191529060200161081c565b3360009081526007602052604090205460ff1661126a5760405162461bcd60e51b815260040161088a906123d2565b60006008548261127a91906124c1565b6001600160a01b0384166000908152600a60205260408120805492935083929091906112ae90849064ffffffffff166124a1565b92506101000a81548164ffffffffff021916908364ffffffffff160217905550505050565b60006112de826113c8565b61117383610708565b6008546001600160a01b0382166000908152600a60205260408120549091610c1c9164ffffffffff166124e3565b6005546001600160a01b0316331461133f5760405162461bcd60e51b815260040161088a9061239d565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b61136a816117ec565b610b9c81611c7b565b6005546001600160a01b0316331461139d5760405162461bcd60e51b815260040161088a9061239d565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b60006113d382611ba2565b6001600160b01b031692915050565b6005546001600160a01b0316331461140c5760405162461bcd60e51b815260040161088a9061239d565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b3360009081526007602052604090205460ff1661145d5760405162461bcd60e51b815260040161088a906123d2565b60006008548261146d91906124c1565b6001600160a01b0384166000908152600a60205260408120805492935083929091906112ae90849064ffffffffff16612541565b6005546001600160a01b031633146114cb5760405162461bcd60e51b815260040161088a9061239d565b86851480156114d957508683145b80156114e457508681145b6115305760405162461bcd60e51b815260206004820152601760248201527f4172726179206c656e67746873206d69736d6174636821000000000000000000604482015260640161088a565b60005b878110156116f75786868281811061154d5761154d6125cb565b9050602002016020810190611562919061232b565b600a60008b8b85818110611578576115786125cb565b905060200201602081019061158d9190611ed6565b6001600160a01b031681526020810191909152604001600020805464ffffffffff92909216600160281b0269ffffffffff0000000000199092169190911790558484828181106115df576115df6125cb565b90506020020160208101906115f4919061232b565b600a60008b8b8581811061160a5761160a6125cb565b905060200201602081019061161f9190611ed6565b6001600160a01b031681526020810191909152604001600020805464ffffffffff191664ffffffffff92909216919091179055828282818110611664576116646125cb565b905060200201602081019061167991906122dc565b600a60008b8b8581811061168f5761168f6125cb565b90506020020160208101906116a49190611ed6565b6001600160a01b03168152602081019190915260400160002080546001600160b01b0392909216600160501b0269ffffffffffffffffffff909216919091179055806116ef8161259a565b915050611533565b505050505050505050565b80600260008282546117149190612489565b90915550506001600160a01b03821660009081526003602052604081208054839290611741908490612489565b90915550506040518181526001600160a01b03831690600090600080516020612620833981519152906020015b60405180910390a35050565b6001600160a01b038216600090815260036020526040812080548392906117a290849061252a565b9250508190555080600260008282546117bb919061252a565b90915550506040518181526000906001600160a01b038416906000805160206126208339815191529060200161176e565b600061180b42600660199054906101000a900464ffffffffff16611d3b565b6001600160a01b0383166000908152600a6020526040902054909150600160281b900464ffffffffff1680156118a85761184483611ba2565b6001600160a01b0384166000908152600a60208190526040909120805490919061187f908490600160501b90046001600160b01b031661245e565b92506101000a8154816001600160b01b0302191690836001600160b01b031602179055506118bc565b600b5460ff16156118bc576118bc83611915565b60065464ffffffffff828116600160c81b90920416146108ee576001600160a01b0383166000908152600a60205260409020805464ffffffffff8416600160281b0269ffffffffff000000000019909116179055505050565b600b5460ff166119635760405162461bcd60e51b81526020600482015260196024820152784d6967726174696f6e206973206e6f7420656e61626c65642160381b604482015260640161088a565b600061196d611d61565b6001600160a01b0383166000908152600a6020526040902054909150600160281b900464ffffffffff1680156119e55760405162461bcd60e51b815260206004820152601a60248201527f596f75206861766520616c7265616479206d6967726174656421000000000000604482015260640161088a565b6001600160a01b038381166000818152600a6020526040808220805469ffffffffff00000000001916600160281b64ffffffffff8916021790556006549051630174a42b60e71b815260048101939093529092169063ba5215809060240160206040518083038186803b158015611a5b57600080fd5b505afa158015611a6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a939190612312565b90506001600160b01b03811615611ade576001600160a01b0384166000908152600a60205260409020805469ffffffffffffffffffff16600160501b6001600160b01b038416021790555b60065460405163c071bd3d60e01b81526001600160a01b038681166004830152600092169063c071bd3d9060240160606040518083038186803b158015611b2457600080fd5b505afa158015611b38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5c919061226a565b51905064ffffffffff811615610ad0576001600160a01b0385166000908152600a60205260409020805464ffffffffff831664ffffffffff199091161790555050505050565b6001600160a01b0381166000908152600a602052604081205464ffffffffff1680611bd05750600092915050565b6000611bef42600660199054906101000a900464ffffffffff16611d3b565b6001600160a01b0385166000908152600a602052604090205460065464ffffffffff9283169350600160281b909104821691600160a01b90910416811115611c705760095464ffffffffff1662015180611c49838561252a565b611c5390866124e3565b611c5d91906124c1565b611c6791906124c1565b95945050505050565b506000949350505050565b6001600160a01b0381166000908152600a6020526040902054600160501b90046001600160b01b03168015610b17576001600160a01b0382166000908152600a60205260408120805469ffffffffffffffffffff169055600854611ce8906001600160b01b0384166124e3565b9050611cf48382611702565b604080516001600160a01b0385168152602081018390527f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d4910160405180910390a1505050565b60008164ffffffffff168364ffffffffff1610611d585781611d5a565b825b9392505050565b6000611d8042600660199054906101000a900464ffffffffff16611d3b565b905090565b80356001600160a01b0381168114611d9c57600080fd5b919050565b60008083601f840112611db357600080fd5b50813567ffffffffffffffff811115611dcb57600080fd5b6020830191508360208260051b8501011115611de657600080fd5b9250929050565b600082601f830112611dfe57600080fd5b81356020611e13611e0e8361243a565b612409565b80838252828201915082860187848660051b8901011115611e3357600080fd5b60005b85811015611e5957611e4782611d85565b84529284019290840190600101611e36565b5090979650505050505050565b600082601f830112611e7757600080fd5b81356020611e87611e0e8361243a565b80838252828201915082860187848660051b8901011115611ea757600080fd5b60005b85811015611e5957813584529284019290840190600101611eaa565b80358015158114611d9c57600080fd5b600060208284031215611ee857600080fd5b611d5a82611d85565b60008060408385031215611f0457600080fd5b611f0d83611d85565b9150611f1b60208401611d85565b90509250929050565b600080600060608486031215611f3957600080fd5b611f4284611d85565b9250611f5060208501611d85565b9150604084013590509250925092565b60008060408385031215611f7357600080fd5b611f7c83611d85565b9150611f1b60208401611ec6565b60008060408385031215611f9d57600080fd5b611fa683611d85565b946020939093013593505050565b60008060208385031215611fc757600080fd5b823567ffffffffffffffff811115611fde57600080fd5b611fea85828601611da1565b90969095509350505050565b6000806000806040858703121561200c57600080fd5b843567ffffffffffffffff8082111561202457600080fd5b61203088838901611da1565b9096509450602087013591508082111561204957600080fd5b5061205687828801611da1565b95989497509550505050565b6000806000806000806000806080898b03121561207e57600080fd5b883567ffffffffffffffff8082111561209657600080fd5b6120a28c838d01611da1565b909a50985060208b01359150808211156120bb57600080fd5b6120c78c838d01611da1565b909850965060408b01359150808211156120e057600080fd5b6120ec8c838d01611da1565b909650945060608b013591508082111561210557600080fd5b506121128b828c01611da1565b999c989b5096995094979396929594505050565b60006020828403121561213857600080fd5b813567ffffffffffffffff81111561214f57600080fd5b61215b84828501611ded565b949350505050565b60008060006060848603121561217857600080fd5b833567ffffffffffffffff8082111561219057600080fd5b61219c87838801611ded565b945060208601359150808211156121b257600080fd5b6121be87838801611ded565b935060408601359150808211156121d457600080fd5b506121e186828701611e66565b9150509250925092565b600080604083850312156121fe57600080fd5b823567ffffffffffffffff8082111561221657600080fd5b61222286838701611ded565b9350602085013591508082111561223857600080fd5b5061224585828601611e66565b9150509250929050565b60006020828403121561226157600080fd5b611d5a82611ec6565b60006060828403121561227c57600080fd5b6040516060810181811067ffffffffffffffff8211171561229f5761229f6125e1565b60405282516122ad8161260c565b815260208301516122bd8161260c565b602082015260408301516122d0816125f7565b60408201529392505050565b6000602082840312156122ee57600080fd5b8135611d5a816125f7565b60006020828403121561230b57600080fd5b5035919050565b60006020828403121561232457600080fd5b5051919050565b60006020828403121561233d57600080fd5b8135611d5a8161260c565b600060208083528351808285015260005b8181101561237557858101830151858201604001528201612359565b81811115612387576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526019908201527f596f7520617265206e6f74206120636f6e74726f6c6c65722100000000000000604082015260600190565b604051601f8201601f1916810167ffffffffffffffff81118282101715612432576124326125e1565b604052919050565b600067ffffffffffffffff821115612454576124546125e1565b5060051b60200190565b60006001600160b01b03828116848216808303821115612480576124806125b5565b01949350505050565b6000821982111561249c5761249c6125b5565b500190565b600064ffffffffff808316818516808303821115612480576124806125b5565b6000826124de57634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156124fd576124fd6125b5565b500290565b60006001600160b01b0383811690831681811015612522576125226125b5565b039392505050565b60008282101561253c5761253c6125b5565b500390565b600064ffffffffff83811690831681811015612522576125226125b5565b600181811c9082168061257357607f821691505b6020821081141561259457634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156125ae576125ae6125b5565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160b01b0381168114610b9c57600080fd5b64ffffffffff81168114610b9c57600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212205609440c20921ab3a380f5a77e1ddfd8516fc51115f00aecb5d38c78a11cf3b164736f6c63430008070033

Deployed Bytecode Sourcemap

4109:9799:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13383:162;;;;;;:::i;:::-;;:::i;:::-;;;15008:25:1;;;14996:2;14981:18;13383:162:0;;;;;;;;274:18;;;:::i;:::-;;;;;;;:::i;1333:219::-;;;;;;:::i;:::-;;:::i;:::-;;;10290:14:1;;10283:22;10265:41;;10253:2;10238:18;1333:219:0;10125:187:1;524:26:0;;;;;;2214:294;;;;;;:::i;:::-;;:::i;:::-;;1801:368;;;;;;:::i;:::-;;:::i;7210:336::-;;;;;;:::i;:::-;;:::i;465:35::-;;498:2;465:35;;;;;15810:4:1;15798:17;;;15780:36;;15768:2;15753:18;465:35:0;15638:184:1;4771:39:0;;;;;-1:-1:-1;;;4771:39:0;;;;;;;;;15218:12:1;15206:25;;;15188:44;;15176:2;15161:18;4771:39:0;15044:194:1;9353:35:0;;;;;;;;;12235:183;;;;;;:::i;:::-;;:::i;5766:217::-;;;;;;:::i;:::-;;:::i;2948:93::-;;;;;;:::i;:::-;;:::i;9395:89::-;;;;;;:::i;:::-;;:::i;11955:96::-;;;;;;:::i;:::-;;:::i;12643:184::-;;;;;;:::i;:::-;;:::i;10504:270::-;;;;;;:::i;:::-;;:::i;4981:46::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;5580:90;;;;;;:::i;:::-;;:::i;592:44::-;;;;;;:::i;:::-;;;;;;;;;;;;;;12833:176;;;;;;:::i;:::-;;:::i;3047:406::-;;;;;;:::i;:::-;;:::i;2514:377::-;;;;;;:::i;:::-;;:::i;4696:41::-;;;;;-1:-1:-1;;;4696:41:0;;;;;;5341:29;;;;;;;;;6486:306;;;;;;:::i;:::-;;:::i;6798:209::-;;;;;;:::i;:::-;;:::i;3493:20::-;;;;;-1:-1:-1;;;;;3493:20:0;;;;;;-1:-1:-1;;;;;9802:32:1;;;9784:51;;9772:2;9757:18;3493:20:0;9638:203:1;4506:67:0;;;;;-1:-1:-1;;;;;4506:67:0;;;299:20;;;:::i;4844:109::-;;;;;;:::i;:::-;;:::i;7055:111::-;;;;;;:::i;:::-;;:::i;13015:180::-;;;;;;:::i;:::-;;:::i;12424:181::-;;;;;;:::i;:::-;;:::i;1558:237::-;;;;;;:::i;:::-;;:::i;5989:230::-;;;;;;:::i;:::-;;:::i;13711:192::-;;;;;;:::i;:::-;;:::i;5524:47::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;;;5524:47:0;;;;;;-1:-1:-1;;;5524:47:0;;-1:-1:-1;;;;;5524:47:0;;;;;;;15451:12:1;15490:15;;;15472:34;;15542:15;;;;15537:2;15522:18;;15515:43;-1:-1:-1;;;;;15594:32:1;15574:18;;;15567:60;15429:2;15414:18;5524:47:0;15243:390:1;13201:176:0;;;;;;:::i;:::-;;:::i;4580:94::-;;;;;;:::i;:::-;;:::i;643:64::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;12057:133;;;;;;:::i;:::-;;:::i;5035:118::-;;;;;;:::i;:::-;;:::i;5293:41::-;;;;;;13551:154;;;;;;:::i;:::-;;:::i;3702:108::-;;;;;;:::i;:::-;;:::i;6225:230::-;;;;;;:::i;:::-;;:::i;7590:738::-;;;;;;:::i;:::-;;:::i;13383:162::-;-1:-1:-1;;;;;13496:24:0;13461:7;13496:24;;;:14;:24;;;;;:40;-1:-1:-1;;;13496:40:0;;-1:-1:-1;;;;;13496:40:0;;13383:162::o;274:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1333:219::-;1436:10;1409:4;1426:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;1426:31:0;;;;;;;;;;:41;;;1483:39;1409:4;;1426:31;;1483:39;;;;1460:7;15008:25:1;;14996:2;14981:18;;14862:177;1483:39:0;;;;;;;;-1:-1:-1;1540:4:0;1333:219;;;;:::o;2214:294::-;2334:8;:15;2320:3;:10;:29;2312:81;;;;-1:-1:-1;;;2312:81:0;;11689:2:1;2312:81:0;;;11671:21:1;11728:2;11708:18;;;11701:30;11767:34;11747:18;;;11740:62;-1:-1:-1;;;11818:18:1;;;11811:37;11865:19;;2312:81:0;;;;;;;;;2409:9;2404:97;2428:3;:10;2424:1;:14;2404:97;;;2460:29;2469:3;2473:1;2469:6;;;;;;;;:::i;:::-;;;;;;;2477:8;2486:1;2477:11;;;;;;;;:::i;:::-;;;;;;;2460:8;:29::i;:::-;-1:-1:-1;2440:3:0;;;;:::i;:::-;;;;2404:97;;;;2214:294;;:::o;1801:368::-;-1:-1:-1;;;;;1913:16:0;;1892:4;1913:16;;;:9;:16;;;;;;;;1930:10;1913:28;;;;;;;;-1:-1:-1;;1913:49:0;1909:112;;-1:-1:-1;;;;;1979:16:0;;;;;;:9;:16;;;;;;;;1996:10;1979:28;;;;;;;:39;;2011:7;;1979:16;:39;;2011:7;;1979:39;:::i;:::-;;;;-1:-1:-1;;1909:112:0;-1:-1:-1;;;;;2031:16:0;;;;;;:9;:16;;;;;:27;;2051:7;;2031:16;:27;;2051:7;;2031:27;:::i;:::-;;;;-1:-1:-1;;;;;;;2069:14:0;;;;;;:9;:14;;;;;:25;;2087:7;;2069:14;:25;;2087:7;;2069:25;:::i;:::-;;;;;;;;2126:3;-1:-1:-1;;;;;2110:29:0;2119:5;-1:-1:-1;;;;;2110:29:0;-1:-1:-1;;;;;;;;;;;2131:7:0;2110:29;;;;15008:25:1;;14996:2;14981:18;;14862:177;2110:29:0;;;;;;;;-1:-1:-1;2157:4:0;1801:368;;;;;:::o;7210:336::-;3618:5;;-1:-1:-1;;;;;3618:5:0;3627:10;3618:19;3610:64;;;;-1:-1:-1;;;3610:64:0;;;;;;;:::i;:::-;7334:36;;::::1;7326:84;;;::::0;-1:-1:-1;;;7326:84:0;;13934:2:1;7326:84:0::1;::::0;::::1;13916:21:1::0;13973:2;13953:18;;;13946:30;-1:-1:-1;;;13992:18:1;;;13985:52;14054:18;;7326:84:0::1;13732:346:1::0;7326:84:0::1;7436:9;7431:108;7451:21:::0;;::::1;7431:108;;;7494:33;7500:10;;7511:1;7500:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;7515:8;;7524:1;7515:11;;;;;;;:::i;:::-;;;;;;;7494:5;:33::i;:::-;7474:3:::0;::::1;::::0;::::1;:::i;:::-;;;;7431:108;;;;7210:336:::0;;;;:::o;12235:183::-;12314:9;12309:102;12333:10;:17;12329:1;:21;12309:102;;;12372:27;12385:10;12396:1;12385:13;;;;;;;;:::i;:::-;;;;;;;12372:12;:27::i;:::-;12352:3;;;;:::i;:::-;;;;12309:102;;;;12235:183;:::o;5766:217::-;5219:10;5204:26;;;;:14;:26;;;;;;;;5196:64;;;;-1:-1:-1;;;5196:64:0;;;;;;;:::i;:::-;5862:17:::1;5902:13;;5889:10;:26;;;;:::i;:::-;-1:-1:-1::0;;;;;5927:24:0;;;::::1;;::::0;;;:14:::1;:24;::::0;;;;:48;;-1:-1:-1;;5927:48:0::1;;::::0;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;;5766:217:0:o;2948:93::-;3007:26;3013:10;3025:7;3007:5;:26::i;:::-;2948:93;:::o;9395:89::-;3618:5;;-1:-1:-1;;;;;3618:5:0;3627:10;3618:19;3610:64;;;;-1:-1:-1;;;3610:64:0;;;;;;;:::i;:::-;9457:16:::1;:24:::0;;-1:-1:-1;;9457:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;9395:89::o;11955:96::-;12013:29;12033:8;12013:19;:29::i;12643:184::-;12805:13;;-1:-1:-1;;;;;12761:24:0;;12717:7;12761:24;;;:14;:24;;;;;:40;12717:7;;12753:65;;-1:-1:-1;;;12761:40:0;;-1:-1:-1;;;;;12761:40:0;12753:65;:::i;:::-;12737:82;12643:184;-1:-1:-1;;12643:184:0:o;10504:270::-;10585:16;;;;10577:67;;;;-1:-1:-1;;;10577:67:0;;12097:2:1;10577:67:0;;;12079:21:1;12136:2;12116:18;;;12109:30;-1:-1:-1;;;12155:18:1;;;12148:55;12220:18;;10577:67:0;11895:349:1;10577:67:0;10666:9;10661:106;10681:21;;;10661:106;;;10724:31;10741:10;;10752:1;10741:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;10724:16;:31::i;:::-;10704:3;;;;:::i;:::-;;;;10661:106;;5580:90;3618:5;;-1:-1:-1;;;;;3618:5:0;3627:10;3618:19;3610:64;;;;-1:-1:-1;;;3610:64:0;;;;;;;:::i;:::-;5648:11:::1;:19:::0;;-1:-1:-1;;5648:19:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;5580:90::o;12833:176::-;12907:7;12987:13;;12951:32;12974:8;12951:22;:32::i;:::-;-1:-1:-1;;;;;12943:41:0;:57;;;;:::i;3047:406::-;-1:-1:-1;;;;;3151:16:0;;3123:25;3151:16;;;:9;:16;;;;;;;;3168:10;3151:28;;;;;;;;3198;;;;3190:97;;;;-1:-1:-1;;;3190:97:0;;14639:2:1;3190:97:0;;;14621:21:1;14678:2;14658:18;;;14651:30;14717:34;14697:18;;;14690:62;14788:26;14768:18;;;14761:54;14832:19;;3190:97:0;14437:420:1;3190:97:0;-1:-1:-1;;;;;3304:16:0;;;;;;:9;:16;;;;;;;;3321:10;3304:28;;;;;;;;-1:-1:-1;;3304:49:0;3300:112;;-1:-1:-1;;;;;3370:16:0;;;;;;:9;:16;;;;;;;;3387:10;3370:28;;;;;;;:39;;3402:7;;3370:16;:39;;3402:7;;3370:39;:::i;:::-;;;;-1:-1:-1;;3300:112:0;3424:21;3430:5;3437:7;3424:5;:21::i;2514:377::-;2664:3;:10;2648:5;:12;:26;:61;;;;;2694:8;:15;2678:5;:12;:31;2648:61;2640:120;;;;-1:-1:-1;;;2640:120:0;;13519:2:1;2640:120:0;;;13501:21:1;13558:2;13538:18;;;13531:30;13597:34;13577:18;;;13570:62;-1:-1:-1;;;13648:18:1;;;13641:44;13702:19;;2640:120:0;13317:410:1;2640:120:0;2776:9;2771:113;2795:5;:12;2791:1;:16;2771:113;;;2829:43;2842:5;2848:1;2842:8;;;;;;;;:::i;:::-;;;;;;;2852:3;2856:1;2852:6;;;;;;;;:::i;:::-;;;;;;;2860:8;2869:1;2860:11;;;;;;;;:::i;:::-;;;;;;;2829:12;:43::i;:::-;-1:-1:-1;2809:3:0;;;;:::i;:::-;;;;2771:113;;;;2514:377;;;:::o;6486:306::-;5219:10;5204:26;;;;:14;:26;;;;;;;;5196:64;;;;-1:-1:-1;;;5196:64:0;;;;;;;:::i;:::-;6580:14:::1;6614:13;;6604:7;:23;;;;:::i;:::-;-1:-1:-1::0;;;;;6647:24:0;::::1;;::::0;;;:14:::1;:24;::::0;;;;:40;6580:48;;-1:-1:-1;6647:51:0::1;::::0;::::1;-1:-1:-1::0;;;6647:40:0;;::::1;-1:-1:-1::0;;;;;6647:40:0::1;:51;;6639:83;;;::::0;-1:-1:-1;;;6639:83:0;;11341:2:1;6639:83:0::1;::::0;::::1;11323:21:1::0;11380:2;11360:18;;;11353:30;-1:-1:-1;;;11399:18:1;;;11392:49;11458:18;;6639:83:0::1;11139:343:1::0;6639:83:0::1;-1:-1:-1::0;;;;;6733:24:0;::::1;;::::0;;;:14:::1;:24;::::0;;;;;;;:51;;::::1;::::0;::::1;::::0;:14;:51:::1;::::0;;;-1:-1:-1;;;6733:51:0;::::1;-1:-1:-1::0;;;;;6733:51:0::1;;:::i;:::-;;;;;;;;-1:-1:-1::0;;;;;6733:51:0::1;;;;;-1:-1:-1::0;;;;;6733:51:0::1;;;;;;6569:223;6486:306:::0;;:::o;6798:209::-;5219:10;5204:26;;;;:14;:26;;;;;;;;5196:64;;;;-1:-1:-1;;;5196:64:0;;;;;;;:::i;:::-;6889:14:::1;6923:13;;6913:7;:23;;;;:::i;:::-;-1:-1:-1::0;;;;;6948:24:0;::::1;;::::0;;;:14:::1;:24;::::0;;;;;;;:51;;6889:48;;-1:-1:-1;6948:51:0::1;::::0;::::1;::::0;:24;;:14;:51:::1;::::0;;;-1:-1:-1;;;6948:51:0;::::1;-1:-1:-1::0;;;;;6948:51:0::1;;:::i;299:20::-:0;;;;;;;:::i;4844:109::-;3618:5;;-1:-1:-1;;;;;3618:5:0;3627:10;3618:19;3610:64;;;;-1:-1:-1;;;3610:64:0;;;;;;;:::i;:::-;4922:12:::1;:28:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;4922:28:0::1;-1:-1:-1::0;;;;4922:28:0;;::::1;::::0;;;::::1;::::0;;4844:109::o;7055:111::-;5219:10;5204:26;;;;:14;:26;;;;;;;;5196:64;;;;-1:-1:-1;;;5196:64:0;;;;;;;:::i;:::-;7137:21:::1;7143:5;7150:7;7137:5;:21::i;13015:180::-:0;13087:7;13152:35;13178:8;13152:25;:35::i;:::-;13114;13140:8;13114:25;:35::i;:::-;:73;;;;:::i;12424:181::-;12502:9;12497:101;12521:10;:17;12517:1;:21;12497:101;;;12560:26;12572:10;12583:1;12572:13;;;;;;;;:::i;:::-;;;;;;;12560:11;:26::i;:::-;12540:3;;;;:::i;:::-;;;;12497:101;;1558:237;1657:10;1630:4;1647:21;;;:9;:21;;;;;:32;;1672:7;;1647:21;1630:4;;1647:32;;1672:7;;1647:32;:::i;:::-;;;;-1:-1:-1;;;;;;;1690:14:0;;;;;;:9;:14;;;;;:25;;1708:7;;1690:14;:25;;1708:7;;1690:25;:::i;:::-;;;;-1:-1:-1;;1731:34:0;;15008:25:1;;;-1:-1:-1;;;;;1731:34:0;;;1740:10;;-1:-1:-1;;;;;;;;;;;1731:34:0;14996:2:1;14981:18;1731:34:0;14862:177:1;5989:230:0;5219:10;5204:26;;;;:14;:26;;;;;;;;5196:64;;;;-1:-1:-1;;;5196:64:0;;;;;;;:::i;:::-;6088:20:::1;6134:13;;6118;:29;;;;:::i;:::-;-1:-1:-1::0;;;;;6159:24:0;::::1;;::::0;;;:14:::1;:24;::::0;;;;:52;;6088:60;;-1:-1:-1;6088:60:0;;6159:24;;;:52:::1;::::0;6088:60;;6159:52:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;6077:142;5989:230:::0;;:::o;13711:192::-;13787:7;13856:39;13886:8;13856:29;:39::i;:::-;13814;13844:8;13814:29;:39::i;13201:176::-;13354:13;;-1:-1:-1;;;;;13315:24:0;;13271:7;13315:24;;;:14;:24;;;;;:35;13271:7;;13307:60;;13315:35;;13307:60;:::i;4580:94::-;3618:5;;-1:-1:-1;;;;;3618:5:0;3627:10;3618:19;3610:64;;;;-1:-1:-1;;;3610:64:0;;;;;;;:::i;:::-;4645:4:::1;:21:::0;;-1:-1:-1;;;;;;4645:21:0::1;-1:-1:-1::0;;;;;4645:21:0;;;::::1;::::0;;;::::1;::::0;;4580:94::o;12057:133::-;12114:29;12134:8;12114:19;:29::i;:::-;12154:28;12173:8;12154:18;:28::i;5035:118::-;3618:5;;-1:-1:-1;;;;;3618:5:0;3627:10;3618:19;3610:64;;;;-1:-1:-1;;;3610:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5118:24:0;;;::::1;;::::0;;;:14:::1;:24;::::0;;;;:32;;-1:-1:-1;;5118:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;5035:118::o;13551:154::-;13629:7;13664:32;13687:8;13664:22;:32::i;:::-;-1:-1:-1;;;;;13656:41:0;;13551:154;-1:-1:-1;;13551:154:0:o;3702:108::-;3618:5;;-1:-1:-1;;;;;3618:5:0;3627:10;3618:19;3610:64;;;;-1:-1:-1;;;3610:64:0;;;;;;;:::i;:::-;3784:5:::1;:17:::0;;-1:-1:-1;;;;;;3784:17:0::1;-1:-1:-1::0;;;;;3784:17:0;;;::::1;::::0;;;::::1;::::0;;3702:108::o;6225:230::-;5219:10;5204:26;;;;:14;:26;;;;;;;;5196:64;;;;-1:-1:-1;;;5196:64:0;;;;;;;:::i;:::-;6324:20:::1;6370:13;;6354;:29;;;;:::i;:::-;-1:-1:-1::0;;;;;6395:24:0;::::1;;::::0;;;:14:::1;:24;::::0;;;;:52;;6324:60;;-1:-1:-1;6324:60:0;;6395:24;;;:52:::1;::::0;6324:60;;6395:52:::1;;;:::i;7590:738::-:0;3618:5;;-1:-1:-1;;;;;3618:5:0;3627:10;3618:19;3610:64;;;;-1:-1:-1;;;3610:64:0;;;;;;;:::i;:::-;7801:45;;::::1;:101:::0;::::1;;;-1:-1:-1::0;7863:39:0;;::::1;7801:101;:161;;;;-1:-1:-1::0;7919:43:0;;::::1;7801:161;7793:210;;;::::0;-1:-1:-1;;;7793:210:0;;12451:2:1;7793:210:0::1;::::0;::::1;12433:21:1::0;12490:2;12470:18;;;12463:30;12529:25;12509:18;;;12502:53;12572:18;;7793:210:0::1;12249:347:1::0;7793:210:0::1;8029:9;8024:297;8044:21:::0;;::::1;8024:297;;;8136:17;;8154:1;8136:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;8087:14;:29;8102:10;;8113:1;8102:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;8087:29:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;8087:29:0;:69;;::::1;::::0;;;::::1;-1:-1:-1::0;;;8087:69:0::1;-1:-1:-1::0;;8087:69:0;;::::1;::::0;;;::::1;::::0;;8214:11;;8226:1;8214:14;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;8171;:29;8186:10;;8197:1;8186:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;8171:29:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;8171:29:0;:57;;-1:-1:-1;;8171:57:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;8291:15;;8307:1;8291:18;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;8243:14;:29;8258:10;;8269:1;8258:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;8243:29:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;8243:29:0;:66;;-1:-1:-1;;;;;8243:66:0;;;::::1;-1:-1:-1::0;;;8243:66:0::1;::::0;;;::::1;::::0;;;::::1;::::0;;8067:3;::::1;::::0;::::1;:::i;:::-;;;;8024:297;;;;7590:738:::0;;;;;;;;:::o;922:183::-;1002:7;987:11;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;1020:14:0;;;;;;:9;:14;;;;;:25;;1038:7;;1020:14;:25;;1038:7;;1020:25;:::i;:::-;;;;-1:-1:-1;;1061:36:0;;15008:25:1;;;-1:-1:-1;;;;;1061:36:0;;;1078:3;;-1:-1:-1;;;;;;;;;;;1061:36:0;14996:2:1;14981:18;1061:36:0;;;;;;;;922:183;;:::o;1111:189::-;-1:-1:-1;;;;;1178:16:0;;;;;;:9;:16;;;;;:27;;1198:7;;1178:16;:27;;1198:7;;1178:27;:::i;:::-;;;;;;;;1231:7;1216:11;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;1254:38:0;;15008:25:1;;;1278:3:0;;-1:-1:-1;;;;;1254:38:0;;;-1:-1:-1;;;;;;;;;;;1254:38:0;14996:2:1;14981:18;1254:38:0;14862:177:1;10815:659:0;10882:12;10897:62;10928:15;10946:12;;;;;;;;;;;10897:23;:62::i;:::-;-1:-1:-1;;;;;10991:24:0;;10970:18;10991:24;;;:14;:24;;;;;:41;10882:77;;-1:-1:-1;;;;10991:41:0;;;;11049:15;;11045:299;;11126:32;11149:8;11126:22;:32::i;:::-;-1:-1:-1;;;;;11082:24:0;;;;;;:14;:24;;;;;;;;:76;;:24;;:14;:76;;;;-1:-1:-1;;;11082:76:0;;-1:-1:-1;;;;;11082:76:0;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;11082:76:0;;;;;-1:-1:-1;;;;;11082:76:0;;;;;;11045:299;;;11254:16;;;;11250:83;;;11291:26;11308:8;11291:16;:26::i;:::-;11375:12;;;11360:27;;;-1:-1:-1;;;11375:12:0;;;;11360:27;11356:111;;-1:-1:-1;;;;;11405:24:0;;;;;;:14;:24;;;;;:49;;;;;-1:-1:-1;;;11405:49:0;-1:-1:-1;;11405:49:0;;;;;;10871:603;;10815:659;:::o;9492:1004::-;9564:16;;;;9556:67;;;;-1:-1:-1;;;9556:67:0;;12097:2:1;9556:67:0;;;12079:21:1;12136:2;12116:18;;;12109:30;-1:-1:-1;;;12155:18:1;;;12148:55;12220:18;;9556:67:0;11895:349:1;9556:67:0;9644:12;9659:16;:14;:16::i;:::-;-1:-1:-1;;;;;9707:24:0;;9686:18;9707:24;;;:14;:24;;;;;:41;9644:31;;-1:-1:-1;;;;9707:41:0;;;;9769:16;;9761:68;;;;-1:-1:-1;;;9761:68:0;;13164:2:1;9761:68:0;;;13146:21:1;13203:2;13183:18;;;13176:30;13242:28;13222:18;;;13215:56;13288:18;;9761:68:0;12962:350:1;9761:68:0;-1:-1:-1;;;;;9905:24:0;;;;;;;:14;:24;;;;;;:49;;-1:-1:-1;;9905:49:0;-1:-1:-1;;;9905:49:0;;;;;;;10072:4;;:42;;-1:-1:-1;;;10072:42:0;;;;;9784:51:1;;;;9905:24:0;;10072:4;;:32;;9757:18:1;;10072:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10038:77;-1:-1:-1;;;;;;10132:19:0;;;10128:110;;-1:-1:-1;;;;;10168:24:0;;;;;;:14;:24;;;;;:58;;;;-1:-1:-1;;;;;;;;10168:58:0;;;;;;10128:110;10341:4;;:29;;-1:-1:-1;;;10341:29:0;;-1:-1:-1;;;;;9802:32:1;;;10341:29:0;;;9784:51:1;10321:17:0;;10341:4;;:19;;9757:18:1;;10341:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;;-1:-1:-1;10398:14:0;;;;10394:95;;-1:-1:-1;;;;;10429:24:0;;;;;;:14;:24;;;;;:48;;;;;-1:-1:-1;;10429:48:0;;;;;;9545:951;;;;9492:1004;:::o;8648:673::-;-1:-1:-1;;;;;8831:24:0;;8721:7;8831:24;;;:14;:24;;;;;:35;;;8893:20;8889:39;;-1:-1:-1;8924:1:0;;8648:673;-1:-1:-1;;8648:673:0:o;8889:39::-;8948:13;8972:62;9003:15;9021:12;;;;;;;;;;;8972:23;:62::i;:::-;-1:-1:-1;;;;;9076:24:0;;9046:19;9076:24;;;:14;:24;;;;;:41;9149:14;;8964:71;;;;;-1:-1:-1;;;;9076:41:0;;;;;;-1:-1:-1;;;9149:14:0;;;;9135:28;;9131:183;;;9249:11;;;;9239:6;9216:19;9224:11;9216:5;:19;:::i;:::-;9197:39;;:15;:39;:::i;:::-;:48;;;;:::i;:::-;9196:64;;;;:::i;:::-;9180:81;8648:673;-1:-1:-1;;;;;8648:673:0:o;9131:183::-;-1:-1:-1;9301:1:0;;8648:673;-1:-1:-1;;;;8648:673:0:o;11482:434::-;-1:-1:-1;;;;;11574:24:0;;11548:23;11574:24;;;:14;:24;;;;;:40;-1:-1:-1;;;11574:40:0;;-1:-1:-1;;;;;11574:40:0;11631:19;;11627:281;;-1:-1:-1;;;;;11668:24:0;;11711:1;11668:24;;;:14;:24;;;;;:44;;;;;;11781:13;;11763:31;;-1:-1:-1;;;;;11763:31:0;;;:::i;:::-;11729:66;;11812:32;11818:8;11828:15;11812:5;:32::i;:::-;11864;;;-1:-1:-1;;;;;10038:32:1;;10020:51;;10102:2;10087:18;;10080:34;;;11864:32:0;;9993:18:1;11864:32:0;;;;;;;11652:256;11537:379;11482:434;:::o;8368:123::-;8444:6;8474:1;8470:5;;:1;:5;;;:13;;8482:1;8470:13;;;8478:1;8470:13;8463:20;8368:123;-1:-1:-1;;;8368:123:0:o;8497:145::-;8546:6;8572:62;8603:15;8621:12;;;;;;;;;;;8572:23;:62::i;:::-;8565:69;;8497:145;:::o;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:367::-;255:8;265:6;319:3;312:4;304:6;300:17;296:27;286:55;;337:1;334;327:12;286:55;-1:-1:-1;360:20:1;;403:18;392:30;;389:50;;;435:1;432;425:12;389:50;472:4;464:6;460:17;448:29;;532:3;525:4;515:6;512:1;508:14;500:6;496:27;492:38;489:47;486:67;;;549:1;546;539:12;486:67;192:367;;;;;:::o;564:679::-;618:5;671:3;664:4;656:6;652:17;648:27;638:55;;689:1;686;679:12;638:55;725:6;712:20;751:4;775:60;791:43;831:2;791:43;:::i;:::-;775:60;:::i;:::-;857:3;881:2;876:3;869:15;909:2;904:3;900:12;893:19;;944:2;936:6;932:15;996:3;991:2;985;982:1;978:10;970:6;966:23;962:32;959:41;956:61;;;1013:1;1010;1003:12;956:61;1035:1;1045:169;1059:2;1056:1;1053:9;1045:169;;;1116:23;1135:3;1116:23;:::i;:::-;1104:36;;1160:12;;;;1192;;;;1077:1;1070:9;1045:169;;;-1:-1:-1;1232:5:1;;564:679;-1:-1:-1;;;;;;;564:679:1:o;1248:673::-;1302:5;1355:3;1348:4;1340:6;1336:17;1332:27;1322:55;;1373:1;1370;1363:12;1322:55;1409:6;1396:20;1435:4;1459:60;1475:43;1515:2;1475:43;:::i;1459:60::-;1541:3;1565:2;1560:3;1553:15;1593:2;1588:3;1584:12;1577:19;;1628:2;1620:6;1616:15;1680:3;1675:2;1669;1666:1;1662:10;1654:6;1650:23;1646:32;1643:41;1640:61;;;1697:1;1694;1687:12;1640:61;1719:1;1729:163;1743:2;1740:1;1737:9;1729:163;;;1800:17;;1788:30;;1838:12;;;;1870;;;;1761:1;1754:9;1729:163;;1926:160;1991:20;;2047:13;;2040:21;2030:32;;2020:60;;2076:1;2073;2066:12;2091:186;2150:6;2203:2;2191:9;2182:7;2178:23;2174:32;2171:52;;;2219:1;2216;2209:12;2171:52;2242:29;2261:9;2242:29;:::i;2282:260::-;2350:6;2358;2411:2;2399:9;2390:7;2386:23;2382:32;2379:52;;;2427:1;2424;2417:12;2379:52;2450:29;2469:9;2450:29;:::i;:::-;2440:39;;2498:38;2532:2;2521:9;2517:18;2498:38;:::i;:::-;2488:48;;2282:260;;;;;:::o;2547:328::-;2624:6;2632;2640;2693:2;2681:9;2672:7;2668:23;2664:32;2661:52;;;2709:1;2706;2699:12;2661:52;2732:29;2751:9;2732:29;:::i;:::-;2722:39;;2780:38;2814:2;2803:9;2799:18;2780:38;:::i;:::-;2770:48;;2865:2;2854:9;2850:18;2837:32;2827:42;;2547:328;;;;;:::o;2880:254::-;2945:6;2953;3006:2;2994:9;2985:7;2981:23;2977:32;2974:52;;;3022:1;3019;3012:12;2974:52;3045:29;3064:9;3045:29;:::i;:::-;3035:39;;3093:35;3124:2;3113:9;3109:18;3093:35;:::i;3139:254::-;3207:6;3215;3268:2;3256:9;3247:7;3243:23;3239:32;3236:52;;;3284:1;3281;3274:12;3236:52;3307:29;3326:9;3307:29;:::i;:::-;3297:39;3383:2;3368:18;;;;3355:32;;-1:-1:-1;;;3139:254:1:o;3398:437::-;3484:6;3492;3545:2;3533:9;3524:7;3520:23;3516:32;3513:52;;;3561:1;3558;3551:12;3513:52;3601:9;3588:23;3634:18;3626:6;3623:30;3620:50;;;3666:1;3663;3656:12;3620:50;3705:70;3767:7;3758:6;3747:9;3743:22;3705:70;:::i;:::-;3794:8;;3679:96;;-1:-1:-1;3398:437:1;-1:-1:-1;;;;3398:437:1:o;3840:773::-;3962:6;3970;3978;3986;4039:2;4027:9;4018:7;4014:23;4010:32;4007:52;;;4055:1;4052;4045:12;4007:52;4095:9;4082:23;4124:18;4165:2;4157:6;4154:14;4151:34;;;4181:1;4178;4171:12;4151:34;4220:70;4282:7;4273:6;4262:9;4258:22;4220:70;:::i;:::-;4309:8;;-1:-1:-1;4194:96:1;-1:-1:-1;4397:2:1;4382:18;;4369:32;;-1:-1:-1;4413:16:1;;;4410:36;;;4442:1;4439;4432:12;4410:36;;4481:72;4545:7;4534:8;4523:9;4519:24;4481:72;:::i;:::-;3840:773;;;;-1:-1:-1;4572:8:1;-1:-1:-1;;;;3840:773:1:o;4618:1402::-;4810:6;4818;4826;4834;4842;4850;4858;4866;4919:3;4907:9;4898:7;4894:23;4890:33;4887:53;;;4936:1;4933;4926:12;4887:53;4976:9;4963:23;5005:18;5046:2;5038:6;5035:14;5032:34;;;5062:1;5059;5052:12;5032:34;5101:70;5163:7;5154:6;5143:9;5139:22;5101:70;:::i;:::-;5190:8;;-1:-1:-1;5075:96:1;-1:-1:-1;5278:2:1;5263:18;;5250:32;;-1:-1:-1;5294:16:1;;;5291:36;;;5323:1;5320;5313:12;5291:36;5362:72;5426:7;5415:8;5404:9;5400:24;5362:72;:::i;:::-;5453:8;;-1:-1:-1;5336:98:1;-1:-1:-1;5541:2:1;5526:18;;5513:32;;-1:-1:-1;5557:16:1;;;5554:36;;;5586:1;5583;5576:12;5554:36;5625:72;5689:7;5678:8;5667:9;5663:24;5625:72;:::i;:::-;5716:8;;-1:-1:-1;5599:98:1;-1:-1:-1;5804:2:1;5789:18;;5776:32;;-1:-1:-1;5820:16:1;;;5817:36;;;5849:1;5846;5839:12;5817:36;;5888:72;5952:7;5941:8;5930:9;5926:24;5888:72;:::i;:::-;4618:1402;;;;-1:-1:-1;4618:1402:1;;-1:-1:-1;4618:1402:1;;;;;;5979:8;-1:-1:-1;;;4618:1402:1:o;6025:348::-;6109:6;6162:2;6150:9;6141:7;6137:23;6133:32;6130:52;;;6178:1;6175;6168:12;6130:52;6218:9;6205:23;6251:18;6243:6;6240:30;6237:50;;;6283:1;6280;6273:12;6237:50;6306:61;6359:7;6350:6;6339:9;6335:22;6306:61;:::i;:::-;6296:71;6025:348;-1:-1:-1;;;;6025:348:1:o;6378:821::-;6530:6;6538;6546;6599:2;6587:9;6578:7;6574:23;6570:32;6567:52;;;6615:1;6612;6605:12;6567:52;6655:9;6642:23;6684:18;6725:2;6717:6;6714:14;6711:34;;;6741:1;6738;6731:12;6711:34;6764:61;6817:7;6808:6;6797:9;6793:22;6764:61;:::i;:::-;6754:71;;6878:2;6867:9;6863:18;6850:32;6834:48;;6907:2;6897:8;6894:16;6891:36;;;6923:1;6920;6913:12;6891:36;6946:63;7001:7;6990:8;6979:9;6975:24;6946:63;:::i;:::-;6936:73;;7062:2;7051:9;7047:18;7034:32;7018:48;;7091:2;7081:8;7078:16;7075:36;;;7107:1;7104;7097:12;7075:36;;7130:63;7185:7;7174:8;7163:9;7159:24;7130:63;:::i;:::-;7120:73;;;6378:821;;;;;:::o;7204:595::-;7322:6;7330;7383:2;7371:9;7362:7;7358:23;7354:32;7351:52;;;7399:1;7396;7389:12;7351:52;7439:9;7426:23;7468:18;7509:2;7501:6;7498:14;7495:34;;;7525:1;7522;7515:12;7495:34;7548:61;7601:7;7592:6;7581:9;7577:22;7548:61;:::i;:::-;7538:71;;7662:2;7651:9;7647:18;7634:32;7618:48;;7691:2;7681:8;7678:16;7675:36;;;7707:1;7704;7697:12;7675:36;;7730:63;7785:7;7774:8;7763:9;7759:24;7730:63;:::i;:::-;7720:73;;;7204:595;;;;;:::o;7804:180::-;7860:6;7913:2;7901:9;7892:7;7888:23;7884:32;7881:52;;;7929:1;7926;7919:12;7881:52;7952:26;7968:9;7952:26;:::i;7989:768::-;8081:6;8134:2;8122:9;8113:7;8109:23;8105:32;8102:52;;;8150:1;8147;8140:12;8102:52;8183:2;8177:9;8225:2;8217:6;8213:15;8294:6;8282:10;8279:22;8258:18;8246:10;8243:34;8240:62;8237:88;;;8305:18;;:::i;:::-;8341:2;8334:22;8378:16;;8403:30;8378:16;8403:30;:::i;:::-;8442:21;;8508:2;8493:18;;8487:25;8521:32;8487:25;8521:32;:::i;:::-;8581:2;8569:15;;8562:32;8639:2;8624:18;;8618:25;8652:33;8618:25;8652:33;:::i;:::-;8713:2;8701:15;;8694:32;8705:6;7989:768;-1:-1:-1;;;7989:768:1:o;8762:247::-;8821:6;8874:2;8862:9;8853:7;8849:23;8845:32;8842:52;;;8890:1;8887;8880:12;8842:52;8929:9;8916:23;8948:31;8973:5;8948:31;:::i;9014:180::-;9073:6;9126:2;9114:9;9105:7;9101:23;9097:32;9094:52;;;9142:1;9139;9132:12;9094:52;-1:-1:-1;9165:23:1;;9014:180;-1:-1:-1;9014:180:1:o;9199:184::-;9269:6;9322:2;9310:9;9301:7;9297:23;9293:32;9290:52;;;9338:1;9335;9328:12;9290:52;-1:-1:-1;9361:16:1;;9199:184;-1:-1:-1;9199:184:1:o;9388:245::-;9446:6;9499:2;9487:9;9478:7;9474:23;9470:32;9467:52;;;9515:1;9512;9505:12;9467:52;9554:9;9541:23;9573:30;9597:5;9573:30;:::i;10537:597::-;10649:4;10678:2;10707;10696:9;10689:21;10739:6;10733:13;10782:6;10777:2;10766:9;10762:18;10755:34;10807:1;10817:140;10831:6;10828:1;10825:13;10817:140;;;10926:14;;;10922:23;;10916:30;10892:17;;;10911:2;10888:26;10881:66;10846:10;;10817:140;;;10975:6;10972:1;10969:13;10966:91;;;11045:1;11040:2;11031:6;11020:9;11016:22;11012:31;11005:42;10966:91;-1:-1:-1;11118:2:1;11097:15;-1:-1:-1;;11093:29:1;11078:45;;;;11125:2;11074:54;;10537:597;-1:-1:-1;;;10537:597:1:o;12601:356::-;12803:2;12785:21;;;12822:18;;;12815:30;12881:34;12876:2;12861:18;;12854:62;12948:2;12933:18;;12601:356::o;14083:349::-;14285:2;14267:21;;;14324:2;14304:18;;;14297:30;14363:27;14358:2;14343:18;;14336:55;14423:2;14408:18;;14083:349::o;15827:275::-;15898:2;15892:9;15963:2;15944:13;;-1:-1:-1;;15940:27:1;15928:40;;15998:18;15983:34;;16019:22;;;15980:62;15977:88;;;16045:18;;:::i;:::-;16081:2;16074:22;15827:275;;-1:-1:-1;15827:275:1:o;16107:183::-;16167:4;16200:18;16192:6;16189:30;16186:56;;;16222:18;;:::i;:::-;-1:-1:-1;16267:1:1;16263:14;16279:4;16259:25;;16107:183::o;16295:238::-;16335:3;-1:-1:-1;;;;;16402:10:1;;;16432;;;16462:12;;;16454:21;;16451:47;;;16478:18;;:::i;:::-;16514:13;;16295:238;-1:-1:-1;;;;16295:238:1:o;16538:128::-;16578:3;16609:1;16605:6;16602:1;16599:13;16596:39;;;16615:18;;:::i;:::-;-1:-1:-1;16651:9:1;;16538:128::o;16671:230::-;16710:3;16738:12;16777:2;16774:1;16770:10;16807:2;16804:1;16800:10;16838:3;16834:2;16830:12;16825:3;16822:21;16819:47;;;16846:18;;:::i;16906:217::-;16946:1;16972;16962:132;;17016:10;17011:3;17007:20;17004:1;16997:31;17051:4;17048:1;17041:15;17079:4;17076:1;17069:15;16962:132;-1:-1:-1;17108:9:1;;16906:217::o;17128:168::-;17168:7;17234:1;17230;17226:6;17222:14;17219:1;17216:21;17211:1;17204:9;17197:17;17193:45;17190:71;;;17241:18;;:::i;:::-;-1:-1:-1;17281:9:1;;17128:168::o;17301:231::-;17341:4;-1:-1:-1;;;;;17439:10:1;;;;17409;;17461:12;;;17458:38;;;17476:18;;:::i;:::-;17513:13;;17301:231;-1:-1:-1;;;17301:231:1:o;17537:125::-;17577:4;17605:1;17602;17599:8;17596:34;;;17610:18;;:::i;:::-;-1:-1:-1;17647:9:1;;17537:125::o;17667:223::-;17706:4;17735:12;17797:10;;;;17767;;17819:12;;;17816:38;;;17834:18;;:::i;17895:380::-;17974:1;17970:12;;;;18017;;;18038:61;;18092:4;18084:6;18080:17;18070:27;;18038:61;18145:2;18137:6;18134:14;18114:18;18111:38;18108:161;;;18191:10;18186:3;18182:20;18179:1;18172:31;18226:4;18223:1;18216:15;18254:4;18251:1;18244:15;18108:161;;17895:380;;;:::o;18280:135::-;18319:3;-1:-1:-1;;18340:17:1;;18337:43;;;18360:18;;:::i;:::-;-1:-1:-1;18407:1:1;18396:13;;18280:135::o;18420:127::-;18481:10;18476:3;18472:20;18469:1;18462:31;18512:4;18509:1;18502:15;18536:4;18533:1;18526:15;18552:127;18613:10;18608:3;18604:20;18601:1;18594:31;18644:4;18641:1;18634:15;18668:4;18665:1;18658:15;18684:127;18745:10;18740:3;18736:20;18733:1;18726:31;18776:4;18773:1;18766:15;18800:4;18797:1;18790:15;18816:131;-1:-1:-1;;;;;18891:31:1;;18881:42;;18871:70;;18937:1;18934;18927:12;18952:123;19037:12;19030:5;19026:24;19019:5;19016:35;19006:63;;19065:1;19062;19055:12

Swarm Source

ipfs://5609440c20921ab3a380f5a77e1ddfd8516fc51115f00aecb5d38c78a11cf3b1
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.