ETH Price: $1,981.47 (-4.92%)

Contract

0xe61dd9cA7364225aFBFB79e15AD33864424e6aE4
 

Overview

ETH Balance

2,026.059351213853915404 ETH

Eth Value

$4,014,565.99 (@ $1,981.47/ETH)

Token Holdings

More Info

Private Name Tags

TokenTracker

Multichain Info

Transaction Hash
Method
Block
From
To
Withdraw Token245598682026-03-01 3:21:115 days ago1772335271IN
0xe61dd9cA...4424e6aE4
0 ETH0.000017360.12507141
Withdraw Token245598682026-03-01 3:21:115 days ago1772335271IN
0xe61dd9cA...4424e6aE4
0 ETH0.000019140.12507141
Withdraw Native244847972026-02-18 16:04:2316 days ago1771430663IN
0xe61dd9cA...4424e6aE4
0 ETH0.000037350.33059025
Withdraw Native244847972026-02-18 16:04:2316 days ago1771430663IN
0xe61dd9cA...4424e6aE4
0 ETH0.000050360.33059025
Withdraw Token244274102026-02-10 15:56:3524 days ago1770738995IN
0xe61dd9cA...4424e6aE4
0 ETH0.000032980.22882829
Withdraw Token244274102026-02-10 15:56:3524 days ago1770738995IN
0xe61dd9cA...4424e6aE4
0 ETH0.000035020.22882829
Withdraw Token244146852026-02-08 21:17:1126 days ago1770585431IN
0xe61dd9cA...4424e6aE4
0 ETH0.000019470.14024648
Withdraw Token244146852026-02-08 21:17:1126 days ago1770585431IN
0xe61dd9cA...4424e6aE4
0 ETH0.000021460.14024648
Withdraw Token244146352026-02-08 21:07:1126 days ago1770584831IN
0xe61dd9cA...4424e6aE4
0 ETH0.000019420.13989831
Withdraw Token244146352026-02-08 21:07:1126 days ago1770584831IN
0xe61dd9cA...4424e6aE4
0 ETH0.000021410.13989831
Deposit Token244131902026-02-08 16:16:2326 days ago1770567383IN
0xe61dd9cA...4424e6aE4
0 ETH0.000075752.04951843
Deposit Token244131832026-02-08 16:14:5926 days ago1770567299IN
0xe61dd9cA...4424e6aE4
0 ETH0.000075192.04766382
Withdraw Token243784762026-02-03 19:40:4731 days ago1770147647IN
0xe61dd9cA...4424e6aE4
0 ETH0.000177241.27630465
Withdraw Token243784762026-02-03 19:40:4731 days ago1770147647IN
0xe61dd9cA...4424e6aE4
0 ETH0.000195341.27630465
Deposit Token243784562026-02-03 19:36:3531 days ago1770147395IN
0xe61dd9cA...4424e6aE4
0 ETH0.000198793.77893618
Withdraw Token243753362026-02-03 9:08:1131 days ago1770109691IN
0xe61dd9cA...4424e6aE4
0 ETH0.000028630.19864942
Withdraw Token243753362026-02-03 9:08:1131 days ago1770109691IN
0xe61dd9cA...4424e6aE4
0 ETH0.00003040.19864942
Deposit Token243752472026-02-03 8:50:2331 days ago1770108623IN
0xe61dd9cA...4424e6aE4
0 ETH0.000150662.6163122
Withdraw Token242943992026-01-23 2:07:1143 days ago1769134031IN
0xe61dd9cA...4424e6aE4
0 ETH0.000019660.13644472
Withdraw Token242943992026-01-23 2:07:1143 days ago1769134031IN
0xe61dd9cA...4424e6aE4
0 ETH0.000020880.13644472
Withdraw Token242886662026-01-22 6:54:1143 days ago1769064851IN
0xe61dd9cA...4424e6aE4
0 ETH0.000019170.13806803
Withdraw Token242886662026-01-22 6:54:1143 days ago1769064851IN
0xe61dd9cA...4424e6aE4
0 ETH0.000021130.13806803
Withdraw Token242885562026-01-22 6:32:1143 days ago1769063531IN
0xe61dd9cA...4424e6aE4
0 ETH0.000018240.13134992
Withdraw Token242885562026-01-22 6:32:1143 days ago1769063531IN
0xe61dd9cA...4424e6aE4
0 ETH0.00002010.13134992
Deposit Token242737022026-01-20 4:48:3545 days ago1768884515IN
0xe61dd9cA...4424e6aE4
0 ETH0.000130172.03705984
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer244847972026-02-18 16:04:2316 days ago1771430663
0xe61dd9cA...4424e6aE4
0.11097264 ETH
Deposit ETH243287722026-01-27 21:11:2338 days ago1769548283
0xe61dd9cA...4424e6aE4
0.0001 ETH
Transfer242308392026-01-14 5:25:1151 days ago1768368311
0xe61dd9cA...4424e6aE4
0.01962757 ETH
Transfer241670262026-01-05 7:40:1160 days ago1767598811
0xe61dd9cA...4424e6aE4
0.04605879 ETH
Transfer241474092026-01-02 14:00:2363 days ago1767362423
0xe61dd9cA...4424e6aE4
0.09470005 ETH
Transfer240410842025-12-18 17:49:1178 days ago1766080151
0xe61dd9cA...4424e6aE4
10.68912662 ETH
Transfer240206762025-12-15 21:26:1181 days ago1765833971
0xe61dd9cA...4424e6aE4
0.42556249 ETH
Transfer239989602025-12-12 20:36:1184 days ago1765571771
0xe61dd9cA...4424e6aE4
0.10098798 ETH
Transfer238897522025-11-27 11:28:3599 days ago1764242915
0xe61dd9cA...4424e6aE4
0.25387707 ETH
Transfer236738952025-10-28 5:39:11129 days ago1761629951
0xe61dd9cA...4424e6aE4
0.05043451 ETH
Transfer234431972025-09-25 23:02:11162 days ago1758841331
0xe61dd9cA...4424e6aE4
0.97567693 ETH
Transfer234115562025-09-21 12:55:11166 days ago1758459311
0xe61dd9cA...4424e6aE4
0.64091881 ETH
Transfer233406522025-09-11 15:15:11176 days ago1757603711
0xe61dd9cA...4424e6aE4
0.11247108 ETH
Transfer233211252025-09-08 21:42:11179 days ago1757367731
0xe61dd9cA...4424e6aE4
0.01046331 ETH
Transfer231711722025-08-18 23:16:11200 days ago1755558971
0xe61dd9cA...4424e6aE4
1.16101706 ETH
Transfer231683992025-08-18 14:00:23200 days ago1755525623
0xe61dd9cA...4424e6aE4
0.064519 ETH
Transfer230646392025-08-04 2:12:11215 days ago1754273531
0xe61dd9cA...4424e6aE4
1.7180925 ETH
Transfer230191272025-07-28 17:27:11221 days ago1753723631
0xe61dd9cA...4424e6aE4
0.13451046 ETH
Transfer229877022025-07-24 8:03:11225 days ago1753344191
0xe61dd9cA...4424e6aE4
0.15810467 ETH
Transfer229876622025-07-24 7:55:11225 days ago1753343711
0xe61dd9cA...4424e6aE4
0.96029947 ETH
Transfer229638642025-07-21 0:04:11229 days ago1753056251
0xe61dd9cA...4424e6aE4
0.29889131 ETH
Transfer229554642025-07-19 19:55:11230 days ago1752954911
0xe61dd9cA...4424e6aE4
2.33530932 ETH
Transfer229195572025-07-14 19:39:11235 days ago1752521951
0xe61dd9cA...4424e6aE4
0.07676038 ETH
Transfer228399952025-07-03 16:50:11246 days ago1751561411
0xe61dd9cA...4424e6aE4
0.1117877 ETH
Transfer228399802025-07-03 16:47:11246 days ago1751561231
0xe61dd9cA...4424e6aE4
0.07188391 ETH
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Bridge

Compiler Version
v0.7.4+commit.3f05b770

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2021-07-15
*/

// File: @openzeppelin/contracts/utils/Context.sol

// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0 <0.8.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

// File: @openzeppelin/contracts/utils/Pausable.sol



pragma solidity ^0.7.0;


/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor () {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

// File: contracts/Container.sol


pragma solidity ^0.7.0;

contract Container {
    struct Item {
        uint256 itemType;
        uint256 status;
        address[] addresses;
    }

    uint256 MaxItemAddressNum = 255;
    mapping(bytes32 => Item) private container;

    function itemAddressExists(bytes32 _id, address _oneAddress) internal view returns (bool) {
        for (uint256 i = 0; i < container[_id].addresses.length; i++) {
            if (container[_id].addresses[i] == _oneAddress)
                return true;
        }
        return false;
    }

    function getItemAddresses(bytes32 _id) internal view returns (address[] memory) {
        return container[_id].addresses;
    }

    function getItemInfo(bytes32 _id) internal view returns (uint256, uint256, uint256) {
        return (container[_id].itemType, container[_id].status, container[_id].addresses.length);
    }

    function getItemAddressCount(bytes32 _id) internal view returns (uint256) {
        return container[_id].addresses.length;
    }

    function setItemInfo(bytes32 _id, uint256 _itemType, uint256 _status) internal {
        container[_id].itemType = _itemType;
        container[_id].status = _status;
    }

    function addItemAddress(bytes32 _id, address _oneAddress) internal {
        require(!itemAddressExists(_id, _oneAddress), "Container:dup address added");
        require(container[_id].addresses.length < MaxItemAddressNum, "Container:too many addresses");
        container[_id].addresses.push(_oneAddress);
    }

    function removeItemAddresses(bytes32 _id) internal {
        delete container[_id].addresses;
    }

    function removeOneItemAddress(bytes32 _id, address _oneAddress) internal {
        for (uint256 i = 0; i < container[_id].addresses.length; i++) {
            if (container[_id].addresses[i] == _oneAddress) {
                container[_id].addresses[i] = container[_id].addresses[container[_id].addresses.length - 1];
                container[_id].addresses.pop();
                return;
            }
        }
    }

    function removeItem(bytes32 _id) internal {
        delete container[_id];
    }

    function replaceItemAddress(bytes32 _id, address _oneAddress, address _anotherAddress) internal {
        for (uint256 i = 0; i < container[_id].addresses.length; i++) {
            if (container[_id].addresses[i] == _oneAddress) {
                container[_id].addresses[i] = _anotherAddress;
                return;
            }
        }
    }

}

// File: contracts/BridgeAdmin.sol


pragma solidity ^0.7.0;


contract BridgeAdmin is Container {
    bytes32 internal constant OWNERHASH = 0x02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c0;
    bytes32 internal constant OPERATORHASH = 0x46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f622;
    bytes32 internal constant PAUSERHASH = 0x0cc58340b26c619cd4edc70f833d3f4d9d26f3ae7d5ef2965f81fe5495049a4f;
    bytes32 internal constant STOREHASH = 0xe41d88711b08bdcd7556c5d2d24e0da6fa1f614cf2055f4d7e10206017cd1680;
    bytes32 internal constant LOGICHASH = 0x397bc5b97f629151e68146caedba62f10b47e426b38db589771a288c0861f182;
    uint256 internal constant MAXUSERNUM = 255;
    bytes32[] private classHashArray;

    uint256 internal ownerRequireNum;
    uint256 internal operatorRequireNum;

    event AdminChanged(string TaskType, string class, address oldAddress, address newAddress);
    event AdminRequiredNumChanged(string TaskType, string class, uint256 previousNum, uint256 requiredNum);
    event AdminTaskDropped(bytes32 taskHash);

    modifier validRequirement(uint ownerCount, uint _required) {
        require(ownerCount <= MaxItemAddressNum && _required <= ownerCount && _required > 0 && ownerCount > 0);
        _;
    }

    modifier onlyOwner() {
        require(itemAddressExists(OWNERHASH, msg.sender), "BridgeAdmin:only use owner to call");
        _;
    }

    function initAdmin(address[] memory _owners, uint _ownerRequired) internal validRequirement(_owners.length, _ownerRequired) {
        for (uint i = 0; i < _owners.length; i++) {
            addItemAddress(OWNERHASH, _owners[i]);
        }
        addItemAddress(PAUSERHASH, _owners[0]);
        // we need an init pauser
        addItemAddress(LOGICHASH, address(0x0));
        addItemAddress(STOREHASH, address(0x1));

        classHashArray.push(OWNERHASH);
        classHashArray.push(OPERATORHASH);
        classHashArray.push(PAUSERHASH);
        classHashArray.push(STOREHASH);
        classHashArray.push(LOGICHASH);
        ownerRequireNum = _ownerRequired;
        operatorRequireNum = 2;
    }

    function classHashExist(bytes32 aHash) private view returns (bool) {
        for (uint256 i = 0; i < classHashArray.length; i++)
            if (classHashArray[i] == aHash) return true;
        return false;
    }

    function getAdminAddresses(string memory class) public view returns (address[] memory) {
        bytes32 classHash = getClassHash(class);
        return getItemAddresses(classHash);
    }

    function getOwnerRequireNum() public view returns (uint256) {
        return ownerRequireNum;
    }

    function getOperatorRequireNum() public view returns (uint256) {
        return operatorRequireNum;
    }

    function resetRequiredNum(string memory class, uint256 requiredNum) public onlyOwner returns (bool) {
        bytes32 classHash = getClassHash(class);
        require((classHash == OPERATORHASH) || (classHash == OWNERHASH), "BridgeAdmin:wrong class");

        bytes32 taskHash = keccak256(abi.encodePacked("resetRequiredNum", class, requiredNum));
        addItemAddress(taskHash, msg.sender);

        if (getItemAddressCount(taskHash) >= ownerRequireNum) {
            removeItem(taskHash);
            uint256 previousNum = 0;
            if (classHash == OWNERHASH) {
                require(getItemAddressCount(classHash) >= requiredNum, "BridgeAdmin:insufficiency addresses");
                previousNum = ownerRequireNum;
                ownerRequireNum = requiredNum;
            }
            else if (classHash == OPERATORHASH) {
                previousNum = operatorRequireNum;
                operatorRequireNum = requiredNum;
            } else {
                revert("BridgeAdmin:wrong class");
            }
            emit AdminRequiredNumChanged("resetRequiredNum", class, previousNum, requiredNum);
        }
        return true;
    }

    function modifyAddress(string memory class, address oldAddress, address newAddress) internal onlyOwner returns (bool) {
        bytes32 classHash = getClassHash(class);
        bytes32 taskHash = keccak256(abi.encodePacked("modifyAddress", class, oldAddress, newAddress));
        addItemAddress(taskHash, msg.sender);
        if (getItemAddressCount(taskHash) >= ownerRequireNum) {
            replaceItemAddress(classHash, oldAddress, newAddress);
            emit AdminChanged("modifyAddress", class, oldAddress, newAddress);
            removeItem(taskHash);
            return true;
        }
        return false;
    }

    function getClassHash(string memory class) private view returns (bytes32) {
        bytes32 classHash = keccak256(abi.encodePacked(class));
        require(classHashExist(classHash), "BridgeAdmin:invalid class");
        return classHash;
    }

    function dropAddress(string memory class, address oneAddress) public onlyOwner returns (bool) {
        bytes32 classHash = getClassHash(class);
        require(classHash != STOREHASH && classHash != LOGICHASH, "BridgeAdmin:wrong class");
        require(itemAddressExists(classHash, oneAddress), "BridgeAdmin:no such address exists");

        if (classHash == OWNERHASH)
            require(getItemAddressCount(classHash) > ownerRequireNum, "BridgeAdmin:insufficiency addresses");

        bytes32 taskHash = keccak256(abi.encodePacked("dropAddress", class, oneAddress));
        addItemAddress(taskHash, msg.sender);
        if (getItemAddressCount(taskHash) >= ownerRequireNum) {
            removeOneItemAddress(classHash, oneAddress);
            emit AdminChanged("dropAddress", class, oneAddress, oneAddress);
            removeItem(taskHash);
            return true;
        }
        return false;
    }

    function addAddress(string memory class, address oneAddress) public onlyOwner returns (bool) {
        bytes32 classHash = getClassHash(class);
        require(classHash != STOREHASH && classHash != LOGICHASH, "BridgeAdmin:wrong class");

        bytes32 taskHash = keccak256(abi.encodePacked("addAddress", class, oneAddress));
        addItemAddress(taskHash, msg.sender);
        if (getItemAddressCount(taskHash) >= ownerRequireNum) {
            addItemAddress(classHash, oneAddress);
            emit AdminChanged("addAddress", class, oneAddress, oneAddress);
            removeItem(taskHash);
            return true;
        }
        return false;
    }

    function dropTask(bytes32 taskHash) public onlyOwner returns (bool) {
        removeItem(taskHash);
        emit AdminTaskDropped(taskHash);
        return true;
    }

}

// File: @openzeppelin/contracts/math/SafeMath.sol



pragma solidity ^0.7.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        uint256 c = a + b;
        if (c < a) return (false, 0);
        return (true, c);
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b > a) return (false, 0);
        return (true, a - b);
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) return (true, 0);
        uint256 c = a * b;
        if (c / a != b) return (false, 0);
        return (true, c);
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a / b);
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a % b);
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a, "SafeMath: subtraction overflow");
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) return 0;
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "SafeMath: division by zero");
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "SafeMath: modulo by zero");
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        return a - b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryDiv}.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        return a % b;
    }
}

