ETH Price: $2,524.60 (+3.32%)
Gas: 1.02 Gwei

Contract

0x3edaa07b3276EAe8ACceB84177404f7489aD0331
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Accept Ownership183633942023-10-16 14:00:11317 days ago1697464811IN
0x3edaa07b...489aD0331
0 ETH0.0014768350.874457
Transfer Ownersh...183633922023-10-16 13:59:47317 days ago1697464787IN
0x3edaa07b...489aD0331
0 ETH0.0024597152.98936697
0x60806040174213032023-06-06 12:07:11449 days ago1686053231IN
 Create: MarketMinting
0 ETH0.0776215520.38076685

Advanced mode:
Parent Transaction Hash Block From To
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MarketMinting

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU LGPLv2.1 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-06-06
*/

// SPDX-License-Identifier: GPL-3.0
pragma solidity >= 0.8.0 <0.9.0;

interface IERC721Receiver {
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

contract ERC721Holder is IERC721Receiver {
    function onERC721Received(address, address, uint256, bytes memory) public virtual override returns (bytes4) {
        return this.onERC721Received.selector;
    }
}


interface IERC20 {
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address from, address to, uint256 amount) external returns (bool);
}

interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
// File: contracts/standards/ERC165.sol



pragma solidity >=0.8.0 <0.9.0;


abstract contract ERC165 is IERC165 {
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

interface IERC1155Receiver is IERC165 {
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}


abstract contract ERC1155Receiver is ERC165, IERC1155Receiver {
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return interfaceId == type(IERC1155Receiver).interfaceId || super.supportsInterface(interfaceId);
    }
}


contract ERC1155Holder is ERC1155Receiver {
    function onERC1155Received(
        address,
        address,
        uint256,
        uint256,
        bytes memory
    ) public virtual override returns (bytes4) {
        return this.onERC1155Received.selector;
    }

    function onERC1155BatchReceived(
        address,
        address,
        uint256[] memory,
        uint256[] memory,
        bytes memory
    ) public virtual override returns (bytes4) {
        return this.onERC1155BatchReceived.selector;
    }
}
// File: contracts/interfaces/IERC2981.sol



pragma solidity ^0.8.0;


interface IERC2981 is IERC165 {
    function royaltyInfo(
        uint256 tokenId,
        uint256 salePrice
    ) external view returns (address receiver, uint256 royaltyAmount);
}

interface IERC721 is IERC165 {
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
    function balanceOf(address owner) external view returns (uint256 balance);
    function ownerOf(uint256 tokenId) external view returns (address owner);
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;
    function safeTransferFrom(address from, address to, uint256 tokenId) external;
    function transferFrom(address from, address to, uint256 tokenId) external;
    function approve(address to, uint256 tokenId) external;
    function setApprovalForAll(address operator, bool approved) external;
    function getApproved(uint256 tokenId) external view returns (address operator);
    function isApprovedForAll(address owner, address operator) external view returns (bool);
}


interface IERC721VirtualAsset is IERC721, IERC2981 {
     function mintTo(address _to, address _royaltyReceiver)  external;
     function mintTo(address _to, address _royaltyReceiver, bytes memory data)  external;
}

interface IERC1155 is IERC165 {
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);
    event URI(string value, uint256 indexed id);
    function balanceOf(address account, uint256 id) external view returns (uint256);
    function balanceOfBatch(
        address[] calldata accounts,
        uint256[] calldata ids
    ) external view returns (uint256[] memory);
    function setApprovalForAll(address operator, bool approved) external;
    function isApprovedForAll(address account, address operator) external view returns (bool);
    function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}


interface IERC1155VirtualAsset is IERC1155 {
    function mintTo( address _to, uint256 _tokenId, uint256 _amount)  external;
    function mintTo( address _to, uint256 _tokenId, uint256 _amount, bytes memory data)  external;
}

