ETH Price: $3,786.44 (+6.55%)

Token

ERC-20: MTM Characters (CHARACTERS)
 

Overview

Max Total Supply

3,620 CHARACTERS

Holders

837

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
kingsalomon.eth
Balance
1 CHARACTERS
0x343F18e39Ab281BDD574834bE26b32F3c75f42Dc
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:
MTMCharacters

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-14
*/

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

// This is a special "passive" migration contract of MTM. 
// Every single method is modified and has custom "passive" migration proxy logic.

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

interface iCM {
    // Views
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function totalSupply() external view returns (uint256);
    function ownerOf(uint256 tokenId_) external view returns (address);
    function balanceOf(address address_) external view returns (uint256);
    function getApproved(uint256 tokenId_) external view returns (address);
    function isApprovedForAll(address owner_, address operator_) external view returns (bool);
}

// ERC721I Functions, but we modified it for passive migration method
// ERC721IMigrator uses local state storage for gas savings.
// It is like ERC721IStorage and ERC721IOperator combined into one.
contract ERC721IMigrator is Ownable {

    // Interface the MTM Characters Main V1
    iCM public CM;
    function setCM(address address_) external onlyOwner {
        CM = iCM(address_);
    }

    // Name and Symbol Stuff
    string public name; string public symbol;
    constructor(string memory name_, string memory symbol_) {
        name = name_; symbol = symbol_;
    }

    // We turned these to _ prefix so we can use a override function
    // To display custom proxy and passive migration logic
    uint256 public totalSupply;
    mapping(uint256 => address) public _ownerOf;
    mapping(address => uint256) public _balanceOf;

    // Here we have to keep track of a initialized balanceOf to prevent any view issues
    mapping(address => bool) public _balanceOfInitialized;

    
    // We disregard the previous contract's approvals
    mapping(uint256 => address) public getApproved;
    mapping(address => mapping(address => bool)) public isApprovedForAll;

    // // TotalSupply Setter
    // Here, we set the totalSupply to equal the previous
    function setTotalSupply(uint256 totalSupply_) external onlyOwner {
        totalSupply = totalSupply_; 
    }

    // // Initializer
    // This is a custom Transfer emitter for the initialize of this contract only
    function initialize(uint256[] calldata tokenIds_, address[] calldata owners_) external onlyOwner {
        require(tokenIds_.length == owners_.length,
            "initialize(): array length mismatch!");
        
        for (uint256 i = 0; i < tokenIds_.length; i++) {
            emit Transfer(address(0x0), owners_[i], tokenIds_[i]);
        }
    }

    // OwnerOf (Proxy View)
    function ownerOf(uint256 tokenId_) public view returns (address) {
        // Find out of the _ownerOf slot has been initialized.
        // We hardcode the tokenId_ to save gas.
        if (tokenId_ <= 3259 && _ownerOf[tokenId_] == address(0x0)) {
            // _ownerOf[tokenId_] is not initialized yet, so return the CM V1 value.
            return CM.ownerOf(tokenId_);
        } else {
            // If it is already initialized, or is higher than migration Id
            // return local state storage instead.
            return _ownerOf[tokenId_];
        }
    }

    // BalanceOf (Proxy View)
    function balanceOf(address address_) public view returns (uint256) {
        // Proxy the balance function
        // We have a tracker of initialization of _balanceOf to track the differences
        // If initialized, we use the state storage. Otherwise, we use CM V1 storage.
        if (_balanceOfInitialized[address_]) {
            return _balanceOf[address_]; 
        } else {
            return CM.balanceOf(address_);
        }
    }

    // Events! L[o_o]⅃ 
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    event Mint(address indexed to, uint256 tokenId);
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    // Functions
    function _mint(address to_, uint256 tokenId_) internal virtual {
        require(to_ != address(0x0), "ERC721IMigrator: _mint() Mint to Zero Address!");
        require(ownerOf(tokenId_) == address(0x0), "ERC721IMigrator: _mint() Token already Exists!");

        // // ERC721I Logic

        // We set _ownerOf in a normal way
        _ownerOf[tokenId_] = to_;

        // We rebalance the _balanceOf on initialization, otherwise follow normal ERC721I logic
        if (_balanceOfInitialized[to_]) {
            // If we are already initialized
            _balanceOf[to_]++;
        } else {
            _balanceOf[to_] = (CM.balanceOf(to_) + 1);
            _balanceOfInitialized[to_] = true;
        }

        // Increment TotalSupply as normal
        totalSupply++;

        // // ERC721I Logic End

        // Emit Events
        emit Transfer(address(0x0), to_, tokenId_);
        emit Mint(to_, tokenId_);
    }

    function _transfer(address from_, address to_, uint256 tokenId_) internal virtual {
        require(from_ == ownerOf(tokenId_), "ERC721IMigrator: _transfer() Transfer from_ != ownerOf(tokenId_)");
        require(to_ != address(0x0), "ERC721IMigrator: _transfer() Transfer to Zero Address!");

        // // ERC721I Transfer Logic

        // If token has an approval
        if (getApproved[tokenId_] != address(0x0)) {
            // Remove the outstanding approval
            getApproved[tokenId_] = address(0x0);
        }

        // Set the _ownerOf to the receiver
        _ownerOf[tokenId_] = to_;

        // // Initialize and Rebalance _balanceOf 
        if (_balanceOfInitialized[from_]) {
            // If from_ is initialized, do normal balance change
            _balanceOf[from_]--;
        } else {
            // If from_ is NOT initialized, follow rebalance flow
            _balanceOf[from_] = (CM.balanceOf(from_) - 1);
            // Set from_ as initialized
            _balanceOfInitialized[from_] = true;
        }

        if (_balanceOfInitialized[to_]) {
            // If to_ is initialized, do normal balance change
            _balanceOf[to_]++;
        } else {
            // If to_ is NOT initialized, follow rebalance flow
            _balanceOf[to_] = (CM.balanceOf(to_) + 1);
            // Set to_ as initialized;
            _balanceOfInitialized[to_] = true;
        }

        // // ERC721I Transfer Logic End

        emit Transfer(from_, to_, tokenId_);
    }

    // Approvals
    function _approve(address to_, uint256 tokenId_) internal virtual {
        if (getApproved[tokenId_] != to_) {
            getApproved[tokenId_] = to_;
            emit Approval(ownerOf(tokenId_), to_, tokenId_);
        }
    }
    function _setApprovalForAll(address owner_, address operator_, bool approved_) internal virtual {
        require(owner_ != operator_, "ERC721IMigrator: _setApprovalForAll() Owner must not be the Operator!");
        isApprovedForAll[owner_][operator_] = approved_;
        emit ApprovalForAll(owner_, operator_, approved_);
    }

    // // Functional Internal Views
    function _isApprovedOrOwner(address spender_, uint256 tokenId_) internal view returns (bool) {
        address _owner = ownerOf(tokenId_);
        require(_owner != address(0x0), "ERC721IMigrator: _isApprovedOrOwner() Owner is Zero Address!");
        return (spender_ == _owner // is the owner OR
            || spender_ == getApproved[tokenId_] // is approved for token OR
            || isApprovedForAll[_owner][spender_] // isApprovedForAll spender 
        );
    }

    // Exists
    function _exists(uint256 tokenId_) internal view virtual returns (bool) {
        // We hardcode tokenId_ for gas savings
        if (tokenId_ <= 3259) { return true; }
        return _ownerOf[tokenId_] != address(0x0);
    }

    // Public Write Functions 
    function approve(address to_, uint256 tokenId_) public virtual {
        address _owner = ownerOf(tokenId_);
        require(to_ != _owner, "ERC721IMigrator: approve() cannot approve owner!");
        require(msg.sender == _owner // sender is the owner of the token
            || isApprovedForAll[_owner][msg.sender], // or isApprovedForAll for the owner
            "ERC721IMigrator: approve() Caller is not owner of isApprovedForAll!");
        _approve(to_, tokenId_);
    }
    // SetApprovalForAll - the msg.sender is always the subject of approval
    function setApprovalForAll(address operator_, bool approved_) public virtual {
        _setApprovalForAll(msg.sender, operator_, approved_);
    }

    // Transfers
    function transferFrom(address from_, address to_, uint256 tokenId_) public virtual {
        require(_isApprovedOrOwner(msg.sender, tokenId_), 
            "ERC721IMigrator: transferFrom() _isApprovedOrOwner = false!");
        _transfer(from_, to_, tokenId_);
    }
    function safeTransferFrom(address from_, address to_, uint256 tokenId_, bytes memory data_) public virtual {
        transferFrom(from_, to_, tokenId_);
        if (to_.code.length != 0) {
            (, bytes memory _returned) = to_.staticcall(abi.encodeWithSelector(0x150b7a02, msg.sender, from_, tokenId_, data_));
            bytes4 _selector = abi.decode(_returned, (bytes4));
            require(_selector == 0x150b7a02, "ERC721IMigrator: safeTransferFrom() to_ not ERC721Receivable!");
        }
    }
    function safeTransferFrom(address from_, address to_, uint256 tokenId_) public virtual {
        safeTransferFrom(from_, to_, tokenId_, "");
    }

    // Native Multi-Transfers by 0xInuarashi
    function multiTransferFrom(address from_, address to_, uint256[] memory tokenIds_) public virtual {
        for (uint256 i = 0; i < tokenIds_.length; i++) {
            transferFrom(from_, to_, tokenIds_[i]);
        }
    }
    function multiSafeTransferFrom(address from_, address to_, uint256[] memory tokenIds_, bytes memory data_) public virtual {
        for (uint256 i = 0; i < tokenIds_.length; i++ ){
            safeTransferFrom(from_, to_, tokenIds_[i], data_);
        }
    }

    // OZ Standard Stuff
    function supportsInterface(bytes4 interfaceId_) public pure returns (bool) {
        return (interfaceId_ == 0x80ac58cd || interfaceId_ == 0x5b5e139f);
    }

    // High Gas Loop View Functions
    function walletOfOwner(address address_) public virtual view returns (uint256[] memory) {
        uint256 _balance = balanceOf(address_);
        uint256[] memory _tokens = new uint256[](_balance);
        uint256 _index;
        uint256 _loopThrough = totalSupply;
        for (uint256 i = 0; i < _loopThrough; i++) {
            // Add another loop through for each 0x0 until array is filled
            if (ownerOf(i) == address(0x0) && _tokens[_balance - 1] == 0) {
                _loopThrough++;
            }
            // Fill the array on each token found
            if (ownerOf(i) == address_) {
                // Record the ID in the index 
                _tokens[_index] = i;
                // Increment the index
                _index++;
            }
        }
        return _tokens;
    }

    // TokenURIs Functions Omitted //

}

interface IERC721 {
    function ownerOf(uint256 tokenId_) external view returns (address);
    function transferFrom(address from_, address to_, uint256 tokenId_) external;
}

interface iCS {
    struct Character {
        uint8  race_;
        uint8  renderType_;
        uint16 transponderId_;
        uint16 spaceCapsuleId_;
        uint8  augments_;
        uint16 basePoints_;
        uint16 totalEquipmentBonus_;
    }
    struct Stats {
        uint8 strength_; 
        uint8 agility_; 
        uint8 constitution_; 
        uint8 intelligence_; 
        uint8 spirit_; 
    }
    struct Equipment {
        uint8 weaponUpgrades_;
        uint8 chestUpgrades_;
        uint8 headUpgrades_;
        uint8 legsUpgrades_;
        uint8 vehicleUpgrades_;
        uint8 armsUpgrades_;
        uint8 artifactUpgrades_;
        uint8 ringUpgrades_;
    }

    // Create Character
    function createCharacter(uint tokenId_, Character memory Character_) external;
    // Characters
    function setName(uint256 tokenId_, string memory name_) external;
    function setRace(uint256 tokenId_, string memory race_) external;
    function setRenderType(uint256 tokenId_, uint8 renderType_) external;
    function setTransponderId(uint256 tokenId_, uint16 transponderId_) external;
    function setSpaceCapsuleId(uint256 tokenId_, uint16 spaceCapsuleId_) external;
    function setAugments(uint256 tokenId_, uint8 augments_) external;
    function setBasePoints(uint256 tokenId_, uint16 basePoints_) external;
    function setBaseEquipmentBonus(uint256 tokenId_, uint16 baseEquipmentBonus_) external;
    function setTotalEquipmentBonus(uint256 tokenId_, uint16 totalEquipmentBonus) external;
    // Stats
    function setStrength(uint256 tokenId_, uint8 strength_) external;
    function setAgility(uint256 tokenId_, uint8 agility_) external;
    function setConstitution(uint256 tokenId_, uint8 constitution_) external;
    function setIntelligence(uint256 tokenId_, uint8 intelligence_) external;
    function setSpirit(uint256 tokenId_, uint8 spirit_) external;
    // Equipment
    function setWeaponUpgrades(uint256 tokenId_, uint8 upgrade_) external;
    function setChestUpgrades(uint256 tokenId_, uint8 upgrade_) external;
    function setHeadUpgrades(uint256 tokenId_, uint8 upgrade_) external;
    function setLegsUpgrades(uint256 tokenId_, uint8 upgrade_) external;
    function setVehicleUpgrades(uint256 tokenId_, uint8 upgrade_) external;
    function setArmsUpgrades(uint256 tokenId_, uint8 upgrade_) external;
    function setArtifactUpgrades(uint256 tokenId_, uint8 upgrade_) external;
    function setRingUpgrades(uint256 tokenId_, uint8 upgrade_) external;
    // Structs and Mappings
    function names(uint256 tokenId_) external view returns (string memory);
    function characters(uint256 tokenId_) external view returns (Character memory);
    function stats(uint256 tokenId_) external view returns (Stats memory);
    function equipments(uint256 tokenId_) external view returns (Equipment memory);
    function contractToRace(address contractAddress_) external view returns (uint8);
}

interface iCC {
    function queryCharacterYieldRate(uint8 augments_, uint16 basePoints_, uint16 totalEquipmentBonus_) external view returns (uint256);
    function getEquipmentBaseBonus(uint16 spaceCapsuleId_) external view returns (uint16); 
}

interface iMES {
    // View Functions
    function balanceOf(address address_) external view returns (uint256);
    function pendingRewards(address address_) external view returns (uint256); 
    // Administration
    function setYieldRate(address address_, uint256 yieldRate_) external;
    function addYieldRate(address address_, uint256 yieldRateAdd_) external;
    function subYieldRate(address address_, uint256 yieldRateSub_) external;
    // Credits System
    function deductCredits(address address_, uint256 amount_) external;
    function addCredits(address address_, uint256 amount_) external;
    // Claiming
    function updateReward(address address_) external;
    function burn(address from, uint256 amount_) external;
}

interface iMetadata {
    function renderMetadata(uint256 tokenId_) external view returns (string memory);
}