// File: contracts/BridgeStorage.sol


pragma solidity ^0.7.0;


contract BridgeStorage is Container {
    string public constant name = "BridgeStorage";

    address private caller;

    constructor(address aCaller) {
        caller = aCaller;
    }

    modifier onlyCaller() {
        require(msg.sender == caller, "BridgeStorage:only use main contract to call");
        _;
    }

    function supporterExists(bytes32 taskHash, address user) public view returns (bool) {
        return itemAddressExists(taskHash, user);
    }

    function setTaskInfo(bytes32 taskHash, uint256 taskType, uint256 status) external onlyCaller {
        setItemInfo(taskHash, taskType, status);
    }

    function getTaskInfo(bytes32 taskHash) public view returns (uint256, uint256, uint256) {
        return getItemInfo(taskHash);
    }

    function addSupporter(bytes32 taskHash, address oneAddress) external onlyCaller {
        addItemAddress(taskHash, oneAddress);
    }

    function removeAllSupporter(bytes32 taskHash) external onlyCaller {
        removeItemAddresses(taskHash);
    }

    function removeTask(bytes32 taskHash) external onlyCaller {
        removeItem(taskHash);
    }

}

// File: contracts/BridgeLogic.sol


pragma solidity ^0.7.0;



contract BridgeLogic {
    using SafeMath for uint256;

    string public constant name = "BridgeLogic";

    bytes32 internal constant OPERATORHASH = 0x46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f622;
    uint256 public constant TASKINIT = 0;
    uint256 public constant TASKPROCESSING = 1;
    uint256 public constant TASKCANCELLED = 2;
    uint256 public constant TASKDONE = 3;
    uint256 public constant WITHDRAWTASK = 1;

    address private caller;
    BridgeStorage private store;

    constructor(address aCaller) {
        caller = aCaller;
    }

    modifier onlyCaller() {
        require(msg.sender == caller, "BridgeLogic:only use main contract to call");
        _;
    }

    modifier operatorExists(address operator) {
        require(store.supporterExists(OPERATORHASH, operator), "BridgeLogic:wrong operator");
        _;
    }

    function resetStoreLogic(address storeAddress) external onlyCaller {
        store = BridgeStorage(storeAddress);
    }

    function getStoreAddress() public view returns (address) {
        return address(store);
    }

    function supportTask(uint256 taskType, bytes32 taskHash, address oneAddress, uint256 requireNum) external onlyCaller returns (uint256) {
        require(!store.supporterExists(taskHash, oneAddress), "BridgeLogic:supporter already exists");
        (uint256 theTaskType,uint256 theTaskStatus,uint256 theSupporterNum) = store.getTaskInfo(taskHash);
        require(theTaskStatus < TASKDONE, "BridgeLogic:wrong status");

        if (theTaskStatus != TASKINIT)
            require(theTaskType == taskType, "BridgeLogic:task type not match");
        store.addSupporter(taskHash, oneAddress);
        theSupporterNum++;
        if (theSupporterNum >= requireNum)
            theTaskStatus = TASKDONE;
        else
            theTaskStatus = TASKPROCESSING;
        store.setTaskInfo(taskHash, taskType, theTaskStatus);
        return theTaskStatus;
    }

    function cancelTask(bytes32 taskHash) external onlyCaller returns (uint256) {
        (uint256 theTaskType,uint256 theTaskStatus,uint256 theSupporterNum) = store.getTaskInfo(taskHash);
        require(theTaskStatus == TASKPROCESSING, "BridgeLogic:wrong status");
        if (theSupporterNum > 0) store.removeAllSupporter(taskHash);
        theTaskStatus = TASKCANCELLED;
        store.setTaskInfo(taskHash, theTaskType, theTaskStatus);
        return theTaskStatus;
    }

    function removeTask(bytes32 taskHash) external onlyCaller {
        store.removeTask(taskHash);
    }

}

// File: contracts/Bridge.sol


pragma solidity ^0.7.0;