library Counters {
    struct Counter {
        uint256 _value;
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

contract TokenAccessControl {
    bool public paused = false;
    address public owner;
    address public newContractOwner;
    mapping(address => bool) public authorizedContracts;

    event Pause();
    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    constructor() {
        owner = msg.sender;
    }

    modifier ifNotPaused() {
        require(!paused, "contract is paused");
        _;
    }

    modifier onlyOwner() {
        require(msg.sender == owner, "caller is not an owner");
        _;
    }

    modifier onlyAuthorizedUser() {
        require(
            authorizedContracts[msg.sender],
            "caller is not an authorized user"
        );
        _;
    }

    modifier onlyOwnerOrAuthorizedUser() {
        require(
            authorizedContracts[msg.sender] || msg.sender == owner,
            "caller is not an authorized user or an owner"
        );
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(owner, address(0));
        owner = address(0);
    }

    function transferOwnership(address _newOwner) public onlyOwner {
        require(_newOwner != address(0));
        newContractOwner = _newOwner;
    }

    function acceptOwnership() public ifNotPaused {
        require(msg.sender == newContractOwner);
        emit OwnershipTransferred(owner, newContractOwner);
        owner = newContractOwner;
        newContractOwner = address(0);
    }

    function setAuthorizedUser(
        address _operator,
        bool _approve
    ) public onlyOwner {
        if (_approve) {
            authorizedContracts[_operator] = true;
        } else {
            delete authorizedContracts[_operator];
        }
    }

    function setPause(bool _paused) public onlyOwner {
        paused = _paused;
        if (paused) {
            emit Pause();
        }
    }
}

contract MarketMinting is TokenAccessControl, ERC1155Holder, ERC721Holder {
    using Counters for Counters.Counter;
    struct Offer {
        address nftAddress;
        uint256 nftTokenId; // 0 for erc721
        uint256 amount; // always 1 for erc721
        address paymentTokenAddress;
        uint256 price;
        uint256 fee;
        address seller;
        address buyer;
        address royaltyReceiver;
        uint createdAtBlock;
        bytes nftRawData;
    }
    Counters.Counter private offerId;
    mapping(uint256 => Offer) offers;

    uint _offerValidityBlocks = 100;
   
    bytes4 constant private IERC165_ID = 0x01ffc9a7;
    bytes4 constant private IERC1155_ID = 0xd9b67a26;
    bytes4 constant private IERC721_ID = 0x80ac58cd;
    bytes4 constant private IERC2981_ID = 0x2a55205a;

    event CreateMarketMintingOffer(uint256 indexed offerId, address nftAddress, uint256 nftTokenId, uint256 amount,
     address paymentTokenAddress, uint256 price, uint256 fee, address seller, address buyer, address royaltyReceiver, bytes rawNftData);
    event BuyMarketMintingOffer(uint256 indexed offerId, address nftAddress, uint256 nftTokenId,
     uint256 amount, address paymentTokenAddress, uint256 price, address seller, address buyer, address royaltyReceiver);
    event CancelMarketMintingOffer(uint256 indexed offerId, address nftAddress, uint256 nftTokenId, uint256 amount, address seller, address buyer);
    event RoyaltyPayment(address from, address indexed to, address indexed tokenAddress, uint256 indexed amount, address nftAddress, uint256 tokenId);


    constructor(){
        offerId._value=300;
    }
    
    function createOffer(address nftAddress, uint256 nftTokenId, uint256 amount, address paymentTokenAddress,
     uint256 price, uint256 fee, address seller, address buyer, address royaltyReceiver, bytes memory rawNftData) external onlyOwner returns (uint256 _offerId) {
        offerId.increment();
        require(price>0, "Market: price should be greater than 0");
        require(fee>=0, " Market: fee cannot be negative");
        require(fee<price, "Market: fee cannot be greater than price");
        offers[offerId.current()] = Offer(nftAddress, nftTokenId, amount, paymentTokenAddress, price, fee, seller, buyer, royaltyReceiver, block.number, rawNftData);

        emit CreateMarketMintingOffer(offerId.current(), nftAddress, nftTokenId, amount, paymentTokenAddress, price, fee,  seller, buyer, royaltyReceiver,
        rawNftData);
        return offerId.current();
    }

    function buyOffer(uint256 _offerId) external payable {
        Offer memory offer = offers[_offerId];
        require(offer.seller != address(0), "Market: offer is not valid");
        require(offer.buyer == msg.sender, "Market: you are not eligible to buy this offer");
        require(offer.createdAtBlock+_offerValidityBlocks >= block.number, "Market: offer is not valid");
        delete offers[_offerId];
        uint256 royaltyAmount = 0;
        address royaltyReceiver = address(0);
        uint256 priceAfterFee = offer.price - offer.fee;

        if(IERC165(offer.nftAddress).supportsInterface(IERC1155_ID)){
            if(offer.nftRawData.length == 0){
                IERC1155VirtualAsset(offer.nftAddress).mintTo(msg.sender, offer.nftTokenId, offer.amount);
            }
            else{
                IERC1155VirtualAsset(offer.nftAddress).mintTo(msg.sender, offer.nftTokenId, offer.amount, offer.nftRawData);
            }
        }
        else{
            if(offer.nftRawData.length == 0){
                IERC721VirtualAsset(offer.nftAddress).mintTo(msg.sender, offer.royaltyReceiver);
            }
            else{
                IERC721VirtualAsset(offer.nftAddress).mintTo(msg.sender, offer.royaltyReceiver, offer.nftRawData);
            }
        }

        (royaltyReceiver, royaltyAmount) = getRoyaltyInfo(offer.nftAddress, offer.nftTokenId, priceAfterFee);
        
        if(offer.paymentTokenAddress!=address(0)){
            IERC20(offer.paymentTokenAddress).transferFrom(msg.sender, offer.seller, priceAfterFee-royaltyAmount);
            if(royaltyAmount != 0){
                IERC20(offer.paymentTokenAddress).transferFrom(msg.sender, royaltyReceiver, royaltyAmount);
                emit RoyaltyPayment(msg.sender, royaltyReceiver, offer.paymentTokenAddress, royaltyAmount, offer.nftAddress,
                offer.nftTokenId);
            }
            if(offer.fee!=0){
                IERC20(offer.paymentTokenAddress).transferFrom(msg.sender, address(this), offer.fee);
            }
        }
        else{
            require(msg.value >= offer.price, "Market: insufficient value has been sent");
            if(priceAfterFee-royaltyAmount>0){
                payable(offer.seller).transfer(priceAfterFee-royaltyAmount);
            }
            if(royaltyAmount > 0){
                payable(royaltyReceiver).transfer(royaltyAmount);
                emit RoyaltyPayment(msg.sender, royaltyReceiver, offer.paymentTokenAddress, royaltyAmount, offer.nftAddress,
                offer.nftTokenId);
            }
        }
        emit BuyMarketMintingOffer(_offerId, offer.nftAddress, offer.nftTokenId, offer.amount, offer.paymentTokenAddress, offer.price,
        offer.seller, offer.buyer, offer.royaltyReceiver);
    }

    function cancelOffer(uint256 _offerId) public onlyOwner{
        require(offers[_offerId].seller != address(0), "Market: offer is not valid");
        Offer memory offer = offers[_offerId];
        delete offers[_offerId];
        emit CancelMarketMintingOffer(_offerId, offer.nftAddress, offer.nftTokenId, offer.amount, offer.seller, offer.buyer);
    }

    function getOffer(uint256 _offerId) public view returns(Offer memory){
        return offers[_offerId];
    }

    function setOfferValidity(uint blockCountValidity) public onlyOwner{
        _offerValidityBlocks = blockCountValidity;
    }

    receive() external payable {

    }

    fallback() external payable {

    }

    function withdraw(address contractAddress, uint16 standard, uint256 tokenId, uint256 amount) public onlyOwner{
        if(contractAddress==address(0)){
            payable(msg.sender).transfer(amount);
        }
        else if(standard==20){
            if(amount==0) amount = IERC20(contractAddress).balanceOf(address(this));
            IERC20(contractAddress).transfer(msg.sender, amount);
        }
        else if(standard==721){
            IERC721(contractAddress).safeTransferFrom(address(this), msg.sender, tokenId);
        }
        else if(standard==1155){
            if(amount==0) amount = IERC1155(contractAddress).balanceOf(address(this), tokenId);
            IERC1155(contractAddress).safeTransferFrom(address(this), msg.sender, tokenId, amount, "");
        }
    }

    function getRoyaltyInfo(address contractAddress, uint256 tokenId, uint256 price) internal view returns(address, uint256){
        (bool isSuccess, bytes memory response) = contractAddress.staticcall(abi.encodeWithSignature("supportsInterface(bytes4)",IERC2981_ID));
        if(isSuccess && abi.decode(response, (bool))){
            return IERC2981(contractAddress).royaltyInfo(tokenId, price);
        }
        return (address(0), 0);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"offerId","type":"uint256"},{"indexed":false,"internalType":"address","name":"nftAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"nftTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"paymentTokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"address","name":"seller","type":"address"},{"indexed":false,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"address","name":"royaltyReceiver","type":"address"}],"name":"BuyMarketMintingOffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"offerId","type":"uint256"},{"indexed":false,"internalType":"address","name":"nftAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"nftTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"seller","type":"address"},{"indexed":false,"internalType":"address","name":"buyer","type":"address"}],"name":"CancelMarketMintingOffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"offerId","type":"uint256"},{"indexed":false,"internalType":"address","name":"nftAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"nftTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"paymentTokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"},{"indexed":false,"internalType":"address","name":"seller","type":"address"},{"indexed":false,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"address","name":"royaltyReceiver","type":"address"},{"indexed":false,"internalType":"bytes","name":"rawNftData","type":"bytes"}],"name":"CreateMarketMintingOffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"nftAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"RoyaltyPayment","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"authorizedContracts","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_offerId","type":"uint256"}],"name":"buyOffer","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_offerId","type":"uint256"}],"name":"cancelOffer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"nftAddress","type":"address"},{"internalType":"uint256","name":"nftTokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"paymentTokenAddress","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"address","name":"seller","type":"address"},{"internalType":"address","name":"buyer","type":"address"},{"internalType":"address","name":"royaltyReceiver","type":"address"},{"internalType":"bytes","name":"rawNftData","type":"bytes"}],"name":"createOffer","outputs":[{"internalType":"uint256","name":"_offerId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_offerId","type":"uint256"}],"name":"getOffer","outputs":[{"components":[{"internalType":"address","name":"nftAddress","type":"address"},{"internalType":"uint256","name":"nftTokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"paymentTokenAddress","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"address","name":"seller","type":"address"},{"internalType":"address","name":"buyer","type":"address"},{"internalType":"address","name":"royaltyReceiver","type":"address"},{"internalType":"uint256","name":"createdAtBlock","type":"uint256"},{"internalType":"bytes","name":"nftRawData","type":"bytes"}],"internalType":"struct MarketMinting.Offer","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"newContractOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"bool","name":"_approve","type":"bool"}],"name":"setAuthorizedUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blockCountValidity","type":"uint256"}],"name":"setOfferValidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_paused","type":"bool"}],"name":"setPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint16","name":"standard","type":"uint16"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260008060006101000a81548160ff021916908315150217905550606460055534801561002f57600080fd5b5033600060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061012c6003600001819055506142de8061008c6000396000f3fe6080604052600436106101185760003560e01c80638da5cb5b116100a0578063bedb86fb11610064578063bedb86fb14610398578063d5b9221b146103c1578063ef706adf146103fe578063f23a6e6114610427578063f2fde38b146104645761011f565b80638da5cb5b146102c25780639ecce700146102ed578063a249225e14610309578063a6068fc414610332578063bc197c811461035b5761011f565b80634579268a116100e75780634579268a146101ef57806351904c0c1461022c5780635c975abb14610269578063715018a61461029457806379ba5097146102ab5761011f565b806301ffc9a71461012157806305a66c781461015e5780630de959cc14610187578063150b7a02146101b25761011f565b3661011f57005b005b34801561012d57600080fd5b5061014860048036038101906101439190612ca6565b61048d565b6040516101559190612cee565b60405180910390f35b34801561016a57600080fd5b5061018560048036038101906101809190612dd7565b610507565b005b34801561019357600080fd5b5061019c6108bb565b6040516101a99190612e4d565b60405180910390f35b3480156101be57600080fd5b506101d960048036038101906101d49190612fae565b6108e1565b6040516101e69190613040565b60405180910390f35b3480156101fb57600080fd5b506102166004803603810190610211919061305b565b6108f5565b6040516102239190613214565b60405180910390f35b34801561023857600080fd5b50610253600480360381019061024e9190613236565b610b95565b6040516102609190613340565b60405180910390f35b34801561027557600080fd5b5061027e610fed565b60405161028b9190612cee565b60405180910390f35b3480156102a057600080fd5b506102a9610ffe565b005b3480156102b757600080fd5b506102c061114e565b005b3480156102ce57600080fd5b506102d761133b565b6040516102e49190612e4d565b60405180910390f35b6103076004803603810190610302919061305b565b611361565b005b34801561031557600080fd5b50610330600480360381019061032b9190613387565b611f72565b005b34801561033e57600080fd5b506103596004803603810190610354919061305b565b6120b9565b005b34801561036757600080fd5b50610382600480360381019061037d919061348f565b612153565b60405161038f9190613040565b60405180910390f35b3480156103a457600080fd5b506103bf60048036038101906103ba919061355e565b612168565b005b3480156103cd57600080fd5b506103e860048036038101906103e3919061358b565b612254565b6040516103f59190612cee565b60405180910390f35b34801561040a57600080fd5b506104256004803603810190610420919061305b565b612274565b005b34801561043357600080fd5b5061044e600480360381019061044991906135b8565b6127a7565b60405161045b9190613040565b60405180910390f35b34801561047057600080fd5b5061048b6004803603810190610486919061358b565b6127bc565b005b60007f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061050057506104ff826128c9565b5b9050919050565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161058e906136ac565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610617573373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610611573d6000803e3d6000fd5b506108b5565b60148361ffff160361072c57600081036106a8578373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016106649190612e4d565b602060405180830381865afa158015610681573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a591906136e1565b90505b8373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016106e392919061370e565b6020604051808303816000875af1158015610702573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610726919061374c565b506108b4565b6102d18361ffff16036107ad578373ffffffffffffffffffffffffffffffffffffffff166342842e0e3033856040518463ffffffff1660e01b815260040161077693929190613779565b600060405180830381600087803b15801561079057600080fd5b505af11580156107a4573d6000803e3d6000fd5b505050506108b3565b6104838361ffff16036108b25760008103610840578373ffffffffffffffffffffffffffffffffffffffff1662fdd58e30846040518363ffffffff1660e01b81526004016107fc92919061370e565b602060405180830381865afa158015610819573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083d91906136e1565b90505b8373ffffffffffffffffffffffffffffffffffffffff1663f242432a303385856040518563ffffffff1660e01b815260040161087f94939291906137e7565b600060405180830381600087803b15801561089957600080fd5b505af11580156108ad573d6000803e3d6000fd5b505050505b5b5b5b50505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600063150b7a0260e01b9050949350505050565b6108fd612b15565b60046000838152602001908152602001600020604051806101600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201548152602001600282015481526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160048201548152602001600582015481526020016006820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016007820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016008820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160098201548152602001600a82018054610b0c9061386e565b80601f0160208091040260200160405190810160405280929190818152602001828054610b389061386e565b8015610b855780601f10610b5a57610100808354040283529160200191610b85565b820191906000526020600020905b815481529060010190602001808311610b6857829003601f168201915b5050505050815250509050919050565b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1d906136ac565b60405180910390fd5b610c306003612933565b60008711610c73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6a90613911565b60405180910390fd5b6000861015610cb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cae9061397d565b60405180910390fd5b868610610cf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf090613a0f565b60405180910390fd5b6040518061016001604052808c73ffffffffffffffffffffffffffffffffffffffff1681526020018b81526020018a81526020018973ffffffffffffffffffffffffffffffffffffffff1681526020018881526020018781526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1681526020014381526020018381525060046000610dc16003612949565b815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101556040820151816002015560608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506080820151816004015560a0820151816005015560c08201518160060160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060e08201518160070160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101008201518160080160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610120820151816009015561014082015181600a019081610f7c9190613bdb565b50905050610f8a6003612949565b7fe536c2a61df66ef59a8307587b92f0bd93144fe53e86c0af1619ce263892b8f28c8c8c8c8c8c8c8c8c8c604051610fcb9a99989796959493929190613ce6565b60405180910390a2610fdd6003612949565b90509a9950505050505050505050565b60008054906101000a900460ff1681565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461108e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611085906136ac565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008054906101000a900460ff161561119c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119390613dd5565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146111f657600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060046000838152602001908152602001600020604051806101600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201548152602001600282015481526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160048201548152602001600582015481526020016006820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016007820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016008820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160098201548152602001600a820180546115729061386e565b80601f016020809104026020016040519081016040528092919081815260200182805461159e9061386e565b80156115eb5780601f106115c0576101008083540402835291602001916115eb565b820191906000526020600020905b8154815290600101906020018083116115ce57829003601f168201915b5050505050815250509050600073ffffffffffffffffffffffffffffffffffffffff168160c0015173ffffffffffffffffffffffffffffffffffffffff1603611669576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166090613e41565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168160e0015173ffffffffffffffffffffffffffffffffffffffff16146116db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d290613ed3565b60405180910390fd5b436005548261012001516116ef9190613f22565b1015611730576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172790613e41565b60405180910390fd5b60046000838152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182016000905560028201600090556003820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600482016000905560058201600090556006820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556007820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556008820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556009820160009055600a8201600061183f9190612bdd565b505060008060008360a00151846080015161185a9190613f56565b9050836000015173ffffffffffffffffffffffffffffffffffffffff166301ffc9a763d9b67a2660e01b6040518263ffffffff1660e01b81526004016118a09190613040565b602060405180830381865afa1580156118bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e1919061374c565b156119fc576000846101400151510361197457836000015173ffffffffffffffffffffffffffffffffffffffff16632baf2acb33866020015187604001516040518463ffffffff1660e01b815260040161193d93929190613f8a565b600060405180830381600087803b15801561195757600080fd5b505af115801561196b573d6000803e3d6000fd5b505050506119f7565b836000015173ffffffffffffffffffffffffffffffffffffffff1663280f4e2833866020015187604001518861014001516040518563ffffffff1660e01b81526004016119c49493929190613fc1565b600060405180830381600087803b1580156119de57600080fd5b505af11580156119f2573d6000803e3d6000fd5b505050505b611b04565b60008461014001515103611a8557836000015173ffffffffffffffffffffffffffffffffffffffff1663951b6c02338661010001516040518363ffffffff1660e01b8152600401611a4e92919061400d565b600060405180830381600087803b158015611a6857600080fd5b505af1158015611a7c573d6000803e3d6000fd5b50505050611b03565b836000015173ffffffffffffffffffffffffffffffffffffffff1663d304c8c3338661010001518761014001516040518463ffffffff1660e01b8152600401611ad093929190614036565b600060405180830381600087803b158015611aea57600080fd5b505af1158015611afe573d6000803e3d6000fd5b505050505b5b611b178460000151856020015183612957565b8094508193505050600073ffffffffffffffffffffffffffffffffffffffff16846060015173ffffffffffffffffffffffffffffffffffffffff1614611d8a57836060015173ffffffffffffffffffffffffffffffffffffffff166323b872dd338660c001518685611b899190613f56565b6040518463ffffffff1660e01b8152600401611ba793929190613779565b6020604051808303816000875af1158015611bc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bea919061374c565b5060008314611cef57836060015173ffffffffffffffffffffffffffffffffffffffff166323b872dd3384866040518463ffffffff1660e01b8152600401611c3493929190613779565b6020604051808303816000875af1158015611c53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c77919061374c565b5082846060015173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f65e6239bd7df5d8115081cff49cb323db8896353fce4ec58fc59ff8bd12e28803388600001518960200151604051611ce693929190613779565b60405180910390a45b60008460a0015114611d8557836060015173ffffffffffffffffffffffffffffffffffffffff166323b872dd33308760a001516040518463ffffffff1660e01b8152600401611d4093929190613779565b6020604051808303816000875af1158015611d5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d83919061374c565b505b611f04565b8360800151341015611dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc8906140e6565b60405180910390fd5b60008382611ddf9190613f56565b1115611e3c578360c0015173ffffffffffffffffffffffffffffffffffffffff166108fc8483611e0f9190613f56565b9081150290604051600060405180830381858888f19350505050158015611e3a573d6000803e3d6000fd5b505b6000831115611f03578173ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015611e8b573d6000803e3d6000fd5b5082846060015173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f65e6239bd7df5d8115081cff49cb323db8896353fce4ec58fc59ff8bd12e28803388600001518960200151604051611efa93929190613779565b60405180910390a45b5b847f0f56edd4343fecc91de0e0bddbb7d19dcfe17cd573e5a61645809869e4907f12856000015186602001518760400151886060015189608001518a60c001518b60e001518c6101000151604051611f63989796959493929190614106565b60405180910390a25050505050565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612002576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff9906136ac565b60405180910390fd5b8015612065576001600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506120b5565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b5050565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612149576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612140906136ac565b60405180910390fd5b8060058190555050565b600063bc197c8160e01b905095945050505050565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146121f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ef906136ac565b60405180910390fd5b806000806101000a81548160ff02191690831515021790555060008054906101000a900460ff1615612251577f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a15b50565b60026020528060005260406000206000915054906101000a900460ff1681565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612304576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fb906136ac565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036123a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a090613e41565b60405180910390fd5b600060046000838152602001908152602001600020604051806101600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201548152602001600282015481526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160048201548152602001600582015481526020016006820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016007820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016008820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160098201548152602001600a820180546125ba9061386e565b80601f01602080910402602001604051908101604052809291908181526020018280546125e69061386e565b80156126335780601f1061260857610100808354040283529160200191612633565b820191906000526020600020905b81548152906001019060200180831161261657829003601f168201915b505050505081525050905060046000838152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182016000905560028201600090556003820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600482016000905560058201600090556006820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556007820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556008820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556009820160009055600a8201600061274d9190612bdd565b5050817fdca493ab649fdadb96576edd1aeb641e2e663dc5504a63a50c7003fb88022c4c8260000151836020015184604001518560c001518660e0015160405161279b959493929190614184565b60405180910390a25050565b600063f23a6e6160e01b905095945050505050565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461284c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612843906136ac565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361288557600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6001816000016000828254019250508190555050565b600081600001549050919050565b6000806000808673ffffffffffffffffffffffffffffffffffffffff16632a55205a60e01b60405160240161298c9190613040565b6040516020818303038152906040527f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051612a169190614213565b600060405180830381855afa9150503d8060008114612a51576040519150601f19603f3d011682016040523d82523d6000602084013e612a56565b606091505b5091509150818015612a78575080806020019051810190612a77919061374c565b5b15612b03578673ffffffffffffffffffffffffffffffffffffffff16632a55205a87876040518363ffffffff1660e01b8152600401612ab892919061422a565b6040805180830381865afa158015612ad4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612af89190614268565b935093505050612b0d565b6000809350935050505b935093915050565b604051806101600160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001606081525090565b508054612be99061386e565b6000825580601f10612bfb5750612c1a565b601f016020900490600052602060002090810190612c199190612c1d565b5b50565b5b80821115612c36576000816000905550600101612c1e565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612c8381612c4e565b8114612c8e57600080fd5b50565b600081359050612ca081612c7a565b92915050565b600060208284031215612cbc57612cbb612c44565b5b6000612cca84828501612c91565b91505092915050565b60008115159050919050565b612ce881612cd3565b82525050565b6000602082019050612d036000830184612cdf565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612d3482612d09565b9050919050565b612d4481612d29565b8114612d4f57600080fd5b50565b600081359050612d6181612d3b565b92915050565b600061ffff82169050919050565b612d7e81612d67565b8114612d8957600080fd5b50565b600081359050612d9b81612d75565b92915050565b6000819050919050565b612db481612da1565b8114612dbf57600080fd5b50565b600081359050612dd181612dab565b92915050565b60008060008060808587031215612df157612df0612c44565b5b6000612dff87828801612d52565b9450506020612e1087828801612d8c565b9350506040612e2187828801612dc2565b9250506060612e3287828801612dc2565b91505092959194509250565b612e4781612d29565b82525050565b6000602082019050612e626000830184612e3e565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612ebb82612e72565b810181811067ffffffffffffffff82111715612eda57612ed9612e83565b5b80604052505050565b6000612eed612c3a565b9050612ef98282612eb2565b919050565b600067ffffffffffffffff821115612f1957612f18612e83565b5b612f2282612e72565b9050602081019050919050565b82818337600083830152505050565b6000612f51612f4c84612efe565b612ee3565b905082815260208101848484011115612f6d57612f6c612e6d565b5b612f78848285612f2f565b509392505050565b600082601f830112612f9557612f94612e68565b5b8135612fa5848260208601612f3e565b91505092915050565b60008060008060808587031215612fc857612fc7612c44565b5b6000612fd687828801612d52565b9450506020612fe787828801612d52565b9350506040612ff887828801612dc2565b925050606085013567ffffffffffffffff81111561301957613018612c49565b5b61302587828801612f80565b91505092959194509250565b61303a81612c4e565b82525050565b60006020820190506130556000830184613031565b92915050565b60006020828403121561307157613070612c44565b5b600061307f84828501612dc2565b91505092915050565b61309181612d29565b82525050565b6130a081612da1565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156130e05780820151818401526020810190506130c5565b60008484015250505050565b60006130f7826130a6565b61310181856130b1565b93506131118185602086016130c2565b61311a81612e72565b840191505092915050565b60006101608301600083015161313e6000860182613088565b5060208301516131516020860182613097565b5060408301516131646040860182613097565b5060608301516131776060860182613088565b50608083015161318a6080860182613097565b5060a083015161319d60a0860182613097565b5060c08301516131b060c0860182613088565b5060e08301516131c360e0860182613088565b506101008301516131d8610100860182613088565b506101208301516131ed610120860182613097565b5061014083015184820361014086015261320782826130ec565b9150508091505092915050565b6000602082019050818103600083015261322e8184613125565b905092915050565b6000806000806000806000806000806101408b8d03121561325a57613259612c44565b5b60006132688d828e01612d52565b9a505060206132798d828e01612dc2565b995050604061328a8d828e01612dc2565b985050606061329b8d828e01612d52565b97505060806132ac8d828e01612dc2565b96505060a06132bd8d828e01612dc2565b95505060c06132ce8d828e01612d52565b94505060e06132df8d828e01612d52565b9350506101006132f18d828e01612d52565b9250506101208b013567ffffffffffffffff81111561331357613312612c49565b5b61331f8d828e01612f80565b9150509295989b9194979a5092959850565b61333a81612da1565b82525050565b60006020820190506133556000830184613331565b92915050565b61336481612cd3565b811461336f57600080fd5b50565b6000813590506133818161335b565b92915050565b6000806040838503121561339e5761339d612c44565b5b60006133ac85828601612d52565b92505060206133bd85828601613372565b9150509250929050565b600067ffffffffffffffff8211156133e2576133e1612e83565b5b602082029050602081019050919050565b600080fd5b600061340b613406846133c7565b612ee3565b9050808382526020820190506020840283018581111561342e5761342d6133f3565b5b835b8181101561345757806134438882612dc2565b845260208401935050602081019050613430565b5050509392505050565b600082601f83011261347657613475612e68565b5b81356134868482602086016133f8565b91505092915050565b600080600080600060a086880312156134ab576134aa612c44565b5b60006134b988828901612d52565b95505060206134ca88828901612d52565b945050604086013567ffffffffffffffff8111156134eb576134ea612c49565b5b6134f788828901613461565b935050606086013567ffffffffffffffff81111561351857613517612c49565b5b61352488828901613461565b925050608086013567ffffffffffffffff81111561354557613544612c49565b5b61355188828901612f80565b9150509295509295909350565b60006020828403121561357457613573612c44565b5b600061358284828501613372565b91505092915050565b6000602082840312156135a1576135a0612c44565b5b60006135af84828501612d52565b91505092915050565b600080600080600060a086880312156135d4576135d3612c44565b5b60006135e288828901612d52565b95505060206135f388828901612d52565b945050604061360488828901612dc2565b935050606061361588828901612dc2565b925050608086013567ffffffffffffffff81111561363657613635612c49565b5b61364288828901612f80565b9150509295509295909350565b600082825260208201905092915050565b7f63616c6c6572206973206e6f7420616e206f776e657200000000000000000000600082015250565b600061369660168361364f565b91506136a182613660565b602082019050919050565b600060208201905081810360008301526136c581613689565b9050919050565b6000815190506136db81612dab565b92915050565b6000602082840312156136f7576136f6612c44565b5b6000613705848285016136cc565b91505092915050565b60006040820190506137236000830185612e3e565b6137306020830184613331565b9392505050565b6000815190506137468161335b565b92915050565b60006020828403121561376257613761612c44565b5b600061377084828501613737565b91505092915050565b600060608201905061378e6000830186612e3e565b61379b6020830185612e3e565b6137a86040830184613331565b949350505050565b600082825260208201905092915050565b50565b60006137d16000836137b0565b91506137dc826137c1565b600082019050919050565b600060a0820190506137fc6000830187612e3e565b6138096020830186612e3e565b6138166040830185613331565b6138236060830184613331565b8181036080830152613834816137c4565b905095945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061388657607f821691505b6020821081036138995761389861383f565b5b50919050565b7f4d61726b65743a2070726963652073686f756c6420626520677265617465722060008201527f7468616e20300000000000000000000000000000000000000000000000000000602082015250565b60006138fb60268361364f565b91506139068261389f565b604082019050919050565b6000602082019050818103600083015261392a816138ee565b9050919050565b7f204d61726b65743a206665652063616e6e6f74206265206e6567617469766500600082015250565b6000613967601f8361364f565b915061397282613931565b602082019050919050565b600060208201905081810360008301526139968161395a565b9050919050565b7f4d61726b65743a206665652063616e6e6f74206265206772656174657220746860008201527f616e207072696365000000000000000000000000000000000000000000000000602082015250565b60006139f960288361364f565b9150613a048261399d565b604082019050919050565b60006020820190508181036000830152613a28816139ec565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613a917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613a54565b613a9b8683613a54565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613ad8613ad3613ace84612da1565b613ab3565b612da1565b9050919050565b6000819050919050565b613af283613abd565b613b06613afe82613adf565b848454613a61565b825550505050565b600090565b613b1b613b0e565b613b26818484613ae9565b505050565b5b81811015613b4a57613b3f600082613b13565b600181019050613b2c565b5050565b601f821115613b8f57613b6081613a2f565b613b6984613a44565b81016020851015613b78578190505b613b8c613b8485613a44565b830182613b2b565b50505b505050565b600082821c905092915050565b6000613bb260001984600802613b94565b1980831691505092915050565b6000613bcb8383613ba1565b9150826002028217905092915050565b613be4826130a6565b67ffffffffffffffff811115613bfd57613bfc612e83565b5b613c07825461386e565b613c12828285613b4e565b600060209050601f831160018114613c455760008415613c33578287015190505b613c3d8582613bbf565b865550613ca5565b601f198416613c5386613a2f565b60005b82811015613c7b57848901518255600182019150602085019450602081019050613c56565b86831015613c985784890151613c94601f891682613ba1565b8355505b6001600288020188555050505b505050505050565b6000613cb8826130a6565b613cc281856137b0565b9350613cd28185602086016130c2565b613cdb81612e72565b840191505092915050565b600061014082019050613cfc600083018d612e3e565b613d09602083018c613331565b613d16604083018b613331565b613d23606083018a612e3e565b613d306080830189613331565b613d3d60a0830188613331565b613d4a60c0830187612e3e565b613d5760e0830186612e3e565b613d65610100830185612e3e565b818103610120830152613d788184613cad565b90509b9a5050505050505050505050565b7f636f6e7472616374206973207061757365640000000000000000000000000000600082015250565b6000613dbf60128361364f565b9150613dca82613d89565b602082019050919050565b60006020820190508181036000830152613dee81613db2565b9050919050565b7f4d61726b65743a206f66666572206973206e6f742076616c6964000000000000600082015250565b6000613e2b601a8361364f565b9150613e3682613df5565b602082019050919050565b60006020820190508181036000830152613e5a81613e1e565b9050919050565b7f4d61726b65743a20796f7520617265206e6f7420656c696769626c6520746f2060008201527f6275792074686973206f66666572000000000000000000000000000000000000602082015250565b6000613ebd602e8361364f565b9150613ec882613e61565b604082019050919050565b60006020820190508181036000830152613eec81613eb0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613f2d82612da1565b9150613f3883612da1565b9250828201905080821115613f5057613f4f613ef3565b5b92915050565b6000613f6182612da1565b9150613f6c83612da1565b9250828203905081811115613f8457613f83613ef3565b5b92915050565b6000606082019050613f9f6000830186612e3e565b613fac6020830185613331565b613fb96040830184613331565b949350505050565b6000608082019050613fd66000830187612e3e565b613fe36020830186613331565b613ff06040830185613331565b81810360608301526140028184613cad565b905095945050505050565b60006040820190506140226000830185612e3e565b61402f6020830184612e3e565b9392505050565b600060608201905061404b6000830186612e3e565b6140586020830185612e3e565b818103604083015261406a8184613cad565b9050949350505050565b7f4d61726b65743a20696e73756666696369656e742076616c756520686173206260008201527f65656e2073656e74000000000000000000000000000000000000000000000000602082015250565b60006140d060288361364f565b91506140db82614074565b604082019050919050565b600060208201905081810360008301526140ff816140c3565b9050919050565b60006101008201905061411c600083018b612e3e565b614129602083018a613331565b6141366040830189613331565b6141436060830188612e3e565b6141506080830187613331565b61415d60a0830186612e3e565b61416a60c0830185612e3e565b61417760e0830184612e3e565b9998505050505050505050565b600060a0820190506141996000830188612e3e565b6141a66020830187613331565b6141b36040830186613331565b6141c06060830185612e3e565b6141cd6080830184612e3e565b9695505050505050565b600081905092915050565b60006141ed826130a6565b6141f781856141d7565b93506142078185602086016130c2565b80840191505092915050565b600061421f82846141e2565b915081905092915050565b600060408201905061423f6000830185613331565b61424c6020830184613331565b9392505050565b60008151905061426281612d3b565b92915050565b6000806040838503121561427f5761427e612c44565b5b600061428d85828601614253565b925050602061429e858286016136cc565b915050925092905056fea2646970667358221220e14a2e98bc5108ccb690395274df0bd52c475efd6ef0ad0427ee4d2ad157131b64736f6c63430008120033