contract MTMCharacters is ERC721IMigrator {
    constructor() ERC721IMigrator("MTM Characters", "CHARACTERS") {}

    // Interfaces
    iCS public CS; iCC public CC; iMES public MES; iMetadata public Metadata;
    IERC721 public TP; IERC721 public SC;
    function setContracts(address metadata_, address cc_, address cs_, address mes_, address tp_, address sc_) external onlyOwner {
        CS = iCS(cs_); CC = iCC(cc_); MES = iMES(mes_); Metadata = iMetadata(metadata_);
        TP = IERC721(tp_); SC = IERC721(sc_);
    }

    // Mappings
    mapping(address => mapping(uint256 => bool)) public contractAddressToTokenUploaded;

    // Internal Write Functions
    function __yieldMintHook(address to_, uint256 tokenId_) internal {
        // First, we update the reward. 
        MES.updateReward(to_);

        // Then, we query the token yield rate.
        iCS.Character memory _Character = CS.characters(tokenId_);
        uint256 _tokenYieldRate = CC.queryCharacterYieldRate(_Character.augments_, _Character.basePoints_, _Character.totalEquipmentBonus_);

        // Lastly, we adjust the yield rate of the address.
        MES.addYieldRate(to_, _tokenYieldRate);
    }
    function __yieldTransferHook(address from_, address to_, uint256 tokenId_) internal {
        // First, we update the reward. 
        MES.updateReward(from_); MES.updateReward(to_);

        // Then, we query the token yield rate.
        iCS.Character memory _Character = CS.characters(tokenId_);
        uint256 _tokenYieldRate = CC.queryCharacterYieldRate(_Character.augments_, _Character.basePoints_, _Character.totalEquipmentBonus_);

        // Lastly, we adjust the yield rate of the addresses.
        MES.subYieldRate(from_, _tokenYieldRate); MES.addYieldRate(to_, _tokenYieldRate);
    }

    // Public Write Functions
    mapping(uint8 => bool) public renderTypeAllowed;
    function setRenderTypeAllowed(uint8 renderType_, bool bool_) external onlyOwner {
        renderTypeAllowed[renderType_] = bool_;
    }

    function beamCharacter(uint256 transponderId_, uint256 spaceCapsuleId_, uint8 renderType_) public {
        require(msg.sender == TP.ownerOf(transponderId_) && msg.sender == SC.ownerOf(spaceCapsuleId_), "Unowned pair!");
        require(renderTypeAllowed[renderType_], "This render type is not allowed!");

        // Burn the Transponder and Space Capsule.
        TP.transferFrom(msg.sender, address(this), transponderId_);
        SC.transferFrom(msg.sender, address(this), spaceCapsuleId_);

        uint8 _race = uint8( (uint256(keccak256(abi.encodePacked(msg.sender, block.timestamp, block.difficulty, transponderId_, spaceCapsuleId_))) % 10) + 1 ); // RNG (1-10) 
        uint16 _equipmentBonus = CC.getEquipmentBaseBonus((uint16(spaceCapsuleId_)));

        iCS.Character memory _Character = iCS.Character(
            _race,
            renderType_,
            uint16(transponderId_),
            uint16(spaceCapsuleId_),
            0,
            0,
            _equipmentBonus
        );

        CS.createCharacter(totalSupply, _Character);
        
        __yieldMintHook(msg.sender, totalSupply);
        _mint(msg.sender, totalSupply);
    }
    function uploadCharacter(uint256 transponderId_, uint256 spaceCapsuleId_, uint8 renderType_, address contractAddress_, uint256 uploadId_) public {
        require(msg.sender == TP.ownerOf(transponderId_) && msg.sender == SC.ownerOf(spaceCapsuleId_), "Unowned pair!");
        require(msg.sender == IERC721(contractAddress_).ownerOf(uploadId_), "You don't own this character!");
        require(!contractAddressToTokenUploaded[contractAddress_][uploadId_], "This character has already been uploaded!");
        require(renderTypeAllowed[renderType_], "This render type is not allowed!");

        // Burn the Transponder and Space Capsule. Then, set the character as uploaded.
        TP.transferFrom(msg.sender, address(this), transponderId_);
        SC.transferFrom(msg.sender, address(this), spaceCapsuleId_);
        contractAddressToTokenUploaded[contractAddress_][uploadId_] = true;

        uint8 _race = CS.contractToRace(contractAddress_);
        uint16 _equipmentBonus = CC.getEquipmentBaseBonus((uint16(spaceCapsuleId_)));
        
        iCS.Character memory _Character = iCS.Character(
            _race,
            renderType_,
            uint16(transponderId_),
            uint16(spaceCapsuleId_),
            0,
            0,
            _equipmentBonus
        );

        CS.createCharacter(totalSupply, _Character); 

        __yieldMintHook(msg.sender, totalSupply);
        _mint(msg.sender, totalSupply); 
    }

    // Public Write Multi-Functions
    function multiBeamCharacter(uint256[] memory transponderIds_, uint256[] memory spaceCapsuleIds_, uint8[] memory renderTypes_) public {
        require(transponderIds_.length == spaceCapsuleIds_.length, "Missing pairs!");
        require(transponderIds_.length == renderTypes_.length, "Missing render type!");
        for (uint256 i = 0; i < transponderIds_.length; i++) {
            beamCharacter(transponderIds_[i], spaceCapsuleIds_[i], renderTypes_[i]);
        }
    }
    function multiUploadCharacter(uint256[] memory transponderIds_, uint256[] memory spaceCapsuleIds_, uint8[] memory renderTypes_, address contractAddress_, uint256[] memory uploadIds_) public {
        require(transponderIds_.length == spaceCapsuleIds_.length, "Missing pairs!");
        require(transponderIds_.length == renderTypes_.length, "Missing render type!");
        require(transponderIds_.length == uploadIds_.length, "Upload IDs mismatched length!");
        for (uint256 i = 0; i < transponderIds_.length; i++) {
            uploadCharacter(transponderIds_[i], spaceCapsuleIds_[i], renderTypes_[i], contractAddress_, uploadIds_[i]);
        }
    }

    // Transfer Hooks
    function transferFrom(address from_, address to_, uint256 tokenId_) public override {
        __yieldTransferHook(from_, to_, tokenId_);
        ERC721IMigrator.transferFrom(from_, to_, tokenId_);
    }
    function safeTransferFrom(address from_, address to_, uint256 tokenId_, bytes memory bytes_) public override {
        __yieldTransferHook(from_, to_, tokenId_);
        ERC721IMigrator.safeTransferFrom(from_, to_, tokenId_, bytes_);
    }

    // Public View Functions
    function tokenURI(uint256 tokenId_) public view returns (string memory) {
        require(_exists(tokenId_), "Character does not exist!");
        return Metadata.renderMetadata(tokenId_);
    }
}

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":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"CC","outputs":[{"internalType":"contract iCC","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CM","outputs":[{"internalType":"contract iCM","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CS","outputs":[{"internalType":"contract iCS","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MES","outputs":[{"internalType":"contract iMES","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Metadata","outputs":[{"internalType":"contract iMetadata","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SC","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TP","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_balanceOfInitialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to_","type":"address"},{"internalType":"uint256","name":"tokenId_","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"transponderId_","type":"uint256"},{"internalType":"uint256","name":"spaceCapsuleId_","type":"uint256"},{"internalType":"uint8","name":"renderType_","type":"uint8"}],"name":"beamCharacter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"contractAddressToTokenUploaded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds_","type":"uint256[]"},{"internalType":"address[]","name":"owners_","type":"address[]"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"transponderIds_","type":"uint256[]"},{"internalType":"uint256[]","name":"spaceCapsuleIds_","type":"uint256[]"},{"internalType":"uint8[]","name":"renderTypes_","type":"uint8[]"}],"name":"multiBeamCharacter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from_","type":"address"},{"internalType":"address","name":"to_","type":"address"},{"internalType":"uint256[]","name":"tokenIds_","type":"uint256[]"},{"internalType":"bytes","name":"data_","type":"bytes"}],"name":"multiSafeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from_","type":"address"},{"internalType":"address","name":"to_","type":"address"},{"internalType":"uint256[]","name":"tokenIds_","type":"uint256[]"}],"name":"multiTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"transponderIds_","type":"uint256[]"},{"internalType":"uint256[]","name":"spaceCapsuleIds_","type":"uint256[]"},{"internalType":"uint8[]","name":"renderTypes_","type":"uint8[]"},{"internalType":"address","name":"contractAddress_","type":"address"},{"internalType":"uint256[]","name":"uploadIds_","type":"uint256[]"}],"name":"multiUploadCharacter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId_","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"}],"name":"renderTypeAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from_","type":"address"},{"internalType":"address","name":"to_","type":"address"},{"internalType":"uint256","name":"tokenId_","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from_","type":"address"},{"internalType":"address","name":"to_","type":"address"},{"internalType":"uint256","name":"tokenId_","type":"uint256"},{"internalType":"bytes","name":"bytes_","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator_","type":"address"},{"internalType":"bool","name":"approved_","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"setCM","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"metadata_","type":"address"},{"internalType":"address","name":"cc_","type":"address"},{"internalType":"address","name":"cs_","type":"address"},{"internalType":"address","name":"mes_","type":"address"},{"internalType":"address","name":"tp_","type":"address"},{"internalType":"address","name":"sc_","type":"address"}],"name":"setContracts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"renderType_","type":"uint8"},{"internalType":"bool","name":"bool_","type":"bool"}],"name":"setRenderTypeAllowed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"totalSupply_","type":"uint256"}],"name":"setTotalSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId_","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId_","type":"uint256"}],"name":"tokenURI","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":"from_","type":"address"},{"internalType":"address","name":"to_","type":"address"},{"internalType":"uint256","name":"tokenId_","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner_","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"transponderId_","type":"uint256"},{"internalType":"uint256","name":"spaceCapsuleId_","type":"uint256"},{"internalType":"uint8","name":"renderType_","type":"uint8"},{"internalType":"address","name":"contractAddress_","type":"address"},{"internalType":"uint256","name":"uploadId_","type":"uint256"}],"name":"uploadCharacter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b50604080518082018252600e81526d4d544d204368617261637465727360901b60208083019182528351808501909452600a8452694348415241435445525360b01b90840152600080546001600160a01b0319163317905581519192916200007c916002916200009b565b508051620000929060039060208401906200009b565b5050506200017e565b828054620000a99062000141565b90600052602060002090601f016020900481019282620000cd576000855562000118565b82601f10620000e857805160ff191683800117855562000118565b8280016001018555821562000118579182015b8281111562000118578251825591602001919060010190620000fb565b50620001269291506200012a565b5090565b5b808211156200012657600081556001016200012b565b600181811c908216806200015657607f821691505b602082108114156200017857634e487b7160e01b600052602260045260246000fd5b50919050565b6137ff806200018e6000396000f3fe608060405234801561001057600080fd5b50600436106102485760003560e01c806370a082311161013b578063b88d4fde116100b8578063e2d979341161007c578063e2d9793414610591578063e985e9c5146105a4578063f2fde38b146105d2578063f487c602146105e5578063f7ea7a3d146105f857600080fd5b8063b88d4fde14610525578063b979b1a314610538578063c16ac06f1461054b578063c87b56dd1461055e578063cca3e8321461057157600080fd5b806395d89b41116100ff57806395d89b41146104b6578063978fbc3c146104be578063a22cb465146104ec578063a5eb6ff2146104ff578063b4f035a41461051257600080fd5b806370a0823114610457578063751149791461046a5780637ca510a41461047d5780637cb81fe5146104905780638da5cb5b146104a357600080fd5b80633b500607116101c957806357b3aa761161018d57806357b3aa76146103e85780635a1389111461040b5780636352211e1461041e578063639807d0146104315780636509e7761461044457600080fd5b80633b5006071461036c57806342842e0e1461037f578063438b6300146103925780634724e546146103b25780634be99cd6146103d557600080fd5b806323b872dd1161021057806323b872dd146102f75780632463a55a1461030a578063383505411461031d5780633a3473b6146103465780633ae23cc41461035957600080fd5b806301ffc9a71461024d57806306fdde0314610275578063081812fc1461028a578063095ea7b3146102cb57806318160ddd146102e0575b600080fd5b61026061025b3660046131bf565b61060b565b60405190151581526020015b60405180910390f35b61027d610642565b60405161026c9190613541565b6102b361029836600461333f565b6008602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161026c565b6102de6102d9366004612fea565b6106d0565b005b6102e960045481565b60405190815260200161026c565b6102de610305366004612f15565b610824565b6102de610318366004612daa565b61083a565b6102b361032b36600461333f565b6005602052600090815260409020546001600160a01b031681565b6102de610354366004612e8d565b6108d4565b600a546102b3906001600160a01b031681565b6102de61037a366004613081565b61091e565b6102de61038d366004612f15565b610a22565b6103a56103a0366004612d30565b610a3d565b60405161026c91906134fd565b6102606103c0366004612d30565b60076020526000908152604090205460ff1681565b6102de6103e3366004612d30565b610b65565b6102606103f63660046133fc565b60116020526000908152604090205460ff1681565b600f546102b3906001600160a01b031681565b6102b361042c36600461333f565b610bb1565b600e546102b3906001600160a01b031681565b600b546102b3906001600160a01b031681565b6102e9610465366004612d30565b610c7c565b6102de6104783660046130fe565b610d36565b6102de61048b366004613016565b610ea8565b6102de61049e366004613371565b610fca565b6000546102b3906001600160a01b031681565b61027d61140b565b6102606104cc366004612fea565b601060209081526000928352604080842090915290825290205460ff1681565b6102de6104fa366004612fb5565b611418565b600d546102b3906001600160a01b031681565b6102de610520366004613436565b611427565b6102de610533366004612f56565b611476565b6102de6105463660046133aa565b61148d565b6001546102b3906001600160a01b031681565b61027d61056c36600461333f565b611a6e565b6102e961057f366004612d30565b60066020526000908152604090205481565b600c546102b3906001600160a01b031681565b6102606105b2366004612d71565b600960209081526000928352604080842090915290825290205460ff1681565b6102de6105e0366004612d30565b611b45565b6102de6105f3366004612e2c565b611b91565b6102de61060636600461333f565b611bd3565b60006380ac58cd60e01b6001600160e01b03198316148061063c5750635b5e139f60e01b6001600160e01b03198316145b92915050565b6002805461064f906136d2565b80601f016020809104026020016040519081016040528092919081815260200182805461067b906136d2565b80156106c85780601f1061069d576101008083540402835291602001916106c8565b820191906000526020600020905b8154815290600101906020018083116106ab57829003601f168201915b505050505081565b60006106db82610bb1565b9050806001600160a01b0316836001600160a01b0316141561075d5760405162461bcd60e51b815260206004820152603060248201527f455243373231494d69677261746f723a20617070726f766528292063616e6e6f60448201526f7420617070726f7665206f776e65722160801b60648201526084015b60405180910390fd5b336001600160a01b038216148061079757506001600160a01b038116600090815260096020908152604080832033845290915290205460ff165b6108155760405162461bcd60e51b815260206004820152604360248201527f455243373231494d69677261746f723a20617070726f766528292043616c6c6560448201527f72206973206e6f74206f776e6572206f66206973417070726f766564466f72416064820152626c6c2160e81b608482015260a401610754565b61081f8383611c02565b505050565b61082f838383611c91565b61081f838383611f48565b6000546001600160a01b031633146108645760405162461bcd60e51b815260040161075490613554565b600a80546001600160a01b03199081166001600160a01b0396871617909155600b8054821696861696909617909555600c8054861693851693909317909255600d8054851695841695909517909455600e8054841694831694909417909355600f80549092169216919091179055565b60005b82518110156109175761090585858584815181106108f7576108f7613760565b602002602001015185611476565b8061090f8161370d565b9150506108d7565b5050505050565b81518351146109605760405162461bcd60e51b815260206004820152600e60248201526d4d697373696e672070616972732160901b6044820152606401610754565b80518351146109a85760405162461bcd60e51b81526020600482015260146024820152734d697373696e672072656e64657220747970652160601b6044820152606401610754565b60005b8351811015610a1c57610a0a8482815181106109c9576109c9613760565b60200260200101518483815181106109e3576109e3613760565b60200260200101518484815181106109fd576109fd613760565b6020026020010151610fca565b80610a148161370d565b9150506109ab565b50505050565b61081f83838360405180602001604052806000815250611476565b60606000610a4a83610c7c565b90506000816001600160401b03811115610a6657610a66613776565b604051908082528060200260200182016040528015610a8f578160200160208202803683370190505b50600454909150600090815b81811015610b5a576000610aae82610bb1565b6001600160a01b0316148015610ae7575083610acb600187613678565b81518110610adb57610adb613760565b60200260200101516000145b15610afa5781610af68161370d565b9250505b866001600160a01b0316610b0d82610bb1565b6001600160a01b03161415610b485780848481518110610b2f57610b2f613760565b602090810291909101015282610b448161370d565b9350505b80610b528161370d565b915050610a9b565b509195945050505050565b6000546001600160a01b03163314610b8f5760405162461bcd60e51b815260040161075490613554565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000610cbb8211158015610bda57506000828152600560205260409020546001600160a01b0316155b15610c5b576001546040516331a9108f60e11b8152600481018490526001600160a01b0390911690636352211e9060240160206040518083038186803b158015610c2357600080fd5b505afa158015610c37573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063c9190612d54565b506000908152600560205260409020546001600160a01b031690565b919050565b6001600160a01b03811660009081526007602052604081205460ff1615610cb957506001600160a01b031660009081526006602052604090205490565b6001546040516370a0823160e01b81526001600160a01b038481166004830152909116906370a082319060240160206040518083038186803b158015610cfe57600080fd5b505afa158015610d12573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063c9190613358565b8351855114610d785760405162461bcd60e51b815260206004820152600e60248201526d4d697373696e672070616972732160901b6044820152606401610754565b8251855114610dc05760405162461bcd60e51b81526020600482015260146024820152734d697373696e672072656e64657220747970652160601b6044820152606401610754565b8051855114610e115760405162461bcd60e51b815260206004820152601d60248201527f55706c6f616420494473206d69736d617463686564206c656e677468210000006044820152606401610754565b60005b8551811015610ea057610e8e868281518110610e3257610e32613760565b6020026020010151868381518110610e4c57610e4c613760565b6020026020010151868481518110610e6657610e66613760565b602002602001015186868681518110610e8157610e81613760565b602002602001015161148d565b80610e988161370d565b915050610e14565b505050505050565b6000546001600160a01b03163314610ed25760405162461bcd60e51b815260040161075490613554565b828114610f2d5760405162461bcd60e51b8152602060048201526024808201527f696e697469616c697a6528293a206172726179206c656e677468206d69736d616044820152637463682160e01b6064820152608401610754565b60005b8381101561091757848482818110610f4a57610f4a613760565b90506020020135838383818110610f6357610f63613760565b9050602002016020810190610f789190612d30565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480610fc28161370d565b915050610f30565b600e546040516331a9108f60e11b8152600481018590526001600160a01b0390911690636352211e9060240160206040518083038186803b15801561100e57600080fd5b505afa158015611022573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110469190612d54565b6001600160a01b0316336001600160a01b03161480156110f25750600f546040516331a9108f60e11b8152600481018490526001600160a01b0390911690636352211e9060240160206040518083038186803b1580156110a557600080fd5b505afa1580156110b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110dd9190612d54565b6001600160a01b0316336001600160a01b0316145b61112e5760405162461bcd60e51b815260206004820152600d60248201526c556e6f776e656420706169722160981b6044820152606401610754565b60ff8082166000908152601160205260409020541661118f5760405162461bcd60e51b815260206004820181905260248201527f546869732072656e6465722074797065206973206e6f7420616c6c6f776564216044820152606401610754565b600e546040516323b872dd60e01b81526001600160a01b03909116906323b872dd906111c39033903090889060040161349c565b600060405180830381600087803b1580156111dd57600080fd5b505af11580156111f1573d6000803e3d6000fd5b5050600f546040516323b872dd60e01b81526001600160a01b0390911692506323b872dd91506112299033903090879060040161349c565b600060405180830381600087803b15801561124357600080fd5b505af1158015611257573d6000803e3d6000fd5b50506040516bffffffffffffffffffffffff193360601b166020820152426034820152446054820152607481018690526094810185905260009250600a915060b4016040516020818303038152906040528051906020012060001c6112bc9190613728565b6112c7906001613660565b600b5460405163813fd7fd60e01b815261ffff861660048201529192506000916001600160a01b039091169063813fd7fd9060240160206040518083038186803b15801561131457600080fd5b505afa158015611328573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134c9190613324565b6040805160e08101825260ff80861682528616602082015261ffff80891682840152878116606083015260006080830181905260a0830152831660c0820152600a5460048054935163e8629cd960e01b815294955091936001600160a01b039091169263e8629cd9926113c192869101613579565b600060405180830381600087803b1580156113db57600080fd5b505af11580156113ef573d6000803e3d6000fd5b505050506113ff33600454611fcf565b610ea0336004546121b6565b6003805461064f906136d2565b611423338383612454565b5050565b6000546001600160a01b031633146114515760405162461bcd60e51b815260040161075490613554565b60ff919091166000908152601160205260409020805460ff1916911515919091179055565b611481848484611c91565b610a1c84848484612557565b600e546040516331a9108f60e11b8152600481018790526001600160a01b0390911690636352211e9060240160206040518083038186803b1580156114d157600080fd5b505afa1580156114e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115099190612d54565b6001600160a01b0316336001600160a01b03161480156115b55750600f546040516331a9108f60e11b8152600481018690526001600160a01b0390911690636352211e9060240160206040518083038186803b15801561156857600080fd5b505afa15801561157c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a09190612d54565b6001600160a01b0316336001600160a01b0316145b6115f15760405162461bcd60e51b815260206004820152600d60248201526c556e6f776e656420706169722160981b6044820152606401610754565b6040516331a9108f60e11b8152600481018290526001600160a01b03831690636352211e9060240160206040518083038186803b15801561163157600080fd5b505afa158015611645573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116699190612d54565b6001600160a01b0316336001600160a01b0316146116c95760405162461bcd60e51b815260206004820152601d60248201527f596f7520646f6e2774206f776e207468697320636861726163746572210000006044820152606401610754565b6001600160a01b038216600090815260106020908152604080832084845290915290205460ff161561174f5760405162461bcd60e51b815260206004820152602960248201527f54686973206368617261637465722068617320616c7265616479206265656e2060448201526875706c6f616465642160b81b6064820152608401610754565b60ff808416600090815260116020526040902054166117b05760405162461bcd60e51b815260206004820181905260248201527f546869732072656e6465722074797065206973206e6f7420616c6c6f776564216044820152606401610754565b600e546040516323b872dd60e01b81526001600160a01b03909116906323b872dd906117e490339030908a9060040161349c565b600060405180830381600087803b1580156117fe57600080fd5b505af1158015611812573d6000803e3d6000fd5b5050600f546040516323b872dd60e01b81526001600160a01b0390911692506323b872dd915061184a9033903090899060040161349c565b600060405180830381600087803b15801561186457600080fd5b505af1158015611878573d6000803e3d6000fd5b505050506001600160a01b038281166000818152601060209081526040808320868452909152808220805460ff19166001179055600a549051630da46c0f60e01b8152600481019390935290921690630da46c0f9060240160206040518083038186803b1580156118e857600080fd5b505afa1580156118fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119209190613419565b600b5460405163813fd7fd60e01b815261ffff881660048201529192506000916001600160a01b039091169063813fd7fd9060240160206040518083038186803b15801561196d57600080fd5b505afa158015611981573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a59190613324565b6040805160e08101825260ff80861682528816602082015261ffff808b1682840152898116606083015260006080830181905260a0830152831660c0820152600a5460048054935163e8629cd960e01b815294955091936001600160a01b039091169263e8629cd992611a1a92869101613579565b600060405180830381600087803b158015611a3457600080fd5b505af1158015611a48573d6000803e3d6000fd5b50505050611a5833600454611fcf565b611a64336004546121b6565b5050505050505050565b6060611a79826126b5565b611ac55760405162461bcd60e51b815260206004820152601960248201527f43686172616374657220646f6573206e6f7420657869737421000000000000006044820152606401610754565b600d54604051630eaa6a0560e31b8152600481018490526001600160a01b039091169063755350289060240160006040518083038186803b158015611b0957600080fd5b505afa158015611b1d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261063c91908101906131f9565b6000546001600160a01b03163314611b6f5760405162461bcd60e51b815260040161075490613554565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b60005b8151811015610a1c57611bc18484848481518110611bb457611bb4613760565b6020026020010151610824565b80611bcb8161370d565b915050611b94565b6000546001600160a01b03163314611bfd5760405162461bcd60e51b815260040161075490613554565b600455565b6000818152600860205260409020546001600160a01b0383811691161461142357600081815260086020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611c5882610bb1565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600c5460405163632447c960e01b81526001600160a01b0385811660048301529091169063632447c990602401600060405180830381600087803b158015611cd857600080fd5b505af1158015611cec573d6000803e3d6000fd5b5050600c5460405163632447c960e01b81526001600160a01b038681166004830152909116925063632447c99150602401600060405180830381600087803b158015611d3757600080fd5b505af1158015611d4b573d6000803e3d6000fd5b5050600a54604051634810bc5960e01b815260048101859052600093506001600160a01b039091169150634810bc599060240160e06040518083038186803b158015611d9657600080fd5b505afa158015611daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dce919061326f565b600b54608082015160a083015160c0840151604051633616171160e01b815260ff909316600484015261ffff91821660248401521660448201529192506000916001600160a01b039091169063361617119060640160206040518083038186803b158015611e3b57600080fd5b505afa158015611e4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e739190613358565b600c54604051631fa86bd160e31b81526001600160a01b0388811660048301526024820184905292935091169063fd435e8890604401600060405180830381600087803b158015611ec357600080fd5b505af1158015611ed7573d6000803e3d6000fd5b5050600c5460405163b5862c2560e01b81526001600160a01b03888116600483015260248201869052909116925063b5862c259150604401600060405180830381600087803b158015611f2957600080fd5b505af1158015611f3d573d6000803e3d6000fd5b505050505050505050565b611f5233826126e6565b611fc45760405162461bcd60e51b815260206004820152603b60248201527f455243373231494d69677261746f723a207472616e7366657246726f6d28292060448201527f5f6973417070726f7665644f724f776e6572203d2066616c73652100000000006064820152608401610754565b61081f8383836127e1565b600c5460405163632447c960e01b81526001600160a01b0384811660048301529091169063632447c990602401600060405180830381600087803b15801561201657600080fd5b505af115801561202a573d6000803e3d6000fd5b5050600a54604051634810bc5960e01b815260048101859052600093506001600160a01b039091169150634810bc599060240160e06040518083038186803b15801561207557600080fd5b505afa158015612089573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ad919061326f565b600b54608082015160a083015160c0840151604051633616171160e01b815260ff909316600484015261ffff91821660248401521660448201529192506000916001600160a01b039091169063361617119060640160206040518083038186803b15801561211a57600080fd5b505afa15801561212e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121529190613358565b600c5460405163b5862c2560e01b81526001600160a01b0387811660048301526024820184905292935091169063b5862c2590604401600060405180830381600087803b1580156121a257600080fd5b505af1158015611a64573d6000803e3d6000fd5b6001600160a01b0382166122235760405162461bcd60e51b815260206004820152602e60248201527f455243373231494d69677261746f723a205f6d696e742829204d696e7420746f60448201526d205a65726f20416464726573732160901b6064820152608401610754565b600061222e82610bb1565b6001600160a01b03161461229b5760405162461bcd60e51b815260206004820152602e60248201527f455243373231494d69677261746f723a205f6d696e74282920546f6b656e206160448201526d6c7265616479204578697374732160901b6064820152608401610754565b600081815260056020908152604080832080546001600160a01b0319166001600160a01b0387169081179091558352600790915290205460ff1615612308576001600160a01b03821660009081526006602052604081208054916122fe8361370d565b91905055506123c0565b6001546040516370a0823160e01b81526001600160a01b038481166004830152909116906370a082319060240160206040518083038186803b15801561234d57600080fd5b505afa158015612361573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123859190613358565b612390906001613660565b6001600160a01b0383166000908152600660209081526040808320939093556007905220805460ff191660011790555b600480549060006123d08361370d565b909155505060405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4816001600160a01b03167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968858260405161244891815260200190565b60405180910390a25050565b816001600160a01b0316836001600160a01b031614156124ea5760405162461bcd60e51b815260206004820152604560248201527f455243373231494d69677261746f723a205f736574417070726f76616c466f7260448201527f416c6c2829204f776e6572206d757374206e6f7420626520746865204f70657260648201526461746f722160d81b608482015260a401610754565b6001600160a01b03838116600081815260096020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612562848484610824565b6001600160a01b0383163b15610a1c576000836001600160a01b031663150b7a023387868660405160240161259a94939291906134c0565b6040516020818303038152906040529060e01b6020820180516001600160e01b0383818316178352505050506040516125d39190613480565b600060405180830381855afa9150503d806000811461260e576040519150601f19603f3d011682016040523d82523d6000602084013e612613565b606091505b5091505060008180602001905181019061262d91906131dc565b9050630a85bd0160e11b6001600160e01b0319821614610ea05760405162461bcd60e51b815260206004820152603d60248201527f455243373231494d69677261746f723a20736166655472616e7366657246726f60448201527f6d282920746f5f206e6f742045524337323152656365697661626c65210000006064820152608401610754565b6000610cbb82116126c857506001919050565b506000908152600560205260409020546001600160a01b0316151590565b6000806126f283610bb1565b90506001600160a01b0381166127705760405162461bcd60e51b815260206004820152603c60248201527f455243373231494d69677261746f723a205f6973417070726f7665644f724f7760448201527f6e65722829204f776e6572206973205a65726f204164647265737321000000006064820152608401610754565b806001600160a01b0316846001600160a01b031614806127a957506000838152600860205260409020546001600160a01b038581169116145b806127d957506001600160a01b0380821660009081526009602090815260408083209388168352929052205460ff165b949350505050565b6127ea81610bb1565b6001600160a01b0316836001600160a01b031614612872576040805162461bcd60e51b81526020600482015260248101919091527f455243373231494d69677261746f723a205f7472616e7366657228292054726160448201527f6e736665722066726f6d5f20213d206f776e65724f6628746f6b656e49645f296064820152608401610754565b6001600160a01b0382166128e75760405162461bcd60e51b815260206004820152603660248201527f455243373231494d69677261746f723a205f7472616e736665722829205472616044820152756e7366657220746f205a65726f20416464726573732160501b6064820152608401610754565b6000818152600860205260409020546001600160a01b03161561292157600081815260086020526040902080546001600160a01b03191690555b600081815260056020908152604080832080546001600160a01b0319166001600160a01b038781169190911790915586168352600790915290205460ff1615612992576001600160a01b0383166000908152600660205260408120805491612988836136bb565b9190505550612a4a565b600180546040516370a0823160e01b81526001600160a01b038681166004830152909116906370a082319060240160206040518083038186803b1580156129d857600080fd5b505afa1580156129ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a109190613358565b612a1a9190613678565b6001600160a01b0384166000908152600660209081526040808320939093556007905220805460ff191660011790555b6001600160a01b03821660009081526007602052604090205460ff1615612a99576001600160a01b0382166000908152600660205260408120805491612a8f8361370d565b9190505550612b51565b6001546040516370a0823160e01b81526001600160a01b038481166004830152909116906370a082319060240160206040518083038186803b158015612ade57600080fd5b505afa158015612af2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b169190613358565b612b21906001613660565b6001600160a01b0383166000908152600660209081526040808320939093556007905220805460ff191660011790555b80826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008083601f840112612ba957600080fd5b5081356001600160401b03811115612bc057600080fd5b6020830191508360208260051b8501011115612bdb57600080fd5b9250929050565b600082601f830112612bf357600080fd5b81356020612c08612c0383613616565b6135e6565b80838252828201915082860187848660051b8901011115612c2857600080fd5b60005b85811015612c4757813584529284019290840190600101612c2b565b5090979650505050505050565b600082601f830112612c6557600080fd5b81356020612c75612c0383613616565b80838252828201915082860187848660051b8901011115612c9557600080fd5b60005b85811015612c47578135612cab816137ba565b84529284019290840190600101612c98565b80358015158114610c7757600080fd5b600082601f830112612cde57600080fd5b8135612cec612c0382613639565b818152846020838601011115612d0157600080fd5b816020850160208301376000918101602001919091529392505050565b805161ffff81168114610c7757600080fd5b600060208284031215612d4257600080fd5b8135612d4d8161378c565b9392505050565b600060208284031215612d6657600080fd5b8151612d4d8161378c565b60008060408385031215612d8457600080fd5b8235612d8f8161378c565b91506020830135612d9f8161378c565b809150509250929050565b60008060008060008060c08789031215612dc357600080fd5b8635612dce8161378c565b95506020870135612dde8161378c565b94506040870135612dee8161378c565b93506060870135612dfe8161378c565b92506080870135612e0e8161378c565b915060a0870135612e1e8161378c565b809150509295509295509295565b600080600060608486031215612e4157600080fd5b8335612e4c8161378c565b92506020840135612e5c8161378c565b915060408401356001600160401b03811115612e7757600080fd5b612e8386828701612be2565b9150509250925092565b60008060008060808587031215612ea357600080fd5b8435612eae8161378c565b93506020850135612ebe8161378c565b925060408501356001600160401b0380821115612eda57600080fd5b612ee688838901612be2565b93506060870135915080821115612efc57600080fd5b50612f0987828801612ccd565b91505092959194509250565b600080600060608486031215612f2a57600080fd5b8335612f358161378c565b92506020840135612f458161378c565b929592945050506040919091013590565b60008060008060808587031215612f6c57600080fd5b8435612f778161378c565b93506020850135612f878161378c565b92506040850135915060608501356001600160401b03811115612fa957600080fd5b612f0987828801612ccd565b60008060408385031215612fc857600080fd5b8235612fd38161378c565b9150612fe160208401612cbd565b90509250929050565b60008060408385031215612ffd57600080fd5b82356130088161378c565b946020939093013593505050565b6000806000806040858703121561302c57600080fd5b84356001600160401b038082111561304357600080fd5b61304f88838901612b97565b9096509450602087013591508082111561306857600080fd5b5061307587828801612b97565b95989497509550505050565b60008060006060848603121561309657600080fd5b83356001600160401b03808211156130ad57600080fd5b6130b987838801612be2565b945060208601359150808211156130cf57600080fd5b6130db87838801612be2565b935060408601359150808211156130f157600080fd5b50612e8386828701612c54565b600080600080600060a0868803121561311657600080fd5b85356001600160401b038082111561312d57600080fd5b61313989838a01612be2565b9650602088013591508082111561314f57600080fd5b61315b89838a01612be2565b9550604088013591508082111561317157600080fd5b61317d89838a01612c54565b94506060880135915061318f8261378c565b909250608087013590808211156131a557600080fd5b506131b288828901612be2565b9150509295509295909350565b6000602082840312156131d157600080fd5b8135612d4d816137a4565b6000602082840312156131ee57600080fd5b8151612d4d816137a4565b60006020828403121561320b57600080fd5b81516001600160401b0381111561322157600080fd5b8201601f8101841361323257600080fd5b8051613240612c0382613639565b81815285602083850101111561325557600080fd5b61326682602083016020860161368f565b95945050505050565b600060e0828403121561328157600080fd5b60405160e081018181106001600160401b03821117156132a3576132a3613776565b60405282516132b1816137ba565b815260208301516132c1816137ba565b60208201526132d260408401612d1e565b60408201526132e360608401612d1e565b606082015260808301516132f6816137ba565b608082015261330760a08401612d1e565b60a082015261331860c08401612d1e565b60c08201529392505050565b60006020828403121561333657600080fd5b612d4d82612d1e565b60006020828403121561335157600080fd5b5035919050565b60006020828403121561336a57600080fd5b5051919050565b60008060006060848603121561338657600080fd5b8335925060208401359150604084013561339f816137ba565b809150509250925092565b600080600080600060a086880312156133c257600080fd5b853594506020860135935060408601356133db816137ba565b925060608601356133eb8161378c565b949793965091946080013592915050565b60006020828403121561340e57600080fd5b8135612d4d816137ba565b60006020828403121561342b57600080fd5b8151612d4d816137ba565b6000806040838503121561344957600080fd5b8235612fd3816137ba565b6000815180845261346c81602086016020860161368f565b601f01601f19169290920160200192915050565b6000825161349281846020870161368f565b9190910192915050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906134f390830184613454565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561353557835183529284019291840191600101613519565b50909695505050505050565b602081526000612d4d6020830184613454565b6020808252600b908201526a4f776e61626c653a204e4f60a81b604082015260600190565b60006101008201905083825260ff835116602083015260ff6020840151166040830152604083015161ffff808216606085015280606086015116608085015260ff60808601511660a08501528060a08601511660c08501528060c08601511660e085015250509392505050565b604051601f8201601f191681016001600160401b038111828210171561360e5761360e613776565b604052919050565b60006001600160401b0382111561362f5761362f613776565b5060051b60200190565b60006001600160401b0382111561365257613652613776565b50601f01601f191660200190565b600082198211156136735761367361374a565b500190565b60008282101561368a5761368a61374a565b500390565b60005b838110156136aa578181015183820152602001613692565b83811115610a1c5750506000910152565b6000816136ca576136ca61374a565b506000190190565b600181811c908216806136e657607f821691505b6020821081141561370757634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156137215761372161374a565b5060010190565b60008261374557634e487b7160e01b600052601260045260246000fd5b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146137a157600080fd5b50565b6001600160e01b0319811681146137a157600080fd5b60ff811681146137a157600080fdfea2646970667358221220323cfbb290e1c0b14ace1c62038d9b505209f2fa97089a21d233bf611a9d3fe764736f6c63430008070033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102485760003560e01c806370a082311161013b578063b88d4fde116100b8578063e2d979341161007c578063e2d9793414610591578063e985e9c5146105a4578063f2fde38b146105d2578063f487c602146105e5578063f7ea7a3d146105f857600080fd5b8063b88d4fde14610525578063b979b1a314610538578063c16ac06f1461054b578063c87b56dd1461055e578063cca3e8321461057157600080fd5b806395d89b41116100ff57806395d89b41146104b6578063978fbc3c146104be578063a22cb465146104ec578063a5eb6ff2146104ff578063b4f035a41461051257600080fd5b806370a0823114610457578063751149791461046a5780637ca510a41461047d5780637cb81fe5146104905780638da5cb5b146104a357600080fd5b80633b500607116101c957806357b3aa761161018d57806357b3aa76146103e85780635a1389111461040b5780636352211e1461041e578063639807d0146104315780636509e7761461044457600080fd5b80633b5006071461036c57806342842e0e1461037f578063438b6300146103925780634724e546146103b25780634be99cd6146103d557600080fd5b806323b872dd1161021057806323b872dd146102f75780632463a55a1461030a578063383505411461031d5780633a3473b6146103465780633ae23cc41461035957600080fd5b806301ffc9a71461024d57806306fdde0314610275578063081812fc1461028a578063095ea7b3146102cb57806318160ddd146102e0575b600080fd5b61026061025b3660046131bf565b61060b565b60405190151581526020015b60405180910390f35b61027d610642565b60405161026c9190613541565b6102b361029836600461333f565b6008602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161026c565b6102de6102d9366004612fea565b6106d0565b005b6102e960045481565b60405190815260200161026c565b6102de610305366004612f15565b610824565b6102de610318366004612daa565b61083a565b6102b361032b36600461333f565b6005602052600090815260409020546001600160a01b031681565b6102de610354366004612e8d565b6108d4565b600a546102b3906001600160a01b031681565b6102de61037a366004613081565b61091e565b6102de61038d366004612f15565b610a22565b6103a56103a0366004612d30565b610a3d565b60405161026c91906134fd565b6102606103c0366004612d30565b60076020526000908152604090205460ff1681565b6102de6103e3366004612d30565b610b65565b6102606103f63660046133fc565b60116020526000908152604090205460ff1681565b600f546102b3906001600160a01b031681565b6102b361042c36600461333f565b610bb1565b600e546102b3906001600160a01b031681565b600b546102b3906001600160a01b031681565b6102e9610465366004612d30565b610c7c565b6102de6104783660046130fe565b610d36565b6102de61048b366004613016565b610ea8565b6102de61049e366004613371565b610fca565b6000546102b3906001600160a01b031681565b61027d61140b565b6102606104cc366004612fea565b601060209081526000928352604080842090915290825290205460ff1681565b6102de6104fa366004612fb5565b611418565b600d546102b3906001600160a01b031681565b6102de610520366004613436565b611427565b6102de610533366004612f56565b611476565b6102de6105463660046133aa565b61148d565b6001546102b3906001600160a01b031681565b61027d61056c36600461333f565b611a6e565b6102e961057f366004612d30565b60066020526000908152604090205481565b600c546102b3906001600160a01b031681565b6102606105b2366004612d71565b600960209081526000928352604080842090915290825290205460ff1681565b6102de6105e0366004612d30565b611b45565b6102de6105f3366004612e2c565b611b91565b6102de61060636600461333f565b611bd3565b60006380ac58cd60e01b6001600160e01b03198316148061063c5750635b5e139f60e01b6001600160e01b03198316145b92915050565b6002805461064f906136d2565b80601f016020809104026020016040519081016040528092919081815260200182805461067b906136d2565b80156106c85780601f1061069d576101008083540402835291602001916106c8565b820191906000526020600020905b8154815290600101906020018083116106ab57829003601f168201915b505050505081565b60006106db82610bb1565b9050806001600160a01b0316836001600160a01b0316141561075d5760405162461bcd60e51b815260206004820152603060248201527f455243373231494d69677261746f723a20617070726f766528292063616e6e6f60448201526f7420617070726f7665206f776e65722160801b60648201526084015b60405180910390fd5b336001600160a01b038216148061079757506001600160a01b038116600090815260096020908152604080832033845290915290205460ff165b6108155760405162461bcd60e51b815260206004820152604360248201527f455243373231494d69677261746f723a20617070726f766528292043616c6c6560448201527f72206973206e6f74206f776e6572206f66206973417070726f766564466f72416064820152626c6c2160e81b608482015260a401610754565b61081f8383611c02565b505050565b61082f838383611c91565b61081f838383611f48565b6000546001600160a01b031633146108645760405162461bcd60e51b815260040161075490613554565b600a80546001600160a01b03199081166001600160a01b0396871617909155600b8054821696861696909617909555600c8054861693851693909317909255600d8054851695841695909517909455600e8054841694831694909417909355600f80549092169216919091179055565b60005b82518110156109175761090585858584815181106108f7576108f7613760565b602002602001015185611476565b8061090f8161370d565b9150506108d7565b5050505050565b81518351146109605760405162461bcd60e51b815260206004820152600e60248201526d4d697373696e672070616972732160901b6044820152606401610754565b80518351146109a85760405162461bcd60e51b81526020600482015260146024820152734d697373696e672072656e64657220747970652160601b6044820152606401610754565b60005b8351811015610a1c57610a0a8482815181106109c9576109c9613760565b60200260200101518483815181106109e3576109e3613760565b60200260200101518484815181106109fd576109fd613760565b6020026020010151610fca565b80610a148161370d565b9150506109ab565b50505050565b61081f83838360405180602001604052806000815250611476565b60606000610a4a83610c7c565b90506000816001600160401b03811115610a6657610a66613776565b604051908082528060200260200182016040528015610a8f578160200160208202803683370190505b50600454909150600090815b81811015610b5a576000610aae82610bb1565b6001600160a01b0316148015610ae7575083610acb600187613678565b81518110610adb57610adb613760565b60200260200101516000145b15610afa5781610af68161370d565b9250505b866001600160a01b0316610b0d82610bb1565b6001600160a01b03161415610b485780848481518110610b2f57610b2f613760565b602090810291909101015282610b448161370d565b9350505b80610b528161370d565b915050610a9b565b509195945050505050565b6000546001600160a01b03163314610b8f5760405162461bcd60e51b815260040161075490613554565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000610cbb8211158015610bda57506000828152600560205260409020546001600160a01b0316155b15610c5b576001546040516331a9108f60e11b8152600481018490526001600160a01b0390911690636352211e9060240160206040518083038186803b158015610c2357600080fd5b505afa158015610c37573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063c9190612d54565b506000908152600560205260409020546001600160a01b031690565b919050565b6001600160a01b03811660009081526007602052604081205460ff1615610cb957506001600160a01b031660009081526006602052604090205490565b6001546040516370a0823160e01b81526001600160a01b038481166004830152909116906370a082319060240160206040518083038186803b158015610cfe57600080fd5b505afa158015610d12573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063c9190613358565b8351855114610d785760405162461bcd60e51b815260206004820152600e60248201526d4d697373696e672070616972732160901b6044820152606401610754565b8251855114610dc05760405162461bcd60e51b81526020600482015260146024820152734d697373696e672072656e64657220747970652160601b6044820152606401610754565b8051855114610e115760405162461bcd60e51b815260206004820152601d60248201527f55706c6f616420494473206d69736d617463686564206c656e677468210000006044820152606401610754565b60005b8551811015610ea057610e8e868281518110610e3257610e32613760565b6020026020010151868381518110610e4c57610e4c613760565b6020026020010151868481518110610e6657610e66613760565b602002602001015186868681518110610e8157610e81613760565b602002602001015161148d565b80610e988161370d565b915050610e14565b505050505050565b6000546001600160a01b03163314610ed25760405162461bcd60e51b815260040161075490613554565b828114610f2d5760405162461bcd60e51b8152602060048201526024808201527f696e697469616c697a6528293a206172726179206c656e677468206d69736d616044820152637463682160e01b6064820152608401610754565b60005b8381101561091757848482818110610f4a57610f4a613760565b90506020020135838383818110610f6357610f63613760565b9050602002016020810190610f789190612d30565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480610fc28161370d565b915050610f30565b600e546040516331a9108f60e11b8152600481018590526001600160a01b0390911690636352211e9060240160206040518083038186803b15801561100e57600080fd5b505afa158015611022573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110469190612d54565b6001600160a01b0316336001600160a01b03161480156110f25750600f546040516331a9108f60e11b8152600481018490526001600160a01b0390911690636352211e9060240160206040518083038186803b1580156110a557600080fd5b505afa1580156110b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110dd9190612d54565b6001600160a01b0316336001600160a01b0316145b61112e5760405162461bcd60e51b815260206004820152600d60248201526c556e6f776e656420706169722160981b6044820152606401610754565b60ff8082166000908152601160205260409020541661118f5760405162461bcd60e51b815260206004820181905260248201527f546869732072656e6465722074797065206973206e6f7420616c6c6f776564216044820152606401610754565b600e546040516323b872dd60e01b81526001600160a01b03909116906323b872dd906111c39033903090889060040161349c565b600060405180830381600087803b1580156111dd57600080fd5b505af11580156111f1573d6000803e3d6000fd5b5050600f546040516323b872dd60e01b81526001600160a01b0390911692506323b872dd91506112299033903090879060040161349c565b600060405180830381600087803b15801561124357600080fd5b505af1158015611257573d6000803e3d6000fd5b50506040516bffffffffffffffffffffffff193360601b166020820152426034820152446054820152607481018690526094810185905260009250600a915060b4016040516020818303038152906040528051906020012060001c6112bc9190613728565b6112c7906001613660565b600b5460405163813fd7fd60e01b815261ffff861660048201529192506000916001600160a01b039091169063813fd7fd9060240160206040518083038186803b15801561131457600080fd5b505afa158015611328573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134c9190613324565b6040805160e08101825260ff80861682528616602082015261ffff80891682840152878116606083015260006080830181905260a0830152831660c0820152600a5460048054935163e8629cd960e01b815294955091936001600160a01b039091169263e8629cd9926113c192869101613579565b600060405180830381600087803b1580156113db57600080fd5b505af11580156113ef573d6000803e3d6000fd5b505050506113ff33600454611fcf565b610ea0336004546121b6565b6003805461064f906136d2565b611423338383612454565b5050565b6000546001600160a01b031633146114515760405162461bcd60e51b815260040161075490613554565b60ff919091166000908152601160205260409020805460ff1916911515919091179055565b611481848484611c91565b610a1c84848484612557565b600e546040516331a9108f60e11b8152600481018790526001600160a01b0390911690636352211e9060240160206040518083038186803b1580156114d157600080fd5b505afa1580156114e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115099190612d54565b6001600160a01b0316336001600160a01b03161480156115b55750600f546040516331a9108f60e11b8152600481018690526001600160a01b0390911690636352211e9060240160206040518083038186803b15801561156857600080fd5b505afa15801561157c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a09190612d54565b6001600160a01b0316336001600160a01b0316145b6115f15760405162461bcd60e51b815260206004820152600d60248201526c556e6f776e656420706169722160981b6044820152606401610754565b6040516331a9108f60e11b8152600481018290526001600160a01b03831690636352211e9060240160206040518083038186803b15801561163157600080fd5b505afa158015611645573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116699190612d54565b6001600160a01b0316336001600160a01b0316146116c95760405162461bcd60e51b815260206004820152601d60248201527f596f7520646f6e2774206f776e207468697320636861726163746572210000006044820152606401610754565b6001600160a01b038216600090815260106020908152604080832084845290915290205460ff161561174f5760405162461bcd60e51b815260206004820152602960248201527f54686973206368617261637465722068617320616c7265616479206265656e2060448201526875706c6f616465642160b81b6064820152608401610754565b60ff808416600090815260116020526040902054166117b05760405162461bcd60e51b815260206004820181905260248201527f546869732072656e6465722074797065206973206e6f7420616c6c6f776564216044820152606401610754565b600e546040516323b872dd60e01b81526001600160a01b03909116906323b872dd906117e490339030908a9060040161349c565b600060405180830381600087803b1580156117fe57600080fd5b505af1158015611812573d6000803e3d6000fd5b5050600f546040516323b872dd60e01b81526001600160a01b0390911692506323b872dd915061184a9033903090899060040161349c565b600060405180830381600087803b15801561186457600080fd5b505af1158015611878573d6000803e3d6000fd5b505050506001600160a01b038281166000818152601060209081526040808320868452909152808220805460ff19166001179055600a549051630da46c0f60e01b8152600481019390935290921690630da46c0f9060240160206040518083038186803b1580156118e857600080fd5b505afa1580156118fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119209190613419565b600b5460405163813fd7fd60e01b815261ffff881660048201529192506000916001600160a01b039091169063813fd7fd9060240160206040518083038186803b15801561196d57600080fd5b505afa158015611981573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a59190613324565b6040805160e08101825260ff80861682528816602082015261ffff808b1682840152898116606083015260006080830181905260a0830152831660c0820152600a5460048054935163e8629cd960e01b815294955091936001600160a01b039091169263e8629cd992611a1a92869101613579565b600060405180830381600087803b158015611a3457600080fd5b505af1158015611a48573d6000803e3d6000fd5b50505050611a5833600454611fcf565b611a64336004546121b6565b5050505050505050565b6060611a79826126b5565b611ac55760405162461bcd60e51b815260206004820152601960248201527f43686172616374657220646f6573206e6f7420657869737421000000000000006044820152606401610754565b600d54604051630eaa6a0560e31b8152600481018490526001600160a01b039091169063755350289060240160006040518083038186803b158015611b0957600080fd5b505afa158015611b1d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261063c91908101906131f9565b6000546001600160a01b03163314611b6f5760405162461bcd60e51b815260040161075490613554565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b60005b8151811015610a1c57611bc18484848481518110611bb457611bb4613760565b6020026020010151610824565b80611bcb8161370d565b915050611b94565b6000546001600160a01b03163314611bfd5760405162461bcd60e51b815260040161075490613554565b600455565b6000818152600860205260409020546001600160a01b0383811691161461142357600081815260086020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611c5882610bb1565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600c5460405163632447c960e01b81526001600160a01b0385811660048301529091169063632447c990602401600060405180830381600087803b158015611cd857600080fd5b505af1158015611cec573d6000803e3d6000fd5b5050600c5460405163632447c960e01b81526001600160a01b038681166004830152909116925063632447c99150602401600060405180830381600087803b158015611d3757600080fd5b505af1158015611d4b573d6000803e3d6000fd5b5050600a54604051634810bc5960e01b815260048101859052600093506001600160a01b039091169150634810bc599060240160e06040518083038186803b158015611d9657600080fd5b505afa158015611daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dce919061326f565b600b54608082015160a083015160c0840151604051633616171160e01b815260ff909316600484015261ffff91821660248401521660448201529192506000916001600160a01b039091169063361617119060640160206040518083038186803b158015611e3b57600080fd5b505afa158015611e4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e739190613358565b600c54604051631fa86bd160e31b81526001600160a01b0388811660048301526024820184905292935091169063fd435e8890604401600060405180830381600087803b158015611ec357600080fd5b505af1158015611ed7573d6000803e3d6000fd5b5050600c5460405163b5862c2560e01b81526001600160a01b03888116600483015260248201869052909116925063b5862c259150604401600060405180830381600087803b158015611f2957600080fd5b505af1158015611f3d573d6000803e3d6000fd5b505050505050505050565b611f5233826126e6565b611fc45760405162461bcd60e51b815260206004820152603b60248201527f455243373231494d69677261746f723a207472616e7366657246726f6d28292060448201527f5f6973417070726f7665644f724f776e6572203d2066616c73652100000000006064820152608401610754565b61081f8383836127e1565b600c5460405163632447c960e01b81526001600160a01b0384811660048301529091169063632447c990602401600060405180830381600087803b15801561201657600080fd5b505af115801561202a573d6000803e3d6000fd5b5050600a54604051634810bc5960e01b815260048101859052600093506001600160a01b039091169150634810bc599060240160e06040518083038186803b15801561207557600080fd5b505afa158015612089573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ad919061326f565b600b54608082015160a083015160c0840151604051633616171160e01b815260ff909316600484015261ffff91821660248401521660448201529192506000916001600160a01b039091169063361617119060640160206040518083038186803b15801561211a57600080fd5b505afa15801561212e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121529190613358565b600c5460405163b5862c2560e01b81526001600160a01b0387811660048301526024820184905292935091169063b5862c2590604401600060405180830381600087803b1580156121a257600080fd5b505af1158015611a64573d6000803e3d6000fd5b6001600160a01b0382166122235760405162461bcd60e51b815260206004820152602e60248201527f455243373231494d69677261746f723a205f6d696e742829204d696e7420746f60448201526d205a65726f20416464726573732160901b6064820152608401610754565b600061222e82610bb1565b6001600160a01b03161461229b5760405162461bcd60e51b815260206004820152602e60248201527f455243373231494d69677261746f723a205f6d696e74282920546f6b656e206160448201526d6c7265616479204578697374732160901b6064820152608401610754565b600081815260056020908152604080832080546001600160a01b0319166001600160a01b0387169081179091558352600790915290205460ff1615612308576001600160a01b03821660009081526006602052604081208054916122fe8361370d565b91905055506123c0565b6001546040516370a0823160e01b81526001600160a01b038481166004830152909116906370a082319060240160206040518083038186803b15801561234d57600080fd5b505afa158015612361573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123859190613358565b612390906001613660565b6001600160a01b0383166000908152600660209081526040808320939093556007905220805460ff191660011790555b600480549060006123d08361370d565b909155505060405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4816001600160a01b03167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968858260405161244891815260200190565b60405180910390a25050565b816001600160a01b0316836001600160a01b031614156124ea5760405162461bcd60e51b815260206004820152604560248201527f455243373231494d69677261746f723a205f736574417070726f76616c466f7260448201527f416c6c2829204f776e6572206d757374206e6f7420626520746865204f70657260648201526461746f722160d81b608482015260a401610754565b6001600160a01b03838116600081815260096020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612562848484610824565b6001600160a01b0383163b15610a1c576000836001600160a01b031663150b7a023387868660405160240161259a94939291906134c0565b6040516020818303038152906040529060e01b6020820180516001600160e01b0383818316178352505050506040516125d39190613480565b600060405180830381855afa9150503d806000811461260e576040519150601f19603f3d011682016040523d82523d6000602084013e612613565b606091505b5091505060008180602001905181019061262d91906131dc565b9050630a85bd0160e11b6001600160e01b0319821614610ea05760405162461bcd60e51b815260206004820152603d60248201527f455243373231494d69677261746f723a20736166655472616e7366657246726f60448201527f6d282920746f5f206e6f742045524337323152656365697661626c65210000006064820152608401610754565b6000610cbb82116126c857506001919050565b506000908152600560205260409020546001600160a01b0316151590565b6000806126f283610bb1565b90506001600160a01b0381166127705760405162461bcd60e51b815260206004820152603c60248201527f455243373231494d69677261746f723a205f6973417070726f7665644f724f7760448201527f6e65722829204f776e6572206973205a65726f204164647265737321000000006064820152608401610754565b806001600160a01b0316846001600160a01b031614806127a957506000838152600860205260409020546001600160a01b038581169116145b806127d957506001600160a01b0380821660009081526009602090815260408083209388168352929052205460ff165b949350505050565b6127ea81610bb1565b6001600160a01b0316836001600160a01b031614612872576040805162461bcd60e51b81526020600482015260248101919091527f455243373231494d69677261746f723a205f7472616e7366657228292054726160448201527f6e736665722066726f6d5f20213d206f776e65724f6628746f6b656e49645f296064820152608401610754565b6001600160a01b0382166128e75760405162461bcd60e51b815260206004820152603660248201527f455243373231494d69677261746f723a205f7472616e736665722829205472616044820152756e7366657220746f205a65726f20416464726573732160501b6064820152608401610754565b6000818152600860205260409020546001600160a01b03161561292157600081815260086020526040902080546001600160a01b03191690555b600081815260056020908152604080832080546001600160a01b0319166001600160a01b038781169190911790915586168352600790915290205460ff1615612992576001600160a01b0383166000908152600660205260408120805491612988836136bb565b9190505550612a4a565b600180546040516370a0823160e01b81526001600160a01b038681166004830152909116906370a082319060240160206040518083038186803b1580156129d857600080fd5b505afa1580156129ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a109190613358565b612a1a9190613678565b6001600160a01b0384166000908152600660209081526040808320939093556007905220805460ff191660011790555b6001600160a01b03821660009081526007602052604090205460ff1615612a99576001600160a01b0382166000908152600660205260408120805491612a8f8361370d565b9190505550612b51565b6001546040516370a0823160e01b81526001600160a01b038481166004830152909116906370a082319060240160206040518083038186803b158015612ade57600080fd5b505afa158015612af2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b169190613358565b612b21906001613660565b6001600160a01b0383166000908152600660209081526040808320939093556007905220805460ff191660011790555b80826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008083601f840112612ba957600080fd5b5081356001600160401b03811115612bc057600080fd5b6020830191508360208260051b8501011115612bdb57600080fd5b9250929050565b600082601f830112612bf357600080fd5b81356020612c08612c0383613616565b6135e6565b80838252828201915082860187848660051b8901011115612c2857600080fd5b60005b85811015612c4757813584529284019290840190600101612c2b565b5090979650505050505050565b600082601f830112612c6557600080fd5b81356020612c75612c0383613616565b80838252828201915082860187848660051b8901011115612c9557600080fd5b60005b85811015612c47578135612cab816137ba565b84529284019290840190600101612c98565b80358015158114610c7757600080fd5b600082601f830112612cde57600080fd5b8135612cec612c0382613639565b818152846020838601011115612d0157600080fd5b816020850160208301376000918101602001919091529392505050565b805161ffff81168114610c7757600080fd5b600060208284031215612d4257600080fd5b8135612d4d8161378c565b9392505050565b600060208284031215612d6657600080fd5b8151612d4d8161378c565b60008060408385031215612d8457600080fd5b8235612d8f8161378c565b91506020830135612d9f8161378c565b809150509250929050565b60008060008060008060c08789031215612dc357600080fd5b8635612dce8161378c565b95506020870135612dde8161378c565b94506040870135612dee8161378c565b93506060870135612dfe8161378c565b92506080870135612e0e8161378c565b915060a0870135612e1e8161378c565b809150509295509295509295565b600080600060608486031215612e4157600080fd5b8335612e4c8161378c565b92506020840135612e5c8161378c565b915060408401356001600160401b03811115612e7757600080fd5b612e8386828701612be2565b9150509250925092565b60008060008060808587031215612ea357600080fd5b8435612eae8161378c565b93506020850135612ebe8161378c565b925060408501356001600160401b0380821115612eda57600080fd5b612ee688838901612be2565b93506060870135915080821115612efc57600080fd5b50612f0987828801612ccd565b91505092959194509250565b600080600060608486031215612f2a57600080fd5b8335612f358161378c565b92506020840135612f458161378c565b929592945050506040919091013590565b60008060008060808587031215612f6c57600080fd5b8435612f778161378c565b93506020850135612f878161378c565b92506040850135915060608501356001600160401b03811115612fa957600080fd5b612f0987828801612ccd565b60008060408385031215612fc857600080fd5b8235612fd38161378c565b9150612fe160208401612cbd565b90509250929050565b60008060408385031215612ffd57600080fd5b82356130088161378c565b946020939093013593505050565b6000806000806040858703121561302c57600080fd5b84356001600160401b038082111561304357600080fd5b61304f88838901612b97565b9096509450602087013591508082111561306857600080fd5b5061307587828801612b97565b95989497509550505050565b60008060006060848603121561309657600080fd5b83356001600160401b03808211156130ad57600080fd5b6130b987838801612be2565b945060208601359150808211156130cf57600080fd5b6130db87838801612be2565b935060408601359150808211156130f157600080fd5b50612e8386828701612c54565b600080600080600060a0868803121561311657600080fd5b85356001600160401b038082111561312d57600080fd5b61313989838a01612be2565b9650602088013591508082111561314f57600080fd5b61315b89838a01612be2565b9550604088013591508082111561317157600080fd5b61317d89838a01612c54565b94506060880135915061318f8261378c565b909250608087013590808211156131a557600080fd5b506131b288828901612be2565b9150509295509295909350565b6000602082840312156131d157600080fd5b8135612d4d816137a4565b6000602082840312156131ee57600080fd5b8151612d4d816137a4565b60006020828403121561320b57600080fd5b81516001600160401b0381111561322157600080fd5b8201601f8101841361323257600080fd5b8051613240612c0382613639565b81815285602083850101111561325557600080fd5b61326682602083016020860161368f565b95945050505050565b600060e0828403121561328157600080fd5b60405160e081018181106001600160401b03821117156132a3576132a3613776565b60405282516132b1816137ba565b815260208301516132c1816137ba565b60208201526132d260408401612d1e565b60408201526132e360608401612d1e565b606082015260808301516132f6816137ba565b608082015261330760a08401612d1e565b60a082015261331860c08401612d1e565b60c08201529392505050565b60006020828403121561333657600080fd5b612d4d82612d1e565b60006020828403121561335157600080fd5b5035919050565b60006020828403121561336a57600080fd5b5051919050565b60008060006060848603121561338657600080fd5b8335925060208401359150604084013561339f816137ba565b809150509250925092565b600080600080600060a086880312156133c257600080fd5b853594506020860135935060408601356133db816137ba565b925060608601356133eb8161378c565b949793965091946080013592915050565b60006020828403121561340e57600080fd5b8135612d4d816137ba565b60006020828403121561342b57600080fd5b8151612d4d816137ba565b6000806040838503121561344957600080fd5b8235612fd3816137ba565b6000815180845261346c81602086016020860161368f565b601f01601f19169290920160200192915050565b6000825161349281846020870161368f565b9190910192915050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906134f390830184613454565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561353557835183529284019291840191600101613519565b50909695505050505050565b602081526000612d4d6020830184613454565b6020808252600b908201526a4f776e61626c653a204e4f60a81b604082015260600190565b60006101008201905083825260ff835116602083015260ff6020840151166040830152604083015161ffff808216606085015280606086015116608085015260ff60808601511660a08501528060a08601511660c08501528060c08601511660e085015250509392505050565b604051601f8201601f191681016001600160401b038111828210171561360e5761360e613776565b604052919050565b60006001600160401b0382111561362f5761362f613776565b5060051b60200190565b60006001600160401b0382111561365257613652613776565b50601f01601f191660200190565b600082198211156136735761367361374a565b500190565b60008282101561368a5761368a61374a565b500390565b60005b838110156136aa578181015183820152602001613692565b83811115610a1c5750506000910152565b6000816136ca576136ca61374a565b506000190190565b600181811c908216806136e657607f821691505b6020821081141561370757634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156137215761372161374a565b5060010190565b60008261374557634e487b7160e01b600052601260045260246000fd5b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146137a157600080fd5b50565b6001600160e01b0319811681146137a157600080fd5b60ff811681146137a157600080fdfea2646970667358221220323cfbb290e1c0b14ace1c62038d9b505209f2fa97089a21d233bf611a9d3fe764736f6c63430008070033

Deployed Bytecode Sourcemap

15979:6628:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10600:159;;;;;;:::i;:::-;;:::i;:::-;;;18340:14:1;;18333:22;18315:41;;18303:2;18288:18;10600:159:0;;;;;;;;1479:18;;;:::i;:::-;;;;;;;:::i;2118:46::-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;2118:46:0;;;;;;-1:-1:-1;;;;;16342:32:1;;;16324:51;;16312:2;16297:18;2118:46:0;16178:203:1;8328:485:0;;;;;;:::i;:::-;;:::i;:::-;;1769:26;;;;;;;;;28222:25:1;;;28210:2;28195:18;1769:26:0;28076:177:1;21916:205:0;;;;;;:::i;:::-;;:::i;16241:271::-;;;;;;:::i;:::-;;:::i;1802:43::-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;1802:43:0;;;10303:263;;;;;;:::i;:::-;;:::i;16119:13::-;;;;;-1:-1:-1;;;;;16119:13:0;;;20735:478;;;;;;:::i;:::-;;:::i;9867:148::-;;;;;;:::i;:::-;;:::i;10804:829::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1995:53::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1352:89;;;;;;:::i;:::-;;:::i;17834:47::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;16217:17;;;;;-1:-1:-1;;;;;16217:17:0;;;2958:584;;;;;;:::i;:::-;;:::i;16198:17::-;;;;;-1:-1:-1;;;;;16198:17:0;;;16134:13;;;;;-1:-1:-1;;;;;16134:13:0;;;3581:452;;;;;;:::i;:::-;;:::i;21219:666::-;;;;;;:::i;:::-;;:::i;2562:359::-;;;;;;:::i;:::-;;:::i;18033:1184::-;;;;;;:::i;:::-;;:::i;239:20::-;;;;;-1:-1:-1;;;;;239:20:0;;;1499;;;:::i;16537:82::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;8896:148;;;;;;:::i;:::-;;:::i;16166:25::-;;;;;-1:-1:-1;;;;;16166:25:0;;;17888:137;;;;;;:::i;:::-;;:::i;22127:242::-;;;;;;:::i;:::-;;:::i;19223:1467::-;;;;;;:::i;:::-;;:::i;1332:13::-;;;;;-1:-1:-1;;;;;1332:13:0;;;22407:197;;;;;;:::i;:::-;;:::i;1852:45::-;;;;;;:::i;:::-;;;;;;;;;;;;;;16149:15;;;;;-1:-1:-1;;;;;16149:15:0;;;2171:68;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;385:108;;;;;;:::i;:::-;;:::i;10069:228::-;;;;;;:::i;:::-;;:::i;2337:111::-;;;;;;:::i;:::-;;:::i;10600:159::-;10669:4;-1:-1:-1;;;;;;;;;10694:26:0;;;;:56;;-1:-1:-1;;;;;;;;;;10724:26:0;;;10694:56;10686:65;10600:159;-1:-1:-1;;10600:159:0:o;1479:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8328:485::-;8402:14;8419:17;8427:8;8419:7;:17::i;:::-;8402:34;;8462:6;-1:-1:-1;;;;;8455:13:0;:3;-1:-1:-1;;;;;8455:13:0;;;8447:74;;;;-1:-1:-1;;;8447:74:0;;25212:2:1;8447:74:0;;;25194:21:1;25251:2;25231:18;;;25224:30;25290:34;25270:18;;;25263:62;-1:-1:-1;;;25341:18:1;;;25334:46;25397:19;;8447:74:0;;;;;;;;;8540:10;-1:-1:-1;;;;;8540:20:0;;;;:109;;-1:-1:-1;;;;;;8613:24:0;;;;;;:16;:24;;;;;;;;8638:10;8613:36;;;;;;;;;;8540:109;8532:239;;;;-1:-1:-1;;;8532:239:0;;22571:2:1;8532:239:0;;;22553:21:1;22610:2;22590:18;;;22583:30;22649:34;22629:18;;;22622:62;22720:34;22700:18;;;22693:62;-1:-1:-1;;;22771:19:1;;;22764:34;22815:19;;8532:239:0;22369:471:1;8532:239:0;8782:23;8791:3;8796:8;8782;:23::i;:::-;8391:422;8328:485;;:::o;21916:205::-;22011:41;22031:5;22038:3;22043:8;22011:19;:41::i;:::-;22063:50;22092:5;22099:3;22104:8;22063:28;:50::i;16241:271::-;338:5;;-1:-1:-1;;;;;338:5:0;347:10;338:19;330:43;;;;-1:-1:-1;;;330:43:0;;;;;;;:::i;:::-;16378:2:::1;:13:::0;;-1:-1:-1;;;;;;16378:13:0;;::::1;-1:-1:-1::0;;;;;16378:13:0;;::::1;;::::0;;;16393:2:::1;:13:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;16408:3:::1;:16:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;16426:8:::1;:31:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;16468:2:::1;:17:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;16487:2:::1;:17:::0;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;16241:271::o;10303:263::-;10441:9;10436:123;10460:9;:16;10456:1;:20;10436:123;;;10498:49;10515:5;10522:3;10527:9;10537:1;10527:12;;;;;;;;:::i;:::-;;;;;;;10541:5;10498:16;:49::i;:::-;10478:3;;;;:::i;:::-;;;;10436:123;;;;10303:263;;;;:::o;20735:478::-;20913:16;:23;20887:15;:22;:49;20879:76;;;;-1:-1:-1;;;20879:76:0;;21798:2:1;20879:76:0;;;21780:21:1;21837:2;21817:18;;;21810:30;-1:-1:-1;;;21856:18:1;;;21849:44;21910:18;;20879:76:0;21596:338:1;20879:76:0;21000:12;:19;20974:15;:22;:45;20966:78;;;;-1:-1:-1;;;20966:78:0;;23405:2:1;20966:78:0;;;23387:21:1;23444:2;23424:18;;;23417:30;-1:-1:-1;;;23463:18:1;;;23456:50;23523:18;;20966:78:0;23203:344:1;20966:78:0;21060:9;21055:151;21079:15;:22;21075:1;:26;21055:151;;;21123:71;21137:15;21153:1;21137:18;;;;;;;;:::i;:::-;;;;;;;21157:16;21174:1;21157:19;;;;;;;;:::i;:::-;;;;;;;21178:12;21191:1;21178:15;;;;;;;;:::i;:::-;;;;;;;21123:13;:71::i;:::-;21103:3;;;;:::i;:::-;;;;21055:151;;;;20735:478;;;:::o;9867:148::-;9965:42;9982:5;9989:3;9994:8;9965:42;;;;;;;;;;;;:16;:42::i;10804:829::-;10874:16;10903;10922:19;10932:8;10922:9;:19::i;:::-;10903:38;;10952:24;10993:8;-1:-1:-1;;;;;10979:23:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10979:23:0;-1:-1:-1;11061:11:0;;10952:50;;-1:-1:-1;11013:14:0;;;11083:518;11107:12;11103:1;:16;11083:518;;;11243:3;11221:10;11229:1;11221:7;:10::i;:::-;-1:-1:-1;;;;;11221:26:0;;:56;;;;-1:-1:-1;11251:7:0;11259:12;11270:1;11259:8;:12;:::i;:::-;11251:21;;;;;;;;:::i;:::-;;;;;;;11276:1;11251:26;11221:56;11217:111;;;11298:14;;;;:::i;:::-;;;;11217:111;11411:8;-1:-1:-1;;;;;11397:22:0;:10;11405:1;11397:7;:10::i;:::-;-1:-1:-1;;;;;11397:22:0;;11393:197;;;11506:1;11488:7;11496:6;11488:15;;;;;;;;:::i;:::-;;;;;;;;;;:19;11566:8;;;;:::i;:::-;;;;11393:197;11121:3;;;;:::i;:::-;;;;11083:518;;;-1:-1:-1;11618:7:0;;10804:829;-1:-1:-1;;;;;10804:829:0:o;1352:89::-;338:5;;-1:-1:-1;;;;;338:5:0;347:10;338:19;330:43;;;;-1:-1:-1;;;330:43:0;;;;;;;:::i;:::-;1415:2:::1;:18:::0;;-1:-1:-1;;;;;;1415:18:0::1;-1:-1:-1::0;;;;;1415:18:0;;;::::1;::::0;;;::::1;::::0;;1352:89::o;2958:584::-;3014:7;3164:4;3152:8;:16;;:54;;;;-1:-1:-1;3202:3:0;3172:18;;;:8;:18;;;;;;-1:-1:-1;;;;;3172:18:0;:34;3152:54;3148:387;;;3316:2;;:20;;-1:-1:-1;;;3316:20:0;;;;;28222:25:1;;;-1:-1:-1;;;;;3316:2:0;;;;:10;;28195:18:1;;3316:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;3148:387::-;-1:-1:-1;3505:18:0;;;;:8;:18;;;;;;-1:-1:-1;;;;;3505:18:0;;2958:584::o;3148:387::-;2958:584;;;:::o;3581:452::-;-1:-1:-1;;;;;3876:31:0;;3639:7;3876:31;;;:21;:31;;;;;;;;3872:154;;;-1:-1:-1;;;;;;3931:20:0;;;;;:10;:20;;;;;;;3581:452::o;3872:154::-;3992:2;;:22;;-1:-1:-1;;;3992:22:0;;-1:-1:-1;;;;;16342:32:1;;;3992:22:0;;;16324:51:1;3992:2:0;;;;:12;;16297:18:1;;3992:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;21219:666::-;21454:16;:23;21428:15;:22;:49;21420:76;;;;-1:-1:-1;;;21420:76:0;;21798:2:1;21420:76:0;;;21780:21:1;21837:2;21817:18;;;21810:30;-1:-1:-1;;;21856:18:1;;;21849:44;21910:18;;21420:76:0;21596:338:1;21420:76:0;21541:12;:19;21515:15;:22;:45;21507:78;;;;-1:-1:-1;;;21507:78:0;;23405:2:1;21507:78:0;;;23387:21:1;23444:2;23424:18;;;23417:30;-1:-1:-1;;;23463:18:1;;;23456:50;23523:18;;21507:78:0;23203:344:1;21507:78:0;21630:10;:17;21604:15;:22;:43;21596:85;;;;-1:-1:-1;;;21596:85:0;;26895:2:1;21596:85:0;;;26877:21:1;26934:2;26914:18;;;26907:30;26973:31;26953:18;;;26946:59;27022:18;;21596:85:0;26693:353:1;21596:85:0;21697:9;21692:186;21716:15;:22;21712:1;:26;21692:186;;;21760:106;21776:15;21792:1;21776:18;;;;;;;;:::i;:::-;;;;;;;21796:16;21813:1;21796:19;;;;;;;;:::i;:::-;;;;;;;21817:12;21830:1;21817:15;;;;;;;;:::i;:::-;;;;;;;21834:16;21852:10;21863:1;21852:13;;;;;;;;:::i;:::-;;;;;;;21760:15;:106::i;:::-;21740:3;;;;:::i;:::-;;;;21692:186;;;;21219:666;;;;;:::o;2562:359::-;338:5;;-1:-1:-1;;;;;338:5:0;347:10;338:19;330:43;;;;-1:-1:-1;;;330:43:0;;;;;;;:::i;:::-;2678:34;;::::1;2670:96;;;::::0;-1:-1:-1;;;2670:96:0;;20978:2:1;2670:96:0::1;::::0;::::1;20960:21:1::0;21017:2;20997:18;;;20990:30;21056:34;21036:18;;;21029:62;-1:-1:-1;;;21107:18:1;;;21100:34;21151:19;;2670:96:0::1;20776:400:1::0;2670:96:0::1;2792:9;2787:127;2807:20:::0;;::::1;2787:127;;;2889:9;;2899:1;2889:12;;;;;;;:::i;:::-;;;;;;;2877:7;;2885:1;2877:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;2854:48:0::1;2871:3;-1:-1:-1::0;;;;;2854:48:0::1;;;;;;;;;;;2829:3:::0;::::1;::::0;::::1;:::i;:::-;;;;2787:127;;18033:1184:::0;18164:2;;:26;;-1:-1:-1;;;18164:26:0;;;;;28222:25:1;;;-1:-1:-1;;;;;18164:2:0;;;;:10;;28195:18:1;;18164:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18150:40:0;:10;-1:-1:-1;;;;;18150:40:0;;:85;;;;-1:-1:-1;18208:2:0;;:27;;-1:-1:-1;;;18208:27:0;;;;;28222:25:1;;;-1:-1:-1;;;;;18208:2:0;;;;:10;;28195:18:1;;18208:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18194:41:0;:10;-1:-1:-1;;;;;18194:41:0;;18150:85;18142:111;;;;-1:-1:-1;;;18142:111:0;;24530:2:1;18142:111:0;;;24512:21:1;24569:2;24549:18;;;24542:30;-1:-1:-1;;;24588:18:1;;;24581:43;24641:18;;18142:111:0;24328:337:1;18142:111:0;18272:30;;;;;;;;:17;:30;;;;;;;18264:75;;;;-1:-1:-1;;;18264:75:0;;24169:2:1;18264:75:0;;;24151:21:1;;;24188:18;;;24181:30;24247:34;24227:18;;;24220:62;24299:18;;18264:75:0;23967:356:1;18264:75:0;18404:2;;:58;;-1:-1:-1;;;18404:58:0;;-1:-1:-1;;;;;18404:2:0;;;;:15;;:58;;18420:10;;18440:4;;18447:14;;18404:58;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18473:2:0;;:59;;-1:-1:-1;;;18473:59:0;;-1:-1:-1;;;;;18473:2:0;;;;-1:-1:-1;18473:15:0;;-1:-1:-1;18473:59:0;;18489:10;;18509:4;;18516:15;;18473:59;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18585:96:0;;-1:-1:-1;;18602:10:0;15664:2:1;15660:15;15656:53;18585:96:0;;;15644:66:1;18614:15:0;15726:12:1;;;15719:28;18631:16:0;15763:12:1;;;15756:28;15800:12;;;15793:28;;;15837:13;;;15830:29;;;18545:11:0;;-1:-1:-1;18686:2:0;;-1:-1:-1;15875:13:1;;18585:96:0;;;;;;;;;;;;18575:107;;;;;;18567:116;;:121;;;;:::i;:::-;18566:127;;18692:1;18566:127;:::i;:::-;18746:2;;:51;;-1:-1:-1;;;18746:51:0;;28057:6:1;28045:19;;18746:51:0;;;28027:38:1;18545:150:0;;-1:-1:-1;18721:22:0;;-1:-1:-1;;;;;18746:2:0;;;;:24;;28000:18:1;;18746:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18844:207;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18810:31;18844:207;;;;;;;;;;;;;;;;19064:2;;19083:11;;;19064:43;;-1:-1:-1;;;19064:43:0;;18721:76;;-1:-1:-1;18844:207:0;;-1:-1:-1;;;;;19064:2:0;;;;:18;;:43;;18844:207;;19064:43;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19128:40;19144:10;19156:11;;19128:15;:40::i;:::-;19179:30;19185:10;19197:11;;19179:5;:30::i;1499:20::-;;;;;;;:::i;8896:148::-;8984:52;9003:10;9015:9;9026;8984:18;:52::i;:::-;8896:148;;:::o;17888:137::-;338:5;;-1:-1:-1;;;;;338:5:0;347:10;338:19;330:43;;;;-1:-1:-1;;;330:43:0;;;;;;;:::i;:::-;17979:30:::1;::::0;;;::::1;;::::0;;;:17:::1;:30;::::0;;;;:38;;-1:-1:-1;;17979:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17888:137::o;22127:242::-;22247:41;22267:5;22274:3;22279:8;22247:19;:41::i;:::-;22299:62;22332:5;22339:3;22344:8;22354:6;22299:32;:62::i;19223:1467::-;19401:2;;:26;;-1:-1:-1;;;19401:26:0;;;;;28222:25:1;;;-1:-1:-1;;;;;19401:2:0;;;;:10;;28195:18:1;;19401:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;19387:40:0;:10;-1:-1:-1;;;;;19387:40:0;;:85;;;;-1:-1:-1;19445:2:0;;:27;;-1:-1:-1;;;19445:27:0;;;;;28222:25:1;;;-1:-1:-1;;;;;19445:2:0;;;;:10;;28195:18:1;;19445:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;19431:41:0;:10;-1:-1:-1;;;;;19431:41:0;;19387:85;19379:111;;;;-1:-1:-1;;;19379:111:0;;24530:2:1;19379:111:0;;;24512:21:1;24569:2;24549:18;;;24542:30;-1:-1:-1;;;24588:18:1;;;24581:43;24641:18;;19379:111:0;24328:337:1;19379:111:0;19523:44;;-1:-1:-1;;;19523:44:0;;;;;28222:25:1;;;-1:-1:-1;;;;;19523:33:0;;;;;28195:18:1;;19523:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;19509:58:0;:10;-1:-1:-1;;;;;19509:58:0;;19501:100;;;;-1:-1:-1;;;19501:100:0;;23047:2:1;19501:100:0;;;23029:21:1;23086:2;23066:18;;;23059:30;23125:31;23105:18;;;23098:59;23174:18;;19501:100:0;22845:353:1;19501:100:0;-1:-1:-1;;;;;19621:48:0;;;;;;:30;:48;;;;;;;;:59;;;;;;;;;;;19620:60;19612:114;;;;-1:-1:-1;;;19612:114:0;;25629:2:1;19612:114:0;;;25611:21:1;25668:2;25648:18;;;25641:30;25707:34;25687:18;;;25680:62;-1:-1:-1;;;25758:18:1;;;25751:39;25807:19;;19612:114:0;25427:405:1;19612:114:0;19745:30;;;;;;;;:17;:30;;;;;;;19737:75;;;;-1:-1:-1;;;19737:75:0;;24169:2:1;19737:75:0;;;24151:21:1;;;24188:18;;;24181:30;24247:34;24227:18;;;24220:62;24299:18;;19737:75:0;23967:356:1;19737:75:0;19914:2;;:58;;-1:-1:-1;;;19914:58:0;;-1:-1:-1;;;;;19914:2:0;;;;:15;;:58;;19930:10;;19950:4;;19957:14;;19914:58;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19983:2:0;;:59;;-1:-1:-1;;;19983:59:0;;-1:-1:-1;;;;;19983:2:0;;;;-1:-1:-1;19983:15:0;;-1:-1:-1;19983:59:0;;19999:10;;20019:4;;20026:15;;19983:59;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;20053:48:0;;;;;;;:30;:48;;;;;;;;:59;;;;;;;;;:66;;-1:-1:-1;;20053:66:0;20115:4;20053:66;;;20146:2;;:35;;-1:-1:-1;;;20146:35:0;;;;;16324:51:1;;;;20053:48:0;;20146:2;;:17;;16297:18:1;;20146:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20217:2;;:51;;-1:-1:-1;;;20217:51:0;;28057:6:1;28045:19;;20217:51:0;;;28027:38:1;20132:49:0;;-1:-1:-1;20192:22:0;;-1:-1:-1;;;;;20217:2:0;;;;:24;;28000:18:1;;20217:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20323:207;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20289:31;20323:207;;;;;;;;;;;;;;;;20543:2;;20562:11;;;20543:43;;-1:-1:-1;;;20543:43:0;;20192:76;;-1:-1:-1;20323:207:0;;-1:-1:-1;;;;;20543:2:0;;;;:18;;:43;;20323:207;;20543:43;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20600:40;20616:10;20628:11;;20600:15;:40::i;:::-;20651:30;20657:10;20669:11;;20651:5;:30::i;:::-;19368:1322;;;19223:1467;;;;;:::o;22407:197::-;22464:13;22498:17;22506:8;22498:7;:17::i;:::-;22490:55;;;;-1:-1:-1;;;22490:55:0;;27253:2:1;22490:55:0;;;27235:21:1;27292:2;27272:18;;;27265:30;27331:27;27311:18;;;27304:55;27376:18;;22490:55:0;27051:349:1;22490:55:0;22563:8;;:33;;-1:-1:-1;;;22563:33:0;;;;;28222:25:1;;;-1:-1:-1;;;;;22563:8:0;;;;:23;;28195:18:1;;22563:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22563:33:0;;;;;;;;;;;;:::i;385:108::-;338:5;;-1:-1:-1;;;;;338:5:0;347:10;338:19;330:43;;;;-1:-1:-1;;;330:43:0;;;;;;;:::i;:::-;467:5:::1;:17:::0;;-1:-1:-1;;;;;;467:17:0::1;-1:-1:-1::0;;;;;467:17:0;;;::::1;::::0;;;::::1;::::0;;385:108::o;10069:228::-;10183:9;10178:112;10202:9;:16;10198:1;:20;10178:112;;;10240:38;10253:5;10260:3;10265:9;10275:1;10265:12;;;;;;;;:::i;:::-;;;;;;;10240;:38::i;:::-;10220:3;;;;:::i;:::-;;;;10178:112;;2337:111;338:5;;-1:-1:-1;;;;;338:5:0;347:10;338:19;330:43;;;;-1:-1:-1;;;330:43:0;;;;;;;:::i;:::-;2413:11:::1;:26:::0;2337:111::o;6940:234::-;7021:21;;;;:11;:21;;;;;;-1:-1:-1;;;;;7021:28:0;;;:21;;:28;7017:150;;7066:21;;;;:11;:21;;;;;:27;;-1:-1:-1;;;;;;7066:27:0;-1:-1:-1;;;;;7066:27:0;;;;;;;;:21;;7122:17;7066:21;7122:7;:17::i;:::-;-1:-1:-1;;;;;7113:42:0;;;;;;;;;;;6940:234;;:::o;17187:608::-;17324:3;;:23;;-1:-1:-1;;;17324:23:0;;-1:-1:-1;;;;;16342:32:1;;;17324:23:0;;;16324:51:1;17324:3:0;;;;:16;;16297:18:1;;17324:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17349:3:0;;:21;;-1:-1:-1;;;17349:21:0;;-1:-1:-1;;;;;16342:32:1;;;17349:21:0;;;16324:51:1;17349:3:0;;;;-1:-1:-1;17349:16:0;;-1:-1:-1;16297:18:1;;17349:21:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17466:2:0;;:23;;-1:-1:-1;;;17466:23:0;;;;;28222:25:1;;;17432:31:0;;-1:-1:-1;;;;;;17466:2:0;;;;-1:-1:-1;17466:13:0;;28195:18:1;;17466:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17526:2;;17553:20;;;;17575:22;;;;17599:31;;;;17526:105;;-1:-1:-1;;;17526:105:0;;29291:4:1;29279:17;;;17526:105:0;;;29261:36:1;29316:6;29358:15;;;29338:18;;;29331:43;29410:15;29390:18;;;29383:43;17553:20:0;;-1:-1:-1;17500:23:0;;-1:-1:-1;;;;;17526:2:0;;;;:26;;29234:18:1;;17526:105:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17707:3;;:40;;-1:-1:-1;;;17707:40:0;;-1:-1:-1;;;;;17451:32:1;;;17707:40:0;;;17433:51:1;17500:18;;;17493:34;;;17500:131:0;;-1:-1:-1;17707:3:0;;;:16;;17406:18:1;;17707:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17749:3:0;;:38;;-1:-1:-1;;;17749:38:0;;-1:-1:-1;;;;;17451:32:1;;;17749:38:0;;;17433:51:1;17500:18;;;17493:34;;;17749:3:0;;;;-1:-1:-1;17749:16:0;;-1:-1:-1;17406:18:1;;17749:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17271:524;;17187:608;;;:::o;9070:270::-;9172:40;9191:10;9203:8;9172:18;:40::i;:::-;9164:126;;;;-1:-1:-1;;;9164:126:0;;20121:2:1;9164:126:0;;;20103:21:1;20160:2;20140:18;;;20133:30;20199:34;20179:18;;;20172:62;20270:29;20250:18;;;20243:57;20317:19;;9164:126:0;19919:423:1;9164:126:0;9301:31;9311:5;9318:3;9323:8;9301:9;:31::i;16661:520::-;16779:3;;:21;;-1:-1:-1;;;16779:21:0;;-1:-1:-1;;;;;16342:32:1;;;16779:21:0;;;16324:51:1;16779:3:0;;;;:16;;16297:18:1;;16779:21:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16896:2:0;;:23;;-1:-1:-1;;;16896:23:0;;;;;28222:25:1;;;16862:31:0;;-1:-1:-1;;;;;;16896:2:0;;;;-1:-1:-1;16896:13:0;;28195:18:1;;16896:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16956:2;;16983:20;;;;17005:22;;;;17029:31;;;;16956:105;;-1:-1:-1;;;16956:105:0;;29291:4:1;29279:17;;;16956:105:0;;;29261:36:1;29316:6;29358:15;;;29338:18;;;29331:43;29410:15;29390:18;;;29383:43;16983:20:0;;-1:-1:-1;16930:23:0;;-1:-1:-1;;;;;16956:2:0;;;;:26;;29234:18:1;;16956:105:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17135:3;;:38;;-1:-1:-1;;;17135:38:0;;-1:-1:-1;;;;;17451:32:1;;;17135:38:0;;;17433:51:1;17500:18;;;17493:34;;;16930:131:0;;-1:-1:-1;17135:3:0;;;:16;;17406:18:1;;17135:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4416:947;-1:-1:-1;;;;;4498:19:0;;4490:78;;;;-1:-1:-1;;;4490:78:0;;21383:2:1;4490:78:0;;;21365:21:1;21422:2;21402:18;;;21395:30;21461:34;21441:18;;;21434:62;-1:-1:-1;;;21512:18:1;;;21505:44;21566:19;;4490:78:0;21181:410:1;4490:78:0;4616:3;4587:17;4595:8;4587:7;:17::i;:::-;-1:-1:-1;;;;;4587:33:0;;4579:92;;;;-1:-1:-1;;;4579:92:0;;23754:2:1;4579:92:0;;;23736:21:1;23793:2;23773:18;;;23766:30;23832:34;23812:18;;;23805:62;-1:-1:-1;;;23883:18:1;;;23876:44;23937:19;;4579:92:0;23552:410:1;4579:92:0;4759:18;;;;:8;:18;;;;;;;;:24;;-1:-1:-1;;;;;;4759:24:0;-1:-1:-1;;;;;4759:24:0;;;;;;;;4897:26;;:21;:26;;;;;;;;4893:244;;;-1:-1:-1;;;;;4986:15:0;;;;;;:10;:15;;;;;:17;;;;;;:::i;:::-;;;;;;4893:244;;;5055:2;;:17;;-1:-1:-1;;;5055:17:0;;-1:-1:-1;;;;;16342:32:1;;;5055:17:0;;;16324:51:1;5055:2:0;;;;:12;;16297:18:1;;5055:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:21;;5075:1;5055:21;:::i;:::-;-1:-1:-1;;;;;5036:15:0;;;;;;:10;:15;;;;;;;;:41;;;;5092:21;:26;;;:33;;-1:-1:-1;;5092:33:0;5121:4;5092:33;;;4893:244;5193:11;:13;;;:11;:13;;;:::i;:::-;;;;-1:-1:-1;;5283:37:0;;5311:8;;-1:-1:-1;;;;;5283:37:0;;;5300:3;;5283:37;;5300:3;;5283:37;5341:3;-1:-1:-1;;;;;5336:19:0;;5346:8;5336:19;;;;28222:25:1;;28210:2;28195:18;;28076:177;5336:19:0;;;;;;;;4416:947;;:::o;7180:334::-;7305:9;-1:-1:-1;;;;;7295:19:0;:6;-1:-1:-1;;;;;7295:19:0;;;7287:101;;;;-1:-1:-1;;;7287:101:0;;27607:2:1;7287:101:0;;;27589:21:1;27646:2;27626:18;;;27619:30;27685:34;27665:18;;;27658:62;27756:34;27736:18;;;27729:62;-1:-1:-1;;;27807:19:1;;;27800:36;27853:19;;7287:101:0;27405:473:1;7287:101:0;-1:-1:-1;;;;;7399:24:0;;;;;;;:16;:24;;;;;;;;:35;;;;;;;;;;;;;:47;;-1:-1:-1;;7399:47:0;;;;;;;;;;7462:44;;18315:41:1;;;7462:44:0;;18288:18:1;7462:44:0;;;;;;;7180:334;;;:::o;9346:515::-;9464:34;9477:5;9484:3;9489:8;9464:12;:34::i;:::-;-1:-1:-1;;;;;9513:15:0;;;:20;9509:345;;9553:22;9579:3;-1:-1:-1;;;;;9579:14:0;9617:10;9629;9641:5;9648:8;9658:5;9594:70;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9594:70:0;;;;;;;;;;;9579:86;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9550:115;;;9680:16;9710:9;9699:31;;;;;;;;;;;;:::i;:::-;9680:50;-1:-1:-1;;;;;;;;;;9753:23:0;;;9745:97;;;;-1:-1:-1;;;9745:97:0;;22141:2:1;9745:97:0;;;22123:21:1;22180:2;22160:18;;;22153:30;22219:34;22199:18;;;22192:62;22290:31;22270:18;;;22263:59;22339:19;;9745:97:0;21939:425:1;8059:229:0;8125:4;8207;8195:8;:16;8191:38;;-1:-1:-1;8222:4:0;;8059:229;-1:-1:-1;8059:229:0:o;8191:38::-;-1:-1:-1;8276:3:0;8246:18;;;:8;:18;;;;;;-1:-1:-1;;;;;8246:18:0;:34;;;8059:229::o;7559:477::-;7646:4;7663:14;7680:17;7688:8;7680:7;:17::i;:::-;7663:34;-1:-1:-1;;;;;;7716:22:0;;7708:95;;;;-1:-1:-1;;;7708:95:0;;20549:2:1;7708:95:0;;;20531:21:1;20588:2;20568:18;;;20561:30;20627:34;20607:18;;;20600:62;20698:30;20678:18;;;20671:58;20746:19;;7708:95:0;20347:424:1;7708:95:0;7834:6;-1:-1:-1;;;;;7822:18:0;:8;-1:-1:-1;;;;;7822:18:0;;:87;;;-1:-1:-1;7888:21:0;;;;:11;:21;;;;;;-1:-1:-1;;;;;7876:33:0;;;7888:21;;7876:33;7822:87;:166;;;-1:-1:-1;;;;;;7954:24:0;;;;;;;:16;:24;;;;;;;;:34;;;;;;;;;;;;7822:166;7814:214;7559:477;-1:-1:-1;;;;7559:477:0:o;5371:1543::-;5481:17;5489:8;5481:7;:17::i;:::-;-1:-1:-1;;;;;5472:26:0;:5;-1:-1:-1;;;;;5472:26:0;;5464:103;;;;;-1:-1:-1;;;5464:103:0;;26039:2:1;5464:103:0;;;26021:21:1;26058:18;;;26051:30;;;;26117:34;26097:18;;;26090:62;26188:34;26168:18;;;26161:62;26240:19;;5464:103:0;25837:428:1;5464:103:0;-1:-1:-1;;;;;5586:19:0;;5578:86;;;;-1:-1:-1;;;5578:86:0;;26472:2:1;5578:86:0;;;26454:21:1;26511:2;26491:18;;;26484:30;26550:34;26530:18;;;26523:62;-1:-1:-1;;;26601:18:1;;;26594:52;26663:19;;5578:86:0;26270:418:1;5578:86:0;5791:3;5758:21;;;:11;:21;;;;;;-1:-1:-1;;;;;5758:21:0;:37;5754:154;;5892:3;5860:21;;;:11;:21;;;;;:36;;-1:-1:-1;;;;;;5860:36:0;;;5754:154;5965:18;;;;:8;:18;;;;;;;;:24;;-1:-1:-1;;;;;;5965:24:0;-1:-1:-1;;;;;5965:24:0;;;;;;;;;;6058:28;;;;:21;:28;;;;;;;;6054:382;;;-1:-1:-1;;;;;6169:17:0;;;;;;:10;:17;;;;;:19;;;;;;:::i;:::-;;;;;;6054:382;;;6331:1;6309:2;;:19;;-1:-1:-1;;;6309:19:0;;-1:-1:-1;;;;;16342:32:1;;;6309:19:0;;;16324:51:1;6309:2:0;;;;:12;;16297:18:1;;6309:19:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:23;;;;:::i;:::-;-1:-1:-1;;;;;6288:17:0;;;;;;:10;:17;;;;;;;;:45;;;;6389:21;:28;;;:35;;-1:-1:-1;;6389:35:0;6420:4;6389:35;;;6054:382;-1:-1:-1;;;;;6452:26:0;;;;;;:21;:26;;;;;;;;6448:367;;;-1:-1:-1;;;;;6559:15:0;;;;;;:10;:15;;;;;:17;;;;;;:::i;:::-;;;;;;6448:367;;;6693:2;;:17;;-1:-1:-1;;;6693:17:0;;-1:-1:-1;;;;;16342:32:1;;;6693:17:0;;;16324:51:1;6693:2:0;;;;:12;;16297:18:1;;6693:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:21;;6713:1;6693:21;:::i;:::-;-1:-1:-1;;;;;6674:15:0;;;;;;:10;:15;;;;;;;;:41;;;;6770:21;:26;;;:33;;-1:-1:-1;;6770:33:0;6799:4;6770:33;;;6448:367;6897:8;6892:3;-1:-1:-1;;;;;6876:30:0;6885:5;-1:-1:-1;;;;;6876:30:0;;;;;;;;;;;5371:1543;;;:::o;14:367:1:-;77:8;87:6;141:3;134:4;126:6;122:17;118:27;108:55;;159:1;156;149:12;108:55;-1:-1:-1;182:20:1;;-1:-1:-1;;;;;214:30:1;;211:50;;;257:1;254;247:12;211:50;294:4;286:6;282:17;270:29;;354:3;347:4;337:6;334:1;330:14;322:6;318:27;314:38;311:47;308:67;;;371:1;368;361:12;308:67;14:367;;;;;:::o;386:673::-;440:5;493:3;486:4;478:6;474:17;470:27;460:55;;511:1;508;501:12;460:55;547:6;534:20;573:4;597:60;613:43;653:2;613:43;:::i;:::-;597:60;:::i;:::-;679:3;703:2;698:3;691:15;731:2;726:3;722:12;715:19;;766:2;758:6;754:15;818:3;813:2;807;804:1;800:10;792:6;788:23;784:32;781:41;778:61;;;835:1;832;825:12;778:61;857:1;867:163;881:2;878:1;875:9;867:163;;;938:17;;926:30;;976:12;;;;1008;;;;899:1;892:9;867:163;;;-1:-1:-1;1048:5:1;;386:673;-1:-1:-1;;;;;;;386:673:1:o;1064:744::-;1116:5;1169:3;1162:4;1154:6;1150:17;1146:27;1136:55;;1187:1;1184;1177:12;1136:55;1223:6;1210:20;1249:4;1273:60;1289:43;1329:2;1289:43;:::i;1273:60::-;1355:3;1379:2;1374:3;1367:15;1407:2;1402:3;1398:12;1391:19;;1442:2;1434:6;1430:15;1494:3;1489:2;1483;1480:1;1476:10;1468:6;1464:23;1460:32;1457:41;1454:61;;;1511:1;1508;1501:12;1454:61;1533:1;1543:236;1557:2;1554:1;1551:9;1543:236;;;1628:3;1615:17;1645:29;1668:5;1645:29;:::i;:::-;1687:18;;1725:12;;;;1757;;;;1575:1;1568:9;1543:236;;1813:160;1878:20;;1934:13;;1927:21;1917:32;;1907:60;;1963:1;1960;1953:12;1978:462;2020:5;2073:3;2066:4;2058:6;2054:17;2050:27;2040:55;;2091:1;2088;2081:12;2040:55;2127:6;2114:20;2158:48;2174:31;2202:2;2174:31;:::i;2158:48::-;2231:2;2222:7;2215:19;2277:3;2270:4;2265:2;2257:6;2253:15;2249:26;2246:35;2243:55;;;2294:1;2291;2284:12;2243:55;2359:2;2352:4;2344:6;2340:17;2333:4;2324:7;2320:18;2307:55;2407:1;2382:16;;;2400:4;2378:27;2371:38;;;;2386:7;1978:462;-1:-1:-1;;;1978:462:1:o;2445:163::-;2523:13;;2576:6;2565:18;;2555:29;;2545:57;;2598:1;2595;2588:12;2613:247;2672:6;2725:2;2713:9;2704:7;2700:23;2696:32;2693:52;;;2741:1;2738;2731:12;2693:52;2780:9;2767:23;2799:31;2824:5;2799:31;:::i;:::-;2849:5;2613:247;-1:-1:-1;;;2613:247:1:o;2865:251::-;2935:6;2988:2;2976:9;2967:7;2963:23;2959:32;2956:52;;;3004:1;3001;2994:12;2956:52;3036:9;3030:16;3055:31;3080:5;3055:31;:::i;3121:388::-;3189:6;3197;3250:2;3238:9;3229:7;3225:23;3221:32;3218:52;;;3266:1;3263;3256:12;3218:52;3305:9;3292:23;3324:31;3349:5;3324:31;:::i;:::-;3374:5;-1:-1:-1;3431:2:1;3416:18;;3403:32;3444:33;3403:32;3444:33;:::i;:::-;3496:7;3486:17;;;3121:388;;;;;:::o;3514:955::-;3618:6;3626;3634;3642;3650;3658;3711:3;3699:9;3690:7;3686:23;3682:33;3679:53;;;3728:1;3725;3718:12;3679:53;3767:9;3754:23;3786:31;3811:5;3786:31;:::i;:::-;3836:5;-1:-1:-1;3893:2:1;3878:18;;3865:32;3906:33;3865:32;3906:33;:::i;:::-;3958:7;-1:-1:-1;4017:2:1;4002:18;;3989:32;4030:33;3989:32;4030:33;:::i;:::-;4082:7;-1:-1:-1;4141:2:1;4126:18;;4113:32;4154:33;4113:32;4154:33;:::i;:::-;4206:7;-1:-1:-1;4265:3:1;4250:19;;4237:33;4279;4237;4279;:::i;:::-;4331:7;-1:-1:-1;4390:3:1;4375:19;;4362:33;4404;4362;4404;:::i;:::-;4456:7;4446:17;;;3514:955;;;;;;;;:::o;4474:624::-;4576:6;4584;4592;4645:2;4633:9;4624:7;4620:23;4616:32;4613:52;;;4661:1;4658;4651:12;4613:52;4700:9;4687:23;4719:31;4744:5;4719:31;:::i;:::-;4769:5;-1:-1:-1;4826:2:1;4811:18;;4798:32;4839:33;4798:32;4839:33;:::i;:::-;4891:7;-1:-1:-1;4949:2:1;4934:18;;4921:32;-1:-1:-1;;;;;4965:30:1;;4962:50;;;5008:1;5005;4998:12;4962:50;5031:61;5084:7;5075:6;5064:9;5060:22;5031:61;:::i;:::-;5021:71;;;4474:624;;;;;:::o;5103:844::-;5223:6;5231;5239;5247;5300:3;5288:9;5279:7;5275:23;5271:33;5268:53;;;5317:1;5314;5307:12;5268:53;5356:9;5343:23;5375:31;5400:5;5375:31;:::i;:::-;5425:5;-1:-1:-1;5482:2:1;5467:18;;5454:32;5495:33;5454:32;5495:33;:::i;:::-;5547:7;-1:-1:-1;5605:2:1;5590:18;;5577:32;-1:-1:-1;;;;;5658:14:1;;;5655:34;;;5685:1;5682;5675:12;5655:34;5708:61;5761:7;5752:6;5741:9;5737:22;5708:61;:::i;:::-;5698:71;;5822:2;5811:9;5807:18;5794:32;5778:48;;5851:2;5841:8;5838:16;5835:36;;;5867:1;5864;5857:12;5835:36;;5890:51;5933:7;5922:8;5911:9;5907:24;5890:51;:::i;:::-;5880:61;;;5103:844;;;;;;;:::o;5952:456::-;6029:6;6037;6045;6098:2;6086:9;6077:7;6073:23;6069:32;6066:52;;;6114:1;6111;6104:12;6066:52;6153:9;6140:23;6172:31;6197:5;6172:31;:::i;:::-;6222:5;-1:-1:-1;6279:2:1;6264:18;;6251:32;6292:33;6251:32;6292:33;:::i;:::-;5952:456;;6344:7;;-1:-1:-1;;;6398:2:1;6383:18;;;;6370:32;;5952:456::o;6413:665::-;6508:6;6516;6524;6532;6585:3;6573:9;6564:7;6560:23;6556:33;6553:53;;;6602:1;6599;6592:12;6553:53;6641:9;6628:23;6660:31;6685:5;6660:31;:::i;:::-;6710:5;-1:-1:-1;6767:2:1;6752:18;;6739:32;6780:33;6739:32;6780:33;:::i;:::-;6832:7;-1:-1:-1;6886:2:1;6871:18;;6858:32;;-1:-1:-1;6941:2:1;6926:18;;6913:32;-1:-1:-1;;;;;6957:30:1;;6954:50;;;7000:1;6997;6990:12;6954:50;7023:49;7064:7;7055:6;7044:9;7040:22;7023:49;:::i;7083:315::-;7148:6;7156;7209:2;7197:9;7188:7;7184:23;7180:32;7177:52;;;7225:1;7222;7215:12;7177:52;7264:9;7251:23;7283:31;7308:5;7283:31;:::i;:::-;7333:5;-1:-1:-1;7357:35:1;7388:2;7373:18;;7357:35;:::i;:::-;7347:45;;7083:315;;;;;:::o;7403:::-;7471:6;7479;7532:2;7520:9;7511:7;7507:23;7503:32;7500:52;;;7548:1;7545;7538:12;7500:52;7587:9;7574:23;7606:31;7631:5;7606:31;:::i;:::-;7656:5;7708:2;7693:18;;;;7680:32;;-1:-1:-1;;;7403:315:1:o;7723:773::-;7845:6;7853;7861;7869;7922:2;7910:9;7901:7;7897:23;7893:32;7890:52;;;7938:1;7935;7928:12;7890:52;7978:9;7965:23;-1:-1:-1;;;;;8048:2:1;8040:6;8037:14;8034:34;;;8064:1;8061;8054:12;8034:34;8103:70;8165:7;8156:6;8145:9;8141:22;8103:70;:::i;:::-;8192:8;;-1:-1:-1;8077:96:1;-1:-1:-1;8280:2:1;8265:18;;8252:32;;-1:-1:-1;8296:16:1;;;8293:36;;;8325:1;8322;8315:12;8293:36;;8364:72;8428:7;8417:8;8406:9;8402:24;8364:72;:::i;:::-;7723:773;;;;-1:-1:-1;8455:8:1;-1:-1:-1;;;;7723:773:1:o;8501:817::-;8651:6;8659;8667;8720:2;8708:9;8699:7;8695:23;8691:32;8688:52;;;8736:1;8733;8726:12;8688:52;8776:9;8763:23;-1:-1:-1;;;;;8846:2:1;8838:6;8835:14;8832:34;;;8862:1;8859;8852:12;8832:34;8885:61;8938:7;8929:6;8918:9;8914:22;8885:61;:::i;:::-;8875:71;;8999:2;8988:9;8984:18;8971:32;8955:48;;9028:2;9018:8;9015:16;9012:36;;;9044:1;9041;9034:12;9012:36;9067:63;9122:7;9111:8;9100:9;9096:24;9067:63;:::i;:::-;9057:73;;9183:2;9172:9;9168:18;9155:32;9139:48;;9212:2;9202:8;9199:16;9196:36;;;9228:1;9225;9218:12;9196:36;;9251:61;9304:7;9293:8;9282:9;9278:24;9251:61;:::i;9323:1180::-;9516:6;9524;9532;9540;9548;9601:3;9589:9;9580:7;9576:23;9572:33;9569:53;;;9618:1;9615;9608:12;9569:53;9658:9;9645:23;-1:-1:-1;;;;;9728:2:1;9720:6;9717:14;9714:34;;;9744:1;9741;9734:12;9714:34;9767:61;9820:7;9811:6;9800:9;9796:22;9767:61;:::i;:::-;9757:71;;9881:2;9870:9;9866:18;9853:32;9837:48;;9910:2;9900:8;9897:16;9894:36;;;9926:1;9923;9916:12;9894:36;9949:63;10004:7;9993:8;9982:9;9978:24;9949:63;:::i;:::-;9939:73;;10065:2;10054:9;10050:18;10037:32;10021:48;;10094:2;10084:8;10081:16;10078:36;;;10110:1;10107;10100:12;10078:36;10133:61;10186:7;10175:8;10164:9;10160:24;10133:61;:::i;:::-;10123:71;;10244:2;10233:9;10229:18;10216:32;10203:45;;10257:31;10282:5;10257:31;:::i;:::-;10307:5;;-1:-1:-1;10365:3:1;10350:19;;10337:33;;10382:16;;;10379:36;;;10411:1;10408;10401:12;10379:36;;10434:63;10489:7;10478:8;10467:9;10463:24;10434:63;:::i;:::-;10424:73;;;9323:1180;;;;;;;;:::o;10508:245::-;10566:6;10619:2;10607:9;10598:7;10594:23;10590:32;10587:52;;;10635:1;10632;10625:12;10587:52;10674:9;10661:23;10693:30;10717:5;10693:30;:::i;10758:249::-;10827:6;10880:2;10868:9;10859:7;10855:23;10851:32;10848:52;;;10896:1;10893;10886:12;10848:52;10928:9;10922:16;10947:30;10971:5;10947:30;:::i;11012:635::-;11092:6;11145:2;11133:9;11124:7;11120:23;11116:32;11113:52;;;11161:1;11158;11151:12;11113:52;11194:9;11188:16;-1:-1:-1;;;;;11219:6:1;11216:30;11213:50;;;11259:1;11256;11249:12;11213:50;11282:22;;11335:4;11327:13;;11323:27;-1:-1:-1;11313:55:1;;11364:1;11361;11354:12;11313:55;11393:2;11387:9;11418:48;11434:31;11462:2;11434:31;:::i;11418:48::-;11489:2;11482:5;11475:17;11529:7;11524:2;11519;11515;11511:11;11507:20;11504:33;11501:53;;;11550:1;11547;11540:12;11501:53;11563:54;11614:2;11609;11602:5;11598:14;11593:2;11589;11585:11;11563:54;:::i;:::-;11636:5;11012:635;-1:-1:-1;;;;;11012:635:1:o;11652:1104::-;11748:6;11801:3;11789:9;11780:7;11776:23;11772:33;11769:53;;;11818:1;11815;11808:12;11769:53;11851:2;11845:9;11893:3;11885:6;11881:16;11963:6;11951:10;11948:22;-1:-1:-1;;;;;11915:10:1;11912:34;11909:62;11906:88;;;11974:18;;:::i;:::-;12010:2;12003:22;12047:16;;12072:29;12047:16;12072:29;:::i;:::-;12110:21;;12176:2;12161:18;;12155:25;12189:31;12155:25;12189:31;:::i;:::-;12248:2;12236:15;;12229:32;12294:48;12338:2;12323:18;;12294:48;:::i;:::-;12289:2;12281:6;12277:15;12270:73;12376:48;12420:2;12409:9;12405:18;12376:48;:::i;:::-;12371:2;12363:6;12359:15;12352:73;12470:3;12459:9;12455:19;12449:26;12484:31;12507:7;12484:31;:::i;:::-;12543:3;12531:16;;12524:33;12591:49;12635:3;12620:19;;12591:49;:::i;:::-;12585:3;12577:6;12573:16;12566:75;12675:49;12719:3;12708:9;12704:19;12675:49;:::i;:::-;12669:3;12657:16;;12650:75;12661:6;11652:1104;-1:-1:-1;;;11652:1104:1:o;12761:206::-;12830:6;12883:2;12871:9;12862:7;12858:23;12854:32;12851:52;;;12899:1;12896;12889:12;12851:52;12922:39;12951:9;12922:39;:::i;12972:180::-;13031:6;13084:2;13072:9;13063:7;13059:23;13055:32;13052:52;;;13100:1;13097;13090:12;13052:52;-1:-1:-1;13123:23:1;;12972:180;-1:-1:-1;12972:180:1:o;13157:184::-;13227:6;13280:2;13268:9;13259:7;13255:23;13251:32;13248:52;;;13296:1;13293;13286:12;13248:52;-1:-1:-1;13319:16:1;;13157:184;-1:-1:-1;13157:184:1:o;13346:379::-;13421:6;13429;13437;13490:2;13478:9;13469:7;13465:23;13461:32;13458:52;;;13506:1;13503;13496:12;13458:52;13542:9;13529:23;13519:33;;13599:2;13588:9;13584:18;13571:32;13561:42;;13653:2;13642:9;13638:18;13625:32;13666:29;13689:5;13666:29;:::i;:::-;13714:5;13704:15;;;13346:379;;;;;:::o;13730:590::-;13823:6;13831;13839;13847;13855;13908:3;13896:9;13887:7;13883:23;13879:33;13876:53;;;13925:1;13922;13915:12;13876:53;13961:9;13948:23;13938:33;;14018:2;14007:9;14003:18;13990:32;13980:42;;14072:2;14061:9;14057:18;14044:32;14085:29;14108:5;14085:29;:::i;:::-;14133:5;-1:-1:-1;14190:2:1;14175:18;;14162:32;14203:33;14162:32;14203:33;:::i;:::-;13730:590;;;;-1:-1:-1;13730:590:1;;14309:3;14294:19;14281:33;;13730:590;-1:-1:-1;;13730:590:1:o;14325:243::-;14382:6;14435:2;14423:9;14414:7;14410:23;14406:32;14403:52;;;14451:1;14448;14441:12;14403:52;14490:9;14477:23;14509:29;14532:5;14509:29;:::i;14573:247::-;14641:6;14694:2;14682:9;14673:7;14669:23;14665:32;14662:52;;;14710:1;14707;14700:12;14662:52;14742:9;14736:16;14761:29;14784:5;14761:29;:::i;14825:311::-;14888:6;14896;14949:2;14937:9;14928:7;14924:23;14920:32;14917:52;;;14965:1;14962;14955:12;14917:52;15004:9;14991:23;15023:29;15046:5;15023:29;:::i;15141:257::-;15182:3;15220:5;15214:12;15247:6;15242:3;15235:19;15263:63;15319:6;15312:4;15307:3;15303:14;15296:4;15289:5;15285:16;15263:63;:::i;:::-;15380:2;15359:15;-1:-1:-1;;15355:29:1;15346:39;;;;15387:4;15342:50;;15141:257;-1:-1:-1;;15141:257:1:o;15899:274::-;16028:3;16066:6;16060:13;16082:53;16128:6;16123:3;16116:4;16108:6;16104:17;16082:53;:::i;:::-;16151:16;;;;;15899:274;-1:-1:-1;;15899:274:1:o;16386:375::-;-1:-1:-1;;;;;16644:15:1;;;16626:34;;16696:15;;;;16691:2;16676:18;;16669:43;16743:2;16728:18;;16721:34;;;;16576:2;16561:18;;16386:375::o;16766:488::-;-1:-1:-1;;;;;17035:15:1;;;17017:34;;17087:15;;17082:2;17067:18;;17060:43;17134:2;17119:18;;17112:34;;;17182:3;17177:2;17162:18;;17155:31;;;16960:4;;17203:45;;17228:19;;17220:6;17203:45;:::i;:::-;17195:53;16766:488;-1:-1:-1;;;;;;16766:488:1:o;17538:632::-;17709:2;17761:21;;;17831:13;;17734:18;;;17853:22;;;17680:4;;17709:2;17932:15;;;;17906:2;17891:18;;;17680:4;17975:169;17989:6;17986:1;17983:13;17975:169;;;18050:13;;18038:26;;18119:15;;;;18084:12;;;;18011:1;18004:9;17975:169;;;-1:-1:-1;18161:3:1;;17538:632;-1:-1:-1;;;;;;17538:632:1:o;19695:219::-;19844:2;19833:9;19826:21;19807:4;19864:44;19904:2;19893:9;19889:18;19881:6;19864:44;:::i;24670:335::-;24872:2;24854:21;;;24911:2;24891:18;;;24884:30;-1:-1:-1;;;24945:2:1;24930:18;;24923:41;24996:2;24981:18;;24670:335::o;28258:804::-;28430:4;28472:3;28461:9;28457:19;28449:27;;28503:6;28492:9;28485:25;28565:4;28556:6;28550:13;28546:24;28541:2;28530:9;28526:18;28519:52;28635:4;28629:2;28621:6;28617:15;28611:22;28607:33;28602:2;28591:9;28587:18;28580:61;28688:2;28680:6;28676:15;28670:22;28711:6;28771:2;28757:12;28753:21;28748:2;28737:9;28733:18;28726:49;28840:2;28834;28826:6;28822:15;28816:22;28812:31;28806:3;28795:9;28791:19;28784:60;28910:4;28903:3;28895:6;28891:16;28885:23;28881:34;28875:3;28864:9;28860:19;28853:63;28982:2;28975:3;28967:6;28963:16;28957:23;28953:32;28947:3;28936:9;28932:19;28925:61;29052:2;29045:3;29037:6;29033:16;29027:23;29023:32;29017:3;29006:9;29002:19;28995:61;;;28258:804;;;;;:::o;29437:275::-;29508:2;29502:9;29573:2;29554:13;;-1:-1:-1;;29550:27:1;29538:40;;-1:-1:-1;;;;;29593:34:1;;29629:22;;;29590:62;29587:88;;;29655:18;;:::i;:::-;29691:2;29684:22;29437:275;;-1:-1:-1;29437:275:1:o;29717:183::-;29777:4;-1:-1:-1;;;;;29802:6:1;29799:30;29796:56;;;29832:18;;:::i;:::-;-1:-1:-1;29877:1:1;29873:14;29889:4;29869:25;;29717:183::o;29905:186::-;29953:4;-1:-1:-1;;;;;29978:6:1;29975:30;29972:56;;;30008:18;;:::i;:::-;-1:-1:-1;30074:2:1;30053:15;-1:-1:-1;;30049:29:1;30080:4;30045:40;;29905:186::o;30096:128::-;30136:3;30167:1;30163:6;30160:1;30157:13;30154:39;;;30173:18;;:::i;:::-;-1:-1:-1;30209:9:1;;30096:128::o;30229:125::-;30269:4;30297:1;30294;30291:8;30288:34;;;30302:18;;:::i;:::-;-1:-1:-1;30339:9:1;;30229:125::o;30359:258::-;30431:1;30441:113;30455:6;30452:1;30449:13;30441:113;;;30531:11;;;30525:18;30512:11;;;30505:39;30477:2;30470:10;30441:113;;;30572:6;30569:1;30566:13;30563:48;;;-1:-1:-1;;30607:1:1;30589:16;;30582:27;30359:258::o;30622:136::-;30661:3;30689:5;30679:39;;30698:18;;:::i;:::-;-1:-1:-1;;;30734:18:1;;30622:136::o;30763:380::-;30842:1;30838:12;;;;30885;;;30906:61;;30960:4;30952:6;30948:17;30938:27;;30906:61;31013:2;31005:6;31002:14;30982:18;30979:38;30976:161;;;31059:10;31054:3;31050:20;31047:1;31040:31;31094:4;31091:1;31084:15;31122:4;31119:1;31112:15;30976:161;;30763:380;;;:::o;31148:135::-;31187:3;-1:-1:-1;;31208:17:1;;31205:43;;;31228:18;;:::i;:::-;-1:-1:-1;31275:1:1;31264:13;;31148:135::o;31288:209::-;31320:1;31346;31336:132;;31390:10;31385:3;31381:20;31378:1;31371:31;31425:4;31422:1;31415:15;31453:4;31450:1;31443:15;31336:132;-1:-1:-1;31482:9:1;;31288:209::o;31502:127::-;31563:10;31558:3;31554:20;31551:1;31544:31;31594:4;31591:1;31584:15;31618:4;31615:1;31608:15;31634:127;31695:10;31690:3;31686:20;31683:1;31676:31;31726:4;31723:1;31716:15;31750:4;31747:1;31740:15;31766:127;31827:10;31822:3;31818:20;31815:1;31808:31;31858:4;31855:1;31848:15;31882:4;31879:1;31872:15;31898:131;-1:-1:-1;;;;;31973:31:1;;31963:42;;31953:70;;32019:1;32016;32009:12;31953:70;31898:131;:::o;32034:::-;-1:-1:-1;;;;;;32108:32:1;;32098:43;;32088:71;;32155:1;32152;32145:12;32170:114;32254:4;32247:5;32243:16;32236:5;32233:27;32223:55;;32274:1;32271;32264:12

Swarm Source

ipfs://323cfbb290e1c0b14ace1c62038d9b505209f2fa97089a21d233bf611a9d3fe7
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.