contract Bridge is BridgeAdmin, Pausable {
    using SafeMath for uint256;

    string public constant name = "Bridge";

    BridgeLogic private logic;
    uint256 public swapFee;
    address public feeTo;

    struct assetSelector {
        string selector;
        bool isValueFirst;
    }

    mapping(address => assetSelector)  public depositSelector;
    mapping(address => assetSelector) public withdrawSelector;
    mapping(bytes32 => bool) public filledTx;

    event FeeToTransferred(address indexed previousFeeTo, address indexed newFeeTo);
    event SwapFeeChanged(uint256 indexed previousSwapFee, uint256 indexed newSwapFee);
    event DepositNative(address indexed from, uint256 value, string targetAddress, string chain, uint256 feeValue);
    event DepositToken(address indexed from, uint256 value, address indexed token, string targetAddress, string chain, uint256 feeValue);
    event WithdrawingNative(address indexed to, uint256 value, string proof);
    event WithdrawingToken(address indexed to, address indexed token, uint256 value, string proof);
    event WithdrawDoneNative(address indexed to, uint256 value, string proof);
    event WithdrawDoneToken(address indexed to, address indexed token, uint256 value, string proof);

    modifier onlyOperator() {
        require(itemAddressExists(OPERATORHASH, msg.sender), "Bridge:wrong operator");
        _;
    }

    modifier onlyPauser() {
        require(itemAddressExists(PAUSERHASH, msg.sender), "Bridge:wrong pauser");
        _;
    }

    modifier positiveValue(uint _value) {
        require(_value > 0, "Bridge:value need > 0");
        _;
    }

    constructor(address[] memory _owners, uint _ownerRequired) {
        initAdmin(_owners, _ownerRequired);
    }

    function depositNative(string memory _targetAddress, string memory chain) public payable {
        require(msg.value >= swapFee, "Bridge:insufficient swap fee");
        if (swapFee != 0) {
            payable(feeTo).transfer(swapFee);
        }
        emit DepositNative(msg.sender, msg.value - swapFee, _targetAddress, chain, swapFee);
    }

    function depositToken(address _token, uint value, string memory _targetAddress, string memory chain) public payable returns (bool) {
        require(msg.value == swapFee, "Bridge:swap fee not equal");
        if (swapFee != 0) {
            payable(feeTo).transfer(swapFee);
        }

        bool res = depositTokenLogic(_token, msg.sender, value);
        emit DepositToken(msg.sender, value, _token, _targetAddress, chain, swapFee);
        return res;
    }

    function withdrawNative(address payable to, uint value, string memory proof, bytes32 taskHash) public
    onlyOperator
    whenNotPaused
    positiveValue(value)
    returns (bool)
    {
        require(address(this).balance >= value, "Bridge:not enough native token");
        require(taskHash == keccak256((abi.encodePacked(to, value, proof))), "Bridge:taskHash is wrong");
        require(!filledTx[taskHash], "Bridge:tx filled already");
        uint256 status = logic.supportTask(logic.WITHDRAWTASK(), taskHash, msg.sender, operatorRequireNum);

        if (status == logic.TASKPROCESSING()) {
            emit WithdrawingNative(to, value, proof);
        } else if (status == logic.TASKDONE()) {
            emit WithdrawingNative(to, value, proof);
            emit WithdrawDoneNative(to, value, proof);
            to.transfer(value);
            filledTx[taskHash] = true;
            logic.removeTask(taskHash);
        }
        return true;
    }

    function withdrawToken(address _token, address to, uint value, string memory proof, bytes32 taskHash) public
    onlyOperator
    whenNotPaused
    positiveValue(value)
    returns (bool)
    {
        require(taskHash == keccak256((abi.encodePacked(to, value, proof))), "Bridge:taskHash is wrong");
        require(!filledTx[taskHash], "Bridge:tx filled already");
        uint256 status = logic.supportTask(logic.WITHDRAWTASK(), taskHash, msg.sender, operatorRequireNum);

        if (status == logic.TASKPROCESSING()) {
            emit WithdrawingToken(to, _token, value, proof);
        } else if (status == logic.TASKDONE()) {
            bool res = withdrawTokenLogic(_token, to, value);

            emit WithdrawingToken(to, _token, value, proof);
            emit WithdrawDoneToken(to, _token, value, proof);
            filledTx[taskHash] = true;
            logic.removeTask(taskHash);
            return res;
        }
        return true;
    }

    function modifyAdminAddress(string memory class, address oldAddress, address newAddress) public whenPaused {
        require(newAddress != address(0x0), "Bridge:wrong address");
        bool flag = modifyAddress(class, oldAddress, newAddress);
        if (flag) {
            bytes32 classHash = keccak256(abi.encodePacked(class));
            if (classHash == LOGICHASH) {
                logic = BridgeLogic(newAddress);
            } else if (classHash == STOREHASH) {
                logic.resetStoreLogic(newAddress);
            }
        }
    }

    function getLogicAddress() public view returns (address) {
        return address(logic);
    }

    function getStoreAddress() public view returns (address) {
        return logic.getStoreAddress();
    }

    function pause() public onlyPauser {
        _pause();
    }

    function unpause() public onlyPauser {
        _unpause();
    }

    function setDepositSelector(address token, string memory method, bool _isValueFirst) onlyOperator external {
        depositSelector[token] = assetSelector(method, _isValueFirst);
    }

    function setWithdrawSelector(address token, string memory method, bool _isValueFirst) onlyOperator external {
        withdrawSelector[token] = assetSelector(method, _isValueFirst);
    }

    function setSwapFee(uint256 _swapFee) onlyOwner external {
        emit SwapFeeChanged(swapFee, _swapFee);
        swapFee = _swapFee;
    }

    function setFeeTo(address _feeTo) onlyOwner external {
        emit FeeToTransferred(feeTo, _feeTo);
        feeTo = _feeTo;
    }

    function depositTokenLogic(address token, address _from, uint256 _value) internal returns (bool) {
        bool status = false;
        bytes memory returnedData;
        if (bytes(depositSelector[token].selector).length == 0) {
            (status, returnedData) = token.call(abi.encodeWithSignature("transferFrom(address,address,uint256)", _from, this, _value));
        }
        else {
            assetSelector memory aselector = depositSelector[token];
            if (aselector.isValueFirst) {
                (status, returnedData) = token.call(abi.encodeWithSignature(aselector.selector, _value, _from));
            }
            else {
                (status, returnedData) = token.call(abi.encodeWithSignature(aselector.selector, _from, _value));
            }
        }
        require(status && (returnedData.length == 0 || abi.decode(returnedData, (bool))), 'Bridge:deposit failed');
        return true;
    }

    function withdrawTokenLogic(address token, address _to, uint256 _value) internal returns (bool) {
        bool status = false;
        bytes memory returnedData;
        if (bytes(withdrawSelector[token].selector).length == 0) {
            (status, returnedData) = token.call(abi.encodeWithSignature("transfer(address,uint256)", _to, _value));
        }
        else {
            assetSelector memory aselector = withdrawSelector[token];
            if (aselector.isValueFirst) {
                (status, returnedData) = token.call(abi.encodeWithSignature(aselector.selector, _value, _to));
            }
            else {
                (status, returnedData) = token.call(abi.encodeWithSignature(aselector.selector, _to, _value));
            }
        }

        require(status && (returnedData.length == 0 || abi.decode(returnedData, (bool))), 'Bridge:withdraw failed');
        return true;
    }

}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address[]","name":"_owners","type":"address[]"},{"internalType":"uint256","name":"_ownerRequired","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"TaskType","type":"string"},{"indexed":false,"internalType":"string","name":"class","type":"string"},{"indexed":false,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":false,"internalType":"address","name":"newAddress","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"TaskType","type":"string"},{"indexed":false,"internalType":"string","name":"class","type":"string"},{"indexed":false,"internalType":"uint256","name":"previousNum","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"requiredNum","type":"uint256"}],"name":"AdminRequiredNumChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"taskHash","type":"bytes32"}],"name":"AdminTaskDropped","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"string","name":"targetAddress","type":"string"},{"indexed":false,"internalType":"string","name":"chain","type":"string"},{"indexed":false,"internalType":"uint256","name":"feeValue","type":"uint256"}],"name":"DepositNative","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"string","name":"targetAddress","type":"string"},{"indexed":false,"internalType":"string","name":"chain","type":"string"},{"indexed":false,"internalType":"uint256","name":"feeValue","type":"uint256"}],"name":"DepositToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousFeeTo","type":"address"},{"indexed":true,"internalType":"address","name":"newFeeTo","type":"address"}],"name":"FeeToTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"previousSwapFee","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"newSwapFee","type":"uint256"}],"name":"SwapFeeChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"string","name":"proof","type":"string"}],"name":"WithdrawDoneNative","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"string","name":"proof","type":"string"}],"name":"WithdrawDoneToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"string","name":"proof","type":"string"}],"name":"WithdrawingNative","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"string","name":"proof","type":"string"}],"name":"WithdrawingToken","type":"event"},{"inputs":[{"internalType":"string","name":"class","type":"string"},{"internalType":"address","name":"oneAddress","type":"address"}],"name":"addAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_targetAddress","type":"string"},{"internalType":"string","name":"chain","type":"string"}],"name":"depositNative","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"depositSelector","outputs":[{"internalType":"string","name":"selector","type":"string"},{"internalType":"bool","name":"isValueFirst","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"string","name":"_targetAddress","type":"string"},{"internalType":"string","name":"chain","type":"string"}],"name":"depositToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"string","name":"class","type":"string"},{"internalType":"address","name":"oneAddress","type":"address"}],"name":"dropAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"taskHash","type":"bytes32"}],"name":"dropTask","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeTo","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"filledTx","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"class","type":"string"}],"name":"getAdminAddresses","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLogicAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOperatorRequireNum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwnerRequireNum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStoreAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"class","type":"string"},{"internalType":"address","name":"oldAddress","type":"address"},{"internalType":"address","name":"newAddress","type":"address"}],"name":"modifyAdminAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"class","type":"string"},{"internalType":"uint256","name":"requiredNum","type":"uint256"}],"name":"resetRequiredNum","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"string","name":"method","type":"string"},{"internalType":"bool","name":"_isValueFirst","type":"bool"}],"name":"setDepositSelector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeTo","type":"address"}],"name":"setFeeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapFee","type":"uint256"}],"name":"setSwapFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"string","name":"method","type":"string"},{"internalType":"bool","name":"_isValueFirst","type":"bool"}],"name":"setWithdrawSelector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"string","name":"proof","type":"string"},{"internalType":"bytes32","name":"taskHash","type":"bytes32"}],"name":"withdrawNative","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"withdrawSelector","outputs":[{"internalType":"string","name":"selector","type":"string"},{"internalType":"bool","name":"isValueFirst","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"string","name":"proof","type":"string"},{"internalType":"bytes32","name":"taskHash","type":"bytes32"}],"name":"withdrawToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

608060405260ff6000553480156200001657600080fd5b5060405162004aff38038062004aff833981810160405260408110156200003c57600080fd5b81019080805160405193929190846401000000008211156200005d57600080fd5b9083019060208201858111156200007357600080fd5b82518660208202830111640100000000821117156200009157600080fd5b82525081516020918201928201910280838360005b83811015620000c0578181015183820152602001620000a6565b505050509190910160405250602001516005805460ff191690559150620000ea90508282620000f2565b505062000433565b8151816000548211158015620001085750818111155b8015620001155750600081115b8015620001225750600082115b6200012c57600080fd5b60005b84518110156200017a576200017160008051602062004abf83398151915260001b8683815181106200015d57fe5b6020026020010151620002a760201b60201c565b6001016200012f565b50620001a060008051602062004a7f83398151915260001b856000815181106200015d57fe5b620001bc60008051602062004a9f8339815191526000620002a7565b620001d860008051602062004adf8339815191526001620002a7565b50506002805460018181018355600083905260008051602062004abf8339815191527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace92830155825480820184557f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f622908301558254808201845560008051602062004a7f833981519152908301558254808201845560008051602062004adf833981519152908301558254908101835560008051602062004a9f83398151915291015560039190915560045550565b620002b38282620003af565b1562000306576040805162461bcd60e51b815260206004820152601b60248201527f436f6e7461696e65723a64757020616464726573732061646465640000000000604482015290519081900360640190fd5b600080548382526001602052604090912060020154106200036e576040805162461bcd60e51b815260206004820152601c60248201527f436f6e7461696e65723a746f6f206d616e792061646472657373657300000000604482015290519081900360640190fd5b6000918252600160208181526040842060020180549283018155845290922090910180546001600160a01b0319166001600160a01b03909216919091179055565b6000805b6000848152600160205260409020600201548110156200042757600084815260016020526040902060020180546001600160a01b038516919083908110620003f757fe5b6000918252602090912001546001600160a01b031614156200041e5760019150506200042d565b600101620003b3565b50600090505b92915050565b61463c80620004436000396000f3fe60806040526004361061019b5760003560e01c80638609d28c116100ec578063ceb35b0f1161008a578063e6a81ec411610064578063e6a81ec414610d10578063e9e211bd14610d25578063f46901ed14610dd8578063f60c757f14610e0b5761019b565b8063ceb35b0f14610a4e578063d5b99d3c14610b0a578063dd9b86c114610bd25761019b565b8063b07ed3a9116100c6578063b07ed3a9146107c1578063c8e369bf146107d6578063c8fd90f9146108d7578063cb08e3ca1461099a5761019b565b80638609d28c146105c757806391c40bf7146106f0578063abd108ba146107ac5761019b565b806334e199071161015957806354cf2aeb1161013357806354cf2aeb1461055e5780635c975abb1461057357806364908649146105885780638456cb59146105b25761019b565b806334e19907146104f55780633f4ba83a1461051f578063521cb590146105345761019b565b8062674f63146101a0578063017e7e581461026557806302c1927c1461029657806306fdde031461037d5780631d75807c146104075780632c2df7421461042e575b600080fd5b3480156101ac57600080fd5b50610263600480360360608110156101c357600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156101ed57600080fd5b8201836020820111156101ff57600080fd5b803590602001918460018302840111600160201b8311171561022057600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505050503515159050610e3e565b005b34801561027157600080fd5b5061027a610f04565b604080516001600160a01b039092168252519081900360200190f35b3480156102a257600080fd5b50610369600480360360a08110156102b957600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b8111156102f357600080fd5b82018360208201111561030557600080fd5b803590602001918460018302840111600160201b8311171561032657600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505091359250610f13915050565b604080519115158252519081900360200190f35b34801561038957600080fd5b50610392611612565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103cc5781810151838201526020016103b4565b50505050905090810190601f1680156103f95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561041357600080fd5b5061041c611634565b60408051918252519081900360200190f35b34801561043a57600080fd5b506102636004803603606081101561045157600080fd5b810190602081018135600160201b81111561046b57600080fd5b82018360208201111561047d57600080fd5b803590602001918460018302840111600160201b8311171561049e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b03833581169450602090930135909216915061163a9050565b34801561050157600080fd5b506102636004803603602081101561051857600080fd5b5035611860565b34801561052b57600080fd5b506102636118e7565b34801561054057600080fd5b506103696004803603602081101561055757600080fd5b5035611962565b34801561056a57600080fd5b5061041c6119fc565b34801561057f57600080fd5b50610369611a02565b34801561059457600080fd5b50610369600480360360208110156105ab57600080fd5b5035611a0b565b3480156105be57600080fd5b50610263611a20565b610263600480360360408110156105dd57600080fd5b810190602081018135600160201b8111156105f757600080fd5b82018360208201111561060957600080fd5b803590602001918460018302840111600160201b8311171561062a57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561067c57600080fd5b82018360208201111561068e57600080fd5b803590602001918460018302840111600160201b831117156106af57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611a99945050505050565b3480156106fc57600080fd5b506103696004803603604081101561071357600080fd5b810190602081018135600160201b81111561072d57600080fd5b82018360208201111561073f57600080fd5b803590602001918460018302840111600160201b8311171561076057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550505090356001600160a01b03169150611c5a9050565b3480156107b857600080fd5b5061027a611fbe565b3480156107cd57600080fd5b5061027a611fd2565b3480156107e257600080fd5b50610887600480360360208110156107f957600080fd5b810190602081018135600160201b81111561081357600080fd5b82018360208201111561082557600080fd5b803590602001918460018302840111600160201b8311171561084657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612053945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156108c35781810151838201526020016108ab565b505050509050019250505060405180910390f35b3480156108e357600080fd5b50610263600480360360608110156108fa57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561092457600080fd5b82018360208201111561093657600080fd5b803590602001918460018302840111600160201b8311171561095757600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505050503515159050612072565b3480156109a657600080fd5b506109cd600480360360208110156109bd57600080fd5b50356001600160a01b0316612117565b60405180806020018315158152602001828103825284818151815260200191508051906020019080838360005b83811015610a125781810151838201526020016109fa565b50505050905090810190601f168015610a3f5780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b348015610a5a57600080fd5b5061036960048036036040811015610a7157600080fd5b810190602081018135600160201b811115610a8b57600080fd5b820183602082011115610a9d57600080fd5b803590602001918460018302840111600160201b83111715610abe57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550505090356001600160a01b031691506121c19050565b348015610b1657600080fd5b5061036960048036036080811015610b2d57600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b811115610b5c57600080fd5b820183602082011115610b6e57600080fd5b803590602001918460018302840111600160201b83111715610b8f57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505091359250612421915050565b61036960048036036080811015610be857600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b811115610c1757600080fd5b820183602082011115610c2957600080fd5b803590602001918460018302840111600160201b83111715610c4a57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b811115610c9c57600080fd5b820183602082011115610cae57600080fd5b803590602001918460018302840111600160201b83111715610ccf57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612b73945050505050565b348015610d1c57600080fd5b5061041c612d4f565b348015610d3157600080fd5b5061036960048036036040811015610d4857600080fd5b810190602081018135600160201b811115610d6257600080fd5b820183602082011115610d7457600080fd5b803590602001918460018302840111600160201b83111715610d9557600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505091359250612d55915050565b348015610de457600080fd5b5061026360048036036020811015610dfb57600080fd5b50356001600160a01b0316613096565b348015610e1757600080fd5b506109cd60048036036020811015610e2e57600080fd5b50356001600160a01b0316613145565b610e56600080516020614583833981519152336131b1565b610e9f576040805162461bcd60e51b8152602060048201526015602482015274213934b233b29d3bb937b7339037b832b930ba37b960591b604482015290519081900360640190fd5b6040805180820182528381528215156020808301919091526001600160a01b038616600090815260088252929092208151805192939192610ee39284920190614485565b50602091909101516001909101805460ff1916911515919091179055505050565b6007546001600160a01b031681565b6000610f2d600080516020614583833981519152336131b1565b610f76576040805162461bcd60e51b8152602060048201526015602482015274213934b233b29d3bb937b7339037b832b930ba37b960591b604482015290519081900360640190fd5b610f7e611a02565b15610fc3576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b8360008111611011576040805162461bcd60e51b815260206004820152601560248201527404272696467653a76616c7565206e656564203e203605c1b604482015290519081900360640190fd5b85858560405160200180846001600160a01b031660601b815260140183815260200182805190602001908083835b6020831061105e5780518252601f19909201916020918201910161103f565b6001836020036101000a03801982511681845116808217855250505050505090500193505050506040516020818303038152906040528051906020012083146110e9576040805162461bcd60e51b81526020600482015260186024820152774272696467653a7461736b486173682069732077726f6e6760401b604482015290519081900360640190fd5b6000838152600a602052604090205460ff1615611148576040805162461bcd60e51b81526020600482015260186024820152774272696467653a74782066696c6c656420616c726561647960401b604482015290519081900360640190fd5b600554604080516323c29c0160e11b8152905160009261010090046001600160a01b03169163ae0fd47f9183916347853802916004808301926020929190829003018186803b15801561119a57600080fd5b505afa1580156111ae573d6000803e3d6000fd5b505050506040513d60208110156111c457600080fd5b505160048054604080516001600160e01b031960e087901b16815292830193909352602482018990523360448301526064820152905160848083019260209291908290030181600087803b15801561121b57600080fd5b505af115801561122f573d6000803e3d6000fd5b505050506040513d602081101561124557600080fd5b5051600554604080516357ea327960e11b815290519293506101009091046001600160a01b03169163afd464f291600480820192602092909190829003018186803b15801561129357600080fd5b505afa1580156112a7573d6000803e3d6000fd5b505050506040513d60208110156112bd57600080fd5b505181141561138057876001600160a01b0316876001600160a01b03167f91b4005f248ece53c5402f0c547c6a472d18676fbb0e2e15029d4869140cbe2088886040518083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611340578181015183820152602001611328565b50505050905090810190601f16801561136d5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a3611602565b600560019054906101000a90046001600160a01b03166001600160a01b03166310224a986040518163ffffffff1660e01b815260040160206040518083038186803b1580156113ce57600080fd5b505afa1580156113e2573d6000803e3d6000fd5b505050506040513d60208110156113f857600080fd5b505181141561160257600061140e89898961322e565b9050886001600160a01b0316886001600160a01b03167f91b4005f248ece53c5402f0c547c6a472d18676fbb0e2e15029d4869140cbe2089896040518083815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561148a578181015183820152602001611472565b50505050905090810190601f1680156114b75780820380516001836020036101000a031916815260200191505b50935050505060405180910390a3886001600160a01b0316886001600160a01b03167f044513e921a12ac6560730ac3063f7946fdcb715deb39bc6f84c38be8083648a89896040518083815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561153f578181015183820152602001611527565b50505050905090810190601f16801561156c5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a36000858152600a60205260408082208054600160ff19909116179055600554815163281adb1160e11b81526004810189905291516101009091046001600160a01b031692635035b622926024808201939182900301818387803b1580156115e057600080fd5b505af11580156115f4573d6000803e3d6000fd5b505050508093505050611608565b60019250505b5095945050505050565b6040518060400160405280600681526020016542726964676560d01b81525081565b60045490565b611642611a02565b61168a576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6001600160a01b0381166116dc576040805162461bcd60e51b81526020600482015260146024820152734272696467653a77726f6e67206164647265737360601b604482015290519081900360640190fd5b60006116e9848484613750565b9050801561185a576000846040516020018082805190602001908083835b602083106117265780518252601f199092019160209182019101611707565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090507f397bc5b97f629151e68146caedba62f10b47e426b38db589771a288c0861f18260001b8114156117b35760058054610100600160a81b0319166101006001600160a01b03861602179055611858565b7fe41d88711b08bdcd7556c5d2d24e0da6fa1f614cf2055f4d7e10206017cd168081141561185857600560019054906101000a90046001600160a01b03166001600160a01b031663b0d80346846040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b15801561183f57600080fd5b505af1158015611853573d6000803e3d6000fd5b505050505b505b50505050565b6118786000805160206145a3833981519152336131b1565b6118b35760405162461bcd60e51b81526004018080602001828103825260228152602001806145e56022913960400191505060405180910390fd5b6006546040518291907fad321f810529281bbb90384fd6fecbdda41509a5ccd7bd5aed986ed827f6a02690600090a3600655565b6119117f0cc58340b26c619cd4edc70f833d3f4d9d26f3ae7d5ef2965f81fe5495049a4f336131b1565b611958576040805162461bcd60e51b8152602060048201526013602482015272213934b233b29d3bb937b733903830bab9b2b960691b604482015290519081900360640190fd5b61196061398e565b565b600061197c6000805160206145a3833981519152336131b1565b6119b75760405162461bcd60e51b81526004018080602001828103825260228152602001806145e56022913960400191505060405180910390fd5b6119c082613a2e565b6040805183815290517f468b360fa155a4c5fdf0cb38ce238407e41508a56023e7536088c21b2cd641399181900360200190a15060015b919050565b60065481565b60055460ff1690565b600a6020526000908152604090205460ff1681565b611a4a7f0cc58340b26c619cd4edc70f833d3f4d9d26f3ae7d5ef2965f81fe5495049a4f336131b1565b611a91576040805162461bcd60e51b8152602060048201526013602482015272213934b233b29d3bb937b733903830bab9b2b960691b604482015290519081900360640190fd5b611960613a5a565b600654341015611af0576040805162461bcd60e51b815260206004820152601c60248201527f4272696467653a696e73756666696369656e7420737761702066656500000000604482015290519081900360640190fd5b60065415611b36576007546006546040516001600160a01b039092169181156108fc0291906000818181858888f19350505050158015611b34573d6000803e3d6000fd5b505b336001600160a01b03167f0f0febc7655213f7f4ed640f722413acbfa5bab0fac4cd58ae8792c618e2ab3760065434038484600654604051808581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b83811015611bb8578181015183820152602001611ba0565b50505050905090810190601f168015611be55780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b83811015611c18578181015183820152602001611c00565b50505050905090810190601f168015611c455780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a25050565b6000611c746000805160206145a3833981519152336131b1565b611caf5760405162461bcd60e51b81526004018080602001828103825260228152602001806145e56022913960400191505060405180910390fd5b6000611cba84613add565b90507fe41d88711b08bdcd7556c5d2d24e0da6fa1f614cf2055f4d7e10206017cd16808114801590611d0c57507f397bc5b97f629151e68146caedba62f10b47e426b38db589771a288c0861f1828114155b611d57576040805162461bcd60e51b815260206004820152601760248201527642726964676541646d696e3a77726f6e6720636c61737360481b604482015290519081900360640190fd5b611d6181846131b1565b611d9c5760405162461bcd60e51b81526004018080602001828103825260228152602001806145c36022913960400191505060405180910390fd5b6000805160206145a3833981519152811415611dfa57600354611dbe82613baa565b11611dfa5760405162461bcd60e51b81526004018080602001828103825260238152602001806145606023913960400191505060405180910390fd5b6000848460405160200180806a64726f704164647265737360a81b815250600b0183805190602001908083835b60208310611e465780518252601f199092019160209182019101611e27565b6001836020036101000a038019825116818451168082178552505050505050905001826001600160a01b031660601b815260140192505050604051602081830303815290604052805190602001209050611ea08133613bbf565b600354611eac82613baa565b10611fb157611ebb8285613cc3565b7fb02ddf2800cd4468f7eb14268a7c9f1b6e816aa425ed542d13d8d3a96fa44566858586604051808060200180602001856001600160a01b03168152602001846001600160a01b031681526020018381038352600b8152602001806a64726f704164647265737360a81b815250602001838103825286818151815260200191508051906020019080838360005b83811015611f60578181015183820152602001611f48565b50505050905090810190601f168015611f8d5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1611fa681613a2e565b600192505050611fb8565b6000925050505b92915050565b60055461010090046001600160a01b031690565b6000600560019054906101000a90046001600160a01b03166001600160a01b031663b07ed3a96040518163ffffffff1660e01b815260040160206040518083038186803b15801561202257600080fd5b505afa158015612036573d6000803e3d6000fd5b505050506040513d602081101561204c57600080fd5b5051905090565b6060600061206083613add565b905061206b81613df3565b9392505050565b61208a600080516020614583833981519152336131b1565b6120d3576040805162461bcd60e51b8152602060048201526015602482015274213934b233b29d3bb937b7339037b832b930ba37b960591b604482015290519081900360640190fd5b6040805180820182528381528215156020808301919091526001600160a01b038616600090815260098252929092208151805192939192610ee39284920190614485565b60096020908152600091825260409182902080548351601f600260001961010060018616150201909316929092049182018490048402810184019094528084529092918391908301828280156121ae5780601f10612183576101008083540402835291602001916121ae565b820191906000526020600020905b81548152906001019060200180831161219157829003601f168201915b5050506001909301549192505060ff1682565b60006121db6000805160206145a3833981519152336131b1565b6122165760405162461bcd60e51b81526004018080602001828103825260228152602001806145e56022913960400191505060405180910390fd5b600061222184613add565b90507fe41d88711b08bdcd7556c5d2d24e0da6fa1f614cf2055f4d7e10206017cd1680811480159061227357507f397bc5b97f629151e68146caedba62f10b47e426b38db589771a288c0861f1828114155b6122be576040805162461bcd60e51b815260206004820152601760248201527642726964676541646d696e3a77726f6e6720636c61737360481b604482015290519081900360640190fd5b600084846040516020018080696164644164647265737360b01b815250600a0183805190602001908083835b602083106123095780518252601f1990920191602091820191016122ea565b6001836020036101000a038019825116818451168082178552505050505050905001826001600160a01b031660601b8152601401925050506040516020818303038152906040528051906020012090506123638133613bbf565b60035461236f82613baa565b10611fb15761237e8285613bbf565b7fb02ddf2800cd4468f7eb14268a7c9f1b6e816aa425ed542d13d8d3a96fa44566858586604051808060200180602001856001600160a01b03168152602001846001600160a01b031681526020018381038352600a815260200180696164644164647265737360b01b8152506020018381038252868181518152602001915080519060200190808383600083811015611f60578181015183820152602001611f48565b600061243b600080516020614583833981519152336131b1565b612484576040805162461bcd60e51b8152602060048201526015602482015274213934b233b29d3bb937b7339037b832b930ba37b960591b604482015290519081900360640190fd5b61248c611a02565b156124d1576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b836000811161251f576040805162461bcd60e51b815260206004820152601560248201527404272696467653a76616c7565206e656564203e203605c1b604482015290519081900360640190fd5b84471015612574576040805162461bcd60e51b815260206004820152601e60248201527f4272696467653a6e6f7420656e6f756768206e617469766520746f6b656e0000604482015290519081900360640190fd5b85858560405160200180846001600160a01b031660601b815260140183815260200182805190602001908083835b602083106125c15780518252601f1990920191602091820191016125a2565b6001836020036101000a038019825116818451168082178552505050505050905001935050505060405160208183030381529060405280519060200120831461264c576040805162461bcd60e51b81526020600482015260186024820152774272696467653a7461736b486173682069732077726f6e6760401b604482015290519081900360640190fd5b6000838152600a602052604090205460ff16156126ab576040805162461bcd60e51b81526020600482015260186024820152774272696467653a74782066696c6c656420616c726561647960401b604482015290519081900360640190fd5b600554604080516323c29c0160e11b8152905160009261010090046001600160a01b03169163ae0fd47f9183916347853802916004808301926020929190829003018186803b1580156126fd57600080fd5b505afa158015612711573d6000803e3d6000fd5b505050506040513d602081101561272757600080fd5b505160048054604080516001600160e01b031960e087901b16815292830193909352602482018990523360448301526064820152905160848083019260209291908290030181600087803b15801561277e57600080fd5b505af1158015612792573d6000803e3d6000fd5b505050506040513d60208110156127a857600080fd5b5051600554604080516357ea327960e11b815290519293506101009091046001600160a01b03169163afd464f291600480820192602092909190829003018186803b1580156127f657600080fd5b505afa15801561280a573d6000803e3d6000fd5b505050506040513d602081101561282057600080fd5b50518114156128d957866001600160a01b03167f85c53e7e269cd44a12210170eb2636cdc0d111b93e101a211305e0144733995587876040518083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612899578181015183820152602001612881565b50505050905090810190601f1680156128c65780820380516001836020036101000a031916815260200191505b50935050505060405180910390a2612b66565b600560019054906101000a90046001600160a01b03166001600160a01b03166310224a986040518163ffffffff1660e01b815260040160206040518083038186803b15801561292757600080fd5b505afa15801561293b573d6000803e3d6000fd5b505050506040513d602081101561295157600080fd5b5051811415612b6657866001600160a01b03167f85c53e7e269cd44a12210170eb2636cdc0d111b93e101a211305e0144733995587876040518083815260200180602001828103825283818151815260200191508051906020019080838360005b838110156129ca5781810151838201526020016129b2565b50505050905090810190601f1680156129f75780820380516001836020036101000a031916815260200191505b50935050505060405180910390a2866001600160a01b03167fd8ff38332185c42ca14ded5671b8eb2842095abf024f6900cb42760ccb438f3387876040518083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612a75578181015183820152602001612a5d565b50505050905090810190601f168015612aa25780820380516001836020036101000a031916815260200191505b50935050505060405180910390a26040516001600160a01b0388169087156108fc029088906000818181858888f19350505050158015612ae6573d6000803e3d6000fd5b506000848152600a60205260408082208054600160ff19909116179055600554815163281adb1160e11b81526004810188905291516101009091046001600160a01b031692635035b622926024808201939182900301818387803b158015612b4d57600080fd5b505af1158015612b61573d6000803e3d6000fd5b505050505b5060019695505050505050565b60006006543414612bcb576040805162461bcd60e51b815260206004820152601960248201527f4272696467653a7377617020666565206e6f7420657175616c00000000000000604482015290519081900360640190fd5b60065415612c11576007546006546040516001600160a01b039092169181156108fc0291906000818181858888f19350505050158015612c0f573d6000803e3d6000fd5b505b6000612c1e863387613e62565b9050856001600160a01b0316336001600160a01b03167f63333d9ba80d323ed3a2c486809215e8f1fb8c645691606b862787fad572c1c7878787600654604051808581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b83811015612ca8578181015183820152602001612c90565b50505050905090810190601f168015612cd55780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b83811015612d08578181015183820152602001612cf0565b50505050905090810190601f168015612d355780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a395945050505050565b60035490565b6000612d6f6000805160206145a3833981519152336131b1565b612daa5760405162461bcd60e51b81526004018080602001828103825260228152602001806145e56022913960400191505060405180910390fd5b6000612db584613add565b9050600080516020614583833981519152811480612de057506000805160206145a383398151915281145b612e2b576040805162461bcd60e51b815260206004820152601760248201527642726964676541646d696e3a77726f6e6720636c61737360481b604482015290519081900360640190fd5b6000848460405160200180806f726573657452657175697265644e756d60801b81525060100183805190602001908083835b60208310612e7c5780518252601f199092019160209182019101612e5d565b51815160209384036101000a6000190180199092169116179052920193845250604080518085038152938201905282519201919091209250612ec2915082905033613bbf565b600354612ece82613baa565b1061308b57612edc81613a2e565b60006000805160206145a3833981519152831415612f495784612efe84613baa565b1015612f3b5760405162461bcd60e51b81526004018080602001828103825260238152602001806145606023913960400191505060405180910390fd5b506003805490859055612fb4565b600080516020614583833981519152831415612f6d57506004805490859055612fb4565b6040805162461bcd60e51b815260206004820152601760248201527642726964676541646d696e3a77726f6e6720636c61737360481b604482015290519081900360640190fd5b7fce49fc04234925e87b95750e0e50cac6d4ffcf8a696e3316b3e13bedc84ee7a8868287604051808060200180602001858152602001848152602001838103835260108152602001806f726573657452657175697265644e756d60801b815250602001838103825286818151815260200191508051906020019080838360005b8381101561304c578181015183820152602001613034565b50505050905090810190601f1680156130795780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1505b506001949350505050565b6130ae6000805160206145a3833981519152336131b1565b6130e95760405162461bcd60e51b81526004018080602001828103825260228152602001806145e56022913960400191505060405180910390fd5b6007546040516001600160a01b038084169216907f941bed5eb8a4f7abb41f1a8547c6b5fded98a6fbe47dbd60aee080690de5f0d590600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b60086020908152600091825260409182902080548351601f600260001961010060018616150201909316929092049182018490048402810184019094528084529092918391908301828280156121ae5780601f10612183576101008083540402835291602001916121ae565b6000805b60008481526001602052604090206002015481101561322457600084815260016020526040902060020180546001600160a01b0385169190839081106131f757fe5b6000918252602090912001546001600160a01b0316141561321c576001915050611fb8565b6001016131b5565b5060009392505050565b6001600160a01b03831660009081526009602052604081205481906060906002600019610100600184161502019091160461334c57604080516001600160a01b038781166024830152604480830188905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17815292518251918a169390918291908083835b602083106132da5780518252601f1990920191602091820191016132bb565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461333c576040519150601f19603f3d011682016040523d82523d6000602084013e613341565b606091505b5090925090506136d1565b613354614511565b6001600160a01b0387166000908152600960209081526040918290208251815460026001821615610100026000190190911604601f81018490049093028101606090810185529381018381529093919284928491908401828280156133fa5780601f106133cf576101008083540402835291602001916133fa565b820191906000526020600020905b8154815290600101906020018083116133dd57829003601f168201915b50505091835250506001919091015460ff1615156020918201528101519091501561357957866001600160a01b03168160000151868860405160240180838152602001826001600160a01b0316815260200192505050604051602081830303815290604052906040518082805190602001908083835b6020831061348f5780518252601f199092019160209182019101613470565b51815160001960209485036101000a01908116901991909116179052604080519490920184900390932092860180516001600160e01b03166001600160e01b031990941693909317835251855190945084935090508083835b602083106135075780518252601f1990920191602091820191016134e8565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613569576040519150601f19603f3d011682016040523d82523d6000602084013e61356e565b606091505b5090935091506136cf565b866001600160a01b03168160000151878760405160240180836001600160a01b0316815260200182815260200192505050604051602081830303815290604052906040518082805190602001908083835b602083106135e95780518252601f1990920191602091820191016135ca565b51815160001960209485036101000a01908116901991909116179052604080519490920184900390932092860180516001600160e01b03166001600160e01b031990941693909317835251855190945084935090508083835b602083106136615780518252601f199092019160209182019101613642565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146136c3576040519150601f19603f3d011682016040523d82523d6000602084013e6136c8565b606091505b5090935091505b505b8180156136fa5750805115806136fa57508080602001905160208110156136f757600080fd5b50515b613744576040805162461bcd60e51b8152602060048201526016602482015275109c9a5919d94e9dda5d1a191c985dc819985a5b195960521b604482015290519081900360640190fd5b50600195945050505050565b600061376a6000805160206145a3833981519152336131b1565b6137a55760405162461bcd60e51b81526004018080602001828103825260228152602001806145e56022913960400191505060405180910390fd5b60006137b085613add565b9050600085858560405160200180806c6d6f646966794164647265737360981b815250600d0184805190602001908083835b602083106138015780518252601f1990920191602091820191016137e2565b6001836020036101000a038019825116818451168082178552505050505050905001836001600160a01b031660601b8152601401826001600160a01b031660601b8152601401935050505060405160208183030381529060405280519060200120905061386e8133613bbf565b60035461387a82613baa565b106139825761388a82868661437d565b7fb02ddf2800cd4468f7eb14268a7c9f1b6e816aa425ed542d13d8d3a96fa44566868686604051808060200180602001856001600160a01b03168152602001846001600160a01b031681526020018381038352600d8152602001806c6d6f646966794164647265737360981b815250602001838103825286818151815260200191508051906020019080838360005b83811015613931578181015183820152602001613919565b50505050905090810190601f16801561395e5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a161397781613a2e565b60019250505061206b565b50600095945050505050565b613996611a02565b6139de576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6005805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa613a11614439565b604080516001600160a01b039092168252519081900360200190a1565b6000818152600160208190526040822082815590810182905590613a556002830182614529565b505050565b613a62611a02565b15613aa7576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6005805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613a11614439565b600080826040516020018082805190602001908083835b60208310613b135780518252601f199092019160209182019101613af4565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001209050613b598161443d565b611fb8576040805162461bcd60e51b815260206004820152601960248201527f42726964676541646d696e3a696e76616c696420636c61737300000000000000604482015290519081900360640190fd5b60009081526001602052604090206002015490565b613bc982826131b1565b15613c1b576040805162461bcd60e51b815260206004820152601b60248201527f436f6e7461696e65723a64757020616464726573732061646465640000000000604482015290519081900360640190fd5b60008054838252600160205260409091206002015410613c82576040805162461bcd60e51b815260206004820152601c60248201527f436f6e7461696e65723a746f6f206d616e792061646472657373657300000000604482015290519081900360640190fd5b6000918252600160208181526040842060020180549283018155845290922090910180546001600160a01b0319166001600160a01b03909216919091179055565b60005b600083815260016020526040902060020154811015613a5557600083815260016020526040902060020180546001600160a01b038416919083908110613d0857fe5b6000918252602090912001546001600160a01b03161415613de757600083815260016020526040902060020180546000198101908110613d4457fe5b60009182526020808320909101548583526001909152604090912060020180546001600160a01b039092169183908110613d7a57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039490941693909317909255848152600190915260409020600201805480613dbf57fe5b600082815260209020810160001990810180546001600160a01b031916905501905550613def565b600101613cc6565b5050565b600081815260016020908152604091829020600201805483518184028101840190945280845260609392830182828015613e5657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613e38575b50505050509050919050565b6001600160a01b038316600090815260086020526040812054819060609060026000196101006001841615020190911604613f8657604080516001600160a01b038781166024830152306044830152606480830188905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251918a169390918291908083835b60208310613f145780518252601f199092019160209182019101613ef5565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613f76576040519150601f19603f3d011682016040523d82523d6000602084013e613f7b565b606091505b50909250905061430b565b613f8e614511565b6001600160a01b0387166000908152600860209081526040918290208251815460026001821615610100026000190190911604601f81018490049093028101606090810185529381018381529093919284928491908401828280156140345780601f1061400957610100808354040283529160200191614034565b820191906000526020600020905b81548152906001019060200180831161401757829003601f168201915b50505091835250506001919091015460ff161515602091820152810151909150156141b357866001600160a01b03168160000151868860405160240180838152602001826001600160a01b0316815260200192505050604051602081830303815290604052906040518082805190602001908083835b602083106140c95780518252601f1990920191602091820191016140aa565b51815160001960209485036101000a01908116901991909116179052604080519490920184900390932092860180516001600160e01b03166001600160e01b031990941693909317835251855190945084935090508083835b602083106141415780518252601f199092019160209182019101614122565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146141a3576040519150601f19603f3d011682016040523d82523d6000602084013e6141a8565b606091505b509093509150614309565b866001600160a01b03168160000151878760405160240180836001600160a01b0316815260200182815260200192505050604051602081830303815290604052906040518082805190602001908083835b602083106142235780518252601f199092019160209182019101614204565b51815160001960209485036101000a01908116901991909116179052604080519490920184900390932092860180516001600160e01b03166001600160e01b031990941693909317835251855190945084935090508083835b6020831061429b5780518252601f19909201916020918201910161427c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146142fd576040519150601f19603f3d011682016040523d82523d6000602084013e614302565b606091505b5090935091505b505b818015614334575080511580614334575080806020019051602081101561433157600080fd5b50515b613744576040805162461bcd60e51b8152602060048201526015602482015274109c9a5919d94e99195c1bdcda5d0819985a5b1959605a1b604482015290519081900360640190fd5b60005b60008481526001602052604090206002015481101561185a57600084815260016020526040902060020180546001600160a01b0385169190839081106143c257fe5b6000918252602090912001546001600160a01b031614156144315760008481526001602052604090206002018054839190839081106143fd57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555050613a55565b600101614380565b3390565b6000805b60025481101561447c57826002828154811061445957fe5b906000526020600020015414156144745760019150506119f7565b600101614441565b50600092915050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826144bb5760008555614501565b82601f106144d457805160ff1916838001178555614501565b82800160010185558215614501579182015b828111156145015782518255916020019190600101906144e6565b5061450d92915061454a565b5090565b60408051808201909152606081526000602082015290565b5080546000825590600052602060002090810190614547919061454a565b50565b5b8082111561450d576000815560010161454b56fe42726964676541646d696e3a696e73756666696369656e63792061646472657373657346a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62202016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c042726964676541646d696e3a6e6f207375636820616464726573732065786973747342726964676541646d696e3a6f6e6c7920757365206f776e657220746f2063616c6ca26469706673582212204cc2b3fe807b742ed23bfa25d80efe6c88d9e53210798af5defd60e46614d1cd64736f6c634300070400330cc58340b26c619cd4edc70f833d3f4d9d26f3ae7d5ef2965f81fe5495049a4f397bc5b97f629151e68146caedba62f10b47e426b38db589771a288c0861f18202016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c0e41d88711b08bdcd7556c5d2d24e0da6fa1f614cf2055f4d7e10206017cd16800000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000948c528116427ff4dc4a099ef73ad6ca7142bd90000000000000000000000003ae6f839abb088ac41a951f8e10269bd61f30de3

Deployed Bytecode

0x60806040526004361061019b5760003560e01c80638609d28c116100ec578063ceb35b0f1161008a578063e6a81ec411610064578063e6a81ec414610d10578063e9e211bd14610d25578063f46901ed14610dd8578063f60c757f14610e0b5761019b565b8063ceb35b0f14610a4e578063d5b99d3c14610b0a578063dd9b86c114610bd25761019b565b8063b07ed3a9116100c6578063b07ed3a9146107c1578063c8e369bf146107d6578063c8fd90f9146108d7578063cb08e3ca1461099a5761019b565b80638609d28c146105c757806391c40bf7146106f0578063abd108ba146107ac5761019b565b806334e199071161015957806354cf2aeb1161013357806354cf2aeb1461055e5780635c975abb1461057357806364908649146105885780638456cb59146105b25761019b565b806334e19907146104f55780633f4ba83a1461051f578063521cb590146105345761019b565b8062674f63146101a0578063017e7e581461026557806302c1927c1461029657806306fdde031461037d5780631d75807c146104075780632c2df7421461042e575b600080fd5b3480156101ac57600080fd5b50610263600480360360608110156101c357600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156101ed57600080fd5b8201836020820111156101ff57600080fd5b803590602001918460018302840111600160201b8311171561022057600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505050503515159050610e3e565b005b34801561027157600080fd5b5061027a610f04565b604080516001600160a01b039092168252519081900360200190f35b3480156102a257600080fd5b50610369600480360360a08110156102b957600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b8111156102f357600080fd5b82018360208201111561030557600080fd5b803590602001918460018302840111600160201b8311171561032657600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505091359250610f13915050565b604080519115158252519081900360200190f35b34801561038957600080fd5b50610392611612565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103cc5781810151838201526020016103b4565b50505050905090810190601f1680156103f95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561041357600080fd5b5061041c611634565b60408051918252519081900360200190f35b34801561043a57600080fd5b506102636004803603606081101561045157600080fd5b810190602081018135600160201b81111561046b57600080fd5b82018360208201111561047d57600080fd5b803590602001918460018302840111600160201b8311171561049e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b03833581169450602090930135909216915061163a9050565b34801561050157600080fd5b506102636004803603602081101561051857600080fd5b5035611860565b34801561052b57600080fd5b506102636118e7565b34801561054057600080fd5b506103696004803603602081101561055757600080fd5b5035611962565b34801561056a57600080fd5b5061041c6119fc565b34801561057f57600080fd5b50610369611a02565b34801561059457600080fd5b50610369600480360360208110156105ab57600080fd5b5035611a0b565b3480156105be57600080fd5b50610263611a20565b610263600480360360408110156105dd57600080fd5b810190602081018135600160201b8111156105f757600080fd5b82018360208201111561060957600080fd5b803590602001918460018302840111600160201b8311171561062a57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561067c57600080fd5b82018360208201111561068e57600080fd5b803590602001918460018302840111600160201b831117156106af57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611a99945050505050565b3480156106fc57600080fd5b506103696004803603604081101561071357600080fd5b810190602081018135600160201b81111561072d57600080fd5b82018360208201111561073f57600080fd5b803590602001918460018302840111600160201b8311171561076057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550505090356001600160a01b03169150611c5a9050565b3480156107b857600080fd5b5061027a611fbe565b3480156107cd57600080fd5b5061027a611fd2565b3480156107e257600080fd5b50610887600480360360208110156107f957600080fd5b810190602081018135600160201b81111561081357600080fd5b82018360208201111561082557600080fd5b803590602001918460018302840111600160201b8311171561084657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612053945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156108c35781810151838201526020016108ab565b505050509050019250505060405180910390f35b3480156108e357600080fd5b50610263600480360360608110156108fa57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561092457600080fd5b82018360208201111561093657600080fd5b803590602001918460018302840111600160201b8311171561095757600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505050503515159050612072565b3480156109a657600080fd5b506109cd600480360360208110156109bd57600080fd5b50356001600160a01b0316612117565b60405180806020018315158152602001828103825284818151815260200191508051906020019080838360005b83811015610a125781810151838201526020016109fa565b50505050905090810190601f168015610a3f5780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b348015610a5a57600080fd5b5061036960048036036040811015610a7157600080fd5b810190602081018135600160201b811115610a8b57600080fd5b820183602082011115610a9d57600080fd5b803590602001918460018302840111600160201b83111715610abe57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550505090356001600160a01b031691506121c19050565b348015610b1657600080fd5b5061036960048036036080811015610b2d57600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b811115610b5c57600080fd5b820183602082011115610b6e57600080fd5b803590602001918460018302840111600160201b83111715610b8f57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505091359250612421915050565b61036960048036036080811015610be857600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b811115610c1757600080fd5b820183602082011115610c2957600080fd5b803590602001918460018302840111600160201b83111715610c4a57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b811115610c9c57600080fd5b820183602082011115610cae57600080fd5b803590602001918460018302840111600160201b83111715610ccf57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612b73945050505050565b348015610d1c57600080fd5b5061041c612d4f565b348015610d3157600080fd5b5061036960048036036040811015610d4857600080fd5b810190602081018135600160201b811115610d6257600080fd5b820183602082011115610d7457600080fd5b803590602001918460018302840111600160201b83111715610d9557600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505091359250612d55915050565b348015610de457600080fd5b5061026360048036036020811015610dfb57600080fd5b50356001600160a01b0316613096565b348015610e1757600080fd5b506109cd60048036036020811015610e2e57600080fd5b50356001600160a01b0316613145565b610e56600080516020614583833981519152336131b1565b610e9f576040805162461bcd60e51b8152602060048201526015602482015274213934b233b29d3bb937b7339037b832b930ba37b960591b604482015290519081900360640190fd5b6040805180820182528381528215156020808301919091526001600160a01b038616600090815260088252929092208151805192939192610ee39284920190614485565b50602091909101516001909101805460ff1916911515919091179055505050565b6007546001600160a01b031681565b6000610f2d600080516020614583833981519152336131b1565b610f76576040805162461bcd60e51b8152602060048201526015602482015274213934b233b29d3bb937b7339037b832b930ba37b960591b604482015290519081900360640190fd5b610f7e611a02565b15610fc3576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b8360008111611011576040805162461bcd60e51b815260206004820152601560248201527404272696467653a76616c7565206e656564203e203605c1b604482015290519081900360640190fd5b85858560405160200180846001600160a01b031660601b815260140183815260200182805190602001908083835b6020831061105e5780518252601f19909201916020918201910161103f565b6001836020036101000a03801982511681845116808217855250505050505090500193505050506040516020818303038152906040528051906020012083146110e9576040805162461bcd60e51b81526020600482015260186024820152774272696467653a7461736b486173682069732077726f6e6760401b604482015290519081900360640190fd5b6000838152600a602052604090205460ff1615611148576040805162461bcd60e51b81526020600482015260186024820152774272696467653a74782066696c6c656420616c726561647960401b604482015290519081900360640190fd5b600554604080516323c29c0160e11b8152905160009261010090046001600160a01b03169163ae0fd47f9183916347853802916004808301926020929190829003018186803b15801561119a57600080fd5b505afa1580156111ae573d6000803e3d6000fd5b505050506040513d60208110156111c457600080fd5b505160048054604080516001600160e01b031960e087901b16815292830193909352602482018990523360448301526064820152905160848083019260209291908290030181600087803b15801561121b57600080fd5b505af115801561122f573d6000803e3d6000fd5b505050506040513d602081101561124557600080fd5b5051600554604080516357ea327960e11b815290519293506101009091046001600160a01b03169163afd464f291600480820192602092909190829003018186803b15801561129357600080fd5b505afa1580156112a7573d6000803e3d6000fd5b505050506040513d60208110156112bd57600080fd5b505181141561138057876001600160a01b0316876001600160a01b03167f91b4005f248ece53c5402f0c547c6a472d18676fbb0e2e15029d4869140cbe2088886040518083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611340578181015183820152602001611328565b50505050905090810190601f16801561136d5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a3611602565b600560019054906101000a90046001600160a01b03166001600160a01b03166310224a986040518163ffffffff1660e01b815260040160206040518083038186803b1580156113ce57600080fd5b505afa1580156113e2573d6000803e3d6000fd5b505050506040513d60208110156113f857600080fd5b505181141561160257600061140e89898961322e565b9050886001600160a01b0316886001600160a01b03167f91b4005f248ece53c5402f0c547c6a472d18676fbb0e2e15029d4869140cbe2089896040518083815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561148a578181015183820152602001611472565b50505050905090810190601f1680156114b75780820380516001836020036101000a031916815260200191505b50935050505060405180910390a3886001600160a01b0316886001600160a01b03167f044513e921a12ac6560730ac3063f7946fdcb715deb39bc6f84c38be8083648a89896040518083815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561153f578181015183820152602001611527565b50505050905090810190601f16801561156c5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a36000858152600a60205260408082208054600160ff19909116179055600554815163281adb1160e11b81526004810189905291516101009091046001600160a01b031692635035b622926024808201939182900301818387803b1580156115e057600080fd5b505af11580156115f4573d6000803e3d6000fd5b505050508093505050611608565b60019250505b5095945050505050565b6040518060400160405280600681526020016542726964676560d01b81525081565b60045490565b611642611a02565b61168a576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6001600160a01b0381166116dc576040805162461bcd60e51b81526020600482015260146024820152734272696467653a77726f6e67206164647265737360601b604482015290519081900360640190fd5b60006116e9848484613750565b9050801561185a576000846040516020018082805190602001908083835b602083106117265780518252601f199092019160209182019101611707565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090507f397bc5b97f629151e68146caedba62f10b47e426b38db589771a288c0861f18260001b8114156117b35760058054610100600160a81b0319166101006001600160a01b03861602179055611858565b7fe41d88711b08bdcd7556c5d2d24e0da6fa1f614cf2055f4d7e10206017cd168081141561185857600560019054906101000a90046001600160a01b03166001600160a01b031663b0d80346846040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b15801561183f57600080fd5b505af1158015611853573d6000803e3d6000fd5b505050505b505b50505050565b6118786000805160206145a3833981519152336131b1565b6118b35760405162461bcd60e51b81526004018080602001828103825260228152602001806145e56022913960400191505060405180910390fd5b6006546040518291907fad321f810529281bbb90384fd6fecbdda41509a5ccd7bd5aed986ed827f6a02690600090a3600655565b6119117f0cc58340b26c619cd4edc70f833d3f4d9d26f3ae7d5ef2965f81fe5495049a4f336131b1565b611958576040805162461bcd60e51b8152602060048201526013602482015272213934b233b29d3bb937b733903830bab9b2b960691b604482015290519081900360640190fd5b61196061398e565b565b600061197c6000805160206145a3833981519152336131b1565b6119b75760405162461bcd60e51b81526004018080602001828103825260228152602001806145e56022913960400191505060405180910390fd5b6119c082613a2e565b6040805183815290517f468b360fa155a4c5fdf0cb38ce238407e41508a56023e7536088c21b2cd641399181900360200190a15060015b919050565b60065481565b60055460ff1690565b600a6020526000908152604090205460ff1681565b611a4a7f0cc58340b26c619cd4edc70f833d3f4d9d26f3ae7d5ef2965f81fe5495049a4f336131b1565b611a91576040805162461bcd60e51b8152602060048201526013602482015272213934b233b29d3bb937b733903830bab9b2b960691b604482015290519081900360640190fd5b611960613a5a565b600654341015611af0576040805162461bcd60e51b815260206004820152601c60248201527f4272696467653a696e73756666696369656e7420737761702066656500000000604482015290519081900360640190fd5b60065415611b36576007546006546040516001600160a01b039092169181156108fc0291906000818181858888f19350505050158015611b34573d6000803e3d6000fd5b505b336001600160a01b03167f0f0febc7655213f7f4ed640f722413acbfa5bab0fac4cd58ae8792c618e2ab3760065434038484600654604051808581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b83811015611bb8578181015183820152602001611ba0565b50505050905090810190601f168015611be55780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b83811015611c18578181015183820152602001611c00565b50505050905090810190601f168015611c455780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a25050565b6000611c746000805160206145a3833981519152336131b1565b611caf5760405162461bcd60e51b81526004018080602001828103825260228152602001806145e56022913960400191505060405180910390fd5b6000611cba84613add565b90507fe41d88711b08bdcd7556c5d2d24e0da6fa1f614cf2055f4d7e10206017cd16808114801590611d0c57507f397bc5b97f629151e68146caedba62f10b47e426b38db589771a288c0861f1828114155b611d57576040805162461bcd60e51b815260206004820152601760248201527642726964676541646d696e3a77726f6e6720636c61737360481b604482015290519081900360640190fd5b611d6181846131b1565b611d9c5760405162461bcd60e51b81526004018080602001828103825260228152602001806145c36022913960400191505060405180910390fd5b6000805160206145a3833981519152811415611dfa57600354611dbe82613baa565b11611dfa5760405162461bcd60e51b81526004018080602001828103825260238152602001806145606023913960400191505060405180910390fd5b6000848460405160200180806a64726f704164647265737360a81b815250600b0183805190602001908083835b60208310611e465780518252601f199092019160209182019101611e27565b6001836020036101000a038019825116818451168082178552505050505050905001826001600160a01b031660601b815260140192505050604051602081830303815290604052805190602001209050611ea08133613bbf565b600354611eac82613baa565b10611fb157611ebb8285613cc3565b7fb02ddf2800cd4468f7eb14268a7c9f1b6e816aa425ed542d13d8d3a96fa44566858586604051808060200180602001856001600160a01b03168152602001846001600160a01b031681526020018381038352600b8152602001806a64726f704164647265737360a81b815250602001838103825286818151815260200191508051906020019080838360005b83811015611f60578181015183820152602001611f48565b50505050905090810190601f168015611f8d5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1611fa681613a2e565b600192505050611fb8565b6000925050505b92915050565b60055461010090046001600160a01b031690565b6000600560019054906101000a90046001600160a01b03166001600160a01b031663b07ed3a96040518163ffffffff1660e01b815260040160206040518083038186803b15801561202257600080fd5b505afa158015612036573d6000803e3d6000fd5b505050506040513d602081101561204c57600080fd5b5051905090565b6060600061206083613add565b905061206b81613df3565b9392505050565b61208a600080516020614583833981519152336131b1565b6120d3576040805162461bcd60e51b8152602060048201526015602482015274213934b233b29d3bb937b7339037b832b930ba37b960591b604482015290519081900360640190fd5b6040805180820182528381528215156020808301919091526001600160a01b038616600090815260098252929092208151805192939192610ee39284920190614485565b60096020908152600091825260409182902080548351601f600260001961010060018616150201909316929092049182018490048402810184019094528084529092918391908301828280156121ae5780601f10612183576101008083540402835291602001916121ae565b820191906000526020600020905b81548152906001019060200180831161219157829003601f168201915b5050506001909301549192505060ff1682565b60006121db6000805160206145a3833981519152336131b1565b6122165760405162461bcd60e51b81526004018080602001828103825260228152602001806145e56022913960400191505060405180910390fd5b600061222184613add565b90507fe41d88711b08bdcd7556c5d2d24e0da6fa1f614cf2055f4d7e10206017cd1680811480159061227357507f397bc5b97f629151e68146caedba62f10b47e426b38db589771a288c0861f1828114155b6122be576040805162461bcd60e51b815260206004820152601760248201527642726964676541646d696e3a77726f6e6720636c61737360481b604482015290519081900360640190fd5b600084846040516020018080696164644164647265737360b01b815250600a0183805190602001908083835b602083106123095780518252601f1990920191602091820191016122ea565b6001836020036101000a038019825116818451168082178552505050505050905001826001600160a01b031660601b8152601401925050506040516020818303038152906040528051906020012090506123638133613bbf565b60035461236f82613baa565b10611fb15761237e8285613bbf565b7fb02ddf2800cd4468f7eb14268a7c9f1b6e816aa425ed542d13d8d3a96fa44566858586604051808060200180602001856001600160a01b03168152602001846001600160a01b031681526020018381038352600a815260200180696164644164647265737360b01b8152506020018381038252868181518152602001915080519060200190808383600083811015611f60578181015183820152602001611f48565b600061243b600080516020614583833981519152336131b1565b612484576040805162461bcd60e51b8152602060048201526015602482015274213934b233b29d3bb937b7339037b832b930ba37b960591b604482015290519081900360640190fd5b61248c611a02565b156124d1576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b836000811161251f576040805162461bcd60e51b815260206004820152601560248201527404272696467653a76616c7565206e656564203e203605c1b604482015290519081900360640190fd5b84471015612574576040805162461bcd60e51b815260206004820152601e60248201527f4272696467653a6e6f7420656e6f756768206e617469766520746f6b656e0000604482015290519081900360640190fd5b85858560405160200180846001600160a01b031660601b815260140183815260200182805190602001908083835b602083106125c15780518252601f1990920191602091820191016125a2565b6001836020036101000a038019825116818451168082178552505050505050905001935050505060405160208183030381529060405280519060200120831461264c576040805162461bcd60e51b81526020600482015260186024820152774272696467653a7461736b486173682069732077726f6e6760401b604482015290519081900360640190fd5b6000838152600a602052604090205460ff16156126ab576040805162461bcd60e51b81526020600482015260186024820152774272696467653a74782066696c6c656420616c726561647960401b604482015290519081900360640190fd5b600554604080516323c29c0160e11b8152905160009261010090046001600160a01b03169163ae0fd47f9183916347853802916004808301926020929190829003018186803b1580156126fd57600080fd5b505afa158015612711573d6000803e3d6000fd5b505050506040513d602081101561272757600080fd5b505160048054604080516001600160e01b031960e087901b16815292830193909352602482018990523360448301526064820152905160848083019260209291908290030181600087803b15801561277e57600080fd5b505af1158015612792573d6000803e3d6000fd5b505050506040513d60208110156127a857600080fd5b5051600554604080516357ea327960e11b815290519293506101009091046001600160a01b03169163afd464f291600480820192602092909190829003018186803b1580156127f657600080fd5b505afa15801561280a573d6000803e3d6000fd5b505050506040513d602081101561282057600080fd5b50518114156128d957866001600160a01b03167f85c53e7e269cd44a12210170eb2636cdc0d111b93e101a211305e0144733995587876040518083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612899578181015183820152602001612881565b50505050905090810190601f1680156128c65780820380516001836020036101000a031916815260200191505b50935050505060405180910390a2612b66565b600560019054906101000a90046001600160a01b03166001600160a01b03166310224a986040518163ffffffff1660e01b815260040160206040518083038186803b15801561292757600080fd5b505afa15801561293b573d6000803e3d6000fd5b505050506040513d602081101561295157600080fd5b5051811415612b6657866001600160a01b03167f85c53e7e269cd44a12210170eb2636cdc0d111b93e101a211305e0144733995587876040518083815260200180602001828103825283818151815260200191508051906020019080838360005b838110156129ca5781810151838201526020016129b2565b50505050905090810190601f1680156129f75780820380516001836020036101000a031916815260200191505b50935050505060405180910390a2866001600160a01b03167fd8ff38332185c42ca14ded5671b8eb2842095abf024f6900cb42760ccb438f3387876040518083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612a75578181015183820152602001612a5d565b50505050905090810190601f168015612aa25780820380516001836020036101000a031916815260200191505b50935050505060405180910390a26040516001600160a01b0388169087156108fc029088906000818181858888f19350505050158015612ae6573d6000803e3d6000fd5b506000848152600a60205260408082208054600160ff19909116179055600554815163281adb1160e11b81526004810188905291516101009091046001600160a01b031692635035b622926024808201939182900301818387803b158015612b4d57600080fd5b505af1158015612b61573d6000803e3d6000fd5b505050505b5060019695505050505050565b60006006543414612bcb576040805162461bcd60e51b815260206004820152601960248201527f4272696467653a7377617020666565206e6f7420657175616c00000000000000604482015290519081900360640190fd5b60065415612c11576007546006546040516001600160a01b039092169181156108fc0291906000818181858888f19350505050158015612c0f573d6000803e3d6000fd5b505b6000612c1e863387613e62565b9050856001600160a01b0316336001600160a01b03167f63333d9ba80d323ed3a2c486809215e8f1fb8c645691606b862787fad572c1c7878787600654604051808581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b83811015612ca8578181015183820152602001612c90565b50505050905090810190601f168015612cd55780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b83811015612d08578181015183820152602001612cf0565b50505050905090810190601f168015612d355780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a395945050505050565b60035490565b6000612d6f6000805160206145a3833981519152336131b1565b612daa5760405162461bcd60e51b81526004018080602001828103825260228152602001806145e56022913960400191505060405180910390fd5b6000612db584613add565b9050600080516020614583833981519152811480612de057506000805160206145a383398151915281145b612e2b576040805162461bcd60e51b815260206004820152601760248201527642726964676541646d696e3a77726f6e6720636c61737360481b604482015290519081900360640190fd5b6000848460405160200180806f726573657452657175697265644e756d60801b81525060100183805190602001908083835b60208310612e7c5780518252601f199092019160209182019101612e5d565b51815160209384036101000a6000190180199092169116179052920193845250604080518085038152938201905282519201919091209250612ec2915082905033613bbf565b600354612ece82613baa565b1061308b57612edc81613a2e565b60006000805160206145a3833981519152831415612f495784612efe84613baa565b1015612f3b5760405162461bcd60e51b81526004018080602001828103825260238152602001806145606023913960400191505060405180910390fd5b506003805490859055612fb4565b600080516020614583833981519152831415612f6d57506004805490859055612fb4565b6040805162461bcd60e51b815260206004820152601760248201527642726964676541646d696e3a77726f6e6720636c61737360481b604482015290519081900360640190fd5b7fce49fc04234925e87b95750e0e50cac6d4ffcf8a696e3316b3e13bedc84ee7a8868287604051808060200180602001858152602001848152602001838103835260108152602001806f726573657452657175697265644e756d60801b815250602001838103825286818151815260200191508051906020019080838360005b8381101561304c578181015183820152602001613034565b50505050905090810190601f1680156130795780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1505b506001949350505050565b6130ae6000805160206145a3833981519152336131b1565b6130e95760405162461bcd60e51b81526004018080602001828103825260228152602001806145e56022913960400191505060405180910390fd5b6007546040516001600160a01b038084169216907f941bed5eb8a4f7abb41f1a8547c6b5fded98a6fbe47dbd60aee080690de5f0d590600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b60086020908152600091825260409182902080548351601f600260001961010060018616150201909316929092049182018490048402810184019094528084529092918391908301828280156121ae5780601f10612183576101008083540402835291602001916121ae565b6000805b60008481526001602052604090206002015481101561322457600084815260016020526040902060020180546001600160a01b0385169190839081106131f757fe5b6000918252602090912001546001600160a01b0316141561321c576001915050611fb8565b6001016131b5565b5060009392505050565b6001600160a01b03831660009081526009602052604081205481906060906002600019610100600184161502019091160461334c57604080516001600160a01b038781166024830152604480830188905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17815292518251918a169390918291908083835b602083106132da5780518252601f1990920191602091820191016132bb565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461333c576040519150601f19603f3d011682016040523d82523d6000602084013e613341565b606091505b5090925090506136d1565b613354614511565b6001600160a01b0387166000908152600960209081526040918290208251815460026001821615610100026000190190911604601f81018490049093028101606090810185529381018381529093919284928491908401828280156133fa5780601f106133cf576101008083540402835291602001916133fa565b820191906000526020600020905b8154815290600101906020018083116133dd57829003601f168201915b50505091835250506001919091015460ff1615156020918201528101519091501561357957866001600160a01b03168160000151868860405160240180838152602001826001600160a01b0316815260200192505050604051602081830303815290604052906040518082805190602001908083835b6020831061348f5780518252601f199092019160209182019101613470565b51815160001960209485036101000a01908116901991909116179052604080519490920184900390932092860180516001600160e01b03166001600160e01b031990941693909317835251855190945084935090508083835b602083106135075780518252601f1990920191602091820191016134e8565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613569576040519150601f19603f3d011682016040523d82523d6000602084013e61356e565b606091505b5090935091506136cf565b866001600160a01b03168160000151878760405160240180836001600160a01b0316815260200182815260200192505050604051602081830303815290604052906040518082805190602001908083835b602083106135e95780518252601f1990920191602091820191016135ca565b51815160001960209485036101000a01908116901991909116179052604080519490920184900390932092860180516001600160e01b03166001600160e01b031990941693909317835251855190945084935090508083835b602083106136615780518252601f199092019160209182019101613642565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146136c3576040519150601f19603f3d011682016040523d82523d6000602084013e6136c8565b606091505b5090935091505b505b8180156136fa5750805115806136fa57508080602001905160208110156136f757600080fd5b50515b613744576040805162461bcd60e51b8152602060048201526016602482015275109c9a5919d94e9dda5d1a191c985dc819985a5b195960521b604482015290519081900360640190fd5b50600195945050505050565b600061376a6000805160206145a3833981519152336131b1565b6137a55760405162461bcd60e51b81526004018080602001828103825260228152602001806145e56022913960400191505060405180910390fd5b60006137b085613add565b9050600085858560405160200180806c6d6f646966794164647265737360981b815250600d0184805190602001908083835b602083106138015780518252601f1990920191602091820191016137e2565b6001836020036101000a038019825116818451168082178552505050505050905001836001600160a01b031660601b8152601401826001600160a01b031660601b8152601401935050505060405160208183030381529060405280519060200120905061386e8133613bbf565b60035461387a82613baa565b106139825761388a82868661437d565b7fb02ddf2800cd4468f7eb14268a7c9f1b6e816aa425ed542d13d8d3a96fa44566868686604051808060200180602001856001600160a01b03168152602001846001600160a01b031681526020018381038352600d8152602001806c6d6f646966794164647265737360981b815250602001838103825286818151815260200191508051906020019080838360005b83811015613931578181015183820152602001613919565b50505050905090810190601f16801561395e5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a161397781613a2e565b60019250505061206b565b50600095945050505050565b613996611a02565b6139de576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6005805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa613a11614439565b604080516001600160a01b039092168252519081900360200190a1565b6000818152600160208190526040822082815590810182905590613a556002830182614529565b505050565b613a62611a02565b15613aa7576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6005805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613a11614439565b600080826040516020018082805190602001908083835b60208310613b135780518252601f199092019160209182019101613af4565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001209050613b598161443d565b611fb8576040805162461bcd60e51b815260206004820152601960248201527f42726964676541646d696e3a696e76616c696420636c61737300000000000000604482015290519081900360640190fd5b60009081526001602052604090206002015490565b613bc982826131b1565b15613c1b576040805162461bcd60e51b815260206004820152601b60248201527f436f6e7461696e65723a64757020616464726573732061646465640000000000604482015290519081900360640190fd5b60008054838252600160205260409091206002015410613c82576040805162461bcd60e51b815260206004820152601c60248201527f436f6e7461696e65723a746f6f206d616e792061646472657373657300000000604482015290519081900360640190fd5b6000918252600160208181526040842060020180549283018155845290922090910180546001600160a01b0319166001600160a01b03909216919091179055565b60005b600083815260016020526040902060020154811015613a5557600083815260016020526040902060020180546001600160a01b038416919083908110613d0857fe5b6000918252602090912001546001600160a01b03161415613de757600083815260016020526040902060020180546000198101908110613d4457fe5b60009182526020808320909101548583526001909152604090912060020180546001600160a01b039092169183908110613d7a57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039490941693909317909255848152600190915260409020600201805480613dbf57fe5b600082815260209020810160001990810180546001600160a01b031916905501905550613def565b600101613cc6565b5050565b600081815260016020908152604091829020600201805483518184028101840190945280845260609392830182828015613e5657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613e38575b50505050509050919050565b6001600160a01b038316600090815260086020526040812054819060609060026000196101006001841615020190911604613f8657604080516001600160a01b038781166024830152306044830152606480830188905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251918a169390918291908083835b60208310613f145780518252601f199092019160209182019101613ef5565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613f76576040519150601f19603f3d011682016040523d82523d6000602084013e613f7b565b606091505b50909250905061430b565b613f8e614511565b6001600160a01b0387166000908152600860209081526040918290208251815460026001821615610100026000190190911604601f81018490049093028101606090810185529381018381529093919284928491908401828280156140345780601f1061400957610100808354040283529160200191614034565b820191906000526020600020905b81548152906001019060200180831161401757829003601f168201915b50505091835250506001919091015460ff161515602091820152810151909150156141b357866001600160a01b03168160000151868860405160240180838152602001826001600160a01b0316815260200192505050604051602081830303815290604052906040518082805190602001908083835b602083106140c95780518252601f1990920191602091820191016140aa565b51815160001960209485036101000a01908116901991909116179052604080519490920184900390932092860180516001600160e01b03166001600160e01b031990941693909317835251855190945084935090508083835b602083106141415780518252601f199092019160209182019101614122565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146141a3576040519150601f19603f3d011682016040523d82523d6000602084013e6141a8565b606091505b509093509150614309565b866001600160a01b03168160000151878760405160240180836001600160a01b0316815260200182815260200192505050604051602081830303815290604052906040518082805190602001908083835b602083106142235780518252601f199092019160209182019101614204565b51815160001960209485036101000a01908116901991909116179052604080519490920184900390932092860180516001600160e01b03166001600160e01b031990941693909317835251855190945084935090508083835b6020831061429b5780518252601f19909201916020918201910161427c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146142fd576040519150601f19603f3d011682016040523d82523d6000602084013e614302565b606091505b5090935091505b505b818015614334575080511580614334575080806020019051602081101561433157600080fd5b50515b613744576040805162461bcd60e51b8152602060048201526015602482015274109c9a5919d94e99195c1bdcda5d0819985a5b1959605a1b604482015290519081900360640190fd5b60005b60008481526001602052604090206002015481101561185a57600084815260016020526040902060020180546001600160a01b0385169190839081106143c257fe5b6000918252602090912001546001600160a01b031614156144315760008481526001602052604090206002018054839190839081106143fd57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555050613a55565b600101614380565b3390565b6000805b60025481101561447c57826002828154811061445957fe5b906000526020600020015414156144745760019150506119f7565b600101614441565b50600092915050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826144bb5760008555614501565b82601f106144d457805160ff1916838001178555614501565b82800160010185558215614501579182015b828111156145015782518255916020019190600101906144e6565b5061450d92915061454a565b5090565b60408051808201909152606081526000602082015290565b5080546000825590600052602060002090810190614547919061454a565b50565b5b8082111561450d576000815560010161454b56fe42726964676541646d696e3a696e73756666696369656e63792061646472657373657346a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62202016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c042726964676541646d696e3a6e6f207375636820616464726573732065786973747342726964676541646d696e3a6f6e6c7920757365206f776e657220746f2063616c6ca26469706673582212204cc2b3fe807b742ed23bfa25d80efe6c88d9e53210798af5defd60e46614d1cd64736f6c63430007040033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000948c528116427ff4dc4a099ef73ad6ca7142bd90000000000000000000000003ae6f839abb088ac41a951f8e10269bd61f30de3

-----Decoded View---------------
Arg [0] : _owners (address[]): 0x0948c528116427FF4dC4a099EF73AD6cA7142BD9,0x3ae6F839abB088ac41a951f8e10269bd61f30DE3
Arg [1] : _ownerRequired (uint256): 1

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [3] : 0000000000000000000000000948c528116427ff4dc4a099ef73ad6ca7142bd9
Arg [4] : 0000000000000000000000003ae6f839abb088ac41a951f8e10269bd61f30de3


Deployed Bytecode Sourcemap

23997:8104:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29538:187;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29538:187:0;;;;;;;;;;;;;;;-1:-1:-1;;;29538:187:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;29538:187:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29538:187:0;;-1:-1:-1;;;;29538:187:0;;;;-1:-1:-1;29538:187:0;:::i;:::-;;24188:20;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;24188:20:0;;;;;;;;;;;;;;27616:980;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27616:980:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27616:980:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27616:980:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27616:980:0;;-1:-1:-1;;27616:980:0;;;-1:-1:-1;27616:980:0;;-1:-1:-1;;27616:980:0:i;:::-;;;;;;;;;;;;;;;;;;24080:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8558:107;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;28604:563;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;28604:563:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;28604:563:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28604:563:0;;-1:-1:-1;;;;;;;28604:563:0;;;;;-1:-1:-1;28604:563:0;;;;;;;;;-1:-1:-1;28604:563:0;;-1:-1:-1;28604:563:0:i;29930:143::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29930:143:0;;:::i;29464:66::-;;;;;;;;;;;;;:::i;12385:171::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12385:171:0;;:::i;24159:22::-;;;;;;;;;;;;;:::i;2093:86::-;;;;;;;;;;;;;:::i;24436:40::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24436:40:0;;:::i;29394:62::-;;;;;;;;;;;;;:::i;25792:350::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25792:350:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25792:350:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25792:350:0;;;;;;;;-1:-1:-1;25792:350:0;;-1:-1:-1;;;;;25792:350:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25792:350:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25792:350:0;;-1:-1:-1;25792:350:0;;-1:-1:-1;;;;;25792:350:0:i;10764:931::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;10764:931:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;10764:931:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10764:931:0;;-1:-1:-1;;;10764:931:0;;-1:-1:-1;;;;;10764:931:0;;-1:-1:-1;10764:931:0;;-1:-1:-1;10764:931:0:i;29175:97::-;;;;;;;;;;;;;:::i;29280:106::-;;;;;;;;;;;;;:::i;8251:190::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;8251:190:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;8251:190:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8251:190:0;;-1:-1:-1;8251:190:0;;-1:-1:-1;;;;;8251:190:0:i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29733:189;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29733:189:0;;;;;;;;;;;;;;;-1:-1:-1;;;29733:189:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;29733:189:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29733:189:0;;-1:-1:-1;;;;29733:189:0;;;;-1:-1:-1;29733:189:0;:::i;24372:57::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24372:57:0;-1:-1:-1;;;;;24372:57:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11703:674;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11703:674:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11703:674:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11703:674:0;;-1:-1:-1;;;11703:674:0;;-1:-1:-1;;;;;11703:674:0;;-1:-1:-1;11703:674:0;;-1:-1:-1;11703:674:0:i;26629:979::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26629:979:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26629:979:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26629:979:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26629:979:0;;-1:-1:-1;;26629:979:0;;;-1:-1:-1;26629:979:0;;-1:-1:-1;;26629:979:0:i;26150:471::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26150:471:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26150:471:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26150:471:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26150:471:0;;;;;;;;-1:-1:-1;26150:471:0;;-1:-1:-1;;;;;26150:471:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26150:471:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26150:471:0;;-1:-1:-1;26150:471:0;;-1:-1:-1;;;;;26150:471:0:i;8449:101::-;;;;;;;;;;;;;:::i;8673:1183::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;8673:1183:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;8673:1183:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8673:1183:0;;-1:-1:-1;;8673:1183:0;;;-1:-1:-1;8673:1183:0;;-1:-1:-1;;8673:1183:0:i;30081:133::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30081:133:0;-1:-1:-1;;;;;30081:133:0;;:::i;24308:57::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24308:57:0;-1:-1:-1;;;;;24308:57:0;;:::i;29538:187::-;25322:43;-1:-1:-1;;;;;;;;;;;25354:10:0;25322:17;:43::i;:::-;25314:77;;;;;-1:-1:-1;;;25314:77:0;;;;;;;;;;;;-1:-1:-1;;;25314:77:0;;;;;;;;;;;;;;;29681:36:::1;::::0;;;;::::1;::::0;;;;;;::::1;;;::::0;;::::1;::::0;;;;-1:-1:-1;;;;;29656:22:0;::::1;-1:-1:-1::0;29656:22:0;;;:15:::1;:22:::0;;;;;;:61;;;;29681:36;;29656:22;;:61:::1;::::0;:22;;:61:::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;29656:61:0::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;::::0;;-1:-1:-1;;29656:61:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;;;29538:187:0:o;24188:20::-;;;-1:-1:-1;;;;;24188:20:0;;:::o;27616:980::-;27802:4;25322:43;-1:-1:-1;;;;;;;;;;;25354:10:0;25322:17;:43::i;:::-;25314:77;;;;;-1:-1:-1;;;25314:77:0;;;;;;;;;;;;-1:-1:-1;;;25314:77:0;;;;;;;;;;;;;;;2419:8:::1;:6;:8::i;:::-;2418:9;2410:38;;;::::0;;-1:-1:-1;;;2410:38:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;2410:38:0;;;;;;;;;;;;;::::1;;27781:5:::2;25617:1;25608:6;:10;25600:44;;;::::0;;-1:-1:-1;;;25600:44:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;25600:44:0;;;;;;;;;;;;;::::2;;27872:2:::3;27876:5;27883;27855:34;;;;;;-1:-1:-1::0;;;;;27855:34:0::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;;;-1:-1:-1;;27855:34:0;;;;::::3;::::0;;::::3;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27844:47;;;;;;27832:8;:59;27824:96;;;::::0;;-1:-1:-1;;;27824:96:0;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;27824:96:0;;;;;;;;;;;;;::::3;;27940:18;::::0;;;:8:::3;:18;::::0;;;;;::::3;;27939:19;27931:56;;;::::0;;-1:-1:-1;;;27931:56:0;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;27931:56:0;;;;;;;;;;;;;::::3;;28015:5;::::0;28033:20:::3;::::0;;-1:-1:-1;;;28033:20:0;;;;27998:14:::3;::::0;28015:5:::3;::::0;::::3;-1:-1:-1::0;;;;;28015:5:0::3;::::0;:17:::3;::::0;:5;;28033:18:::3;::::0;:20:::3;::::0;;::::3;::::0;::::3;::::0;;;;;;;;28015:5;28033:20;::::3;;::::0;::::3;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;-1:-1:-1::0;28033:20:0;28077:18:::3;::::0;;28015:81:::3;::::0;;-1:-1:-1;;;;;;28015:81:0::3;::::0;;;;;;;;::::3;::::0;;;;;;;;;;28065:10:::3;28015:81:::0;;;;;;;;;;;;;;;28033:20:::3;::::0;28015:81;;;;;;;-1:-1:-1;28015:81:0;;::::3;;::::0;::::3;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;-1:-1:-1::0;28015:81:0;28123:5:::3;::::0;:22:::3;::::0;;-1:-1:-1;;;28123:22:0;;;;28015:81;;-1:-1:-1;28123:5:0::3;::::0;;::::3;-1:-1:-1::0;;;;;28123:5:0::3;::::0;:20:::3;::::0;:22:::3;::::0;;::::3;::::0;28015:81:::3;::::0;28123:22;;;;;;;;:5;:22;::::3;;::::0;::::3;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;-1:-1:-1::0;28123:22:0;28113:32;::::3;28109:458;;;28188:6;-1:-1:-1::0;;;;;28167:42:0::3;28184:2;-1:-1:-1::0;;;;;28167:42:0::3;;28196:5;28203;28167:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::3;::::0;;;::::3;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28109:458;;;28241:5;;;;;;;;;-1:-1:-1::0;;;;;28241:5:0::3;-1:-1:-1::0;;;;;28241:14:0::3;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;-1:-1:-1::0;28241:16:0;28231:26;::::3;28227:340;;;28274:8;28285:37;28304:6;28312:2;28316:5;28285:18;:37::i;:::-;28274:48;;28365:6;-1:-1:-1::0;;;;;28344:42:0::3;28361:2;-1:-1:-1::0;;;;;28344:42:0::3;;28373:5;28380;28344:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::3;::::0;;;::::3;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28428:6;-1:-1:-1::0;;;;;28406:43:0::3;28424:2;-1:-1:-1::0;;;;;28406:43:0::3;;28436:5;28443;28406:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::3;::::0;;;::::3;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28464:18;::::0;;;:8:::3;:18;::::0;;;;;:25;;28485:4:::3;-1:-1:-1::0;;28464:25:0;;::::3;;::::0;;28504:5:::3;::::0;:26;;-1:-1:-1;;;28504:26:0;;::::3;::::0;::::3;::::0;;;;;28464:25:::3;28504:5:::0;;::::3;-1:-1:-1::0;;;;;28504:5:0::3;::::0;:16:::3;::::0;:26;;;;;;;;;;;28464:18;28504:5;:26;::::3;;::::0;::::3;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;28552:3;28545:10;;;;;;28227:340;28584:4;28577:11;;;25655:1;2459::::2;27616:980:::0;;;;;;;:::o;24080:38::-;;;;;;;;;;;;;;-1:-1:-1;;;24080:38:0;;;;:::o;8558:107::-;8639:18;;8558:107;:::o;28604:563::-;2696:8;:6;:8::i;:::-;2688:41;;;;;-1:-1:-1;;;2688:41:0;;;;;;;;;;;;-1:-1:-1;;;2688:41:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28730:26:0;::::1;28722:59;;;::::0;;-1:-1:-1;;;28722:59:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;28722:59:0;;;;;;;;;;;;;::::1;;28792:9;28804:44;28818:5;28825:10;28837;28804:13;:44::i;:::-;28792:56;;28863:4;28859:301;;;28884:17;28931:5;28914:23;;;;;;;;;;;;;;;;;;;;;::::0;;;;-1:-1:-1;;28914:23:0;;;;::::1;::::0;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28904:34;;;;;;28884:54;;6452:66;28970:9;;28957;:22;28953:196;;;29000:5;:31:::0;;-1:-1:-1;;;;;;29000:31:0::1;;-1:-1:-1::0;;;;;29000:31:0;::::1;;;::::0;;28953:196:::1;;;6341:66;29057:22:::0;::::1;29053:96;;;29100:5;;;;;;;;;-1:-1:-1::0;;;;;29100:5:0::1;-1:-1:-1::0;;;;;29100:21:0::1;;29122:10;29100:33;;;;;;;;;;;;;-1:-1:-1::0;;;;;29100:33:0::1;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;29053:96;28859:301;;2740:1;28604:563:::0;;;:::o;29930:143::-;7192:40;-1:-1:-1;;;;;;;;;;;7221:10:0;7192:17;:40::i;:::-;7184:87;;;;-1:-1:-1;;;7184:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30018:7:::1;::::0;30003:33:::1;::::0;30027:8;;30018:7;30003:33:::1;::::0;;;::::1;30047:7;:18:::0;29930:143::o;29464:66::-;25460:41;6230:66;25490:10;25460:17;:41::i;:::-;25452:73;;;;;-1:-1:-1;;;25452:73:0;;;;;;;;;;;;-1:-1:-1;;;25452:73:0;;;;;;;;;;;;;;;29512:10:::1;:8;:10::i;:::-;29464:66::o:0;12385:171::-;12447:4;7192:40;-1:-1:-1;;;;;;;;;;;7221:10:0;7192:17;:40::i;:::-;7184:87;;;;-1:-1:-1;;;7184:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12464:20:::1;12475:8;12464:10;:20::i;:::-;12500:26;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;-1:-1:-1::0;12544:4:0::1;7282:1;12385:171:::0;;;:::o;24159:22::-;;;;:::o;2093:86::-;2164:7;;;;2093:86;:::o;24436:40::-;;;;;;;;;;;;;;;:::o;29394:62::-;25460:41;6230:66;25490:10;25460:17;:41::i;:::-;25452:73;;;;;-1:-1:-1;;;25452:73:0;;;;;;;;;;;;-1:-1:-1;;;25452:73:0;;;;;;;;;;;;;;;29440:8:::1;:6;:8::i;25792:350::-:0;25913:7;;25900:9;:20;;25892:61;;;;;-1:-1:-1;;;25892:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;25968:7;;:12;25964:77;;26005:5;;26021:7;;25997:32;;-1:-1:-1;;;;;26005:5:0;;;;25997:32;;;;;26021:7;26005:5;25997:32;26005:5;25997:32;26021:7;26005:5;25997:32;;;;;;;;;;;;;;;;;;;;;25964:77;26070:10;-1:-1:-1;;;;;26056:78:0;;26094:7;;26082:9;:19;26103:14;26119:5;26126:7;;26056:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26056:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25792:350;;:::o;10764:931::-;10852:4;7192:40;-1:-1:-1;;;;;;;;;;;7221:10:0;7192:17;:40::i;:::-;7184:87;;;;-1:-1:-1;;;7184:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10869:17:::1;10889:19;10902:5;10889:12;:19::i;:::-;10869:39:::0;-1:-1:-1;6341:66:0::1;10927:22:::0;::::1;::::0;::::1;::::0;:48:::1;;-1:-1:-1::0;6452:66:0::1;10953:22:::0;::::1;;10927:48;10919:84;;;::::0;;-1:-1:-1;;;10919:84:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;10919:84:0;;;;;;;;;;;;;::::1;;11022:40;11040:9;11051:10;11022:17;:40::i;:::-;11014:87;;;;-1:-1:-1::0;;;11014:87:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;11118:22:0;::::1;11114:137;;;11196:15;;11163:30;11183:9;11163:19;:30::i;:::-;:48;11155:96;;;;-1:-1:-1::0;;;11155:96:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11264:16;11325:5;11332:10;11293:50;;;;;;-1:-1:-1::0;;;11293:50:0::1;;::::0;::::1;;;;;;;;;;;;;;;;;;::::0;;;;-1:-1:-1;;11293:50:0;;;;::::1;::::0;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;11293:50:0::1;;;;;;;;;;;;;;;;;;;;;;;11283:61;;;;;;11264:80;;11355:36;11370:8;11380:10;11355:14;:36::i;:::-;11439:15;;11406:29;11426:8;11406:19;:29::i;:::-;:48;11402:263;;11471:43;11492:9;11503:10;11471:20;:43::i;:::-;11534:58;11562:5;11569:10;11581;11534:58;;;;;;;;;;-1:-1:-1::0;;;;;11534:58:0::1;;;;;;-1:-1:-1::0;;;;;11534:58:0::1;;;;;;;;;;;;;;;;-1:-1:-1::0;;;11534:58:0::1;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11607:20;11618:8;11607:10;:20::i;:::-;11649:4;11642:11;;;;;;11402:263;11682:5;11675:12;;;;7282:1;10764:931:::0;;;;:::o;29175:97::-;29258:5;;;;;-1:-1:-1;;;;;29258:5:0;;29175:97::o;29280:106::-;29328:7;29355:5;;;;;;;;;-1:-1:-1;;;;;29355:5:0;-1:-1:-1;;;;;29355:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29355:23:0;;-1:-1:-1;29280:106:0;:::o;8251:190::-;8320:16;8349:17;8369:19;8382:5;8369:12;:19::i;:::-;8349:39;;8406:27;8423:9;8406:16;:27::i;:::-;8399:34;8251:190;-1:-1:-1;;;8251:190:0:o;29733:189::-;25322:43;-1:-1:-1;;;;;;;;;;;25354:10:0;25322:17;:43::i;:::-;25314:77;;;;;-1:-1:-1;;;25314:77:0;;;;;;;;;;;;-1:-1:-1;;;25314:77:0;;;;;;;;;;;;;;;29878:36:::1;::::0;;;;::::1;::::0;;;;;;::::1;;;::::0;;::::1;::::0;;;;-1:-1:-1;;;;;29852:23:0;::::1;-1:-1:-1::0;29852:23:0;;;:16:::1;:23:::0;;;;;;:62;;;;29878:36;;29852:23;;:62:::1;::::0;:23;;:62:::1;::::0;::::1;:::i;24372:57::-:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24372:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;24372:57:0;;;;;;;-1:-1:-1;;24372:57:0;;;:::o;11703:674::-;11790:4;7192:40;-1:-1:-1;;;;;;;;;;;7221:10:0;7192:17;:40::i;:::-;7184:87;;;;-1:-1:-1;;;7184:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11807:17:::1;11827:19;11840:5;11827:12;:19::i;:::-;11807:39:::0;-1:-1:-1;6341:66:0::1;11865:22:::0;::::1;::::0;::::1;::::0;:48:::1;;-1:-1:-1::0;6452:66:0::1;11891:22:::0;::::1;;11865:48;11857:84;;;::::0;;-1:-1:-1;;;11857:84:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;11857:84:0;;;;;;;;;;;;;::::1;;11954:16;12014:5;12021:10;11983:49;;;;;;-1:-1:-1::0;;;11983:49:0::1;;::::0;::::1;;;;;;;;;;;;;;;;;;::::0;;;;-1:-1:-1;;11983:49:0;;;;::::1;::::0;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;11983:49:0::1;;;;;;;;;;;;;;;;;;;;;;;11973:60;;;;;;11954:79;;12044:36;12059:8;12069:10;12044:14;:36::i;:::-;12128:15;;12095:29;12115:8;12095:19;:29::i;:::-;:48;12091:256;;12160:37;12175:9;12186:10;12160:14;:37::i;:::-;12217:57;12244:5;12251:10;12263;12217:57;;;;;;;;;;-1:-1:-1::0;;;;;12217:57:0::1;;;;;;-1:-1:-1::0;;;;;12217:57:0::1;;;;;;;;;;;;;;;;-1:-1:-1::0;;;12217:57:0::1;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;26629:979:::0;26808:4;25322:43;-1:-1:-1;;;;;;;;;;;25354:10:0;25322:17;:43::i;:::-;25314:77;;;;;-1:-1:-1;;;25314:77:0;;;;;;;;;;;;-1:-1:-1;;;25314:77:0;;;;;;;;;;;;;;;2419:8:::1;:6;:8::i;:::-;2418:9;2410:38;;;::::0;;-1:-1:-1;;;2410:38:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;2410:38:0;;;;;;;;;;;;;::::1;;26787:5:::2;25617:1;25608:6;:10;25600:44;;;::::0;;-1:-1:-1;;;25600:44:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;25600:44:0;;;;;;;;;;;;;::::2;;26863:5:::3;26838:21;:30;;26830:73;;;::::0;;-1:-1:-1;;;26830:73:0;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;::::3;::::0;;;;;;;;;;;;;::::3;;26962:2;26966:5;26973;26945:34;;;;;;-1:-1:-1::0;;;;;26945:34:0::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;;;-1:-1:-1;;26945:34:0;;;;::::3;::::0;;::::3;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26934:47;;;;;;26922:8;:59;26914:96;;;::::0;;-1:-1:-1;;;26914:96:0;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;26914:96:0;;;;;;;;;;;;;::::3;;27030:18;::::0;;;:8:::3;:18;::::0;;;;;::::3;;27029:19;27021:56;;;::::0;;-1:-1:-1;;;27021:56:0;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;27021:56:0;;;;;;;;;;;;;::::3;;27105:5;::::0;27123:20:::3;::::0;;-1:-1:-1;;;27123:20:0;;;;27088:14:::3;::::0;27105:5:::3;::::0;::::3;-1:-1:-1::0;;;;;27105:5:0::3;::::0;:17:::3;::::0;:5;;27123:18:::3;::::0;:20:::3;::::0;;::::3;::::0;::::3;::::0;;;;;;;;27105:5;27123:20;::::3;;::::0;::::3;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;-1:-1:-1::0;27123:20:0;27167:18:::3;::::0;;27105:81:::3;::::0;;-1:-1:-1;;;;;;27105:81:0::3;::::0;;;;;;;;::::3;::::0;;;;;;;;;;27155:10:::3;27105:81:::0;;;;;;;;;;;;;;;27123:20:::3;::::0;27105:81;;;;;;;-1:-1:-1;27105:81:0;;::::3;;::::0;::::3;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;-1:-1:-1::0;27105:81:0;27213:5:::3;::::0;:22:::3;::::0;;-1:-1:-1;;;27213:22:0;;;;27105:81;;-1:-1:-1;27213:5:0::3;::::0;;::::3;-1:-1:-1::0;;;;;27213:5:0::3;::::0;:20:::3;::::0;:22:::3;::::0;;::::3;::::0;27105:81:::3;::::0;27213:22;;;;;;;;:5;:22;::::3;;::::0;::::3;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;-1:-1:-1::0;27213:22:0;27203:32;::::3;27199:380;;;27275:2;-1:-1:-1::0;;;;;27257:35:0::3;;27279:5;27286;27257:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::3;::::0;;;::::3;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27199:380;;;27324:5;;;;;;;;;-1:-1:-1::0;;;;;27324:5:0::3;-1:-1:-1::0;;;;;27324:14:0::3;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;-1:-1:-1::0;27324:16:0;27314:26;::::3;27310:269;;;27380:2;-1:-1:-1::0;;;;;27362:35:0::3;;27384:5;27391;27362:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::3;::::0;;;::::3;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27436:2;-1:-1:-1::0;;;;;27417:36:0::3;;27440:5;27447;27417:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::3;::::0;;;::::3;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27468:18;::::0;-1:-1:-1;;;;;27468:11:0;::::3;::::0;:18;::::3;;;::::0;27480:5;;27468:18:::3;::::0;;;27480:5;27468:11;:18;::::3;;;;;;;;;;;;;::::0;::::3;;;;;-1:-1:-1::0;27501:18:0::3;::::0;;;:8:::3;:18;::::0;;;;;:25;;27522:4:::3;-1:-1:-1::0;;27501:25:0;;::::3;;::::0;;27541:5:::3;::::0;:26;;-1:-1:-1;;;27541:26:0;;::::3;::::0;::::3;::::0;;;;;27501:25:::3;27541:5:::0;;::::3;-1:-1:-1::0;;;;;27541:5:0::3;::::0;:16:::3;::::0;:26;;;;;;;;;;;27501:18;27541:5;:26;::::3;;::::0;::::3;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;27310:269;-1:-1:-1::0;27596:4:0::3;::::0;26629:979;-1:-1:-1;;;;;;26629:979:0:o;26150:471::-;26275:4;26313:7;;26300:9;:20;26292:58;;;;;-1:-1:-1;;;26292:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;26365:7;;:12;26361:77;;26402:5;;26418:7;;26394:32;;-1:-1:-1;;;;;26402:5:0;;;;26394:32;;;;;26418:7;26402:5;26394:32;26402:5;26394:32;26418:7;26402:5;26394:32;;;;;;;;;;;;;;;;;;;;;26361:77;26450:8;26461:44;26479:6;26487:10;26499:5;26461:17;:44::i;:::-;26450:55;;26553:6;-1:-1:-1;;;;;26521:71:0;26534:10;-1:-1:-1;;;;;26521:71:0;;26546:5;26561:14;26577:5;26584:7;;26521:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26521:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26610:3;26150:471;-1:-1:-1;;;;;26150:471:0:o;8449:101::-;8527:15;;8449:101;:::o;8673:1183::-;8767:4;7192:40;-1:-1:-1;;;;;;;;;;;7221:10:0;7192:17;:40::i;:::-;7184:87;;;;-1:-1:-1;;;7184:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8784:17:::1;8804:19;8817:5;8804:12;:19::i;:::-;8784:39:::0;-1:-1:-1;;;;;;;;;;;;8843:25:0;::::1;::::0;8842:55:::1;;-1:-1:-1::0;;;;;;;;;;;;8874:22:0;::::1;8842:55;8834:91;;;::::0;;-1:-1:-1;;;8834:91:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;8834:91:0;;;;;;;;;;;;;::::1;;8938:16;9004:5;9011:11;8967:56;;;;;;-1:-1:-1::0;;;8967:56:0::1;;::::0;::::1;;;;;;;;;;;;;;;;;;::::0;;;;-1:-1:-1;;8967:56:0;;;;::::1;::::0;;::::1;::::0;::::1;;;;::::0;;;::::1;::::0;;::::1;;;-1:-1:-1::0;;8967:56:0;;::::1;::::0;;::::1;::::0;::::1;;::::0;;;::::1;::::0;;;-1:-1:-1;8967:56:0::1;::::0;;;;;;;;;::::1;::::0;;8957:67;;;::::1;::::0;;;;;-1:-1:-1;9035:36:0::1;::::0;-1:-1:-1;8957:67:0;;-1:-1:-1;9060:10:0::1;9035:14;:36::i;:::-;9121:15;;9088:29;9108:8;9088:19;:29::i;:::-;:48;9084:743;;9153:20;9164:8;9153:10;:20::i;:::-;9188:19;-1:-1:-1::0;;;;;;;;;;;9230:22:0;::::1;9226:494;;;9315:11;9281:30;9301:9;9281:19;:30::i;:::-;:45;;9273:93;;;;-1:-1:-1::0;;;9273:93:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;9399:15:0::1;::::0;;9433:29;;;;9226:494:::1;;;-1:-1:-1::0;;;;;;;;;;;9501:25:0;::::1;9497:223;;;-1:-1:-1::0;9561:18:0::1;::::0;;9598:32;;;;9497:223:::1;;;9671:33;::::0;;-1:-1:-1;;;9671:33:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;9671:33:0;;;;;;;;;;;;;::::1;9497:223;9739:76;9783:5;9790:11;9803;9739:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;9739:76:0::1;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9084:743;;-1:-1:-1::0;9844:4:0::1;::::0;8673:1183;-1:-1:-1;;;;8673:1183:0:o;30081:133::-;7192:40;-1:-1:-1;;;;;;;;;;;7221:10:0;7192:17;:40::i;:::-;7184:87;;;;-1:-1:-1;;;7184:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30167:5:::1;::::0;30150:31:::1;::::0;-1:-1:-1;;;;;30150:31:0;;::::1;::::0;30167:5:::1;::::0;30150:31:::1;::::0;30167:5:::1;::::0;30150:31:::1;30192:5;:14:::0;;-1:-1:-1;;;;;;30192:14:0::1;-1:-1:-1::0;;;;;30192:14:0;;;::::1;::::0;;;::::1;::::0;;30081:133::o;24308:57::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24308:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3569:296;3653:4;;3670:165;3694:14;;;;:9;:14;;;;;:24;;:31;3690:35;;3670:165;;;3751:14;;;;:9;:14;;;;;:24;;:27;;-1:-1:-1;;;;;3751:42:0;;;:24;3776:1;;3751:27;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3751:27:0;:42;3747:76;;;3819:4;3812:11;;;;;3747:76;3727:3;;3670:165;;;-1:-1:-1;3852:5:0;;3569:296;-1:-1:-1;;;3569:296:0:o;31173:923::-;-1:-1:-1;;;;;31356:23:0;;31263:4;31356:23;;;:16;:23;;;;;31350:46;31263:4;;31310:25;;31350:46;-1:-1:-1;;31350:46:0;;;;;;;;;;;31346:601;;31454:65;;;-1:-1:-1;;;;;31454:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31454:65:0;-1:-1:-1;;;31454:65:0;;;31443:77;;;;:10;;;;:77;;;;31454:65;31443:77;;31454:65;31443:77;;;;;;;;;;-1:-1:-1;;31443:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31418:102:0;;-1:-1:-1;31418:102:0;-1:-1:-1;31346:601:0;;;31562:30;;:::i;:::-;-1:-1:-1;;;;;31595:23:0;;;;;;:16;:23;;;;;;;;;31562:56;;;;;;;;;;;-1:-1:-1;;31562:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31595:23;;31562:56;;31595:23;;31562:56;;;31595:23;31562:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31562:56:0;;;-1:-1:-1;;31562:56:0;;;;;;;;;;;;;;;31637:22;;;31562:56;;-1:-1:-1;31633:303:0;;;31705:5;-1:-1:-1;;;;;31705:10:0;31740:9;:18;;;31760:6;31768:3;31716:56;;;;;;;;;;;-1:-1:-1;;;;;31716:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31716:56:0;;;;;;;;;;;;;;;;-1:-1:-1;;31716:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31716:56:0;-1:-1:-1;;;;;;31716:56:0;;;;;;;;;31705:68;;;;;-1:-1:-1;31705:68:0;;-1:-1:-1;31705:68:0;-1:-1:-1;31705:68:0;;31716:56;31705:68;;;;;;;;;;-1:-1:-1;;31705:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31680:93:0;;-1:-1:-1;31680:93:0;-1:-1:-1;31633:303:0;;;31852:5;-1:-1:-1;;;;;31852:10:0;31887:9;:18;;;31907:3;31912:6;31863:56;;;;;;-1:-1:-1;;;;;31863:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31863:56:0;;;;;;;;;;;;;;;;-1:-1:-1;;31863:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31863:56:0;-1:-1:-1;;;;;;31863:56:0;;;;;;;;;31852:68;;;;;-1:-1:-1;31852:68:0;;-1:-1:-1;31852:68:0;-1:-1:-1;31852:68:0;;31863:56;31852:68;;;;;;;;;;-1:-1:-1;;31852:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31827:93:0;;-1:-1:-1;31827:93:0;-1:-1:-1;31633:303:0;31346:601;;31967:6;:72;;;;-1:-1:-1;31978:19:0;;:24;;:60;;;32017:12;32006:32;;;;;;;;;;;;;;;-1:-1:-1;32006:32:0;31978:60;31959:107;;;;;-1:-1:-1;;;31959:107:0;;;;;;;;;;;;-1:-1:-1;;;31959:107:0;;;;;;;;;;;;;;;-1:-1:-1;32084:4:0;;31173:923;-1:-1:-1;;;;;31173:923:0:o;9864:636::-;9976:4;7192:40;-1:-1:-1;;;;;;;;;;;7221:10:0;7192:17;:40::i;:::-;7184:87;;;;-1:-1:-1;;;7184:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9993:17:::1;10013:19;10026:5;10013:12;:19::i;:::-;9993:39;;10043:16;10106:5;10113:10;10125;10072:64;;;;;;-1:-1:-1::0;;;10072:64:0::1;;::::0;::::1;;;;;;;;;;;;;;;;;;::::0;;;;-1:-1:-1;;10072:64:0;;;;::::1;::::0;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;10072:64:0::1;;;;;;;;-1:-1:-1::0;;;;;10072:64:0::1;;;;;;;;;;;;;;;;;;;;;;;;10062:75;;;;;;10043:94;;10148:36;10163:8;10173:10;10148:14;:36::i;:::-;10232:15;;10199:29;10219:8;10199:19;:29::i;:::-;:48;10195:275;;10264:53;10283:9;10294:10;10306;10264:18;:53::i;:::-;10337:60;10367:5;10374:10;10386;10337:60;;;;;;;;;;-1:-1:-1::0;;;;;10337:60:0::1;;;;;;-1:-1:-1::0;;;;;10337:60:0::1;;;;;;;;;;;;;;;;-1:-1:-1::0;;;10337:60:0::1;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10412:20;10423:8;10412:10;:20::i;:::-;10454:4;10447:11;;;;;;10195:275;-1:-1:-1::0;10487:5:0::1;::::0;9864:636;-1:-1:-1;;;;;9864:636:0:o;3152:120::-;2696:8;:6;:8::i;:::-;2688:41;;;;;-1:-1:-1;;;2688:41:0;;;;;;;;;;;;-1:-1:-1;;;2688:41:0;;;;;;;;;;;;;;;3211:7:::1;:15:::0;;-1:-1:-1;;3211:15:0::1;::::0;;3242:22:::1;3251:12;:10;:12::i;:::-;3242:22;::::0;;-1:-1:-1;;;;;3242:22:0;;::::1;::::0;;;;;;;::::1;::::0;;::::1;3152:120::o:0;5402:82::-;5462:14;;;;:9;:14;;;;;;;5455:21;;;;;;;;;5462:14;5455:21;;;;5462:14;5455:21;:::i;:::-;;;5402:82;:::o;2893:118::-;2419:8;:6;:8::i;:::-;2418:9;2410:38;;;;;-1:-1:-1;;;2410:38:0;;;;;;;;;;;;-1:-1:-1;;;2410:38:0;;;;;;;;;;;;;;;2953:7:::1;:14:::0;;-1:-1:-1;;2953:14:0::1;2963:4;2953:14;::::0;;2983:20:::1;2990:12;:10;:12::i;10508:248::-:0;10573:7;10593:17;10640:5;10623:23;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10623:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10613:34;;;;;;10593:54;;10666:25;10681:9;10666:14;:25::i;:::-;10658:63;;;;;-1:-1:-1;;;10658:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;4210:131;4275:7;4302:14;;;:9;:14;;;;;:24;;:31;;4210:131::o;4532:318::-;4619:35;4637:3;4642:11;4619:17;:35::i;:::-;4618:36;4610:76;;;;;-1:-1:-1;;;4610:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4739:17;;;4705:14;;;:9;:14;;;;;;:24;;:31;:51;4697:92;;;;;-1:-1:-1;;;4697:92:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4800:14;;;;:9;:14;;;;;;;:24;;:42;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4800:42:0;-1:-1:-1;;;;;4800:42:0;;;;;;;;;4532:318::o;4967:427::-;5056:9;5051:336;5075:14;;;;:9;:14;;;;;:24;;:31;5071:35;;5051:336;;;5132:14;;;;:9;:14;;;;;:24;;:27;;-1:-1:-1;;;;;5132:42:0;;;:24;5157:1;;5132:27;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5132:27:0;:42;5128:248;;;5225:14;;;;:9;:14;;;;;:24;;5250:31;;-1:-1:-1;;5250:35:0;;;5225:61;;;;;;;;;;;;;;;;;;5195:14;;;5225:61;5195:14;;;;;;;:24;;:27;;-1:-1:-1;;;;;5225:61:0;;;;5220:1;;5195:27;;;;;;;;;;;;;;;;;;:91;;-1:-1:-1;;;;;;5195:91:0;-1:-1:-1;;;;;5195:91:0;;;;;;;;;;;5305:14;;;-1:-1:-1;5305:14:0;;;;;;:24;;:30;;;;;;;;;;;;;;;;-1:-1:-1;;5305:30:0;;;;;-1:-1:-1;;;;;;5305:30:0;;;;;;-1:-1:-1;5354:7:0;;5128:248;5108:3;;5051:336;;4967:427;;;:::o;3873:130::-;3971:14;;;;:9;:14;;;;;;;;;:24;;3964:31;;;;;;;;;;;;;;;;;3935:16;;3964:31;;;3971:24;3964:31;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3964:31:0;;;;;;;;;;;;;;;;;;;;;;;3873:130;;;:::o;30222:943::-;-1:-1:-1;;;;;30406:22:0;;30313:4;30406:22;;;:15;:22;;;;;30400:45;30313:4;;30360:25;;30400:45;-1:-1:-1;;30400:45:0;;;;;;;;;;;30396:623;;30503:85;;;-1:-1:-1;;;;;30503:85:0;;;;;;;30575:4;30503:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30503:85:0;-1:-1:-1;;;30503:85:0;;;30492:97;;;;:10;;;;:97;;;;30503:85;30492:97;;30503:85;30492:97;;;;;;;;;;-1:-1:-1;;30492:97:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30467:122:0;;-1:-1:-1;30467:122:0;-1:-1:-1;30396:623:0;;;30631:30;;:::i;:::-;-1:-1:-1;;;;;30664:22:0;;;;;;:15;:22;;;;;;;;;30631:55;;;;;;;;;;;-1:-1:-1;;30631:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30664:22;;30631:55;;30664:22;;30631:55;;;30664:22;30631:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30631:55:0;;;-1:-1:-1;;30631:55:0;;;;;;;;;;;;;;;30705:22;;;30631:55;;-1:-1:-1;30701:307:0;;;30773:5;-1:-1:-1;;;;;30773:10:0;30808:9;:18;;;30828:6;30836:5;30784:58;;;;;;;;;;;-1:-1:-1;;;;;30784:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30784:58:0;;;;;;;;;;;;;;;;-1:-1:-1;;30784:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30784:58:0;-1:-1:-1;;;;;;30784:58:0;;;;;;;;;30773:70;;;;;-1:-1:-1;30773:70:0;;-1:-1:-1;30773:70:0;-1:-1:-1;30773:70:0;;30784:58;30773:70;;;;;;;;;;-1:-1:-1;;30773:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30748:95:0;;-1:-1:-1;30748:95:0;-1:-1:-1;30701:307:0;;;30922:5;-1:-1:-1;;;;;30922:10:0;30957:9;:18;;;30977:5;30984:6;30933:58;;;;;;-1:-1:-1;;;;;30933:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30933:58:0;;;;;;;;;;;;;;;;-1:-1:-1;;30933:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30933:58:0;-1:-1:-1;;;;;;30933:58:0;;;;;;;;;30922:70;;;;;-1:-1:-1;30922:70:0;;-1:-1:-1;30922:70:0;-1:-1:-1;30922:70:0;;30933:58;30922:70;;;;;;;;;;-1:-1:-1;;30922:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30897:95:0;;-1:-1:-1;30897:95:0;-1:-1:-1;30701:307:0;30396:623;;31037:6;:72;;;;-1:-1:-1;31048:19:0;;:24;;:60;;;31087:12;31076:32;;;;;;;;;;;;;;;-1:-1:-1;31076:32:0;31048:60;31029:106;;;;;-1:-1:-1;;;31029:106:0;;;;;;;;;;;;-1:-1:-1;;;31029:106:0;;;;;;;;;;;;;;5492:355;5604:9;5599:241;5623:14;;;;:9;:14;;;;;:24;;:31;5619:35;;5599:241;;;5680:14;;;;:9;:14;;;;;:24;;:27;;-1:-1:-1;;;;;5680:42:0;;;:24;5705:1;;5680:27;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5680:27:0;:42;5676:153;;;5743:14;;;;:9;:14;;;;;:24;;:27;;5773:15;;5743:24;5768:1;;5743:27;;;;;;;;;;;;;;:45;;;;;-1:-1:-1;;;;;5743:45:0;;;;;-1:-1:-1;;;;;5743:45:0;;;;;;5807:7;;;5676:153;5656:3;;5599:241;;667:106;755:10;667:106;:::o;8026:217::-;8087:4;;8104:108;8128:14;:21;8124:25;;8104:108;;;8194:5;8173:14;8188:1;8173:17;;;;;;;;;;;;;;;;:26;8169:43;;;8208:4;8201:11;;;;;8169:43;8151:3;;8104:108;;;-1:-1:-1;8230:5:0;;8026:217;-1:-1:-1;;8026:217:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;

Swarm Source

ipfs://4cc2b3fe807b742ed23bfa25d80efe6c88d9e53210798af5defd60e46614d1cd

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
0xe61dd9cA7364225aFBFB79e15AD33864424e6aE4
Net Worth in USD
$22,866,173.69

Net Worth in ETH
11,540.033261

Token Allocations
KCS 32.74%
USDT 28.31%
ETH 17.57%
Others 21.37%
Chain Token Portfolio % Price Amount Value
ETH32.74%$7.79960,888.0671$7,487,455.45
ETH25.68%$0.9999555,871,806.7908$5,871,542.56
ETH
Ether (ETH)
17.57%$1,983.22,026.0594$4,018,090.74
ETH2.23%$8.7858,130.009$510,381.48
ETH1.72%$0.00000572,695,007,688.1448$393,279.99
ETH1.72%$1392,986.8062$392,986.81
ETH0.74%$0.0760052,236,841.4712$170,011.14
ETH0.55%$66.161,900.0381$125,706.52
ETH0.39%$110.87808.8626$89,678.59
ETH0.22%$0.0359571,397,242.7294$50,240.35
ETH0.19%$0.99983243,072.7021$43,065.47
ETH0.12%$0.00257310,306,992.47$26,514.94
ETH0.08%$104.98164.0089$17,217.65
ETH0.06%$0.093524151,426.1142$14,161.98
ETH0.06%$3.843,629.9277$13,938.92
ETH0.04%$110,000$10,000
ETH0.04%$0.025566375,060.2942$9,588.78
ETH0.01%$17.48190.0813$3,322.62
ETH0.01%$0.24154113,042.8089$3,150.37
ETH0.01%$0.09361331,241.6584$2,924.63
ETH0.01%$0.09827125,185.6408$2,475.02
ETH<0.01%$0.198859,921.6162$1,972.91
ETH<0.01%$0.01835991,300.061$1,676.19
ETH<0.01%$0.01386798,045.5076$1,359.62
ETH<0.01%$2,552.080.4862$1,240.93
ETH<0.01%$0.3203673,020.5159$967.67
ETH<0.01%$1128.8105$128.81
ETH<0.01%$1,671.150.0322$53.76
ETH<0.01%$0.00007411,650$0.8619
ETH<0.01%<$0.0000011,186,544,441.6025$0.5069
ETH<0.01%$0.0002281,000$0.2284
ETH<0.01%$0.00021,023$0.2041
ETH<0.01%$0.000.0154$0.00
POL7.02%$0.9982951,609,082.8061$1,606,339.32
POL3.22%$0.00736,483.9834$0.00
POL<0.01%$0.0987132,646.926$261.29
POL<0.01%$1,977.620.0103$20.32
AVAX2.87%$0.999952657,168.2971$657,136.69
AVAX2.64%$0.00602,836.0467$0.00
BASE<0.01%$0.019895320$6.37
BASE<0.01%$0.00203$0.00
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ 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.