Deployed Bytecode

0x6080604052600436106101185760003560e01c80638da5cb5b116100a0578063bedb86fb11610064578063bedb86fb14610398578063d5b9221b146103c1578063ef706adf146103fe578063f23a6e6114610427578063f2fde38b146104645761011f565b80638da5cb5b146102c25780639ecce700146102ed578063a249225e14610309578063a6068fc414610332578063bc197c811461035b5761011f565b80634579268a116100e75780634579268a146101ef57806351904c0c1461022c5780635c975abb14610269578063715018a61461029457806379ba5097146102ab5761011f565b806301ffc9a71461012157806305a66c781461015e5780630de959cc14610187578063150b7a02146101b25761011f565b3661011f57005b005b34801561012d57600080fd5b5061014860048036038101906101439190612ca6565b61048d565b6040516101559190612cee565b60405180910390f35b34801561016a57600080fd5b5061018560048036038101906101809190612dd7565b610507565b005b34801561019357600080fd5b5061019c6108bb565b6040516101a99190612e4d565b60405180910390f35b3480156101be57600080fd5b506101d960048036038101906101d49190612fae565b6108e1565b6040516101e69190613040565b60405180910390f35b3480156101fb57600080fd5b506102166004803603810190610211919061305b565b6108f5565b6040516102239190613214565b60405180910390f35b34801561023857600080fd5b50610253600480360381019061024e9190613236565b610b95565b6040516102609190613340565b60405180910390f35b34801561027557600080fd5b5061027e610fed565b60405161028b9190612cee565b60405180910390f35b3480156102a057600080fd5b506102a9610ffe565b005b3480156102b757600080fd5b506102c061114e565b005b3480156102ce57600080fd5b506102d761133b565b6040516102e49190612e4d565b60405180910390f35b6103076004803603810190610302919061305b565b611361565b005b34801561031557600080fd5b50610330600480360381019061032b9190613387565b611f72565b005b34801561033e57600080fd5b506103596004803603810190610354919061305b565b6120b9565b005b34801561036757600080fd5b50610382600480360381019061037d919061348f565b612153565b60405161038f9190613040565b60405180910390f35b3480156103a457600080fd5b506103bf60048036038101906103ba919061355e565b612168565b005b3480156103cd57600080fd5b506103e860048036038101906103e3919061358b565b612254565b6040516103f59190612cee565b60405180910390f35b34801561040a57600080fd5b506104256004803603810190610420919061305b565b612274565b005b34801561043357600080fd5b5061044e600480360381019061044991906135b8565b6127a7565b60405161045b9190613040565b60405180910390f35b34801561047057600080fd5b5061048b6004803603810190610486919061358b565b6127bc565b005b60007f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061050057506104ff826128c9565b5b9050919050565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161058e906136ac565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610617573373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610611573d6000803e3d6000fd5b506108b5565b60148361ffff160361072c57600081036106a8578373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016106649190612e4d565b602060405180830381865afa158015610681573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a591906136e1565b90505b8373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016106e392919061370e565b6020604051808303816000875af1158015610702573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610726919061374c565b506108b4565b6102d18361ffff16036107ad578373ffffffffffffffffffffffffffffffffffffffff166342842e0e3033856040518463ffffffff1660e01b815260040161077693929190613779565b600060405180830381600087803b15801561079057600080fd5b505af11580156107a4573d6000803e3d6000fd5b505050506108b3565b6104838361ffff16036108b25760008103610840578373ffffffffffffffffffffffffffffffffffffffff1662fdd58e30846040518363ffffffff1660e01b81526004016107fc92919061370e565b602060405180830381865afa158015610819573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083d91906136e1565b90505b8373ffffffffffffffffffffffffffffffffffffffff1663f242432a303385856040518563ffffffff1660e01b815260040161087f94939291906137e7565b600060405180830381600087803b15801561089957600080fd5b505af11580156108ad573d6000803e3d6000fd5b505050505b5b5b5b50505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600063150b7a0260e01b9050949350505050565b6108fd612b15565b60046000838152602001908152602001600020604051806101600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201548152602001600282015481526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160048201548152602001600582015481526020016006820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016007820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016008820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160098201548152602001600a82018054610b0c9061386e565b80601f0160208091040260200160405190810160405280929190818152602001828054610b389061386e565b8015610b855780601f10610b5a57610100808354040283529160200191610b85565b820191906000526020600020905b815481529060010190602001808311610b6857829003601f168201915b5050505050815250509050919050565b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1d906136ac565b60405180910390fd5b610c306003612933565b60008711610c73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6a90613911565b60405180910390fd5b6000861015610cb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cae9061397d565b60405180910390fd5b868610610cf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf090613a0f565b60405180910390fd5b6040518061016001604052808c73ffffffffffffffffffffffffffffffffffffffff1681526020018b81526020018a81526020018973ffffffffffffffffffffffffffffffffffffffff1681526020018881526020018781526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1681526020014381526020018381525060046000610dc16003612949565b815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101556040820151816002015560608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506080820151816004015560a0820151816005015560c08201518160060160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060e08201518160070160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101008201518160080160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610120820151816009015561014082015181600a019081610f7c9190613bdb565b50905050610f8a6003612949565b7fe536c2a61df66ef59a8307587b92f0bd93144fe53e86c0af1619ce263892b8f28c8c8c8c8c8c8c8c8c8c604051610fcb9a99989796959493929190613ce6565b60405180910390a2610fdd6003612949565b90509a9950505050505050505050565b60008054906101000a900460ff1681565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461108e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611085906136ac565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008054906101000a900460ff161561119c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119390613dd5565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146111f657600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060046000838152602001908152602001600020604051806101600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201548152602001600282015481526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160048201548152602001600582015481526020016006820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016007820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016008820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160098201548152602001600a820180546115729061386e565b80601f016020809104026020016040519081016040528092919081815260200182805461159e9061386e565b80156115eb5780601f106115c0576101008083540402835291602001916115eb565b820191906000526020600020905b8154815290600101906020018083116115ce57829003601f168201915b5050505050815250509050600073ffffffffffffffffffffffffffffffffffffffff168160c0015173ffffffffffffffffffffffffffffffffffffffff1603611669576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166090613e41565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168160e0015173ffffffffffffffffffffffffffffffffffffffff16146116db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d290613ed3565b60405180910390fd5b436005548261012001516116ef9190613f22565b1015611730576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172790613e41565b60405180910390fd5b60046000838152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182016000905560028201600090556003820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600482016000905560058201600090556006820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556007820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556008820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556009820160009055600a8201600061183f9190612bdd565b505060008060008360a00151846080015161185a9190613f56565b9050836000015173ffffffffffffffffffffffffffffffffffffffff166301ffc9a763d9b67a2660e01b6040518263ffffffff1660e01b81526004016118a09190613040565b602060405180830381865afa1580156118bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e1919061374c565b156119fc576000846101400151510361197457836000015173ffffffffffffffffffffffffffffffffffffffff16632baf2acb33866020015187604001516040518463ffffffff1660e01b815260040161193d93929190613f8a565b600060405180830381600087803b15801561195757600080fd5b505af115801561196b573d6000803e3d6000fd5b505050506119f7565b836000015173ffffffffffffffffffffffffffffffffffffffff1663280f4e2833866020015187604001518861014001516040518563ffffffff1660e01b81526004016119c49493929190613fc1565b600060405180830381600087803b1580156119de57600080fd5b505af11580156119f2573d6000803e3d6000fd5b505050505b611b04565b60008461014001515103611a8557836000015173ffffffffffffffffffffffffffffffffffffffff1663951b6c02338661010001516040518363ffffffff1660e01b8152600401611a4e92919061400d565b600060405180830381600087803b158015611a6857600080fd5b505af1158015611a7c573d6000803e3d6000fd5b50505050611b03565b836000015173ffffffffffffffffffffffffffffffffffffffff1663d304c8c3338661010001518761014001516040518463ffffffff1660e01b8152600401611ad093929190614036565b600060405180830381600087803b158015611aea57600080fd5b505af1158015611afe573d6000803e3d6000fd5b505050505b5b611b178460000151856020015183612957565b8094508193505050600073ffffffffffffffffffffffffffffffffffffffff16846060015173ffffffffffffffffffffffffffffffffffffffff1614611d8a57836060015173ffffffffffffffffffffffffffffffffffffffff166323b872dd338660c001518685611b899190613f56565b6040518463ffffffff1660e01b8152600401611ba793929190613779565b6020604051808303816000875af1158015611bc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bea919061374c565b5060008314611cef57836060015173ffffffffffffffffffffffffffffffffffffffff166323b872dd3384866040518463ffffffff1660e01b8152600401611c3493929190613779565b6020604051808303816000875af1158015611c53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c77919061374c565b5082846060015173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f65e6239bd7df5d8115081cff49cb323db8896353fce4ec58fc59ff8bd12e28803388600001518960200151604051611ce693929190613779565b60405180910390a45b60008460a0015114611d8557836060015173ffffffffffffffffffffffffffffffffffffffff166323b872dd33308760a001516040518463ffffffff1660e01b8152600401611d4093929190613779565b6020604051808303816000875af1158015611d5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d83919061374c565b505b611f04565b8360800151341015611dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc8906140e6565b60405180910390fd5b60008382611ddf9190613f56565b1115611e3c578360c0015173ffffffffffffffffffffffffffffffffffffffff166108fc8483611e0f9190613f56565b9081150290604051600060405180830381858888f19350505050158015611e3a573d6000803e3d6000fd5b505b6000831115611f03578173ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015611e8b573d6000803e3d6000fd5b5082846060015173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f65e6239bd7df5d8115081cff49cb323db8896353fce4ec58fc59ff8bd12e28803388600001518960200151604051611efa93929190613779565b60405180910390a45b5b847f0f56edd4343fecc91de0e0bddbb7d19dcfe17cd573e5a61645809869e4907f12856000015186602001518760400151886060015189608001518a60c001518b60e001518c6101000151604051611f63989796959493929190614106565b60405180910390a25050505050565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612002576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff9906136ac565b60405180910390fd5b8015612065576001600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506120b5565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b5050565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612149576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612140906136ac565b60405180910390fd5b8060058190555050565b600063bc197c8160e01b905095945050505050565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146121f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ef906136ac565b60405180910390fd5b806000806101000a81548160ff02191690831515021790555060008054906101000a900460ff1615612251577f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a15b50565b60026020528060005260406000206000915054906101000a900460ff1681565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612304576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fb906136ac565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036123a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a090613e41565b60405180910390fd5b600060046000838152602001908152602001600020604051806101600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201548152602001600282015481526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160048201548152602001600582015481526020016006820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016007820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016008820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160098201548152602001600a820180546125ba9061386e565b80601f01602080910402602001604051908101604052809291908181526020018280546125e69061386e565b80156126335780601f1061260857610100808354040283529160200191612633565b820191906000526020600020905b81548152906001019060200180831161261657829003601f168201915b505050505081525050905060046000838152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182016000905560028201600090556003820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600482016000905560058201600090556006820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556007820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556008820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556009820160009055600a8201600061274d9190612bdd565b5050817fdca493ab649fdadb96576edd1aeb641e2e663dc5504a63a50c7003fb88022c4c8260000151836020015184604001518560c001518660e0015160405161279b959493929190614184565b60405180910390a25050565b600063f23a6e6160e01b905095945050505050565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461284c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612843906136ac565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361288557600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6001816000016000828254019250508190555050565b600081600001549050919050565b6000806000808673ffffffffffffffffffffffffffffffffffffffff16632a55205a60e01b60405160240161298c9190613040565b6040516020818303038152906040527f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051612a169190614213565b600060405180830381855afa9150503d8060008114612a51576040519150601f19603f3d011682016040523d82523d6000602084013e612a56565b606091505b5091509150818015612a78575080806020019051810190612a77919061374c565b5b15612b03578673ffffffffffffffffffffffffffffffffffffffff16632a55205a87876040518363ffffffff1660e01b8152600401612ab892919061422a565b6040805180830381865afa158015612ad4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612af89190614268565b935093505050612b0d565b6000809350935050505b935093915050565b604051806101600160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001606081525090565b508054612be99061386e565b6000825580601f10612bfb5750612c1a565b601f016020900490600052602060002090810190612c199190612c1d565b5b50565b5b80821115612c36576000816000905550600101612c1e565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612c8381612c4e565b8114612c8e57600080fd5b50565b600081359050612ca081612c7a565b92915050565b600060208284031215612cbc57612cbb612c44565b5b6000612cca84828501612c91565b91505092915050565b60008115159050919050565b612ce881612cd3565b82525050565b6000602082019050612d036000830184612cdf565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612d3482612d09565b9050919050565b612d4481612d29565b8114612d4f57600080fd5b50565b600081359050612d6181612d3b565b92915050565b600061ffff82169050919050565b612d7e81612d67565b8114612d8957600080fd5b50565b600081359050612d9b81612d75565b92915050565b6000819050919050565b612db481612da1565b8114612dbf57600080fd5b50565b600081359050612dd181612dab565b92915050565b60008060008060808587031215612df157612df0612c44565b5b6000612dff87828801612d52565b9450506020612e1087828801612d8c565b9350506040612e2187828801612dc2565b9250506060612e3287828801612dc2565b91505092959194509250565b612e4781612d29565b82525050565b6000602082019050612e626000830184612e3e565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612ebb82612e72565b810181811067ffffffffffffffff82111715612eda57612ed9612e83565b5b80604052505050565b6000612eed612c3a565b9050612ef98282612eb2565b919050565b600067ffffffffffffffff821115612f1957612f18612e83565b5b612f2282612e72565b9050602081019050919050565b82818337600083830152505050565b6000612f51612f4c84612efe565b612ee3565b905082815260208101848484011115612f6d57612f6c612e6d565b5b612f78848285612f2f565b509392505050565b600082601f830112612f9557612f94612e68565b5b8135612fa5848260208601612f3e565b91505092915050565b60008060008060808587031215612fc857612fc7612c44565b5b6000612fd687828801612d52565b9450506020612fe787828801612d52565b9350506040612ff887828801612dc2565b925050606085013567ffffffffffffffff81111561301957613018612c49565b5b61302587828801612f80565b91505092959194509250565b61303a81612c4e565b82525050565b60006020820190506130556000830184613031565b92915050565b60006020828403121561307157613070612c44565b5b600061307f84828501612dc2565b91505092915050565b61309181612d29565b82525050565b6130a081612da1565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156130e05780820151818401526020810190506130c5565b60008484015250505050565b60006130f7826130a6565b61310181856130b1565b93506131118185602086016130c2565b61311a81612e72565b840191505092915050565b60006101608301600083015161313e6000860182613088565b5060208301516131516020860182613097565b5060408301516131646040860182613097565b5060608301516131776060860182613088565b50608083015161318a6080860182613097565b5060a083015161319d60a0860182613097565b5060c08301516131b060c0860182613088565b5060e08301516131c360e0860182613088565b506101008301516131d8610100860182613088565b506101208301516131ed610120860182613097565b5061014083015184820361014086015261320782826130ec565b9150508091505092915050565b6000602082019050818103600083015261322e8184613125565b905092915050565b6000806000806000806000806000806101408b8d03121561325a57613259612c44565b5b60006132688d828e01612d52565b9a505060206132798d828e01612dc2565b995050604061328a8d828e01612dc2565b985050606061329b8d828e01612d52565b97505060806132ac8d828e01612dc2565b96505060a06132bd8d828e01612dc2565b95505060c06132ce8d828e01612d52565b94505060e06132df8d828e01612d52565b9350506101006132f18d828e01612d52565b9250506101208b013567ffffffffffffffff81111561331357613312612c49565b5b61331f8d828e01612f80565b9150509295989b9194979a5092959850565b61333a81612da1565b82525050565b60006020820190506133556000830184613331565b92915050565b61336481612cd3565b811461336f57600080fd5b50565b6000813590506133818161335b565b92915050565b6000806040838503121561339e5761339d612c44565b5b60006133ac85828601612d52565b92505060206133bd85828601613372565b9150509250929050565b600067ffffffffffffffff8211156133e2576133e1612e83565b5b602082029050602081019050919050565b600080fd5b600061340b613406846133c7565b612ee3565b9050808382526020820190506020840283018581111561342e5761342d6133f3565b5b835b8181101561345757806134438882612dc2565b845260208401935050602081019050613430565b5050509392505050565b600082601f83011261347657613475612e68565b5b81356134868482602086016133f8565b91505092915050565b600080600080600060a086880312156134ab576134aa612c44565b5b60006134b988828901612d52565b95505060206134ca88828901612d52565b945050604086013567ffffffffffffffff8111156134eb576134ea612c49565b5b6134f788828901613461565b935050606086013567ffffffffffffffff81111561351857613517612c49565b5b61352488828901613461565b925050608086013567ffffffffffffffff81111561354557613544612c49565b5b61355188828901612f80565b9150509295509295909350565b60006020828403121561357457613573612c44565b5b600061358284828501613372565b91505092915050565b6000602082840312156135a1576135a0612c44565b5b60006135af84828501612d52565b91505092915050565b600080600080600060a086880312156135d4576135d3612c44565b5b60006135e288828901612d52565b95505060206135f388828901612d52565b945050604061360488828901612dc2565b935050606061361588828901612dc2565b925050608086013567ffffffffffffffff81111561363657613635612c49565b5b61364288828901612f80565b9150509295509295909350565b600082825260208201905092915050565b7f63616c6c6572206973206e6f7420616e206f776e657200000000000000000000600082015250565b600061369660168361364f565b91506136a182613660565b602082019050919050565b600060208201905081810360008301526136c581613689565b9050919050565b6000815190506136db81612dab565b92915050565b6000602082840312156136f7576136f6612c44565b5b6000613705848285016136cc565b91505092915050565b60006040820190506137236000830185612e3e565b6137306020830184613331565b9392505050565b6000815190506137468161335b565b92915050565b60006020828403121561376257613761612c44565b5b600061377084828501613737565b91505092915050565b600060608201905061378e6000830186612e3e565b61379b6020830185612e3e565b6137a86040830184613331565b949350505050565b600082825260208201905092915050565b50565b60006137d16000836137b0565b91506137dc826137c1565b600082019050919050565b600060a0820190506137fc6000830187612e3e565b6138096020830186612e3e565b6138166040830185613331565b6138236060830184613331565b8181036080830152613834816137c4565b905095945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061388657607f821691505b6020821081036138995761389861383f565b5b50919050565b7f4d61726b65743a2070726963652073686f756c6420626520677265617465722060008201527f7468616e20300000000000000000000000000000000000000000000000000000602082015250565b60006138fb60268361364f565b91506139068261389f565b604082019050919050565b6000602082019050818103600083015261392a816138ee565b9050919050565b7f204d61726b65743a206665652063616e6e6f74206265206e6567617469766500600082015250565b6000613967601f8361364f565b915061397282613931565b602082019050919050565b600060208201905081810360008301526139968161395a565b9050919050565b7f4d61726b65743a206665652063616e6e6f74206265206772656174657220746860008201527f616e207072696365000000000000000000000000000000000000000000000000602082015250565b60006139f960288361364f565b9150613a048261399d565b604082019050919050565b60006020820190508181036000830152613a28816139ec565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613a917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613a54565b613a9b8683613a54565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613ad8613ad3613ace84612da1565b613ab3565b612da1565b9050919050565b6000819050919050565b613af283613abd565b613b06613afe82613adf565b848454613a61565b825550505050565b600090565b613b1b613b0e565b613b26818484613ae9565b505050565b5b81811015613b4a57613b3f600082613b13565b600181019050613b2c565b5050565b601f821115613b8f57613b6081613a2f565b613b6984613a44565b81016020851015613b78578190505b613b8c613b8485613a44565b830182613b2b565b50505b505050565b600082821c905092915050565b6000613bb260001984600802613b94565b1980831691505092915050565b6000613bcb8383613ba1565b9150826002028217905092915050565b613be4826130a6565b67ffffffffffffffff811115613bfd57613bfc612e83565b5b613c07825461386e565b613c12828285613b4e565b600060209050601f831160018114613c455760008415613c33578287015190505b613c3d8582613bbf565b865550613ca5565b601f198416613c5386613a2f565b60005b82811015613c7b57848901518255600182019150602085019450602081019050613c56565b86831015613c985784890151613c94601f891682613ba1565b8355505b6001600288020188555050505b505050505050565b6000613cb8826130a6565b613cc281856137b0565b9350613cd28185602086016130c2565b613cdb81612e72565b840191505092915050565b600061014082019050613cfc600083018d612e3e565b613d09602083018c613331565b613d16604083018b613331565b613d23606083018a612e3e565b613d306080830189613331565b613d3d60a0830188613331565b613d4a60c0830187612e3e565b613d5760e0830186612e3e565b613d65610100830185612e3e565b818103610120830152613d788184613cad565b90509b9a5050505050505050505050565b7f636f6e7472616374206973207061757365640000000000000000000000000000600082015250565b6000613dbf60128361364f565b9150613dca82613d89565b602082019050919050565b60006020820190508181036000830152613dee81613db2565b9050919050565b7f4d61726b65743a206f66666572206973206e6f742076616c6964000000000000600082015250565b6000613e2b601a8361364f565b9150613e3682613df5565b602082019050919050565b60006020820190508181036000830152613e5a81613e1e565b9050919050565b7f4d61726b65743a20796f7520617265206e6f7420656c696769626c6520746f2060008201527f6275792074686973206f66666572000000000000000000000000000000000000602082015250565b6000613ebd602e8361364f565b9150613ec882613e61565b604082019050919050565b60006020820190508181036000830152613eec81613eb0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613f2d82612da1565b9150613f3883612da1565b9250828201905080821115613f5057613f4f613ef3565b5b92915050565b6000613f6182612da1565b9150613f6c83612da1565b9250828203905081811115613f8457613f83613ef3565b5b92915050565b6000606082019050613f9f6000830186612e3e565b613fac6020830185613331565b613fb96040830184613331565b949350505050565b6000608082019050613fd66000830187612e3e565b613fe36020830186613331565b613ff06040830185613331565b81810360608301526140028184613cad565b905095945050505050565b60006040820190506140226000830185612e3e565b61402f6020830184612e3e565b9392505050565b600060608201905061404b6000830186612e3e565b6140586020830185612e3e565b818103604083015261406a8184613cad565b9050949350505050565b7f4d61726b65743a20696e73756666696369656e742076616c756520686173206260008201527f65656e2073656e74000000000000000000000000000000000000000000000000602082015250565b60006140d060288361364f565b91506140db82614074565b604082019050919050565b600060208201905081810360008301526140ff816140c3565b9050919050565b60006101008201905061411c600083018b612e3e565b614129602083018a613331565b6141366040830189613331565b6141436060830188612e3e565b6141506080830187613331565b61415d60a0830186612e3e565b61416a60c0830185612e3e565b61417760e0830184612e3e565b9998505050505050505050565b600060a0820190506141996000830188612e3e565b6141a66020830187613331565b6141b36040830186613331565b6141c06060830185612e3e565b6141cd6080830184612e3e565b9695505050505050565b600081905092915050565b60006141ed826130a6565b6141f781856141d7565b93506142078185602086016130c2565b80840191505092915050565b600061421f82846141e2565b915081905092915050565b600060408201905061423f6000830185613331565b61424c6020830184613331565b9392505050565b60008151905061426281612d3b565b92915050565b6000806040838503121561427f5761427e612c44565b5b600061428d85828601614253565b925050602061429e858286016136cc565b915050925092905056fea2646970667358221220e14a2e98bc5108ccb690395274df0bd52c475efd6ef0ad0427ee4d2ad157131b64736f6c63430008120033

Deployed Bytecode Sourcemap

8518:7380:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2087:223;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14639:800;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6612:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;326:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14294:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10200:890;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6552:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7526:146;;;;;;;;;;;;;:::i;:::-;;7841:240;;;;;;;;;;;;;:::i;:::-;;6585:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11098:2821;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8089:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14413:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2603:255;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8366:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6650:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13927:359;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2368:227;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7680:153;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2087:223;2189:4;2228:34;2213:49;;;:11;:49;;;;:89;;;;2266:36;2290:11;2266:23;:36::i;:::-;2213:89;2206:96;;2087:223;;;:::o;14639:800::-;7060:5;;;;;;;;;;;7046:19;;:10;:19;;;7038:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;14787:1:::1;14762:27;;:15;:27;;::::0;14759:673:::1;;14813:10;14805:28;;:36;14834:6;14805:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;14759:673;;;14881:2;14871:8;:12;;::::0;14868:564:::1;;14910:1;14902:6;:9:::0;14899:71:::1;;14929:15;14922:33;;;14964:4;14922:48;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14913:57;;14899:71;14992:15;14985:32;;;15018:10;15030:6;14985:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14868:564;;;15077:3;15067:8;:13;;::::0;15064:368:::1;;15104:15;15096:41;;;15146:4;15153:10;15165:7;15096:77;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;15064:368;;;15213:4;15203:8;:14;;::::0;15200:232:::1;;15244:1;15236:6;:9:::0;15233:82:::1;;15265:15;15256:35;;;15300:4;15307:7;15256:59;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15247:68;;15233:82;15339:15;15330:42;;;15381:4;15388:10;15400:7;15409:6;15330:90;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;15200:232;15064:368;14868:564;14759:673;14639:800:::0;;;;:::o;6612:31::-;;;;;;;;;;;;;:::o;326:164::-;426:6;452:30;;;445:37;;326:164;;;;;;:::o;14294:111::-;14350:12;;:::i;:::-;14381:6;:16;14388:8;14381:16;;;;;;;;;;;14374:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14294:111;;;:::o;10200:890::-;10449:16;7060:5;;;;;;;;;;;7046:19;;:10;:19;;;7038:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;10478:19:::1;:7;:17;:19::i;:::-;10522:1;10516:5;:7;10508:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;10590:1;10585:3;:6;;10577:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;10650:5;10646:3;:9;10638:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;10739:128;;;;;;;;10745:10;10739:128;;;;;;10757:10;10739:128;;;;10769:6;10739:128;;;;10777:19;10739:128;;;;;;10798:5;10739:128;;;;10805:3;10739:128;;;;10810:6;10739:128;;;;;;10818:5;10739:128;;;;;;10825:15;10739:128;;;;;;10842:12;10739:128;;;;10856:10;10739:128;;::::0;10711:6:::1;:25;10718:17;:7;:15;:17::i;:::-;10711:25;;;;;;;;;;;:156;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;10910:17;:7;:15;:17::i;:::-;10885:162;10929:10;10941;10953:6;10961:19;10982:5;10989:3;10995:6;11003:5;11010:15;11036:10;10885:162;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;11065:17;:7;:15;:17::i;:::-;11058:24;;10200:890:::0;;;;;;;;;;;;:::o;6552:26::-;;;;;;;;;;;;:::o;7526:146::-;7060:5;;;;;;;;;;;7046:19;;:10;:19;;;7038:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;7632:1:::1;7596:39;;7617:5;;;;;;;;;;;7596:39;;;;;;;;;;;;7662:1;7646:5:::0;::::1;:18;;;;;;;;;;;;;;;;;;7526:146::o:0;7841:240::-;6949:6;;;;;;;;;;6948:7;6940:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;7920:16:::1;;;;;;;;;;;7906:30;;:10;:30;;;7898:39;;;::::0;::::1;;7981:16;;;;;;;;;;;7953:45;;7974:5;;;;;;;;;;;7953:45;;;;;;;;;;;;8017:16;;;;;;;;;;;8009:5;;:24;;;;;;;;;;;;;;;;;;8071:1;8044:16;;:29;;;;;;;;;;;;;;;;;;7841:240::o:0;6585:20::-;;;;;;;;;;;;;:::o;11098:2821::-;11162:18;11183:6;:16;11190:8;11183:16;;;;;;;;;;;11162:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11242:1;11218:26;;:5;:12;;;:26;;;11210:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;11309:10;11294:25;;:5;:11;;;:25;;;11286:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;11434:12;11410:20;;11389:5;:20;;;:41;;;;:::i;:::-;:57;;11381:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;11495:6;:16;11502:8;11495:16;;;;;;;;;;;;11488:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;11522:21;11558:23;11605:21;11643:5;:9;;;11629:5;:11;;;:23;;;;:::i;:::-;11605:47;;11676:5;:16;;;11668:43;;;9229:10;11712:11;;11668:56;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11665:738;;;11770:1;11743:5;:16;;;:23;:28;11740:316;;11812:5;:16;;;11791:45;;;11837:10;11849:5;:16;;;11867:5;:12;;;11791:89;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11740:316;;;11954:5;:16;;;11933:45;;;11979:10;11991:5;:16;;;12009:5;:12;;;12023:5;:16;;;11933:107;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11740:316;11665:738;;;12126:1;12099:5;:16;;;:23;:28;12096:296;;12167:5;:16;;;12147:44;;;12192:10;12204:5;:21;;;12147:79;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12096:296;;;12299:5;:16;;;12279:44;;;12324:10;12336:5;:21;;;12359:5;:16;;;12279:97;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12096:296;11665:738;12450:65;12465:5;:16;;;12483:5;:16;;;12501:13;12450:14;:65::i;:::-;12415:100;;;;;;;;12574:1;12539:37;;:5;:25;;;:37;;;12536:1180;;12599:5;:25;;;12592:46;;;12639:10;12651:5;:12;;;12679:13;12665;:27;;;;:::i;:::-;12592:101;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12728:1;12711:13;:18;12708:309;;12756:5;:25;;;12749:46;;;12796:10;12808:15;12825:13;12749:90;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12934:13;12907:5;:25;;;12863:138;;12890:15;12863:138;;;12878:10;12949:5;:16;;;12984:5;:16;;;12863:138;;;;;;;;:::i;:::-;;;;;;;;12708:309;13045:1;13034:5;:9;;;:12;13031:135;;13073:5;:25;;;13066:46;;;13113:10;13133:4;13140:5;:9;;;13066:84;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13031:135;12536:1180;;;13227:5;:11;;;13214:9;:24;;13206:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;13329:1;13315:13;13301;:27;;;;:::i;:::-;:29;13298:127;;;13358:5;:12;;;13350:30;;:59;13395:13;13381;:27;;;;:::i;:::-;13350:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13298:127;13458:1;13442:13;:17;13439:266;;;13487:15;13479:33;;:48;13513:13;13479:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13622:13;13595:5;:25;;;13551:138;;13578:15;13551:138;;;13566:10;13637:5;:16;;;13672:5;:16;;;13551:138;;;;;;;;:::i;:::-;;;;;;;;13439:266;12536:1180;13753:8;13731:180;13763:5;:16;;;13781:5;:16;;;13799:5;:12;;;13813:5;:25;;;13840:5;:11;;;13862:5;:12;;;13876:5;:11;;;13889:5;:21;;;13731:180;;;;;;;;;;;;;:::i;:::-;;;;;;;;11151:2768;;;;11098:2821;:::o;8089:269::-;7060:5;;;;;;;;;;;7046:19;;:10;:19;;;7038:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;8207:8:::1;8203:148;;;8265:4;8232:19;:30;8252:9;8232:30;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;8203:148;;;8309:19;:30;8329:9;8309:30;;;;;;;;;;;;;;;;8302:37;;;;;;;;;;;8203:148;8089:269:::0;;:::o;14413:127::-;7060:5;;;;;;;;;;;7046:19;;:10;:19;;;7038:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;14514:18:::1;14491:20;:41;;;;14413:127:::0;:::o;2603:255::-;2788:6;2814:36;;;2807:43;;2603:255;;;;;;;:::o;8366:145::-;7060:5;;;;;;;;;;;7046:19;;:10;:19;;;7038:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;8435:7:::1;8426:6;::::0;:16:::1;;;;;;;;;;;;;;;;;;8457:6;::::0;::::1;;;;;;;;8453:51;;;8485:7;;;;;;;;;;8453:51;8366:145:::0;:::o;6650:51::-;;;;;;;;;;;;;;;;;;;;;;:::o;13927:359::-;7060:5;;;;;;;;;;;7046:19;;:10;:19;;;7038:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;14036:1:::1;14001:37;;:6;:16;14008:8;14001:16;;;;;;;;;;;:23;;;;;;;;;;;;:37;;::::0;13993:76:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;14080:18;14101:6;:16;14108:8;14101:16;;;;;;;;;;;14080:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;14135:6;:16;14142:8;14135:16;;;;;;;;;;;;14128:23:::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;14192:8;14167:111;14202:5;:16;;;14220:5;:16;;;14238:5;:12;;;14252:5;:12;;;14266:5;:11;;;14167:111;;;;;;;;;;:::i;:::-;;;;;;;;13982:304;13927:359:::0;:::o;2368:227::-;2530:6;2556:31;;;2549:38;;2368:227;;;;;;;:::o;7680:153::-;7060:5;;;;;;;;;;;7046:19;;:10;:19;;;7038:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;7783:1:::1;7762:23;;:9;:23;;::::0;7754:32:::1;;;::::0;::::1;;7816:9;7797:16;;:28;;;;;;;;;;;;;;;;;;7680:153:::0;:::o;1393:157::-;1478:4;1517:25;1502:40;;;:11;:40;;;;1495:47;;1393:157;;;:::o;6046:127::-;6153:1;6135:7;:14;;;:19;;;;;;;;;;;6046:127;:::o;5924:114::-;5989:7;6016;:14;;;6009:21;;5924:114;;;:::o;15447:448::-;15550:7;15559;15579:14;15595:21;15620:15;:26;;9338:10;15699:11;;15647:64;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15620:92;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15578:134;;;;15726:9;:41;;;;;15750:8;15739:28;;;;;;;;;;;;:::i;:::-;15726:41;15723:132;;;15799:15;15790:37;;;15828:7;15837:5;15790:53;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15783:60;;;;;;;;15723:132;15881:1;15885;15865:22;;;;;;15447:448;;;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:126::-;1555:7;1595:42;1588:5;1584:54;1573:65;;1518:126;;;:::o;1650:96::-;1687:7;1716:24;1734:5;1716:24;:::i;:::-;1705:35;;1650:96;;;:::o;1752:122::-;1825:24;1843:5;1825:24;:::i;:::-;1818:5;1815:35;1805:63;;1864:1;1861;1854:12;1805:63;1752:122;:::o;1880:139::-;1926:5;1964:6;1951:20;1942:29;;1980:33;2007:5;1980:33;:::i;:::-;1880:139;;;;:::o;2025:89::-;2061:7;2101:6;2094:5;2090:18;2079:29;;2025:89;;;:::o;2120:120::-;2192:23;2209:5;2192:23;:::i;:::-;2185:5;2182:34;2172:62;;2230:1;2227;2220:12;2172:62;2120:120;:::o;2246:137::-;2291:5;2329:6;2316:20;2307:29;;2345:32;2371:5;2345:32;:::i;:::-;2246:137;;;;:::o;2389:77::-;2426:7;2455:5;2444:16;;2389:77;;;:::o;2472:122::-;2545:24;2563:5;2545:24;:::i;:::-;2538:5;2535:35;2525:63;;2584:1;2581;2574:12;2525:63;2472:122;:::o;2600:139::-;2646:5;2684:6;2671:20;2662:29;;2700:33;2727:5;2700:33;:::i;:::-;2600:139;;;;:::o;2745:763::-;2830:6;2838;2846;2854;2903:3;2891:9;2882:7;2878:23;2874:33;2871:120;;;2910:79;;:::i;:::-;2871:120;3030:1;3055:53;3100:7;3091:6;3080:9;3076:22;3055:53;:::i;:::-;3045:63;;3001:117;3157:2;3183:52;3227:7;3218:6;3207:9;3203:22;3183:52;:::i;:::-;3173:62;;3128:117;3284:2;3310:53;3355:7;3346:6;3335:9;3331:22;3310:53;:::i;:::-;3300:63;;3255:118;3412:2;3438:53;3483:7;3474:6;3463:9;3459:22;3438:53;:::i;:::-;3428:63;;3383:118;2745:763;;;;;;;:::o;3514:118::-;3601:24;3619:5;3601:24;:::i;:::-;3596:3;3589:37;3514:118;;:::o;3638:222::-;3731:4;3769:2;3758:9;3754:18;3746:26;;3782:71;3850:1;3839:9;3835:17;3826:6;3782:71;:::i;:::-;3638:222;;;;:::o;3866:117::-;3975:1;3972;3965:12;3989:117;4098:1;4095;4088:12;4112:102;4153:6;4204:2;4200:7;4195:2;4188:5;4184:14;4180:28;4170:38;;4112:102;;;:::o;4220:180::-;4268:77;4265:1;4258:88;4365:4;4362:1;4355:15;4389:4;4386:1;4379:15;4406:281;4489:27;4511:4;4489:27;:::i;:::-;4481:6;4477:40;4619:6;4607:10;4604:22;4583:18;4571:10;4568:34;4565:62;4562:88;;;4630:18;;:::i;:::-;4562:88;4670:10;4666:2;4659:22;4449:238;4406:281;;:::o;4693:129::-;4727:6;4754:20;;:::i;:::-;4744:30;;4783:33;4811:4;4803:6;4783:33;:::i;:::-;4693:129;;;:::o;4828:307::-;4889:4;4979:18;4971:6;4968:30;4965:56;;;5001:18;;:::i;:::-;4965:56;5039:29;5061:6;5039:29;:::i;:::-;5031:37;;5123:4;5117;5113:15;5105:23;;4828:307;;;:::o;5141:146::-;5238:6;5233:3;5228;5215:30;5279:1;5270:6;5265:3;5261:16;5254:27;5141:146;;;:::o;5293:423::-;5370:5;5395:65;5411:48;5452:6;5411:48;:::i;:::-;5395:65;:::i;:::-;5386:74;;5483:6;5476:5;5469:21;5521:4;5514:5;5510:16;5559:3;5550:6;5545:3;5541:16;5538:25;5535:112;;;5566:79;;:::i;:::-;5535:112;5656:54;5703:6;5698:3;5693;5656:54;:::i;:::-;5376:340;5293:423;;;;;:::o;5735:338::-;5790:5;5839:3;5832:4;5824:6;5820:17;5816:27;5806:122;;5847:79;;:::i;:::-;5806:122;5964:6;5951:20;5989:78;6063:3;6055:6;6048:4;6040:6;6036:17;5989:78;:::i;:::-;5980:87;;5796:277;5735:338;;;;:::o;6079:943::-;6174:6;6182;6190;6198;6247:3;6235:9;6226:7;6222:23;6218:33;6215:120;;;6254:79;;:::i;:::-;6215:120;6374:1;6399:53;6444:7;6435:6;6424:9;6420:22;6399:53;:::i;:::-;6389:63;;6345:117;6501:2;6527:53;6572:7;6563:6;6552:9;6548:22;6527:53;:::i;:::-;6517:63;;6472:118;6629:2;6655:53;6700:7;6691:6;6680:9;6676:22;6655:53;:::i;:::-;6645:63;;6600:118;6785:2;6774:9;6770:18;6757:32;6816:18;6808:6;6805:30;6802:117;;;6838:79;;:::i;:::-;6802:117;6943:62;6997:7;6988:6;6977:9;6973:22;6943:62;:::i;:::-;6933:72;;6728:287;6079:943;;;;;;;:::o;7028:115::-;7113:23;7130:5;7113:23;:::i;:::-;7108:3;7101:36;7028:115;;:::o;7149:218::-;7240:4;7278:2;7267:9;7263:18;7255:26;;7291:69;7357:1;7346:9;7342:17;7333:6;7291:69;:::i;:::-;7149:218;;;;:::o;7373:329::-;7432:6;7481:2;7469:9;7460:7;7456:23;7452:32;7449:119;;;7487:79;;:::i;:::-;7449:119;7607:1;7632:53;7677:7;7668:6;7657:9;7653:22;7632:53;:::i;:::-;7622:63;;7578:117;7373:329;;;;:::o;7708:108::-;7785:24;7803:5;7785:24;:::i;:::-;7780:3;7773:37;7708:108;;:::o;7822:::-;7899:24;7917:5;7899:24;:::i;:::-;7894:3;7887:37;7822:108;;:::o;7936:98::-;7987:6;8021:5;8015:12;8005:22;;7936:98;;;:::o;8040:158::-;8113:11;8147:6;8142:3;8135:19;8187:4;8182:3;8178:14;8163:29;;8040:158;;;;:::o;8204:246::-;8285:1;8295:113;8309:6;8306:1;8303:13;8295:113;;;8394:1;8389:3;8385:11;8379:18;8375:1;8370:3;8366:11;8359:39;8331:2;8328:1;8324:10;8319:15;;8295:113;;;8442:1;8433:6;8428:3;8424:16;8417:27;8266:184;8204:246;;;:::o;8456:353::-;8532:3;8560:38;8592:5;8560:38;:::i;:::-;8614:60;8667:6;8662:3;8614:60;:::i;:::-;8607:67;;8683:65;8741:6;8736:3;8729:4;8722:5;8718:16;8683:65;:::i;:::-;8773:29;8795:6;8773:29;:::i;:::-;8768:3;8764:39;8757:46;;8536:273;8456:353;;;;:::o;8879:2237::-;8992:3;9028:6;9023:3;9019:16;9123:4;9116:5;9112:16;9106:23;9142:63;9199:4;9194:3;9190:14;9176:12;9142:63;:::i;:::-;9045:170;9303:4;9296:5;9292:16;9286:23;9322:63;9379:4;9374:3;9370:14;9356:12;9322:63;:::i;:::-;9225:170;9479:4;9472:5;9468:16;9462:23;9498:63;9555:4;9550:3;9546:14;9532:12;9498:63;:::i;:::-;9405:166;9668:4;9661:5;9657:16;9651:23;9687:63;9744:4;9739:3;9735:14;9721:12;9687:63;:::i;:::-;9581:179;9843:4;9836:5;9832:16;9826:23;9862:63;9919:4;9914:3;9910:14;9896:12;9862:63;:::i;:::-;9770:165;10016:4;10009:5;10005:16;9999:23;10035:63;10092:4;10087:3;10083:14;10069:12;10035:63;:::i;:::-;9945:163;10192:4;10185:5;10181:16;10175:23;10211:63;10268:4;10263:3;10259:14;10245:12;10211:63;:::i;:::-;10118:166;10367:4;10360:5;10356:16;10350:23;10386:63;10443:4;10438:3;10434:14;10420:12;10386:63;:::i;:::-;10294:165;10552:6;10545:5;10541:18;10535:25;10573:65;10630:6;10625:3;10621:16;10607:12;10573:65;:::i;:::-;10469:179;10740:6;10733:5;10729:18;10723:25;10761:65;10818:6;10813:3;10809:16;10795:12;10761:65;:::i;:::-;10658:178;10924:6;10917:5;10913:18;10907:25;10981:3;10975:4;10971:14;10962:6;10957:3;10953:16;10946:40;11007:71;11073:4;11059:12;11007:71;:::i;:::-;10999:79;;10846:243;11106:4;11099:11;;8997:2119;8879:2237;;;;:::o;11122:361::-;11259:4;11297:2;11286:9;11282:18;11274:26;;11346:9;11340:4;11336:20;11332:1;11321:9;11317:17;11310:47;11374:102;11471:4;11462:6;11374:102;:::i;:::-;11366:110;;11122:361;;;;:::o;11489:1819::-;11638:6;11646;11654;11662;11670;11678;11686;11694;11702;11710;11759:3;11747:9;11738:7;11734:23;11730:33;11727:120;;;11766:79;;:::i;:::-;11727:120;11886:1;11911:53;11956:7;11947:6;11936:9;11932:22;11911:53;:::i;:::-;11901:63;;11857:117;12013:2;12039:53;12084:7;12075:6;12064:9;12060:22;12039:53;:::i;:::-;12029:63;;11984:118;12141:2;12167:53;12212:7;12203:6;12192:9;12188:22;12167:53;:::i;:::-;12157:63;;12112:118;12269:2;12295:53;12340:7;12331:6;12320:9;12316:22;12295:53;:::i;:::-;12285:63;;12240:118;12397:3;12424:53;12469:7;12460:6;12449:9;12445:22;12424:53;:::i;:::-;12414:63;;12368:119;12526:3;12553:53;12598:7;12589:6;12578:9;12574:22;12553:53;:::i;:::-;12543:63;;12497:119;12655:3;12682:53;12727:7;12718:6;12707:9;12703:22;12682:53;:::i;:::-;12672:63;;12626:119;12784:3;12811:53;12856:7;12847:6;12836:9;12832:22;12811:53;:::i;:::-;12801:63;;12755:119;12913:3;12940:53;12985:7;12976:6;12965:9;12961:22;12940:53;:::i;:::-;12930:63;;12884:119;13070:3;13059:9;13055:19;13042:33;13102:18;13094:6;13091:30;13088:117;;;13124:79;;:::i;:::-;13088:117;13229:62;13283:7;13274:6;13263:9;13259:22;13229:62;:::i;:::-;13219:72;;13013:288;11489:1819;;;;;;;;;;;;;:::o;13314:118::-;13401:24;13419:5;13401:24;:::i;:::-;13396:3;13389:37;13314:118;;:::o;13438:222::-;13531:4;13569:2;13558:9;13554:18;13546:26;;13582:71;13650:1;13639:9;13635:17;13626:6;13582:71;:::i;:::-;13438:222;;;;:::o;13666:116::-;13736:21;13751:5;13736:21;:::i;:::-;13729:5;13726:32;13716:60;;13772:1;13769;13762:12;13716:60;13666:116;:::o;13788:133::-;13831:5;13869:6;13856:20;13847:29;;13885:30;13909:5;13885:30;:::i;:::-;13788:133;;;;:::o;13927:468::-;13992:6;14000;14049:2;14037:9;14028:7;14024:23;14020:32;14017:119;;;14055:79;;:::i;:::-;14017:119;14175:1;14200:53;14245:7;14236:6;14225:9;14221:22;14200:53;:::i;:::-;14190:63;;14146:117;14302:2;14328:50;14370:7;14361:6;14350:9;14346:22;14328:50;:::i;:::-;14318:60;;14273:115;13927:468;;;;;:::o;14401:311::-;14478:4;14568:18;14560:6;14557:30;14554:56;;;14590:18;;:::i;:::-;14554:56;14640:4;14632:6;14628:17;14620:25;;14700:4;14694;14690:15;14682:23;;14401:311;;;:::o;14718:117::-;14827:1;14824;14817:12;14858:710;14954:5;14979:81;14995:64;15052:6;14995:64;:::i;:::-;14979:81;:::i;:::-;14970:90;;15080:5;15109:6;15102:5;15095:21;15143:4;15136:5;15132:16;15125:23;;15196:4;15188:6;15184:17;15176:6;15172:30;15225:3;15217:6;15214:15;15211:122;;;15244:79;;:::i;:::-;15211:122;15359:6;15342:220;15376:6;15371:3;15368:15;15342:220;;;15451:3;15480:37;15513:3;15501:10;15480:37;:::i;:::-;15475:3;15468:50;15547:4;15542:3;15538:14;15531:21;;15418:144;15402:4;15397:3;15393:14;15386:21;;15342:220;;;15346:21;14960:608;;14858:710;;;;;:::o;15591:370::-;15662:5;15711:3;15704:4;15696:6;15692:17;15688:27;15678:122;;15719:79;;:::i;:::-;15678:122;15836:6;15823:20;15861:94;15951:3;15943:6;15936:4;15928:6;15924:17;15861:94;:::i;:::-;15852:103;;15668:293;15591:370;;;;:::o;15967:1509::-;16121:6;16129;16137;16145;16153;16202:3;16190:9;16181:7;16177:23;16173:33;16170:120;;;16209:79;;:::i;:::-;16170:120;16329:1;16354:53;16399:7;16390:6;16379:9;16375:22;16354:53;:::i;:::-;16344:63;;16300:117;16456:2;16482:53;16527:7;16518:6;16507:9;16503:22;16482:53;:::i;:::-;16472:63;;16427:118;16612:2;16601:9;16597:18;16584:32;16643:18;16635:6;16632:30;16629:117;;;16665:79;;:::i;:::-;16629:117;16770:78;16840:7;16831:6;16820:9;16816:22;16770:78;:::i;:::-;16760:88;;16555:303;16925:2;16914:9;16910:18;16897:32;16956:18;16948:6;16945:30;16942:117;;;16978:79;;:::i;:::-;16942:117;17083:78;17153:7;17144:6;17133:9;17129:22;17083:78;:::i;:::-;17073:88;;16868:303;17238:3;17227:9;17223:19;17210:33;17270:18;17262:6;17259:30;17256:117;;;17292:79;;:::i;:::-;17256:117;17397:62;17451:7;17442:6;17431:9;17427:22;17397:62;:::i;:::-;17387:72;;17181:288;15967:1509;;;;;;;;:::o;17482:323::-;17538:6;17587:2;17575:9;17566:7;17562:23;17558:32;17555:119;;;17593:79;;:::i;:::-;17555:119;17713:1;17738:50;17780:7;17771:6;17760:9;17756:22;17738:50;:::i;:::-;17728:60;;17684:114;17482:323;;;;:::o;17811:329::-;17870:6;17919:2;17907:9;17898:7;17894:23;17890:32;17887:119;;;17925:79;;:::i;:::-;17887:119;18045:1;18070:53;18115:7;18106:6;18095:9;18091:22;18070:53;:::i;:::-;18060:63;;18016:117;17811:329;;;;:::o;18146:1089::-;18250:6;18258;18266;18274;18282;18331:3;18319:9;18310:7;18306:23;18302:33;18299:120;;;18338:79;;:::i;:::-;18299:120;18458:1;18483:53;18528:7;18519:6;18508:9;18504:22;18483:53;:::i;:::-;18473:63;;18429:117;18585:2;18611:53;18656:7;18647:6;18636:9;18632:22;18611:53;:::i;:::-;18601:63;;18556:118;18713:2;18739:53;18784:7;18775:6;18764:9;18760:22;18739:53;:::i;:::-;18729:63;;18684:118;18841:2;18867:53;18912:7;18903:6;18892:9;18888:22;18867:53;:::i;:::-;18857:63;;18812:118;18997:3;18986:9;18982:19;18969:33;19029:18;19021:6;19018:30;19015:117;;;19051:79;;:::i;:::-;19015:117;19156:62;19210:7;19201:6;19190:9;19186:22;19156:62;:::i;:::-;19146:72;;18940:288;18146:1089;;;;;;;;:::o;19241:169::-;19325:11;19359:6;19354:3;19347:19;19399:4;19394:3;19390:14;19375:29;;19241:169;;;;:::o;19416:172::-;19556:24;19552:1;19544:6;19540:14;19533:48;19416:172;:::o;19594:366::-;19736:3;19757:67;19821:2;19816:3;19757:67;:::i;:::-;19750:74;;19833:93;19922:3;19833:93;:::i;:::-;19951:2;19946:3;19942:12;19935:19;;19594:366;;;:::o;19966:419::-;20132:4;20170:2;20159:9;20155:18;20147:26;;20219:9;20213:4;20209:20;20205:1;20194:9;20190:17;20183:47;20247:131;20373:4;20247:131;:::i;:::-;20239:139;;19966:419;;;:::o;20391:143::-;20448:5;20479:6;20473:13;20464:22;;20495:33;20522:5;20495:33;:::i;:::-;20391:143;;;;:::o;20540:351::-;20610:6;20659:2;20647:9;20638:7;20634:23;20630:32;20627:119;;;20665:79;;:::i;:::-;20627:119;20785:1;20810:64;20866:7;20857:6;20846:9;20842:22;20810:64;:::i;:::-;20800:74;;20756:128;20540:351;;;;:::o;20897:332::-;21018:4;21056:2;21045:9;21041:18;21033:26;;21069:71;21137:1;21126:9;21122:17;21113:6;21069:71;:::i;:::-;21150:72;21218:2;21207:9;21203:18;21194:6;21150:72;:::i;:::-;20897:332;;;;;:::o;21235:137::-;21289:5;21320:6;21314:13;21305:22;;21336:30;21360:5;21336:30;:::i;:::-;21235:137;;;;:::o;21378:345::-;21445:6;21494:2;21482:9;21473:7;21469:23;21465:32;21462:119;;;21500:79;;:::i;:::-;21462:119;21620:1;21645:61;21698:7;21689:6;21678:9;21674:22;21645:61;:::i;:::-;21635:71;;21591:125;21378:345;;;;:::o;21729:442::-;21878:4;21916:2;21905:9;21901:18;21893:26;;21929:71;21997:1;21986:9;21982:17;21973:6;21929:71;:::i;:::-;22010:72;22078:2;22067:9;22063:18;22054:6;22010:72;:::i;:::-;22092;22160:2;22149:9;22145:18;22136:6;22092:72;:::i;:::-;21729:442;;;;;;:::o;22177:168::-;22260:11;22294:6;22289:3;22282:19;22334:4;22329:3;22325:14;22310:29;;22177:168;;;;:::o;22351:114::-;;:::o;22471:362::-;22612:3;22633:65;22696:1;22691:3;22633:65;:::i;:::-;22626:72;;22707:93;22796:3;22707:93;:::i;:::-;22825:1;22820:3;22816:11;22809:18;;22471:362;;;:::o;22839:859::-;23116:4;23154:3;23143:9;23139:19;23131:27;;23168:71;23236:1;23225:9;23221:17;23212:6;23168:71;:::i;:::-;23249:72;23317:2;23306:9;23302:18;23293:6;23249:72;:::i;:::-;23331;23399:2;23388:9;23384:18;23375:6;23331:72;:::i;:::-;23413;23481:2;23470:9;23466:18;23457:6;23413:72;:::i;:::-;23533:9;23527:4;23523:20;23517:3;23506:9;23502:19;23495:49;23561:130;23686:4;23561:130;:::i;:::-;23553:138;;22839:859;;;;;;;:::o;23704:180::-;23752:77;23749:1;23742:88;23849:4;23846:1;23839:15;23873:4;23870:1;23863:15;23890:320;23934:6;23971:1;23965:4;23961:12;23951:22;;24018:1;24012:4;24008:12;24039:18;24029:81;;24095:4;24087:6;24083:17;24073:27;;24029:81;24157:2;24149:6;24146:14;24126:18;24123:38;24120:84;;24176:18;;:::i;:::-;24120:84;23941:269;23890:320;;;:::o;24216:225::-;24356:34;24352:1;24344:6;24340:14;24333:58;24425:8;24420:2;24412:6;24408:15;24401:33;24216:225;:::o;24447:366::-;24589:3;24610:67;24674:2;24669:3;24610:67;:::i;:::-;24603:74;;24686:93;24775:3;24686:93;:::i;:::-;24804:2;24799:3;24795:12;24788:19;;24447:366;;;:::o;24819:419::-;24985:4;25023:2;25012:9;25008:18;25000:26;;25072:9;25066:4;25062:20;25058:1;25047:9;25043:17;25036:47;25100:131;25226:4;25100:131;:::i;:::-;25092:139;;24819:419;;;:::o;25244:181::-;25384:33;25380:1;25372:6;25368:14;25361:57;25244:181;:::o;25431:366::-;25573:3;25594:67;25658:2;25653:3;25594:67;:::i;:::-;25587:74;;25670:93;25759:3;25670:93;:::i;:::-;25788:2;25783:3;25779:12;25772:19;;25431:366;;;:::o;25803:419::-;25969:4;26007:2;25996:9;25992:18;25984:26;;26056:9;26050:4;26046:20;26042:1;26031:9;26027:17;26020:47;26084:131;26210:4;26084:131;:::i;:::-;26076:139;;25803:419;;;:::o;26228:227::-;26368:34;26364:1;26356:6;26352:14;26345:58;26437:10;26432:2;26424:6;26420:15;26413:35;26228:227;:::o;26461:366::-;26603:3;26624:67;26688:2;26683:3;26624:67;:::i;:::-;26617:74;;26700:93;26789:3;26700:93;:::i;:::-;26818:2;26813:3;26809:12;26802:19;;26461:366;;;:::o;26833:419::-;26999:4;27037:2;27026:9;27022:18;27014:26;;27086:9;27080:4;27076:20;27072:1;27061:9;27057:17;27050:47;27114:131;27240:4;27114:131;:::i;:::-;27106:139;;26833:419;;;:::o;27258:140::-;27306:4;27329:3;27321:11;;27352:3;27349:1;27342:14;27386:4;27383:1;27373:18;27365:26;;27258:140;;;:::o;27404:93::-;27441:6;27488:2;27483;27476:5;27472:14;27468:23;27458:33;;27404:93;;;:::o;27503:107::-;27547:8;27597:5;27591:4;27587:16;27566:37;;27503:107;;;;:::o;27616:393::-;27685:6;27735:1;27723:10;27719:18;27758:97;27788:66;27777:9;27758:97;:::i;:::-;27876:39;27906:8;27895:9;27876:39;:::i;:::-;27864:51;;27948:4;27944:9;27937:5;27933:21;27924:30;;27997:4;27987:8;27983:19;27976:5;27973:30;27963:40;;27692:317;;27616:393;;;;;:::o;28015:60::-;28043:3;28064:5;28057:12;;28015:60;;;:::o;28081:142::-;28131:9;28164:53;28182:34;28191:24;28209:5;28191:24;:::i;:::-;28182:34;:::i;:::-;28164:53;:::i;:::-;28151:66;;28081:142;;;:::o;28229:75::-;28272:3;28293:5;28286:12;;28229:75;;;:::o;28310:269::-;28420:39;28451:7;28420:39;:::i;:::-;28481:91;28530:41;28554:16;28530:41;:::i;:::-;28522:6;28515:4;28509:11;28481:91;:::i;:::-;28475:4;28468:105;28386:193;28310:269;;;:::o;28585:73::-;28630:3;28585:73;:::o;28664:189::-;28741:32;;:::i;:::-;28782:65;28840:6;28832;28826:4;28782:65;:::i;:::-;28717:136;28664:189;;:::o;28859:186::-;28919:120;28936:3;28929:5;28926:14;28919:120;;;28990:39;29027:1;29020:5;28990:39;:::i;:::-;28963:1;28956:5;28952:13;28943:22;;28919:120;;;28859:186;;:::o;29051:541::-;29151:2;29146:3;29143:11;29140:445;;;29185:37;29216:5;29185:37;:::i;:::-;29268:29;29286:10;29268:29;:::i;:::-;29258:8;29254:44;29451:2;29439:10;29436:18;29433:49;;;29472:8;29457:23;;29433:49;29495:80;29551:22;29569:3;29551:22;:::i;:::-;29541:8;29537:37;29524:11;29495:80;:::i;:::-;29155:430;;29140:445;29051:541;;;:::o;29598:117::-;29652:8;29702:5;29696:4;29692:16;29671:37;;29598:117;;;;:::o;29721:169::-;29765:6;29798:51;29846:1;29842:6;29834:5;29831:1;29827:13;29798:51;:::i;:::-;29794:56;29879:4;29873;29869:15;29859:25;;29772:118;29721:169;;;;:::o;29895:295::-;29971:4;30117:29;30142:3;30136:4;30117:29;:::i;:::-;30109:37;;30179:3;30176:1;30172:11;30166:4;30163:21;30155:29;;29895:295;;;;:::o;30195:1390::-;30310:36;30342:3;30310:36;:::i;:::-;30411:18;30403:6;30400:30;30397:56;;;30433:18;;:::i;:::-;30397:56;30477:38;30509:4;30503:11;30477:38;:::i;:::-;30562:66;30621:6;30613;30607:4;30562:66;:::i;:::-;30655:1;30679:4;30666:17;;30711:2;30703:6;30700:14;30728:1;30723:617;;;;31384:1;31401:6;31398:77;;;31450:9;31445:3;31441:19;31435:26;31426:35;;31398:77;31501:67;31561:6;31554:5;31501:67;:::i;:::-;31495:4;31488:81;31357:222;30693:886;;30723:617;30775:4;30771:9;30763:6;30759:22;30809:36;30840:4;30809:36;:::i;:::-;30867:1;30881:208;30895:7;30892:1;30889:14;30881:208;;;30974:9;30969:3;30965:19;30959:26;30951:6;30944:42;31025:1;31017:6;31013:14;31003:24;;31072:2;31061:9;31057:18;31044:31;;30918:4;30915:1;30911:12;30906:17;;30881:208;;;31117:6;31108:7;31105:19;31102:179;;;31175:9;31170:3;31166:19;31160:26;31218:48;31260:4;31252:6;31248:17;31237:9;31218:48;:::i;:::-;31210:6;31203:64;31125:156;31102:179;31327:1;31323;31315:6;31311:14;31307:22;31301:4;31294:36;30730:610;;;30693:886;;30285:1300;;;30195:1390;;:::o;31591:373::-;31677:3;31705:38;31737:5;31705:38;:::i;:::-;31759:70;31822:6;31817:3;31759:70;:::i;:::-;31752:77;;31838:65;31896:6;31891:3;31884:4;31877:5;31873:16;31838:65;:::i;:::-;31928:29;31950:6;31928:29;:::i;:::-;31923:3;31919:39;31912:46;;31681:283;31591:373;;;;:::o;31970:1306::-;32333:4;32371:3;32360:9;32356:19;32348:27;;32385:71;32453:1;32442:9;32438:17;32429:6;32385:71;:::i;:::-;32466:72;32534:2;32523:9;32519:18;32510:6;32466:72;:::i;:::-;32548;32616:2;32605:9;32601:18;32592:6;32548:72;:::i;:::-;32630;32698:2;32687:9;32683:18;32674:6;32630:72;:::i;:::-;32712:73;32780:3;32769:9;32765:19;32756:6;32712:73;:::i;:::-;32795;32863:3;32852:9;32848:19;32839:6;32795:73;:::i;:::-;32878;32946:3;32935:9;32931:19;32922:6;32878:73;:::i;:::-;32961;33029:3;33018:9;33014:19;33005:6;32961:73;:::i;:::-;33044;33112:3;33101:9;33097:19;33088:6;33044:73;:::i;:::-;33165:9;33159:4;33155:20;33149:3;33138:9;33134:19;33127:49;33193:76;33264:4;33255:6;33193:76;:::i;:::-;33185:84;;31970:1306;;;;;;;;;;;;;:::o;33282:168::-;33422:20;33418:1;33410:6;33406:14;33399:44;33282:168;:::o;33456:366::-;33598:3;33619:67;33683:2;33678:3;33619:67;:::i;:::-;33612:74;;33695:93;33784:3;33695:93;:::i;:::-;33813:2;33808:3;33804:12;33797:19;;33456:366;;;:::o;33828:419::-;33994:4;34032:2;34021:9;34017:18;34009:26;;34081:9;34075:4;34071:20;34067:1;34056:9;34052:17;34045:47;34109:131;34235:4;34109:131;:::i;:::-;34101:139;;33828:419;;;:::o;34253:176::-;34393:28;34389:1;34381:6;34377:14;34370:52;34253:176;:::o;34435:366::-;34577:3;34598:67;34662:2;34657:3;34598:67;:::i;:::-;34591:74;;34674:93;34763:3;34674:93;:::i;:::-;34792:2;34787:3;34783:12;34776:19;;34435:366;;;:::o;34807:419::-;34973:4;35011:2;35000:9;34996:18;34988:26;;35060:9;35054:4;35050:20;35046:1;35035:9;35031:17;35024:47;35088:131;35214:4;35088:131;:::i;:::-;35080:139;;34807:419;;;:::o;35232:233::-;35372:34;35368:1;35360:6;35356:14;35349:58;35441:16;35436:2;35428:6;35424:15;35417:41;35232:233;:::o;35471:366::-;35613:3;35634:67;35698:2;35693:3;35634:67;:::i;:::-;35627:74;;35710:93;35799:3;35710:93;:::i;:::-;35828:2;35823:3;35819:12;35812:19;;35471:366;;;:::o;35843:419::-;36009:4;36047:2;36036:9;36032:18;36024:26;;36096:9;36090:4;36086:20;36082:1;36071:9;36067:17;36060:47;36124:131;36250:4;36124:131;:::i;:::-;36116:139;;35843:419;;;:::o;36268:180::-;36316:77;36313:1;36306:88;36413:4;36410:1;36403:15;36437:4;36434:1;36427:15;36454:191;36494:3;36513:20;36531:1;36513:20;:::i;:::-;36508:25;;36547:20;36565:1;36547:20;:::i;:::-;36542:25;;36590:1;36587;36583:9;36576:16;;36611:3;36608:1;36605:10;36602:36;;;36618:18;;:::i;:::-;36602:36;36454:191;;;;:::o;36651:194::-;36691:4;36711:20;36729:1;36711:20;:::i;:::-;36706:25;;36745:20;36763:1;36745:20;:::i;:::-;36740:25;;36789:1;36786;36782:9;36774:17;;36813:1;36807:4;36804:11;36801:37;;;36818:18;;:::i;:::-;36801:37;36651:194;;;;:::o;36851:442::-;37000:4;37038:2;37027:9;37023:18;37015:26;;37051:71;37119:1;37108:9;37104:17;37095:6;37051:71;:::i;:::-;37132:72;37200:2;37189:9;37185:18;37176:6;37132:72;:::i;:::-;37214;37282:2;37271:9;37267:18;37258:6;37214:72;:::i;:::-;36851:442;;;;;;:::o;37299:640::-;37494:4;37532:3;37521:9;37517:19;37509:27;;37546:71;37614:1;37603:9;37599:17;37590:6;37546:71;:::i;:::-;37627:72;37695:2;37684:9;37680:18;37671:6;37627:72;:::i;:::-;37709;37777:2;37766:9;37762:18;37753:6;37709:72;:::i;:::-;37828:9;37822:4;37818:20;37813:2;37802:9;37798:18;37791:48;37856:76;37927:4;37918:6;37856:76;:::i;:::-;37848:84;;37299:640;;;;;;;:::o;37945:332::-;38066:4;38104:2;38093:9;38089:18;38081:26;;38117:71;38185:1;38174:9;38170:17;38161:6;38117:71;:::i;:::-;38198:72;38266:2;38255:9;38251:18;38242:6;38198:72;:::i;:::-;37945:332;;;;;:::o;38283:529::-;38450:4;38488:2;38477:9;38473:18;38465:26;;38501:71;38569:1;38558:9;38554:17;38545:6;38501:71;:::i;:::-;38582:72;38650:2;38639:9;38635:18;38626:6;38582:72;:::i;:::-;38701:9;38695:4;38691:20;38686:2;38675:9;38671:18;38664:48;38729:76;38800:4;38791:6;38729:76;:::i;:::-;38721:84;;38283:529;;;;;;:::o;38818:227::-;38958:34;38954:1;38946:6;38942:14;38935:58;39027:10;39022:2;39014:6;39010:15;39003:35;38818:227;:::o;39051:366::-;39193:3;39214:67;39278:2;39273:3;39214:67;:::i;:::-;39207:74;;39290:93;39379:3;39290:93;:::i;:::-;39408:2;39403:3;39399:12;39392:19;;39051:366;;;:::o;39423:419::-;39589:4;39627:2;39616:9;39612:18;39604:26;;39676:9;39670:4;39666:20;39662:1;39651:9;39647:17;39640:47;39704:131;39830:4;39704:131;:::i;:::-;39696:139;;39423:419;;;:::o;39848:997::-;40137:4;40175:3;40164:9;40160:19;40152:27;;40189:71;40257:1;40246:9;40242:17;40233:6;40189:71;:::i;:::-;40270:72;40338:2;40327:9;40323:18;40314:6;40270:72;:::i;:::-;40352;40420:2;40409:9;40405:18;40396:6;40352:72;:::i;:::-;40434;40502:2;40491:9;40487:18;40478:6;40434:72;:::i;:::-;40516:73;40584:3;40573:9;40569:19;40560:6;40516:73;:::i;:::-;40599;40667:3;40656:9;40652:19;40643:6;40599:73;:::i;:::-;40682;40750:3;40739:9;40735:19;40726:6;40682:73;:::i;:::-;40765;40833:3;40822:9;40818:19;40809:6;40765:73;:::i;:::-;39848:997;;;;;;;;;;;:::o;40851:664::-;41056:4;41094:3;41083:9;41079:19;41071:27;;41108:71;41176:1;41165:9;41161:17;41152:6;41108:71;:::i;:::-;41189:72;41257:2;41246:9;41242:18;41233:6;41189:72;:::i;:::-;41271;41339:2;41328:9;41324:18;41315:6;41271:72;:::i;:::-;41353;41421:2;41410:9;41406:18;41397:6;41353:72;:::i;:::-;41435:73;41503:3;41492:9;41488:19;41479:6;41435:73;:::i;:::-;40851:664;;;;;;;;:::o;41521:147::-;41622:11;41659:3;41644:18;;41521:147;;;;:::o;41674:386::-;41778:3;41806:38;41838:5;41806:38;:::i;:::-;41860:88;41941:6;41936:3;41860:88;:::i;:::-;41853:95;;41957:65;42015:6;42010:3;42003:4;41996:5;41992:16;41957:65;:::i;:::-;42047:6;42042:3;42038:16;42031:23;;41782:278;41674:386;;;;:::o;42066:271::-;42196:3;42218:93;42307:3;42298:6;42218:93;:::i;:::-;42211:100;;42328:3;42321:10;;42066:271;;;;:::o;42343:332::-;42464:4;42502:2;42491:9;42487:18;42479:26;;42515:71;42583:1;42572:9;42568:17;42559:6;42515:71;:::i;:::-;42596:72;42664:2;42653:9;42649:18;42640:6;42596:72;:::i;:::-;42343:332;;;;;:::o;42681:143::-;42738:5;42769:6;42763:13;42754:22;;42785:33;42812:5;42785:33;:::i;:::-;42681:143;;;;:::o;42830:507::-;42909:6;42917;42966:2;42954:9;42945:7;42941:23;42937:32;42934:119;;;42972:79;;:::i;:::-;42934:119;43092:1;43117:64;43173:7;43164:6;43153:9;43149:22;43117:64;:::i;:::-;43107:74;;43063:128;43230:2;43256:64;43312:7;43303:6;43292:9;43288:22;43256:64;:::i;:::-;43246:74;;43201:129;42830:507;;;;;:::o

Swarm Source

ipfs://e14a2e98bc5108ccb690395274df0bd52c475efd6ef0ad0427ee4d2ad157131b

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.