ETH Price: $3,272.63 (+4.63%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Recover216722792025-01-21 10:30:479 days ago1737455447IN
0x8747a311...dBF81a952
0 ETH0.0010686515.25081682
Transfer And Cal...216444792025-01-17 13:21:3513 days ago1737120095IN
0x8747a311...dBF81a952
0 ETH0.0009093310.1217123
Transfer And Cal...215212472024-12-31 8:24:5930 days ago1735633499IN
0x8747a311...dBF81a952
0 ETH0.0012743314.18451185
Transfer And Cal...215178352024-12-30 20:59:3530 days ago1735592375IN
0x8747a311...dBF81a952
0 ETH0.000650668.39139596
Transfer And Cal...213712002024-12-10 9:26:1151 days ago1733822771IN
0x8747a311...dBF81a952
0 ETH0.0012392717.03699706
Transfer And Cal...213007152024-11-30 13:13:1161 days ago1732972391IN
0x8747a311...dBF81a952
0 ETH0.0009527810.60678726
Transfer And Cal...212850182024-11-28 8:30:5963 days ago1732782659IN
0x8747a311...dBF81a952
0 ETH0.000597928.22137489
Transfer And Cal...212843702024-11-28 6:17:4763 days ago1732774667IN
0x8747a311...dBF81a952
0 ETH0.0008686211.20399713
Transfer And Cal...212843632024-11-28 6:16:1163 days ago1732774571IN
0x8747a311...dBF81a952
0 ETH0.0011301510.11520394
Transfer212798912024-11-27 15:09:4764 days ago1732720187IN
0x8747a311...dBF81a952
0 ETH0.0009905625.4499307
Transfer And Cal...205642092024-08-19 17:37:47164 days ago1724089067IN
0x8747a311...dBF81a952
0 ETH0.000355424.58446721
Transfer And Cal...204820732024-08-08 6:28:35175 days ago1723098515IN
0x8747a311...dBF81a952
0 ETH0.000279253.1087496
Approve203427082024-07-19 19:36:23194 days ago1721417783IN
0x8747a311...dBF81a952
0 ETH0.000452239.77952434
Declare Lost203427072024-07-19 19:36:11194 days ago1721417771IN
0x8747a311...dBF81a952
0 ETH0.001379789.28963442
Approve203427032024-07-19 19:35:23194 days ago1721417723IN
0x8747a311...dBF81a952
0 ETH0.000422559.13776448
Transfer And Cal...201615362024-06-24 12:27:23220 days ago1719232043IN
0x8747a311...dBF81a952
0 ETH0.000820278.66842948
Transfer And Cal...201379532024-06-21 5:17:59223 days ago1718947079IN
0x8747a311...dBF81a952
0 ETH0.000424684.48736837
Transfer And Cal...200706072024-06-11 19:14:11232 days ago1718133251IN
0x8747a311...dBF81a952
0 ETH0.0011770613.10351477
Transfer And Cal...199827412024-05-30 12:44:11245 days ago1717073051IN
0x8747a311...dBF81a952
0 ETH0.0008748912.02766393
Transfer And Cal...199814692024-05-30 8:27:59245 days ago1717057679IN
0x8747a311...dBF81a952
0 ETH0.00123413.73746676
Transfer And Cal...197613582024-04-29 13:47:35276 days ago1714398455IN
0x8747a311...dBF81a952
0 ETH0.0017099214.82781416
Transfer And Cal...197415082024-04-26 19:08:35278 days ago1714158515IN
0x8747a311...dBF81a952
0 ETH0.000753597.86621778
Transfer And Cal...197403382024-04-26 15:11:59279 days ago1714144319IN
0x8747a311...dBF81a952
0 ETH0.0014734114.64772307
Transfer197403092024-04-26 15:06:11279 days ago1714143971IN
0x8747a311...dBF81a952
0 ETH0.0007741215.11664958
Transfer And Cal...197370432024-04-26 4:05:59279 days ago1714104359IN
0x8747a311...dBF81a952
0 ETH0.000771937.67406074
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DraggableSharesWithPredecessor

Compiler Version
v0.8.1+commit.df193b15

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 7: DraggableSharesWithPredecessor.sol
/**
* SPDX-License-Identifier: LicenseRef-Aktionariat
*
* MIT License with Automated License Fee Payments
*
* Copyright (c) 2020 Aktionariat AG (aktionariat.com)
*
* Permission is hereby granted to any person obtaining a copy of this software
* and associated documentation files (the "Software"), to deal in the Software
* without restriction, including without limitation the rights to use, copy,
* modify, merge, publish, distribute, sublicense, and/or sell copies of the
* Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* - The above copyright notice and this permission notice shall be included in
*   all copies or substantial portions of the Software.
* - All automated license fee payments integrated into this and related Software
*   are preserved.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
pragma solidity >=0.8;

import "./DraggableShares.sol";
import "./ERC20Draggable.sol";

/**
 * @title Draggable CompanyName AG Shares
 * @author Luzius Meisser, [email protected]
 *
 * This is an ERC-20 token representing shares of CompanyName AG that are bound to
 * a shareholder agreement that can be found at the URL defined in the constant 'terms'.
 * The shareholder agreement is partially enforced through this smart contract. The agreement
 * is designed to facilitate a complete acquisition of the firm even if a minority of shareholders
 * disagree with the acquisition, to protect the interest of the minority shareholders by requiring
 * the acquirer to offer the same conditions to everyone when acquiring the company, and to
 * facilitate an update of the shareholder agreement even if a minority of the shareholders that
 * are bound to this agreement disagree. The name "draggable" stems from the convention of calling
 * the right to drag a minority along with a sale of the company "drag-along" rights. The name is
 * chosen to ensure that token holders are aware that they are bound to such an agreement.
 *
 * The percentage of token holders that must agree with an update of the terms is defined by the
 * constant UPDATE_QUORUM. The percentage of yes-votes that is needed to successfully complete an
 * acquisition is defined in the constant ACQUISITION_QUORUM. Note that the update quorum is based
 * on the total number of tokens in circulation. In contrast, the acquisition quorum is based on the
 * number of votes cast during the voting period, not taking into account those who did not bother
 * to vote.
 */

contract DraggableSharesWithPredecessor is DraggableShares {

    address immutable newBaseToken;

    constructor(address newBaseToken_, string memory _terms, address predecessor, uint256 quorum, uint256 votePeriod)
        DraggableShares(_terms, predecessor, quorum, votePeriod) {
        newBaseToken = newBaseToken_;
    }

    // custom built convert function for old DSHS contract
    function convert() public {
        address oldBase = getOldBase();
        fetchTokens();
        swtichBase(oldBase);
    }

    function fetchTokens() internal {
        require(address(wrapped) != newBaseToken);
        IDSHS predecessor = IDSHS(address(wrapped));
        uint256 supply = predecessor.totalSupply();
        uint256 present = totalSupply();
        uint256 missing = supply - present;
        //_mint(address(predecessor), supply); that's what the newer version expects
        _mint(address(this), missing);
        _approve(address(this), address(predecessor), missing);
        predecessor.migrate();
    }

    function getOldBase() internal view returns (address) {
        return IDSHS(address(wrapped)).getWrappedContract();
    }

    function swtichBase(address oldWrapped) internal {
        IERC20 oldBase = IERC20(oldWrapped);
        oldBase.approve(newBaseToken, oldBase.balanceOf(address(this)));
        IBaseToken(newBaseToken).convertOldShares();
        wrapped = IERC20(newBaseToken);
        disableRecovery();
        require(totalSupply() == wrapped.balanceOf(address(this)));
    }
}

abstract contract IBaseToken {
    function convertOldShares() virtual public;
}

abstract contract IDSHS {
    function migrate() virtual public;
    function getWrappedContract() virtual view public returns (address);
    function totalSupply() virtual public returns (uint256);
}

File 2 of 7: DraggableShares.sol
/**
* SPDX-License-Identifier: LicenseRef-Aktionariat
*
* MIT License with Automated License Fee Payments
*
* Copyright (c) 2020 Aktionariat AG (aktionariat.com)
*
* Permission is hereby granted to any person obtaining a copy of this software
* and associated documentation files (the "Software"), to deal in the Software
* without restriction, including without limitation the rights to use, copy,
* modify, merge, publish, distribute, sublicense, and/or sell copies of the
* Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* - The above copyright notice and this permission notice shall be included in
*   all copies or substantial portions of the Software.
* - All automated license fee payments integrated into this and related Software
*   are preserved.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
pragma solidity >=0.8;

import "./ERC20Recoverable.sol";
import "./ERC20Draggable.sol";

/**
 * @title Draggable CompanyName AG Shares
 * @author Luzius Meisser, [email protected]
 *
 * This is an ERC-20 token representing shares of CompanyName AG that are bound to
 * a shareholder agreement that can be found at the URL defined in the constant 'terms'.
 * The shareholder agreement is partially enforced through this smart contract. The agreement
 * is designed to facilitate a complete acquisition of the firm even if a minority of shareholders
 * disagree with the acquisition, to protect the interest of the minority shareholders by requiring
 * the acquirer to offer the same conditions to everyone when acquiring the company, and to
 * facilitate an update of the shareholder agreement even if a minority of the shareholders that
 * are bound to this agreement disagree. The name "draggable" stems from the convention of calling
 * the right to drag a minority along with a sale of the company "drag-along" rights. The name is
 * chosen to ensure that token holders are aware that they are bound to such an agreement.
 *
 * The percentage of token holders that must agree with an update of the terms is defined by the
 * constant UPDATE_QUORUM. The percentage of yes-votes that is needed to successfully complete an
 * acquisition is defined in the constant ACQUISITION_QUORUM. Note that the update quorum is based
 * on the total number of tokens in circulation. In contrast, the acquisition quorum is based on the
 * number of votes cast during the voting period, not taking into account those who did not bother
 * to vote.
 */

contract DraggableShares is ERC20Recoverable, ERC20Draggable {

    string public terms;

    constructor(string memory _terms, address wrappedToken, uint256 quorumBps, uint256 votePeriodSeconds)
        ERC20Draggable(wrappedToken, quorumBps, votePeriodSeconds) {
        terms = _terms; // to update the terms, migrate to a new contract. That way it is ensured that the terms can only be updated when the quorom agrees.
    }

    function transfer(address to, uint256 value) override(ERC20Recoverable, ERC20) public returns (bool) {
        return super.transfer(to, value);
    }

    function getClaimDeleter() public view override returns (address) {
        return IRecoverable(address(wrapped)).getClaimDeleter();
    }

    function getCollateralRate(address collateralType) public view override returns (uint256) {
        uint256 rate = super.getCollateralRate(collateralType);
        if (rate > 0) {
            return rate;
        } else if (collateralType == address(wrapped)) {
            return unwrapConversionFactor;
        } else {
            // If the wrapped contract allows for a specific collateral, we should too.
            // If the wrapped contract is not IRecoverable, we will fail here, but would fail anyway.
            return IRecoverable(address(wrapped)).getCollateralRate(collateralType) * unwrapConversionFactor;
        }
    }

}

abstract contract IRecoverable {
    function getCollateralRate(address) public virtual view returns (uint256);
    function getClaimDeleter() public virtual view returns (address);
}

File 3 of 7: ERC20.sol
// SPDX-License-Identifier: MIT
// Copied and adjusted from OpenZeppelin
// Adjustments:
// - modifications to support ERC-677
// - removed require messages to save space
// - removed unnecessary require statements
// - removed GSN Context
// - upgraded to 0.8 to drop SafeMath
// - let name() and symbol() be implemented by subclass
// - infinite allowance support, with 2^255 and above considered infinite

pragma solidity >=0.8;

import "./IERC20.sol";
import "./IERC677Receiver.sol";

/**
 * @dev Implementation of the `IERC20` interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using `_mint`.
 * For a generic mechanism see `ERC20Mintable`.
 *
 * *For a detailed writeup see our guide [How to implement supply
 * mechanisms](https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226).*
 *
 * We have followed general OpenZeppelin guidelines: functions revert instead
 * of returning `false` on failure. This behavior is nonetheless conventional
 * and does not conflict with the expectations of ERC20 applications.
 *
 * Additionally, an `Approval` event is emitted on calls to `transferFrom`.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard `decreaseAllowance` and `increaseAllowance`
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See `IERC20.approve`.
 */

abstract contract ERC20 is IERC20 {

    mapping (address => uint256) private _balances;

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

    uint256 private _totalSupply;

    uint8 public override decimals;

    constructor(uint8 _decimals) {
        decimals = _decimals;
    }

    /**
     * @dev See `IERC20.totalSupply`.
     */
    function totalSupply() public view override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See `IERC20.balanceOf`.
     */
    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See `IERC20.transfer`.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

    /**
     * @dev See `IERC20.allowance`.
     */
    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See `IERC20.approve`.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 value) public override returns (bool) {
        _approve(msg.sender, spender, value);
        return true;
    }

    /**
     * @dev See `IERC20.transferFrom`.
     *
     * Emits an `Approval` event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of `ERC20`;
     *
     * Requirements:
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `value`.
     * - the caller must have allowance for `sender`'s tokens of at least
     * `amount`.
     */
    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        uint256 currentAllowance = _allowances[sender][msg.sender];
        if (currentAllowance < (1 << 255)){
            // Only decrease the allowance if it was not set to 'infinite'
            // Documented in /doc/infiniteallowance.md
            _approve(sender, msg.sender, currentAllowance - amount);
        }
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to `transfer`, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a `Transfer` event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(address sender, address recipient, uint256 amount) internal virtual {
        require(recipient != address(0));

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] -= amount;
        _balances[recipient] += amount;
        emit Transfer(sender, recipient, amount);
    }

    // ERC-677 functionality, can be useful for swapping and wrapping tokens
    function transferAndCall(address recipient, uint amount, bytes calldata data) public returns (bool) {
        bool success = transfer(recipient, amount);
        if (success){
            success = IERC677Receiver(recipient).onTokenTransfer(msg.sender, amount, data);
        }
        return success;
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a `Transfer` event with `from` set to the zero address.
     *
     * Requirements
     *
     * - `to` cannot be the zero address.
     */
    function _mint(address recipient, uint256 amount) internal virtual {
        require(recipient != address(0));

        _beforeTokenTransfer(address(0), recipient, amount);

        _totalSupply += amount;
        _balances[recipient] += amount;
        emit Transfer(address(0), recipient, amount);
    }

     /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a `Transfer` event with `to` set to the zero address.
     *
     * Requirements
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        _beforeTokenTransfer(account, address(0), amount);

        _totalSupply -= amount;
        _balances[account] -= amount;
        emit Transfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.
     *
     * This is internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an `Approval` event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(address owner, address spender, uint256 value) internal {
        _allowances[owner][spender] = value;
        emit Approval(owner, spender, value);
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(address from, address to, uint256 amount) virtual internal;
}

File 4 of 7: ERC20Draggable.sol
/**
* SPDX-License-Identifier: LicenseRef-Aktionariat
*
* MIT License with Automated License Fee Payments
*
* Copyright (c) 2020 Aktionariat AG (aktionariat.com)
*
* Permission is hereby granted to any person obtaining a copy of this software
* and associated documentation files (the "Software"), to deal in the Software
* without restriction, including without limitation the rights to use, copy,
* modify, merge, publish, distribute, sublicense, and/or sell copies of the
* Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* - The above copyright notice and this permission notice shall be included in
*   all copies or substantial portions of the Software.
* - All automated license fee payments integrated into this and related Software
*   are preserved.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
pragma solidity >=0.8;

/**
 * @title CompanyName Shareholder Agreement
 * @author Luzius Meisser, [email protected]
 * @dev These tokens are based on the ERC20 standard and the open-zeppelin library.
 *
 * This is an ERC-20 token representing shares of CompanyName AG that are bound to
 * a shareholder agreement that can be found at the URL defined in the constant 'terms'
 * of the 'DraggableCompanyNameShares' contract. The agreement is partially enforced
 * through the Swiss legal system, and partially enforced through this smart contract.
 * In particular, this smart contract implements a drag-along clause which allows the
 * majority of token holders to force the minority sell their shares along with them in
 * case of an acquisition. That's why the tokens are called "Draggable CompanyName AG Shares."
 */

import "./ERC20.sol";
import "./IERC20.sol";
import "./IERC677Receiver.sol";

contract ERC20Draggable is ERC20, IERC677Receiver {

    IERC20 public wrapped;                              // The wrapped contract
    IOfferFactory public constant factory = IOfferFactory(0xf9f92751F272f0872e2EDb6a280b0990F3e2b8A3);

    uint256 private constant MIGRATION_QUORUM = 8000;

    // If the wrapped tokens got replaced in an acquisition, unwrapping might yield many currency tokens
    uint256 public unwrapConversionFactor = 0;

    // The current acquisition attempt, if any. See initiateAcquisition to see the requirements to make a public offer.
    IOffer public offer;

    uint256 public quorum; // BPS (out of 10'000)
    uint256 public votePeriod; // Seconds

    event MigrationSucceeded(address newContractAddress);

    constructor(
        address wrappedToken,
        uint256 quorum_,
        uint256 votePeriod_
    ) ERC20(0) {
        wrapped = IERC20(wrappedToken);
        quorum = quorum_;
        votePeriod = votePeriod_;
    }

    function disableRecovery() public {
        IRecoveryDisabler(address(wrapped)).setRecoverable(false);
    }

    function name() public override view returns (string memory){
        if (isBinding()){
            return string(abi.encodePacked("Draggable ", wrapped.name()));
        } else {
            return string(abi.encodePacked("Wrapped ", wrapped.name()));
        }
    }

    function symbol() public override view returns (string memory){
        if (isBinding()){
            return string(abi.encodePacked("D", wrapped.symbol()));
        } else {
            return string(abi.encodePacked("W", wrapped.symbol()));
        }
    }

    function onTokenTransfer(address from, uint256 amount, bytes calldata) override public returns (bool) {
        require(msg.sender == address(wrapped));
        _mint(from, amount);
        return true;
    }

    /** Increases the number of drag-along tokens. Requires minter to deposit an equal amount of share tokens */
    function wrap(address shareholder, uint256 amount) public {
        require(wrapped.transferFrom(msg.sender, address(this), amount));
        _mint(shareholder, amount);
    }

    /**
     * Indicates that the token holders are bound to the token terms and that:
     * - Conversions back to the wrapped token (unwrap) are not allowed
     * - The drag-along can be performed by making an according offer
     * - They can be migrated to a new version of this contract in accordance with the terms
     */
    function isBinding() public view returns (bool) {
        return unwrapConversionFactor == 0;
    }

    /**
     * Deactivates the drag-along mechanism and enables the unwrap function.
     */
    function deactivate(uint256 factor) internal {
        require(factor >= 1, "factor");
        unwrapConversionFactor = factor;
    }

    /** Decrease the number of drag-along tokens. The user gets back their shares in return */
    function unwrap(uint256 amount) public {
        require(!isBinding());
        unwrap(msg.sender, amount, unwrapConversionFactor);
    }
    
    function unwrap(address owner, uint256 amount, uint256 factor) internal {
        _burn(owner, amount);
        require(wrapped.transfer(owner, amount * factor));
    }

    /**
     * Burns both the token itself as well as the wrapped token!
     * If you want to get out of the shareholder agreement, use unwrap after it has been
     * deactivated by a majority vote or acquisition.
     *
     * Burning only works if wrapped token supports burning. Also, the exact meaning of this
     * operation might depend on the circumstances. Burning and reussing the wrapped token
     * does not free the sender from the legal obligations of the shareholder agreement.
     */
    function burn(uint256 amount) public {
        _burn(msg.sender, amount);
        uint256 factor = isBinding() ? 1 : unwrapConversionFactor;
        IBurnable(address(wrapped)).burn(amount * factor);
    }

    function makeAcquisitionOffer(bytes32 salt, uint256 pricePerShare, address currency) public payable {
        require(isBinding());
        address newOffer = factory.create{value: msg.value}(salt, msg.sender, pricePerShare, currency, quorum, votePeriod);
        if (offerExists()) {
            require(IOffer(newOffer).isWellFunded());
            offer.contest(newOffer);
        }
        offer = IOffer(newOffer);
    }

    function drag(address buyer, address currency) public {
        require(msg.sender == address(offer));
        unwrap(buyer, balanceOf(buyer), 1);
        replaceWrapped(currency, buyer);
    }

    function notifyOfferEnded() public {
        if (msg.sender == address(offer)){
            offer = IOffer(address(0));
        }
    }

    function replaceWrapped(address newWrapped, address oldWrappedDestination) internal {
        require(isBinding());
        // Free all old wrapped tokens we have
        require(wrapped.transfer(oldWrappedDestination, wrapped.balanceOf(address(this))));
        // Count the new wrapped tokens
        wrapped = IERC20(newWrapped);
        deactivate(wrapped.balanceOf(address(this)) / totalSupply());
    }

    function migrate() public {
        address successor = msg.sender;
        require(!offerExists()); // if you have 80%, you can easily cancel the offer first if necessary
        require(balanceOf(successor) * 10000 >= totalSupply() * MIGRATION_QUORUM, "quorum");
        replaceWrapped(successor, successor);
        emit MigrationSucceeded(successor);
    }

    function _beforeTokenTransfer(address from, address to, uint256 amount) override internal {
        if (offerExists()) {
            offer.notifyMoved(from, to, amount);
        }
    }

    function offerExists() internal view returns (bool) {
        return address(offer) != address(0);
    }

}

abstract contract IRecoveryDisabler {
    function setRecoverable(bool enabled) public virtual;
}

abstract contract IBurnable {
    function burn(uint256) virtual public;
}

abstract contract IOffer {
    function isWellFunded() virtual public returns (bool);
    function contest(address newOffer) virtual public;
    function notifyMoved(address from, address to, uint256 value) virtual public;
}

abstract contract IOfferFactory {
    function create(bytes32 salt, address buyer, uint256 pricePerShare, address currency, uint256 quorum, uint256 votePeriod) virtual public payable returns (address);
}

File 5 of 7: ERC20Recoverable.sol
/**
* SPDX-License-Identifier: LicenseRef-Aktionariat
*
* MIT License with Automated License Fee Payments
*
* Copyright (c) 2020 Aktionariat AG (aktionariat.com)
*
* Permission is hereby granted to any person obtaining a copy of this software
* and associated documentation files (the "Software"), to deal in the Software
* without restriction, including without limitation the rights to use, copy,
* modify, merge, publish, distribute, sublicense, and/or sell copies of the
* Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* - The above copyright notice and this permission notice shall be included in
*   all copies or substantial portions of the Software.
* - All automated license fee payments integrated into this and related Software
*   are preserved.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
pragma solidity >=0.8;

import "./ERC20.sol";
import "./IERC20.sol";

/**
 * @title Recoverable
 * In case of tokens that represent real-world assets such as shares of a company, one needs a way
 * to handle lost private keys. With physical certificates, courts can declare share certificates as
 * invalid so the company can issue replacements. Here, we want a solution that does not depend on
 * third parties to resolve such cases. Instead, when someone has lost a private key, he can use the
 * declareLost function to post a deposit and claim that the shares assigned to a specific address are
 * lost. To prevent front running, a commit reveal scheme is used. If he actually is the owner of the shares,
 * he needs to wait for a certain period and can then reclaim the lost shares as well as the deposit.
 * If he is an attacker trying to claim shares belonging to someone else, he risks losing the deposit
 * as it can be claimed at anytime by the rightful owner.
 * Furthermore, if "getClaimDeleter" is defined in the subclass, the returned address is allowed to
 * delete claims, returning the collateral. This can help to prevent obvious cases of abuse of the claim
 * function.
 */

abstract contract ERC20Recoverable is ERC20 {

    // A struct that represents a claim made
    struct Claim {
        address claimant; // the person who created the claim
        uint256 collateral; // the amount of collateral deposited
        uint256 timestamp;  // the timestamp of the block in which the claim was made
        address currencyUsed; // The currency (XCHF) can be updated, we record the currency used for every request
    }

    uint256 public constant claimPeriod = 180 days;

    mapping(address => Claim) public claims; // there can be at most one claim per address, here address is claimed address
    mapping(address => bool) public recoveryDisabled; // disable claimability (e.g. for long term storage)

    // ERC-20 token that can be used as collateral or 0x0 if disabled
    address public customCollateralAddress;
    uint256 public customCollateralRate;

    /**
     * Returns the collateral rate for the given collateral type and 0 if that type
     * of collateral is not accepted. By default, only the token itself is accepted at
     * a rate of 1:1.
     *
     * Subclasses should override this method if they want to add additional types of
     * collateral.
     */
    function getCollateralRate(address collateralType) public virtual view returns (uint256) {
        if (collateralType == address(this)) {
            return 1;
        } else if (collateralType == customCollateralAddress) {
            return customCollateralRate;
        } else {
            return 0;
        }
    }

    /**
     * Allows subclasses to set a custom collateral besides the token itself.
     * The collateral must be an ERC-20 token that returns true on successful transfers and
     * throws an exception or returns false on failure.
     * Also, do not forget to multiply the rate in accordance with the number of decimals of the collateral.
     * For example, rate should be 7*10**18 for 7 units of a collateral with 18 decimals.
     */
    function _setCustomClaimCollateral(address collateral, uint256 rate) internal {
        customCollateralAddress = collateral;
        if (customCollateralAddress == address(0)) {
            customCollateralRate = 0; // disabled
        } else {
            require(rate > 0, "zero");
            customCollateralRate = rate;
        }
        emit CustomClaimCollateralChanged(collateral, rate);
    }

    function getClaimDeleter() virtual public view returns (address);

    function setRecoverable(bool enabled) public {
        recoveryDisabled[msg.sender] = !enabled;
    }

    /**
     * Some users might want to disable claims for their address completely.
     * For example if they use a deep cold storage solution or paper wallet.
     */
    function isRecoveryEnabled(address target) public view returns (bool) {
        return !recoveryDisabled[target];
    }

    event ClaimMade(address indexed lostAddress, address indexed claimant, uint256 balance);
    event ClaimCleared(address indexed lostAddress, uint256 collateral);
    event ClaimDeleted(address indexed lostAddress, address indexed claimant, uint256 collateral);
    event ClaimResolved(address indexed lostAddress, address indexed claimant, uint256 collateral);
    event CustomClaimCollateralChanged(address newCustomCollateralAddress, uint256 newCustomCollareralRate);

  /** Anyone can declare that the private key to a certain address was lost by calling declareLost
    * providing a deposit/collateral. There are three possibilities of what can happen with the claim:
    * 1) The claim period expires and the claimant can get the deposit and the shares back by calling recover
    * 2) The "lost" private key is used at any time to call clearClaim. In that case, the claim is deleted and
    *    the deposit sent to the shareholder (the owner of the private key). It is recommended to call recover
    *    whenever someone transfers funds to let claims be resolved automatically when the "lost" private key is
    *    used again.
    * 3) The owner deletes the claim and assigns the deposit to the claimant. This is intended to be used to resolve
    *    disputes. Generally, using this function implies that you have to trust the issuer of the tokens to handle
    *    the situation well. As a rule of thumb, the contract owner should assume the owner of the lost address to be the
    *    rightful owner of the deposit.
    * It is highly recommended that the owner observes the claims made and informs the owners of the claimed addresses
    * whenever a claim is made for their address (this of course is only possible if they are known to the owner, e.g.
    * through a shareholder register).
    */
    function declareLost(address collateralType, address lostAddress) public {
        require(isRecoveryEnabled(lostAddress), "disabled");
        uint256 collateralRate = getCollateralRate(collateralType);
        require(collateralRate > 0, "bad collateral");
        address claimant = msg.sender;
        uint256 balance = balanceOf(lostAddress);
        uint256 collateral = balance * collateralRate;
        IERC20 currency = IERC20(collateralType);
        require(balance > 0, "empty");
        require(claims[lostAddress].collateral == 0, "already claimed");
        require(currency.transferFrom(claimant, address(this), collateral));

        claims[lostAddress] = Claim({
            claimant: claimant,
            collateral: collateral,
            timestamp: block.timestamp,
            currencyUsed: collateralType
        });

        emit ClaimMade(lostAddress, claimant, balance);
    }

    function getClaimant(address lostAddress) public view returns (address) {
        return claims[lostAddress].claimant;
    }

    function getCollateral(address lostAddress) public view returns (uint256) {
        return claims[lostAddress].collateral;
    }

    function getCollateralType(address lostAddress) public view returns (address) {
        return claims[lostAddress].currencyUsed;
    }

    function getTimeStamp(address lostAddress) public view returns (uint256) {
        return claims[lostAddress].timestamp;
    }

    function transfer(address recipient, uint256 amount) override virtual public returns (bool) {
        require(super.transfer(recipient, amount));
        clearClaim();
        return true;
    }

    /**
     * Clears a claim after the key has been found again and assigns the collateral to the "lost" address.
     * This is the price an adverse claimer pays for filing a false claim and makes it risky to do so.
     */
    function clearClaim() public {
        if (claims[msg.sender].collateral != 0) {
            uint256 collateral = claims[msg.sender].collateral;
            IERC20 currency = IERC20(claims[msg.sender].currencyUsed);
            delete claims[msg.sender];
            require(currency.transfer(msg.sender, collateral));
            emit ClaimCleared(msg.sender, collateral);
        }
    }

   /**
    * After the claim period has passed, the claimant can call this function to send the
    * tokens on the lost address as well as the collateral to himself.
    */
    function recover(address lostAddress) public {
        Claim memory claim = claims[lostAddress];
        uint256 collateral = claim.collateral;
        IERC20 currency = IERC20(claim.currencyUsed);
        require(collateral != 0, "not found");
        require(claim.claimant == msg.sender, "not claimant");
        require(claim.timestamp + claimPeriod <= block.timestamp, "too early");
        address claimant = claim.claimant;
        delete claims[lostAddress];
        require(currency.transfer(claimant, collateral));
        _transfer(lostAddress, claimant, balanceOf(lostAddress));
        emit ClaimResolved(lostAddress, claimant, collateral);
    }

    /**
     * This function is to be executed by the claim deleter only in case a dispute needs to be resolved manually.
     */
    function deleteClaim(address lostAddress) public {
        require(msg.sender == getClaimDeleter(), "no access");
        Claim memory claim = claims[lostAddress];
        IERC20 currency = IERC20(claim.currencyUsed);
        require(claim.collateral != 0, "not found");
        delete claims[lostAddress];
        require(currency.transfer(claim.claimant, claim.collateral));
        emit ClaimDeleted(lostAddress, claim.claimant, claim.collateral);
    }

}

File 6 of 7: IERC20.sol
/**
* SPDX-License-Identifier: MIT
*
* Copyright (c) 2016-2019 zOS Global Limited
*
*/
pragma solidity >=0.8;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP. Does not include
 * the optional functions; to access them see `ERC20Detailed`.
 */

interface IERC20 {

    // Optional functions
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a `Transfer` event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through `transferFrom`. This is
     * zero by default.
     *
     * This value changes when `approve` or `transferFrom` are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * > Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an `Approval` event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a `Transfer` event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to `approve`. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

File 7 of 7: IERC677Receiver.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.8;

interface IERC677Receiver {
    
    function onTokenTransfer(address from, uint256 amount, bytes calldata data) external returns (bool);

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"newBaseToken_","type":"address"},{"internalType":"string","name":"_terms","type":"string"},{"internalType":"address","name":"predecessor","type":"address"},{"internalType":"uint256","name":"quorum","type":"uint256"},{"internalType":"uint256","name":"votePeriod","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"lostAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"collateral","type":"uint256"}],"name":"ClaimCleared","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"lostAddress","type":"address"},{"indexed":true,"internalType":"address","name":"claimant","type":"address"},{"indexed":false,"internalType":"uint256","name":"collateral","type":"uint256"}],"name":"ClaimDeleted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"lostAddress","type":"address"},{"indexed":true,"internalType":"address","name":"claimant","type":"address"},{"indexed":false,"internalType":"uint256","name":"balance","type":"uint256"}],"name":"ClaimMade","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"lostAddress","type":"address"},{"indexed":true,"internalType":"address","name":"claimant","type":"address"},{"indexed":false,"internalType":"uint256","name":"collateral","type":"uint256"}],"name":"ClaimResolved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newCustomCollateralAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"newCustomCollareralRate","type":"uint256"}],"name":"CustomClaimCollateralChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newContractAddress","type":"address"}],"name":"MigrationSucceeded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claims","outputs":[{"internalType":"address","name":"claimant","type":"address"},{"internalType":"uint256","name":"collateral","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"address","name":"currencyUsed","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"clearClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"convert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"customCollateralAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"customCollateralRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"collateralType","type":"address"},{"internalType":"address","name":"lostAddress","type":"address"}],"name":"declareLost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"lostAddress","type":"address"}],"name":"deleteClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableRecovery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"buyer","type":"address"},{"internalType":"address","name":"currency","type":"address"}],"name":"drag","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"contract IOfferFactory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getClaimDeleter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"lostAddress","type":"address"}],"name":"getClaimant","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"lostAddress","type":"address"}],"name":"getCollateral","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"collateralType","type":"address"}],"name":"getCollateralRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"lostAddress","type":"address"}],"name":"getCollateralType","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"lostAddress","type":"address"}],"name":"getTimeStamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isBinding","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"isRecoveryEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256","name":"pricePerShare","type":"uint256"},{"internalType":"address","name":"currency","type":"address"}],"name":"makeAcquisitionOffer","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"migrate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notifyOfferEnded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"offer","outputs":[{"internalType":"contract IOffer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onTokenTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"quorum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"lostAddress","type":"address"}],"name":"recover","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"recoveryDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setRecoverable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"terms","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"transferAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"unwrap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unwrapConversionFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"votePeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"wrap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wrapped","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60a060405260006009553480156200001657600080fd5b5060405162002eba38038062002eba83398101604081905262000039916200016b565b6003805460ff19169055600880546001600160a01b0319166001600160a01b038516179055600b829055600c819055835184908490849084906200008590600d906020870190620000a8565b505050505060609490941b6001600160601b03191660805250620002d092505050565b828054620000b6906200027d565b90600052602060002090601f016020900481019282620000da576000855562000125565b82601f10620000f557805160ff191683800117855562000125565b8280016001018555821562000125579182015b828111156200012557825182559160200191906001019062000108565b506200013392915062000137565b5090565b5b8082111562000133576000815560010162000138565b80516001600160a01b03811681146200016657600080fd5b919050565b600080600080600060a0868803121562000183578081fd5b6200018e866200014e565b602087810151919650906001600160401b0380821115620001ad578384fd5b818901915089601f830112620001c1578384fd5b815181811115620001d657620001d6620002ba565b604051601f8201601f19908116603f01168101908382118183101715620002015762000201620002ba565b816040528281528c8684870101111562000219578687fd5b8693505b828410156200023c57848401860151818501870152928501926200021d565b828411156200024d57868684830101525b80995050505050505062000264604087016200014e565b6060870151608090970151959894975095949392505050565b6002810460018216806200029257607f821691505b60208210811415620002b457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b60805160601c612bb66200030460003960008181611eb3015281816120190152818161211101526121900152612bb66000f3fe6080604052600436106102725760003560e01c806377e071ad1161014f578063a9059cbb116100c1578063d50256251161007a578063d5025625146106d7578063dcc7d4ad146106ec578063dd62ed3e146106ff578063de0e9a3e1461071f578063eb470ebf1461073f578063fcb79a7e1461075f57610272565b8063a9059cbb1461061d578063b40e80d11461063d578063bf376c7a1461065d578063c028df061461067d578063c45a015514610692578063c6788bdd146106a757610272565b806395d89b411161011357806395d89b411461057e5780639b56d6c9146105935780639e4b5745146105b3578063a3ec1883146105c8578063a4c0ed36146105e8578063a78135871461060857610272565b806377e071ad1461050a5780637dc2cd981461052a5780638fd3ab801461053f5780638ff8831b1461055457806391bbdcc71461056957610272565b8063313ce567116101e857806342966c68116101ac57806342966c681461046b57806350e70d481461048b57806360918117146104a05780636427ed97146104b55780636b03ed5f146104d557806370a08231146104ea57610272565b8063313ce567146103d457806332a7ae95146103f657806332bc320b146104165780633bcc45ba1461042b5780634000aea01461044b57610272565b80631703a0181161023a5780631703a0181461033557806318160ddd1461034a5780631e3b9de51461035f57806323b872dd1461037f57806326773ddd1461039f5780632a0a4ed5146103bf57610272565b806306fdde03146102775780630832e470146102a2578063095ea7b3146102c45780630c6f0e5d146102f15780630cd865ec14610313575b600080fd5b34801561028357600080fd5b5061028c61077f565b60405161029991906128b7565b60405180910390f35b3480156102ae57600080fd5b506102b76108db565b6040516102999190612a4b565b3480156102d057600080fd5b506102e46102df366004612514565b6108e1565b6040516102999190612877565b3480156102fd57600080fd5b506103066108f7565b60405161029991906127b3565b34801561031f57600080fd5b5061033361032e366004612464565b610906565b005b34801561034157600080fd5b506102b7610b06565b34801561035657600080fd5b506102b7610b0c565b34801561036b57600080fd5b5061030661037a366004612464565b610b12565b34801561038b57600080fd5b506102e461039a3660046124d4565b610b33565b3480156103ab57600080fd5b506103336103ba36600461249c565b610b8f565b3480156103cb57600080fd5b50610306610d9a565b3480156103e057600080fd5b506103e9610e1c565b6040516102999190612a54565b34801561040257600080fd5b50610333610411366004612464565b610e25565b34801561042257600080fd5b50610333610fec565b34801561043757600080fd5b50610306610446366004612464565b611012565b34801561045757600080fd5b506102e461046636600461253f565b611033565b34801561047757600080fd5b506103336104863660046126dc565b6110d8565b34801561049757600080fd5b5061030661116b565b3480156104ac57600080fd5b506102b761117a565b3480156104c157600080fd5b506103336104d03660046125c3565b611180565b3480156104e157600080fd5b5061033361119f565b3480156104f657600080fd5b506102b7610505366004612464565b6112c8565b34801561051657600080fd5b506102b7610525366004612464565b6112e3565b34801561053657600080fd5b506102b76113b9565b34801561054b57600080fd5b506103336113c0565b34801561056057600080fd5b5061033361145f565b34801561057557600080fd5b506103336114c4565b34801561058a57600080fd5b5061028c6114e4565b34801561059f57600080fd5b506102b76105ae366004612464565b611627565b3480156105bf57600080fd5b506102e4611645565b3480156105d457600080fd5b506102e46105e3366004612464565b61164c565b3480156105f457600080fd5b506102e461060336600461253f565b61166b565b34801561061457600080fd5b506102b761168f565b34801561062957600080fd5b506102e4610638366004612514565b611695565b34801561064957600080fd5b506102e4610658366004612464565b6116a8565b34801561066957600080fd5b50610333610678366004612514565b6116bd565b34801561068957600080fd5b5061030661175a565b34801561069e57600080fd5b50610306611769565b3480156106b357600080fd5b506106c76106c2366004612464565b611781565b604051610299949392919061284c565b3480156106e357600080fd5b5061028c6117b3565b6103336106fa3660046125fb565b611841565b34801561070b57600080fd5b506102b761071a36600461249c565b6119ff565b34801561072b57600080fd5b5061033361073a3660046126dc565b611a2a565b34801561074b57600080fd5b506102b761075a366004612464565b611a49565b34801561076b57600080fd5b5061033361077a36600461249c565b611a67565b6060610789611645565b1561083e57600860009054906101000a90046001600160a01b03166001600160a01b03166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b1580156107dc57600080fd5b505afa1580156107f0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108189190810190612633565b6040516020016108289190612751565b60405160208183030381529060405290506108d8565b600860009054906101000a90046001600160a01b03166001600160a01b03166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b15801561088c57600080fd5b505afa1580156108a0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108c89190810190612633565b6040516020016108289190612783565b90565b60095481565b60006108ee338484611a9c565b50600192915050565b6006546001600160a01b031681565b6001600160a01b038082166000908152600460209081526040918290208251608081018452815485168152600182015492810183905260028201549381019390935260030154909216606082018190529091908161097f5760405162461bcd60e51b815260040161097690612a05565b60405180910390fd5b82516001600160a01b031633146109a85760405162461bcd60e51b815260040161097690612953565b4262ed4e0084604001516109bc9190612a62565b11156109da5760405162461bcd60e51b815260040161097690612a28565b82516001600160a01b03808616600090815260046020819052604080832080546001600160a01b031990811682556001820185905560028201949094556003018054909316909255905163a9059cbb60e01b81529184169163a9059cbb91610a469185918891016127eb565b602060405180830381600087803b158015610a6057600080fd5b505af1158015610a74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9891906125df565b610aa157600080fd5b610ab48582610aaf886112c8565b611af7565b806001600160a01b0316856001600160a01b03167f52a5c2b28bc6eb9712d0ced43463103b486b13ccc9cda499fd3b2d7b6a74a8ee85604051610af79190612a4b565b60405180910390a35050505050565b600b5481565b60025490565b6001600160a01b03808216600090815260046020526040902054165b919050565b6000610b40848484611af7565b6001600160a01b0384166000908152600160209081526040808320338452909152902054600160ff1b811015610b8457610b848533610b7f8685612ab9565b611a9c565b506001949350505050565b610b988161164c565b610bb45760405162461bcd60e51b815260040161097690612979565b6000610bbf836112e3565b905060008111610be15760405162461bcd60e51b8152600401610976906129ba565b336000610bed846112c8565b90506000610bfb8483612a9a565b90508582610c1b5760405162461bcd60e51b81526004016109769061299b565b6001600160a01b03861660009081526004602052604090206001015415610c545760405162461bcd60e51b81526004016109769061292a565b6040516323b872dd60e01b81526001600160a01b038216906323b872dd90610c84908790309087906004016127c7565b602060405180830381600087803b158015610c9e57600080fd5b505af1158015610cb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd691906125df565b610cdf57600080fd5b604080516080810182526001600160a01b038087168083526020808401878152428587019081528d8516606087019081528d86166000818152600490955293889020965187549087166001600160a01b0319918216178855925160018801559051600287015551600390950180549590941694169390931790915591517f1982ca8958fc8a8176cb52be509260f4bc5af7ce04e1533711793f1c56dd535990610d89908790612a4b565b60405180910390a350505050505050565b60085460408051632a0a4ed560e01b815290516000926001600160a01b031691632a0a4ed5916004808301926020929190829003018186803b158015610ddf57600080fd5b505afa158015610df3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e179190612480565b905090565b60035460ff1681565b610e2d610d9a565b6001600160a01b0316336001600160a01b031614610e5d5760405162461bcd60e51b8152600401610976906129e2565b6001600160a01b038082166000908152600460209081526040918290208251608081018452815485168152600182015492810183905260028201549381019390935260030154909216606082018190529091610ecb5760405162461bcd60e51b815260040161097690612a05565b6001600160a01b03808416600090815260046020818152604080842080546001600160a01b031990811682556001820186905560028201959095556003018054909416909355855190860151925163a9059cbb60e01b81529385169363a9059cbb93610f39939091016127eb565b602060405180830381600087803b158015610f5357600080fd5b505af1158015610f67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8b91906125df565b610f9457600080fd5b81600001516001600160a01b0316836001600160a01b03167fbb036e629a9f4c0897ee5d48440dfdb36f7e772117723a2ed603a6514244c2d58460200151604051610fdf9190612a4b565b60405180910390a3505050565b600a546001600160a01b031633141561101057600a80546001600160a01b03191690555b565b6001600160a01b039081166000908152600460205260409020600301541690565b6000806110408686611695565b905080156110cf57604051635260769b60e11b81526001600160a01b0387169063a4c0ed369061107a903390899089908990600401612804565b602060405180830381600087803b15801561109457600080fd5b505af11580156110a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cc91906125df565b90505b95945050505050565b6110e23382611bb4565b60006110ec611645565b6110f8576009546110fb565b60015b6008549091506001600160a01b03166342966c686111198385612a9a565b6040518263ffffffff1660e01b81526004016111359190612a4b565b600060405180830381600087803b15801561114f57600080fd5b505af1158015611163573d6000803e3d6000fd5b505050505050565b6008546001600160a01b031681565b60075481565b336000908152600560205260409020805460ff19169115919091179055565b33600090815260046020526040902060010154156110105733600081815260046020819052604080832060018101805460038301805484546001600160a01b0319908116865593889055600290940196909655908216909455905163a9059cbb60e01b815292936001600160a01b0390911692839263a9059cbb926112289290918791016127eb565b602060405180830381600087803b15801561124257600080fd5b505af1158015611256573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127a91906125df565b61128357600080fd5b336001600160a01b03167f203627483d943880619f4b7e0cca21dbefd6204b4d85b124eb99540e17ba86dd836040516112bc9190612a4b565b60405180910390a25050565b6001600160a01b031660009081526020819052604090205490565b6000806112ef83611c4e565b905080156112fe579050610b2e565b6008546001600160a01b038481169116141561131e575050600954610b2e565b6009546008546040516377e071ad60e01b81526001600160a01b03909116906377e071ad906113519087906004016127b3565b60206040518083038186803b15801561136957600080fd5b505afa15801561137d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a191906126f4565b6113ab9190612a9a565b915050610b2e565b50919050565b62ed4e0081565b336113c9611c90565b156113d357600080fd5b611f406113de610b0c565b6113e89190612a9a565b6113f1826112c8565b6113fd90612710612a9a565b101561141b5760405162461bcd60e51b81526004016109769061290a565b6114258182611ca1565b7f3b6b79a09e9fd230e8591b65c97236bf7df7a604edf733db0658e66b0e6eb2a98160405161145491906127b3565b60405180910390a150565b600854604051636427ed9760e01b81526001600160a01b0390911690636427ed979061149090600090600401612877565b600060405180830381600087803b1580156114aa57600080fd5b505af11580156114be573d6000803e3d6000fd5b50505050565b60006114ce611e69565b90506114d8611eae565b6114e181611ff7565b50565b60606114ee611645565b1561158d57600860009054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561154157600080fd5b505afa158015611555573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261157d9190810190612633565b604051602001610828919061270c565b600860009054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b1580156115db57600080fd5b505afa1580156115ef573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116179190810190612633565b6040516020016108289190612735565b6001600160a01b031660009081526004602052604090206001015490565b6009541590565b6001600160a01b031660009081526005602052604090205460ff161590565b6008546000906001600160a01b0316331461168557600080fd5b610b848585612258565b600c5481565b60006116a183836122f9565b9392505050565b60056020526000908152604090205460ff1681565b6008546040516323b872dd60e01b81526001600160a01b03909116906323b872dd906116f1903390309086906004016127c7565b602060405180830381600087803b15801561170b57600080fd5b505af115801561171f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061174391906125df565b61174c57600080fd5b6117568282612258565b5050565b600a546001600160a01b031681565b73f9f92751f272f0872e2edb6a280b0990f3e2b8a381565b60046020526000908152604090208054600182015460028301546003909301546001600160a01b039283169391921684565b600d80546117c090612afc565b80601f01602080910402602001604051908101604052809291908181526020018280546117ec90612afc565b80156118395780601f1061180e57610100808354040283529160200191611839565b820191906000526020600020905b81548152906001019060200180831161181c57829003601f168201915b505050505081565b611849611645565b61185257600080fd5b600b54600c54604051634dc5e43160e01b815260009273f9f92751f272f0872e2edb6a280b0990f3e2b8a392634dc5e43192349261189a928a9233928b928b92600401612882565b6020604051808303818588803b1580156118b357600080fd5b505af11580156118c7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906118ec9190612480565b90506118f6611c90565b156119da57806001600160a01b0316633f5e3e7f6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561193657600080fd5b505af115801561194a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196e91906125df565b61197757600080fd5b600a546040516306a169ed60e01b81526001600160a01b03909116906306a169ed906119a79084906004016127b3565b600060405180830381600087803b1580156119c157600080fd5b505af11580156119d5573d6000803e3d6000fd5b505050505b600a80546001600160a01b0319166001600160a01b0392909216919091179055505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b611a32611645565b15611a3c57600080fd5b6114e13382600954612316565b6001600160a01b031660009081526004602052604090206002015490565b600a546001600160a01b03163314611a7e57600080fd5b611a9282611a8b846112c8565b6001612316565b6117568183611ca1565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610fdf908590612a4b565b6001600160a01b038216611b0a57600080fd5b611b158383836123b9565b6001600160a01b03831660009081526020819052604081208054839290611b3d908490612ab9565b90915550506001600160a01b03821660009081526020819052604081208054839290611b6a908490612a62565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610fdf9190612a4b565b611bc0826000836123b9565b8060026000828254611bd29190612ab9565b90915550506001600160a01b03821660009081526020819052604081208054839290611bff908490612ab9565b90915550506040516000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611c42908590612a4b565b60405180910390a35050565b60006001600160a01b038216301415611c6957506001610b2e565b6006546001600160a01b0383811691161415611c885750600754610b2e565b506000610b2e565b600a546001600160a01b0316151590565b611ca9611645565b611cb257600080fd5b6008546040516370a0823160e01b81526001600160a01b039091169063a9059cbb90839083906370a0823190611cec9030906004016127b3565b60206040518083038186803b158015611d0457600080fd5b505afa158015611d18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d3c91906126f4565b6040518363ffffffff1660e01b8152600401611d599291906127eb565b602060405180830381600087803b158015611d7357600080fd5b505af1158015611d87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dab91906125df565b611db457600080fd5b600880546001600160a01b0319166001600160a01b038416179055611756611dda610b0c565b6008546040516370a0823160e01b81526001600160a01b03909116906370a0823190611e0a9030906004016127b3565b60206040518083038186803b158015611e2257600080fd5b505afa158015611e36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5a91906126f4565b611e649190612a7a565b612431565b60085460408051635804791360e01b815290516000926001600160a01b0316916358047913916004808301926020929190829003018186803b158015610ddf57600080fd5b6008547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161415611eea57600080fd5b600854604080516318160ddd60e01b815290516001600160a01b039092169160009183916318160ddd9160048082019260209290919082900301818787803b158015611f3557600080fd5b505af1158015611f49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6d91906126f4565b90506000611f79610b0c565b90506000611f878284612ab9565b9050611f933082612258565b611f9e308583611a9c565b836001600160a01b0316638fd3ab806040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611fd957600080fd5b505af1158015611fed573d6000803e3d6000fd5b5050505050505050565b6040516370a0823160e01b815281906001600160a01b0382169063095ea7b3907f00000000000000000000000000000000000000000000000000000000000000009083906370a082319061204f9030906004016127b3565b60206040518083038186803b15801561206757600080fd5b505afa15801561207b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209f91906126f4565b6040518363ffffffff1660e01b81526004016120bc9291906127eb565b602060405180830381600087803b1580156120d657600080fd5b505af11580156120ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210e91906125df565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e9850eb36040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561216a57600080fd5b505af115801561217e573d6000803e3d6000fd5b5050600880546001600160a01b0319167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316179055506121c6905061145f565b6008546040516370a0823160e01b81526001600160a01b03909116906370a08231906121f69030906004016127b3565b60206040518083038186803b15801561220e57600080fd5b505afa158015612222573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061224691906126f4565b61224e610b0c565b1461175657600080fd5b6001600160a01b03821661226b57600080fd5b612277600083836123b9565b80600260008282546122899190612a62565b90915550506001600160a01b038216600090815260208190526040812080548392906122b6908490612a62565b90915550506040516001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611c42908590612a4b565b60006123058383612457565b61230e57600080fd5b6108ee61119f565b6123208383611bb4565b6008546001600160a01b031663a9059cbb8461233c8486612a9a565b6040518363ffffffff1660e01b81526004016123599291906127eb565b602060405180830381600087803b15801561237357600080fd5b505af1158015612387573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ab91906125df565b6123b457600080fd5b505050565b6123c1611c90565b156123b457600a5460405163e1a1810f60e01b81526001600160a01b039091169063e1a1810f906123fa908690869086906004016127c7565b600060405180830381600087803b15801561241457600080fd5b505af1158015612428573d6000803e3d6000fd5b50505050505050565b60018110156124525760405162461bcd60e51b8152600401610976906128ea565b600955565b60006108ee338484611af7565b600060208284031215612475578081fd5b81356116a181612b5d565b600060208284031215612491578081fd5b81516116a181612b5d565b600080604083850312156124ae578081fd5b82356124b981612b5d565b915060208301356124c981612b5d565b809150509250929050565b6000806000606084860312156124e8578081fd5b83356124f381612b5d565b9250602084013561250381612b5d565b929592945050506040919091013590565b60008060408385031215612526578182fd5b823561253181612b5d565b946020939093013593505050565b60008060008060608587031215612554578081fd5b843561255f81612b5d565b935060208501359250604085013567ffffffffffffffff80821115612582578283fd5b818701915087601f830112612595578283fd5b8135818111156125a3578384fd5b8860208285010111156125b4578384fd5b95989497505060200194505050565b6000602082840312156125d4578081fd5b81356116a181612b72565b6000602082840312156125f0578081fd5b81516116a181612b72565b60008060006060848603121561260f578283fd5b8335925060208401359150604084013561262881612b5d565b809150509250925092565b600060208284031215612644578081fd5b815167ffffffffffffffff8082111561265b578283fd5b818401915084601f83011261266e578283fd5b81518181111561268057612680612b47565b604051601f8201601f19908116603f011681019083821181831017156126a8576126a8612b47565b816040528281528760208487010111156126c0578586fd5b6126d1836020830160208801612ad0565b979650505050505050565b6000602082840312156126ed578081fd5b5035919050565b600060208284031215612705578081fd5b5051919050565b6000601160fa1b82528251612728816001850160208701612ad0565b9190910160010192915050565b6000605760f81b82528251612728816001850160208701612ad0565b6000690223930b3b3b0b13632960b51b8252825161277681600a850160208701612ad0565b91909101600a0192915050565b60006702bb930b83832b2160c51b825282516127a6816008850160208701612ad0565b9190910160080192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0385168152602081018490526060604082018190528101829052600082846080840137818301608090810191909152601f909201601f191601019392505050565b6001600160a01b03948516815260208101939093526040830191909152909116606082015260800190565b901515815260200190565b9586526001600160a01b039485166020870152604086019390935292166060840152608083019190915260a082015260c00190565b60006020825282518060208401526128d6816040850160208701612ad0565b601f01601f19169190910160400192915050565b6020808252600690820152653330b1ba37b960d11b604082015260600190565b60208082526006908201526571756f72756d60d01b604082015260600190565b6020808252600f908201526e185b1c9958591e4818db185a5b5959608a1b604082015260600190565b6020808252600c908201526b1b9bdd0818db185a5b585b9d60a21b604082015260600190565b602080825260089082015267191a5cd8589b195960c21b604082015260600190565b602080825260059082015264656d70747960d81b604082015260600190565b6020808252600e908201526d1898590818dbdb1b185d195c985b60921b604082015260600190565b6020808252600990820152686e6f2061636365737360b81b604082015260600190565b6020808252600990820152681b9bdd08199bdd5b9960ba1b604082015260600190565b602080825260099082015268746f6f206561726c7960b81b604082015260600190565b90815260200190565b60ff91909116815260200190565b60008219821115612a7557612a75612b31565b500190565b600082612a9557634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615612ab457612ab4612b31565b500290565b600082821015612acb57612acb612b31565b500390565b60005b83811015612aeb578181015183820152602001612ad3565b838111156114be5750506000910152565b600281046001821680612b1057607f821691505b602082108114156113b357634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146114e157600080fd5b80151581146114e157600080fdfea264697066735822122088d83b87e94f3c6e56492bc72a9b8184e84cf27aa5343b59639f9820ece81ea764736f6c63430008010033000000000000000000000000ae7c2042c2f84ff5880a185bd7d81da5b822b3a700000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000414324b0aba49fb14cbfb37be40d8d78a2edf4470000000000000000000000000000000000000000000000000000000000001d4c00000000000000000000000000000000000000000000000000000000004f1a00000000000000000000000000000000000000000000000000000000000000001371756974742e63682f696e766573746f72656e00000000000000000000000000

Deployed Bytecode

0x6080604052600436106102725760003560e01c806377e071ad1161014f578063a9059cbb116100c1578063d50256251161007a578063d5025625146106d7578063dcc7d4ad146106ec578063dd62ed3e146106ff578063de0e9a3e1461071f578063eb470ebf1461073f578063fcb79a7e1461075f57610272565b8063a9059cbb1461061d578063b40e80d11461063d578063bf376c7a1461065d578063c028df061461067d578063c45a015514610692578063c6788bdd146106a757610272565b806395d89b411161011357806395d89b411461057e5780639b56d6c9146105935780639e4b5745146105b3578063a3ec1883146105c8578063a4c0ed36146105e8578063a78135871461060857610272565b806377e071ad1461050a5780637dc2cd981461052a5780638fd3ab801461053f5780638ff8831b1461055457806391bbdcc71461056957610272565b8063313ce567116101e857806342966c68116101ac57806342966c681461046b57806350e70d481461048b57806360918117146104a05780636427ed97146104b55780636b03ed5f146104d557806370a08231146104ea57610272565b8063313ce567146103d457806332a7ae95146103f657806332bc320b146104165780633bcc45ba1461042b5780634000aea01461044b57610272565b80631703a0181161023a5780631703a0181461033557806318160ddd1461034a5780631e3b9de51461035f57806323b872dd1461037f57806326773ddd1461039f5780632a0a4ed5146103bf57610272565b806306fdde03146102775780630832e470146102a2578063095ea7b3146102c45780630c6f0e5d146102f15780630cd865ec14610313575b600080fd5b34801561028357600080fd5b5061028c61077f565b60405161029991906128b7565b60405180910390f35b3480156102ae57600080fd5b506102b76108db565b6040516102999190612a4b565b3480156102d057600080fd5b506102e46102df366004612514565b6108e1565b6040516102999190612877565b3480156102fd57600080fd5b506103066108f7565b60405161029991906127b3565b34801561031f57600080fd5b5061033361032e366004612464565b610906565b005b34801561034157600080fd5b506102b7610b06565b34801561035657600080fd5b506102b7610b0c565b34801561036b57600080fd5b5061030661037a366004612464565b610b12565b34801561038b57600080fd5b506102e461039a3660046124d4565b610b33565b3480156103ab57600080fd5b506103336103ba36600461249c565b610b8f565b3480156103cb57600080fd5b50610306610d9a565b3480156103e057600080fd5b506103e9610e1c565b6040516102999190612a54565b34801561040257600080fd5b50610333610411366004612464565b610e25565b34801561042257600080fd5b50610333610fec565b34801561043757600080fd5b50610306610446366004612464565b611012565b34801561045757600080fd5b506102e461046636600461253f565b611033565b34801561047757600080fd5b506103336104863660046126dc565b6110d8565b34801561049757600080fd5b5061030661116b565b3480156104ac57600080fd5b506102b761117a565b3480156104c157600080fd5b506103336104d03660046125c3565b611180565b3480156104e157600080fd5b5061033361119f565b3480156104f657600080fd5b506102b7610505366004612464565b6112c8565b34801561051657600080fd5b506102b7610525366004612464565b6112e3565b34801561053657600080fd5b506102b76113b9565b34801561054b57600080fd5b506103336113c0565b34801561056057600080fd5b5061033361145f565b34801561057557600080fd5b506103336114c4565b34801561058a57600080fd5b5061028c6114e4565b34801561059f57600080fd5b506102b76105ae366004612464565b611627565b3480156105bf57600080fd5b506102e4611645565b3480156105d457600080fd5b506102e46105e3366004612464565b61164c565b3480156105f457600080fd5b506102e461060336600461253f565b61166b565b34801561061457600080fd5b506102b761168f565b34801561062957600080fd5b506102e4610638366004612514565b611695565b34801561064957600080fd5b506102e4610658366004612464565b6116a8565b34801561066957600080fd5b50610333610678366004612514565b6116bd565b34801561068957600080fd5b5061030661175a565b34801561069e57600080fd5b50610306611769565b3480156106b357600080fd5b506106c76106c2366004612464565b611781565b604051610299949392919061284c565b3480156106e357600080fd5b5061028c6117b3565b6103336106fa3660046125fb565b611841565b34801561070b57600080fd5b506102b761071a36600461249c565b6119ff565b34801561072b57600080fd5b5061033361073a3660046126dc565b611a2a565b34801561074b57600080fd5b506102b761075a366004612464565b611a49565b34801561076b57600080fd5b5061033361077a36600461249c565b611a67565b6060610789611645565b1561083e57600860009054906101000a90046001600160a01b03166001600160a01b03166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b1580156107dc57600080fd5b505afa1580156107f0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108189190810190612633565b6040516020016108289190612751565b60405160208183030381529060405290506108d8565b600860009054906101000a90046001600160a01b03166001600160a01b03166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b15801561088c57600080fd5b505afa1580156108a0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108c89190810190612633565b6040516020016108289190612783565b90565b60095481565b60006108ee338484611a9c565b50600192915050565b6006546001600160a01b031681565b6001600160a01b038082166000908152600460209081526040918290208251608081018452815485168152600182015492810183905260028201549381019390935260030154909216606082018190529091908161097f5760405162461bcd60e51b815260040161097690612a05565b60405180910390fd5b82516001600160a01b031633146109a85760405162461bcd60e51b815260040161097690612953565b4262ed4e0084604001516109bc9190612a62565b11156109da5760405162461bcd60e51b815260040161097690612a28565b82516001600160a01b03808616600090815260046020819052604080832080546001600160a01b031990811682556001820185905560028201949094556003018054909316909255905163a9059cbb60e01b81529184169163a9059cbb91610a469185918891016127eb565b602060405180830381600087803b158015610a6057600080fd5b505af1158015610a74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9891906125df565b610aa157600080fd5b610ab48582610aaf886112c8565b611af7565b806001600160a01b0316856001600160a01b03167f52a5c2b28bc6eb9712d0ced43463103b486b13ccc9cda499fd3b2d7b6a74a8ee85604051610af79190612a4b565b60405180910390a35050505050565b600b5481565b60025490565b6001600160a01b03808216600090815260046020526040902054165b919050565b6000610b40848484611af7565b6001600160a01b0384166000908152600160209081526040808320338452909152902054600160ff1b811015610b8457610b848533610b7f8685612ab9565b611a9c565b506001949350505050565b610b988161164c565b610bb45760405162461bcd60e51b815260040161097690612979565b6000610bbf836112e3565b905060008111610be15760405162461bcd60e51b8152600401610976906129ba565b336000610bed846112c8565b90506000610bfb8483612a9a565b90508582610c1b5760405162461bcd60e51b81526004016109769061299b565b6001600160a01b03861660009081526004602052604090206001015415610c545760405162461bcd60e51b81526004016109769061292a565b6040516323b872dd60e01b81526001600160a01b038216906323b872dd90610c84908790309087906004016127c7565b602060405180830381600087803b158015610c9e57600080fd5b505af1158015610cb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd691906125df565b610cdf57600080fd5b604080516080810182526001600160a01b038087168083526020808401878152428587019081528d8516606087019081528d86166000818152600490955293889020965187549087166001600160a01b0319918216178855925160018801559051600287015551600390950180549590941694169390931790915591517f1982ca8958fc8a8176cb52be509260f4bc5af7ce04e1533711793f1c56dd535990610d89908790612a4b565b60405180910390a350505050505050565b60085460408051632a0a4ed560e01b815290516000926001600160a01b031691632a0a4ed5916004808301926020929190829003018186803b158015610ddf57600080fd5b505afa158015610df3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e179190612480565b905090565b60035460ff1681565b610e2d610d9a565b6001600160a01b0316336001600160a01b031614610e5d5760405162461bcd60e51b8152600401610976906129e2565b6001600160a01b038082166000908152600460209081526040918290208251608081018452815485168152600182015492810183905260028201549381019390935260030154909216606082018190529091610ecb5760405162461bcd60e51b815260040161097690612a05565b6001600160a01b03808416600090815260046020818152604080842080546001600160a01b031990811682556001820186905560028201959095556003018054909416909355855190860151925163a9059cbb60e01b81529385169363a9059cbb93610f39939091016127eb565b602060405180830381600087803b158015610f5357600080fd5b505af1158015610f67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8b91906125df565b610f9457600080fd5b81600001516001600160a01b0316836001600160a01b03167fbb036e629a9f4c0897ee5d48440dfdb36f7e772117723a2ed603a6514244c2d58460200151604051610fdf9190612a4b565b60405180910390a3505050565b600a546001600160a01b031633141561101057600a80546001600160a01b03191690555b565b6001600160a01b039081166000908152600460205260409020600301541690565b6000806110408686611695565b905080156110cf57604051635260769b60e11b81526001600160a01b0387169063a4c0ed369061107a903390899089908990600401612804565b602060405180830381600087803b15801561109457600080fd5b505af11580156110a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cc91906125df565b90505b95945050505050565b6110e23382611bb4565b60006110ec611645565b6110f8576009546110fb565b60015b6008549091506001600160a01b03166342966c686111198385612a9a565b6040518263ffffffff1660e01b81526004016111359190612a4b565b600060405180830381600087803b15801561114f57600080fd5b505af1158015611163573d6000803e3d6000fd5b505050505050565b6008546001600160a01b031681565b60075481565b336000908152600560205260409020805460ff19169115919091179055565b33600090815260046020526040902060010154156110105733600081815260046020819052604080832060018101805460038301805484546001600160a01b0319908116865593889055600290940196909655908216909455905163a9059cbb60e01b815292936001600160a01b0390911692839263a9059cbb926112289290918791016127eb565b602060405180830381600087803b15801561124257600080fd5b505af1158015611256573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127a91906125df565b61128357600080fd5b336001600160a01b03167f203627483d943880619f4b7e0cca21dbefd6204b4d85b124eb99540e17ba86dd836040516112bc9190612a4b565b60405180910390a25050565b6001600160a01b031660009081526020819052604090205490565b6000806112ef83611c4e565b905080156112fe579050610b2e565b6008546001600160a01b038481169116141561131e575050600954610b2e565b6009546008546040516377e071ad60e01b81526001600160a01b03909116906377e071ad906113519087906004016127b3565b60206040518083038186803b15801561136957600080fd5b505afa15801561137d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a191906126f4565b6113ab9190612a9a565b915050610b2e565b50919050565b62ed4e0081565b336113c9611c90565b156113d357600080fd5b611f406113de610b0c565b6113e89190612a9a565b6113f1826112c8565b6113fd90612710612a9a565b101561141b5760405162461bcd60e51b81526004016109769061290a565b6114258182611ca1565b7f3b6b79a09e9fd230e8591b65c97236bf7df7a604edf733db0658e66b0e6eb2a98160405161145491906127b3565b60405180910390a150565b600854604051636427ed9760e01b81526001600160a01b0390911690636427ed979061149090600090600401612877565b600060405180830381600087803b1580156114aa57600080fd5b505af11580156114be573d6000803e3d6000fd5b50505050565b60006114ce611e69565b90506114d8611eae565b6114e181611ff7565b50565b60606114ee611645565b1561158d57600860009054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561154157600080fd5b505afa158015611555573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261157d9190810190612633565b604051602001610828919061270c565b600860009054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b1580156115db57600080fd5b505afa1580156115ef573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116179190810190612633565b6040516020016108289190612735565b6001600160a01b031660009081526004602052604090206001015490565b6009541590565b6001600160a01b031660009081526005602052604090205460ff161590565b6008546000906001600160a01b0316331461168557600080fd5b610b848585612258565b600c5481565b60006116a183836122f9565b9392505050565b60056020526000908152604090205460ff1681565b6008546040516323b872dd60e01b81526001600160a01b03909116906323b872dd906116f1903390309086906004016127c7565b602060405180830381600087803b15801561170b57600080fd5b505af115801561171f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061174391906125df565b61174c57600080fd5b6117568282612258565b5050565b600a546001600160a01b031681565b73f9f92751f272f0872e2edb6a280b0990f3e2b8a381565b60046020526000908152604090208054600182015460028301546003909301546001600160a01b039283169391921684565b600d80546117c090612afc565b80601f01602080910402602001604051908101604052809291908181526020018280546117ec90612afc565b80156118395780601f1061180e57610100808354040283529160200191611839565b820191906000526020600020905b81548152906001019060200180831161181c57829003601f168201915b505050505081565b611849611645565b61185257600080fd5b600b54600c54604051634dc5e43160e01b815260009273f9f92751f272f0872e2edb6a280b0990f3e2b8a392634dc5e43192349261189a928a9233928b928b92600401612882565b6020604051808303818588803b1580156118b357600080fd5b505af11580156118c7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906118ec9190612480565b90506118f6611c90565b156119da57806001600160a01b0316633f5e3e7f6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561193657600080fd5b505af115801561194a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196e91906125df565b61197757600080fd5b600a546040516306a169ed60e01b81526001600160a01b03909116906306a169ed906119a79084906004016127b3565b600060405180830381600087803b1580156119c157600080fd5b505af11580156119d5573d6000803e3d6000fd5b505050505b600a80546001600160a01b0319166001600160a01b0392909216919091179055505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b611a32611645565b15611a3c57600080fd5b6114e13382600954612316565b6001600160a01b031660009081526004602052604090206002015490565b600a546001600160a01b03163314611a7e57600080fd5b611a9282611a8b846112c8565b6001612316565b6117568183611ca1565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610fdf908590612a4b565b6001600160a01b038216611b0a57600080fd5b611b158383836123b9565b6001600160a01b03831660009081526020819052604081208054839290611b3d908490612ab9565b90915550506001600160a01b03821660009081526020819052604081208054839290611b6a908490612a62565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610fdf9190612a4b565b611bc0826000836123b9565b8060026000828254611bd29190612ab9565b90915550506001600160a01b03821660009081526020819052604081208054839290611bff908490612ab9565b90915550506040516000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611c42908590612a4b565b60405180910390a35050565b60006001600160a01b038216301415611c6957506001610b2e565b6006546001600160a01b0383811691161415611c885750600754610b2e565b506000610b2e565b600a546001600160a01b0316151590565b611ca9611645565b611cb257600080fd5b6008546040516370a0823160e01b81526001600160a01b039091169063a9059cbb90839083906370a0823190611cec9030906004016127b3565b60206040518083038186803b158015611d0457600080fd5b505afa158015611d18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d3c91906126f4565b6040518363ffffffff1660e01b8152600401611d599291906127eb565b602060405180830381600087803b158015611d7357600080fd5b505af1158015611d87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dab91906125df565b611db457600080fd5b600880546001600160a01b0319166001600160a01b038416179055611756611dda610b0c565b6008546040516370a0823160e01b81526001600160a01b03909116906370a0823190611e0a9030906004016127b3565b60206040518083038186803b158015611e2257600080fd5b505afa158015611e36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5a91906126f4565b611e649190612a7a565b612431565b60085460408051635804791360e01b815290516000926001600160a01b0316916358047913916004808301926020929190829003018186803b158015610ddf57600080fd5b6008547f000000000000000000000000ae7c2042c2f84ff5880a185bd7d81da5b822b3a76001600160a01b0390811691161415611eea57600080fd5b600854604080516318160ddd60e01b815290516001600160a01b039092169160009183916318160ddd9160048082019260209290919082900301818787803b158015611f3557600080fd5b505af1158015611f49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6d91906126f4565b90506000611f79610b0c565b90506000611f878284612ab9565b9050611f933082612258565b611f9e308583611a9c565b836001600160a01b0316638fd3ab806040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611fd957600080fd5b505af1158015611fed573d6000803e3d6000fd5b5050505050505050565b6040516370a0823160e01b815281906001600160a01b0382169063095ea7b3907f000000000000000000000000ae7c2042c2f84ff5880a185bd7d81da5b822b3a79083906370a082319061204f9030906004016127b3565b60206040518083038186803b15801561206757600080fd5b505afa15801561207b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209f91906126f4565b6040518363ffffffff1660e01b81526004016120bc9291906127eb565b602060405180830381600087803b1580156120d657600080fd5b505af11580156120ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210e91906125df565b507f000000000000000000000000ae7c2042c2f84ff5880a185bd7d81da5b822b3a76001600160a01b031663e9850eb36040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561216a57600080fd5b505af115801561217e573d6000803e3d6000fd5b5050600880546001600160a01b0319167f000000000000000000000000ae7c2042c2f84ff5880a185bd7d81da5b822b3a76001600160a01b0316179055506121c6905061145f565b6008546040516370a0823160e01b81526001600160a01b03909116906370a08231906121f69030906004016127b3565b60206040518083038186803b15801561220e57600080fd5b505afa158015612222573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061224691906126f4565b61224e610b0c565b1461175657600080fd5b6001600160a01b03821661226b57600080fd5b612277600083836123b9565b80600260008282546122899190612a62565b90915550506001600160a01b038216600090815260208190526040812080548392906122b6908490612a62565b90915550506040516001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611c42908590612a4b565b60006123058383612457565b61230e57600080fd5b6108ee61119f565b6123208383611bb4565b6008546001600160a01b031663a9059cbb8461233c8486612a9a565b6040518363ffffffff1660e01b81526004016123599291906127eb565b602060405180830381600087803b15801561237357600080fd5b505af1158015612387573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ab91906125df565b6123b457600080fd5b505050565b6123c1611c90565b156123b457600a5460405163e1a1810f60e01b81526001600160a01b039091169063e1a1810f906123fa908690869086906004016127c7565b600060405180830381600087803b15801561241457600080fd5b505af1158015612428573d6000803e3d6000fd5b50505050505050565b60018110156124525760405162461bcd60e51b8152600401610976906128ea565b600955565b60006108ee338484611af7565b600060208284031215612475578081fd5b81356116a181612b5d565b600060208284031215612491578081fd5b81516116a181612b5d565b600080604083850312156124ae578081fd5b82356124b981612b5d565b915060208301356124c981612b5d565b809150509250929050565b6000806000606084860312156124e8578081fd5b83356124f381612b5d565b9250602084013561250381612b5d565b929592945050506040919091013590565b60008060408385031215612526578182fd5b823561253181612b5d565b946020939093013593505050565b60008060008060608587031215612554578081fd5b843561255f81612b5d565b935060208501359250604085013567ffffffffffffffff80821115612582578283fd5b818701915087601f830112612595578283fd5b8135818111156125a3578384fd5b8860208285010111156125b4578384fd5b95989497505060200194505050565b6000602082840312156125d4578081fd5b81356116a181612b72565b6000602082840312156125f0578081fd5b81516116a181612b72565b60008060006060848603121561260f578283fd5b8335925060208401359150604084013561262881612b5d565b809150509250925092565b600060208284031215612644578081fd5b815167ffffffffffffffff8082111561265b578283fd5b818401915084601f83011261266e578283fd5b81518181111561268057612680612b47565b604051601f8201601f19908116603f011681019083821181831017156126a8576126a8612b47565b816040528281528760208487010111156126c0578586fd5b6126d1836020830160208801612ad0565b979650505050505050565b6000602082840312156126ed578081fd5b5035919050565b600060208284031215612705578081fd5b5051919050565b6000601160fa1b82528251612728816001850160208701612ad0565b9190910160010192915050565b6000605760f81b82528251612728816001850160208701612ad0565b6000690223930b3b3b0b13632960b51b8252825161277681600a850160208701612ad0565b91909101600a0192915050565b60006702bb930b83832b2160c51b825282516127a6816008850160208701612ad0565b9190910160080192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0385168152602081018490526060604082018190528101829052600082846080840137818301608090810191909152601f909201601f191601019392505050565b6001600160a01b03948516815260208101939093526040830191909152909116606082015260800190565b901515815260200190565b9586526001600160a01b039485166020870152604086019390935292166060840152608083019190915260a082015260c00190565b60006020825282518060208401526128d6816040850160208701612ad0565b601f01601f19169190910160400192915050565b6020808252600690820152653330b1ba37b960d11b604082015260600190565b60208082526006908201526571756f72756d60d01b604082015260600190565b6020808252600f908201526e185b1c9958591e4818db185a5b5959608a1b604082015260600190565b6020808252600c908201526b1b9bdd0818db185a5b585b9d60a21b604082015260600190565b602080825260089082015267191a5cd8589b195960c21b604082015260600190565b602080825260059082015264656d70747960d81b604082015260600190565b6020808252600e908201526d1898590818dbdb1b185d195c985b60921b604082015260600190565b6020808252600990820152686e6f2061636365737360b81b604082015260600190565b6020808252600990820152681b9bdd08199bdd5b9960ba1b604082015260600190565b602080825260099082015268746f6f206561726c7960b81b604082015260600190565b90815260200190565b60ff91909116815260200190565b60008219821115612a7557612a75612b31565b500190565b600082612a9557634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615612ab457612ab4612b31565b500290565b600082821015612acb57612acb612b31565b500390565b60005b83811015612aeb578181015183820152602001612ad3565b838111156114be5750506000910152565b600281046001821680612b1057607f821691505b602082108114156113b357634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146114e157600080fd5b80151581146114e157600080fdfea264697066735822122088d83b87e94f3c6e56492bc72a9b8184e84cf27aa5343b59639f9820ece81ea764736f6c63430008010033

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

000000000000000000000000ae7c2042c2f84ff5880a185bd7d81da5b822b3a700000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000414324b0aba49fb14cbfb37be40d8d78a2edf4470000000000000000000000000000000000000000000000000000000000001d4c00000000000000000000000000000000000000000000000000000000004f1a00000000000000000000000000000000000000000000000000000000000000001371756974742e63682f696e766573746f72656e00000000000000000000000000

-----Decoded View---------------
Arg [0] : newBaseToken_ (address): 0xAe7c2042c2f84Ff5880A185Bd7D81dA5B822B3A7
Arg [1] : _terms (string): quitt.ch/investoren
Arg [2] : predecessor (address): 0x414324B0aBA49Fb14CbFB37BE40D8D78A2edf447
Arg [3] : quorum (uint256): 7500
Arg [4] : votePeriod (uint256): 5184000

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 000000000000000000000000ae7c2042c2f84ff5880a185bd7d81da5b822b3a7
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 000000000000000000000000414324b0aba49fb14cbfb37be40d8d78a2edf447
Arg [3] : 0000000000000000000000000000000000000000000000000000000000001d4c
Arg [4] : 00000000000000000000000000000000000000000000000000000000004f1a00
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000013
Arg [6] : 71756974742e63682f696e766573746f72656e00000000000000000000000000


Deployed Bytecode Sourcemap

3007:1560:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3377:274:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2669:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;3085:157:2:-;;;;;;;;;;-1:-1:-1;3085:157:2;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;3373:38:4:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;9826:671::-;;;;;;;;;;-1:-1:-1;9826:671:4;;;;;:::i;:::-;;:::i;:::-;;2868:21:3;;;;;;;;;;;;;:::i;2064:100:2:-;;;;;;;;;;;;;:::i;8255:126:4:-;;;;;;;;;;-1:-1:-1;8255:126:4;;;;;:::i;:::-;;:::i;3713:508:2:-;;;;;;;;;;-1:-1:-1;3713:508:2;;;;;:::i;:::-;;:::i;7323:924:4:-;;;;;;;;;;-1:-1:-1;7323:924:4;;;;;:::i;:::-;;:::i;3610:140:0:-;;;;;;;;;;;;;:::i;1892:30:2:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10638:464:4:-;;;;;;;;;;-1:-1:-1;10638:464:4;;;;;:::i;:::-;;:::i;6939:139:3:-;;;;;;;;;;;;;:::i;8527:136:4:-;;;;;;;;;;-1:-1:-1;8527:136:4;;;;;:::i;:::-;;:::i;5127:313:2:-;;;;;;;;;;-1:-1:-1;5127:313:2;;;;;:::i;:::-;;:::i;6076:209:3:-;;;;;;;;;;-1:-1:-1;6076:209:3;;;;;:::i;:::-;;:::i;2319:21::-;;;;;;;;;;;;;:::i;3418:35:4:-;;;;;;;;;;;;;:::i;5066:103::-;;;;;;;;;;-1:-1:-1;5066:103:4;;;;;:::i;:::-;;:::i;9243:397::-;;;;;;;;;;;;;:::i;2227:119:2:-;;;;;;;;;;-1:-1:-1;2227:119:2;;;;;:::i;:::-;;:::i;3758:648:0:-;;;;;;;;;;-1:-1:-1;3758:648:0;;;;;:::i;:::-;;:::i;3012:46:4:-;;;;;;;;;;;;;:::i;7509:366:3:-;;;;;;;;;;;;;:::i;3259:110::-;;;;;;;;;;;;;:::i;3409:129:1:-;;;;;;;;;;;;;:::i;3659:264:3:-;;;;;;;;;;;;;:::i;8389:130:4:-;;;;;;;;;;-1:-1:-1;8389:130:4;;;;;:::i;:::-;;:::i;4787:101:3:-;;;;;;;;;;;;;:::i;5351:121:4:-;;;;;;;;;;-1:-1:-1;5351:121:4;;;;;:::i;:::-;;:::i;3931:212:3:-;;;;;;;;;;-1:-1:-1;3931:212:3;;;;;:::i;:::-;;:::i;2919:25::-;;;;;;;;;;;;;:::i;3450:152:0:-;;;;;;;;;;-1:-1:-1;3450:152:0;;;;;:::i;:::-;;:::i;3192:48:4:-;;;;;;;;;;-1:-1:-1;3192:48:4;;;;;:::i;:::-;;:::i;4265:178:3:-;;;;;;;;;;-1:-1:-1;4265:178:3;;;;;:::i;:::-;;:::i;2840:19::-;;;;;;;;;;;;;:::i;2400:97::-;;;;;;;;;;;;;:::i;3067:39:4:-;;;;;;;;;;-1:-1:-1;3067:39:4;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;3078:19:0:-;;;;;;;;;;;;;:::i;6293:433:3:-;;;;;;:::i;:::-;;:::i;2795:143:2:-;;;;;;;;;;-1:-1:-1;2795:143:2;;;;;:::i;:::-;;:::i;5232:140:3:-;;;;;;;;;;-1:-1:-1;5232:140:3;;;;;:::i;:::-;;:::i;8671:128:4:-;;;;;;;;;;-1:-1:-1;8671:128:4;;;;;:::i;:::-;;:::i;6734:197:3:-;;;;;;;;;;-1:-1:-1;6734:197:3;;;;;:::i;:::-;;:::i;3377:274::-;3423:13;3452:11;:9;:11::i;:::-;3448:196;;;3524:7;;;;;;;;;-1:-1:-1;;;;;3524:7:3;-1:-1:-1;;;;;3524:12:3;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3524:14:3;;;;;;;;;;;;:::i;:::-;3493:46;;;;;;;;:::i;:::-;;;;;;;;;;;;;3479:61;;;;3448:196;3616:7;;;;;;;;;-1:-1:-1;;;;;3616:7:3;-1:-1:-1;;;;;3616:12:3;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3616:14:3;;;;;;;;;;;;:::i;:::-;3587:44;;;;;;;;:::i;3448:196::-;3377:274;:::o;2669:41::-;;;;:::o;3085:157:2:-;3159:4;3176:36;3185:10;3197:7;3206:5;3176:8;:36::i;:::-;-1:-1:-1;3230:4:2;3085:157;;;;:::o;3373:38:4:-;;;-1:-1:-1;;;;;3373:38:4;;:::o;9826:671::-;-1:-1:-1;;;;;9903:19:4;;;9882:18;9903:19;;;:6;:19;;;;;;;;;9882:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10044:15;10036:37;;;;-1:-1:-1;;;10036:37:4;;;;;;;:::i;:::-;;;;;;;;;10092:14;;-1:-1:-1;;;;;10092:28:4;10110:10;10092:28;10084:53;;;;-1:-1:-1;;;10084:53:4;;;;;;;:::i;:::-;10189:15;3050:8;10156:5;:15;;;:29;;;;:::i;:::-;:48;;10148:70;;;;-1:-1:-1;;;10148:70:4;;;;;;;:::i;:::-;10248:14;;-1:-1:-1;;;;;10280:19:4;;;10229:16;10280:19;;;:6;:19;;;;;;;;10273:26;;-1:-1:-1;;;;;;10273:26:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;10318:39;;-1:-1:-1;;;10318:39:4;;:17;;;;;;:39;;10248:14;;10346:10;;10318:39;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10310:48;;;;;;10369:56;10379:11;10392:8;10402:22;10412:11;10402:9;:22::i;:::-;10369:9;:56::i;:::-;10468:8;-1:-1:-1;;;;;10441:48:4;10455:11;-1:-1:-1;;;;;10441:48:4;;10478:10;10441:48;;;;;;:::i;:::-;;;;;;;;9826:671;;;;;:::o;2868:21:3:-;;;;:::o;2064:100:2:-;2144:12;;2064:100;:::o;8255:126:4:-;-1:-1:-1;;;;;8345:19:4;;;8318:7;8345:19;;;:6;:19;;;;;:28;;8255:126;;;;:::o;3713:508:2:-;3811:4;3828:36;3838:6;3846:9;3857:6;3828:9;:36::i;:::-;-1:-1:-1;;;;;3902:19:2;;3875:24;3902:19;;;:11;:19;;;;;;;;3922:10;3902:31;;;;;;;;-1:-1:-1;;;3948:29:2;;3944:248;;;4125:55;4134:6;4142:10;4154:25;4173:6;4154:16;:25;:::i;:::-;4125:8;:55::i;:::-;-1:-1:-1;4209:4:2;;3713:508;-1:-1:-1;;;;3713:508:2:o;7323:924:4:-;7415:30;7433:11;7415:17;:30::i;:::-;7407:51;;;;-1:-1:-1;;;7407:51:4;;;;;;;:::i;:::-;7469:22;7494:33;7512:14;7494:17;:33::i;:::-;7469:58;;7563:1;7546:14;:18;7538:45;;;;-1:-1:-1;;;7538:45:4;;;;;;;:::i;:::-;7613:10;7594:16;7652:22;7662:11;7652:9;:22::i;:::-;7634:40;-1:-1:-1;7685:18:4;7706:24;7716:14;7634:40;7706:24;:::i;:::-;7685:45;-1:-1:-1;7766:14:4;7800:11;7792:29;;;;-1:-1:-1;;;7792:29:4;;;;;;;:::i;:::-;-1:-1:-1;;;;;7840:19:4;;;;;;:6;:19;;;;;:30;;;:35;7832:63;;;;-1:-1:-1;;;7832:63:4;;;;;;;:::i;:::-;7914:58;;-1:-1:-1;;;7914:58:4;;-1:-1:-1;;;;;7914:21:4;;;;;:58;;7936:8;;7954:4;;7961:10;;7914:58;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7906:67;;;;;;8008:172;;;;;;;;-1:-1:-1;;;;;8008:172:4;;;;;;;;;;;;;8110:15;8008:172;;;;;;;;;;;;;;;7986:19;;;-1:-1:-1;7986:19:4;;;:6;:19;;;;;;;:194;;;;;;;-1:-1:-1;;;;;;7986:194:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8198:41;;;;;;8231:7;;8198:41;:::i;:::-;;;;;;;;7323:924;;;;;;;:::o;3610:140:0:-;3715:7;;3694:48;;;-1:-1:-1;;;3694:48:0;;;;3667:7;;-1:-1:-1;;;;;3715:7:0;;3694:46;;:48;;;;;;;;;;;;;;3715:7;3694:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3687:55;;3610:140;:::o;1892:30:2:-;;;;;;:::o;10638:464:4:-;10720:17;:15;:17::i;:::-;-1:-1:-1;;;;;10706:31:4;:10;-1:-1:-1;;;;;10706:31:4;;10698:53;;;;-1:-1:-1;;;10698:53:4;;;;;;;:::i;:::-;-1:-1:-1;;;;;10783:19:4;;;10762:18;10783:19;;;:6;:19;;;;;;;;;10762:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10868:43;;;;-1:-1:-1;;;10868:43:4;;;;;;;:::i;:::-;-1:-1:-1;;;;;10929:19:4;;;;;;;:6;:19;;;;;;;;10922:26;;-1:-1:-1;;;;;;10922:26:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;10985:14;;11001:16;;;;10967:51;;-1:-1:-1;;;10967:51:4;;:17;;;;;;:51;;11001:16;;10967:51;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10959:60;;;;;;11061:5;:14;;;-1:-1:-1;;;;;11035:59:4;11048:11;-1:-1:-1;;;;;11035:59:4;;11077:5;:16;;;11035:59;;;;;;:::i;:::-;;;;;;;;10638:464;;;:::o;6939:139:3:-;7011:5;;-1:-1:-1;;;;;7011:5:3;6989:10;:28;6985:86;;;7033:5;:26;;-1:-1:-1;;;;;;7033:26:3;;;6985:86;6939:139::o;8527:136:4:-;-1:-1:-1;;;;;8623:19:4;;;8596:7;8623:19;;;:6;:19;;;;;:32;;;;;8527:136::o;5127:313:2:-;5221:4;5238:12;5253:27;5262:9;5273:6;5253:8;:27::i;:::-;5238:42;;5295:7;5291:117;;;5328:68;;-1:-1:-1;;;5328:68:2;;-1:-1:-1;;;;;5328:42:2;;;;;:68;;5371:10;;5383:6;;5391:4;;;;5328:68;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5318:78;;5291:117;5425:7;5127:313;-1:-1:-1;;;;;5127:313:2:o;6076:209:3:-;6124:25;6130:10;6142:6;6124:5;:25::i;:::-;6160:14;6177:11;:9;:11::i;:::-;:40;;6195:22;;6177:40;;;6191:1;6177:40;6246:7;;6160:57;;-1:-1:-1;;;;;;6246:7:3;6228:32;6261:15;6160:57;6261:6;:15;:::i;:::-;6228:49;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6076:209;;:::o;2319:21::-;;;-1:-1:-1;;;;;2319:21:3;;:::o;3418:35:4:-;;;;:::o;5066:103::-;5139:10;5122:28;;;;:16;:28;;;;;:39;;-1:-1:-1;;5122:39:4;5153:8;;5122:39;;;;;;5066:103::o;9243:397::-;9294:10;9287:18;;;;:6;:18;;;;;:29;;;:34;9283:350;;9366:10;9338:18;9359;;;:6;:18;;;;;;;;:29;;;;;9428:31;;;;;9475:25;;-1:-1:-1;;;;;;9475:25:4;;;;;;;;;-1:-1:-1;9475:25:4;;;;;;;;;;;;;9523:41;;-1:-1:-1;;;9523:41:4;;9359:29;;-1:-1:-1;;;;;9428:31:4;;;;;;9523:17;;:41;;9366:10;;9359:29;;9523:41;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9515:50;;;;;;9598:10;-1:-1:-1;;;;;9585:36:4;;9610:10;9585:36;;;;;;:::i;:::-;;;;;;;;9283:350;;9243:397::o;2227:119:2:-;-1:-1:-1;;;;;2320:18:2;2293:7;2320:18;;;;;;;;;;;;2227:119::o;3758:648:0:-;3839:7;3859:12;3874:39;3898:14;3874:23;:39::i;:::-;3859:54;-1:-1:-1;3928:8:0;;3924:475;;3960:4;-1:-1:-1;3953:11:0;;3924:475;4012:7;;-1:-1:-1;;;;;3986:34:0;;;4012:7;;3986:34;3982:417;;;-1:-1:-1;;4044:22:0;;4037:29;;3982:417;4365:22;;4319:7;;4298:64;;-1:-1:-1;;;4298:64:0;;-1:-1:-1;;;;;4319:7:0;;;;4298:48;;:64;;4347:14;;4298:64;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:89;;;;:::i;:::-;4291:96;;;;;3982:417;3758:648;;;;:::o;3012:46:4:-;3050:8;3012:46;:::o;7509:366:3:-;7566:10;7596:13;:11;:13::i;:::-;7595:14;7587:23;;;;;;2550:4;7732:13;:11;:13::i;:::-;:32;;;;:::i;:::-;7700:20;7710:9;7700;:20::i;:::-;:28;;7723:5;7700:28;:::i;:::-;:64;;7692:83;;;;-1:-1:-1;;;7692:83:3;;;;;;;:::i;:::-;7786:36;7801:9;7812;7786:14;:36::i;:::-;7838:29;7857:9;7838:29;;;;;;:::i;:::-;;;;;;;;7509:366;:::o;3259:110::-;3330:7;;3304:57;;-1:-1:-1;;;3304:57:3;;-1:-1:-1;;;;;3330:7:3;;;;3304:50;;:57;;3330:7;;3304:57;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3259:110::o;3409:129:1:-;3446:15;3464:12;:10;:12::i;:::-;3446:30;;3487:13;:11;:13::i;:::-;3511:19;3522:7;3511:10;:19::i;:::-;3409:129;:::o;3659:264:3:-;3707:13;3736:11;:9;:11::i;:::-;3732:184;;;3799:7;;;;;;;;;-1:-1:-1;;;;;3799:7:3;-1:-1:-1;;;;;3799:14:3;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3799:16:3;;;;;;;;;;;;:::i;:::-;3777:39;;;;;;;;:::i;3732:184::-;3886:7;;;;;;;;;-1:-1:-1;;;;;3886:7:3;-1:-1:-1;;;;;3886:14:3;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3886:16:3;;;;;;;;;;;;:::i;:::-;3864:39;;;;;;;;:::i;8389:130:4:-;-1:-1:-1;;;;;8481:19:4;8454:7;8481:19;;;:6;:19;;;;;:30;;;;8389:130::o;4787:101:3:-;4853:22;;:27;4787:101;:::o;5351:121:4:-;-1:-1:-1;;;;;5440:24:4;5415:4;5440:24;;;:16;:24;;;;;;;;5439:25;;5351:121::o;3931:212:3:-;4074:7;;4027:4;;-1:-1:-1;;;;;4074:7:3;4052:10;:30;4044:39;;;;;;4094:19;4100:4;4106:6;4094:5;:19::i;2919:25::-;;;;:::o;3450:152:0:-;3545:4;3569:25;3584:2;3588:5;3569:14;:25::i;:::-;3562:32;3450:152;-1:-1:-1;;;3450:152:0:o;3192:48:4:-;;;;;;;;;;;;;;;:::o;4265:178:3:-;4342:7;;:55;;-1:-1:-1;;;4342:55:3;;-1:-1:-1;;;;;4342:7:3;;;;:20;;:55;;4363:10;;4383:4;;4390:6;;4342:55;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4334:64;;;;;;4409:26;4415:11;4428:6;4409:5;:26::i;:::-;4265:178;;:::o;2840:19::-;;;-1:-1:-1;;;;;2840:19:3;;:::o;2400:97::-;2454:42;2400:97;:::o;3067:39:4:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3067:39:4;;;;;;;;:::o;3078:19:0:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6293:433:3:-;6412:11;:9;:11::i;:::-;6404:20;;;;;;6530:6;;6538:10;;6454:95;;-1:-1:-1;;;6454:95:3;;6435:16;;2454:42;;6454:14;;6476:9;;6454:95;;6487:4;;6493:10;;6505:13;;6520:8;;6454:95;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6435:114;;6564:13;:11;:13::i;:::-;6560:124;;;6609:8;-1:-1:-1;;;;;6602:29:3;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6594:40;;;;;;6649:5;;:23;;-1:-1:-1;;;6649:23:3;;-1:-1:-1;;;;;6649:5:3;;;;:13;;:23;;6663:8;;6649:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6560:124;6694:5;:24;;-1:-1:-1;;;;;;6694:24:3;-1:-1:-1;;;;;6694:24:3;;;;;;;;;;-1:-1:-1;;;6293:433:3:o;2795:143:2:-;-1:-1:-1;;;;;2903:18:2;;;2876:7;2903:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;2795:143::o;5232:140:3:-;5291:11;:9;:11::i;:::-;5290:12;5282:21;;;;;;5314:50;5321:10;5333:6;5341:22;;5314:6;:50::i;8671:128:4:-;-1:-1:-1;;;;;8762:19:4;8735:7;8762:19;;;:6;:19;;;;;:29;;;;8671:128::o;6734:197:3:-;6829:5;;-1:-1:-1;;;;;6829:5:3;6807:10;:28;6799:37;;;;;;6847:34;6854:5;6861:16;6871:5;6861:9;:16::i;:::-;6879:1;6847:6;:34::i;:::-;6892:31;6907:8;6917:5;6892:14;:31::i;7067:175:2:-;-1:-1:-1;;;;;7152:18:2;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:35;;;7203:31;;;;;7182:5;;7203:31;:::i;4711:330::-;-1:-1:-1;;;;;4817:23:2;;4809:32;;;;;;4854:47;4875:6;4883:9;4894:6;4854:20;:47::i;:::-;-1:-1:-1;;;;;4914:17:2;;:9;:17;;;;;;;;;;:27;;4935:6;;4914:9;:27;;4935:6;;4914:27;:::i;:::-;;;;-1:-1:-1;;;;;;;4952:20:2;;:9;:20;;;;;;;;;;:30;;4976:6;;4952:9;:30;;4976:6;;4952:30;:::i;:::-;;;;;;;;5015:9;-1:-1:-1;;;;;4998:35:2;5007:6;-1:-1:-1;;;;;4998:35:2;;5026:6;4998:35;;;;;;:::i;6367:260::-;6443:49;6464:7;6481:1;6485:6;6443:20;:49::i;:::-;6521:6;6505:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;6538:18:2;;:9;:18;;;;;;;;;;:28;;6560:6;;6538:9;:28;;6560:6;;6538:28;:::i;:::-;;;;-1:-1:-1;;6582:37:2;;6608:1;;-1:-1:-1;;;;;6582:37:2;;;;;;;6612:6;;6582:37;:::i;:::-;;;;;;;;6367:260;;:::o;3791:327:4:-;3871:7;-1:-1:-1;;;;;3895:31:4;;3921:4;3895:31;3891:220;;;-1:-1:-1;3950:1:4;3943:8;;3891:220;3991:23;;-1:-1:-1;;;;;3973:41:4;;;3991:23;;3973:41;3969:142;;;-1:-1:-1;4038:20:4;;4031:27;;3969:142;-1:-1:-1;4098:1:4;4091:8;;8080:106:3;8158:5;;-1:-1:-1;;;;;8158:5:3;8150:28;;8080:106;:::o;7086:415::-;7189:11;:9;:11::i;:::-;7181:20;;;;;;7268:7;;7308:32;;-1:-1:-1;;;7308:32:3;;-1:-1:-1;;;;;7268:7:3;;;;:16;;7285:21;;7268:7;;7308:17;;:32;;7334:4;;7308:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7268:73;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7260:82;;;;;;7394:7;:28;;-1:-1:-1;;;;;;7394:28:3;-1:-1:-1;;;;;7394:28:3;;;;;7433:60;7479:13;:11;:13::i;:::-;7444:7;;:32;;-1:-1:-1;;;7444:32:3;;-1:-1:-1;;;;;7444:7:3;;;;:17;;:32;;7470:4;;7444:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:48;;;;:::i;:::-;7433:10;:60::i;4063:124:1:-;4149:7;;4135:44;;;-1:-1:-1;;;4135:44:1;;;;4108:7;;-1:-1:-1;;;;;4149:7:1;;4135:42;;:44;;;;;;;;;;;;;;4149:7;4135:44;;;;;;;;;;3546:509;3605:7;;3617:12;-1:-1:-1;;;;;3597:32:1;;;3605:7;;3597:32;;3589:41;;;;;;3675:7;;3712:25;;;-1:-1:-1;;;3712:25:1;;;;-1:-1:-1;;;;;3675:7:1;;;;3641:17;;3675:7;;3712:23;;:25;;;;;;;;;;;;;;;3641:17;3675:7;3712:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3695:42;;3748:15;3766:13;:11;:13::i;:::-;3748:31;-1:-1:-1;3790:15:1;3808:16;3748:31;3808:6;:16;:::i;:::-;3790:34;;3921:29;3935:4;3942:7;3921:5;:29::i;:::-;3961:54;3978:4;3993:11;4007:7;3961:8;:54::i;:::-;4026:11;-1:-1:-1;;;;;4026:19:1;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3546:509;;;;:::o;4195:369::-;4331:32;;-1:-1:-1;;;4331:32:1;;4279:10;;-1:-1:-1;;;;;4301:15:1;;;;;4317:12;;4301:15;;4331:17;;:32;;4357:4;;4331:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4301:63;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4386:12;-1:-1:-1;;;;;4375:41:1;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4429:7:1;:30;;-1:-1:-1;;;;;;4429:30:1;4446:12;-1:-1:-1;;;;;4429:30:1;;;;-1:-1:-1;4470:17:1;;-1:-1:-1;4470:15:1;:17::i;:::-;4523:7;;:32;;-1:-1:-1;;;4523:32:1;;-1:-1:-1;;;;;4523:7:1;;;;:17;;:32;;4549:4;;4523:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4506:13;:11;:13::i;:::-;:49;4498:58;;;;;5721:313:2;-1:-1:-1;;;;;5807:23:2;;5799:32;;;;;;5844:51;5873:1;5877:9;5888:6;5844:20;:51::i;:::-;5924:6;5908:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;5941:20:2;;:9;:20;;;;;;;;;;:30;;5965:6;;5941:9;:30;;5965:6;;5941:30;:::i;:::-;;;;-1:-1:-1;;5987:39:2;;-1:-1:-1;;;;;5987:39:2;;;6004:1;;5987:39;;;;6019:6;;5987:39;:::i;8807:198:4:-;8893:4;8918:33;8933:9;8944:6;8918:14;:33::i;:::-;8910:42;;;;;;8963:12;:10;:12::i;5384:171:3:-;5467:20;5473:5;5480:6;5467:5;:20::i;:::-;5506:7;;-1:-1:-1;;;;;5506:7:3;:16;5523:5;5530:15;5539:6;5530;:15;:::i;:::-;5506:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5498:49;;;;;;5384:171;;;:::o;7883:189::-;7988:13;:11;:13::i;:::-;7984:81;;;8018:5;;:35;;-1:-1:-1;;;8018:35:3;;-1:-1:-1;;;;;8018:5:3;;;;:17;;:35;;8036:4;;8042:2;;8046:6;;8018:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7883:189;;;:::o;4992:136::-;5066:1;5056:6;:11;;5048:30;;;;-1:-1:-1;;;5048:30:3;;;;;;;:::i;:::-;5089:22;:31;4992:136::o;2559:173:2:-;2645:4;2662:40;2672:10;2684:9;2695:6;2662:9;:40::i;14:259:7:-;;126:2;114:9;105:7;101:23;97:32;94:2;;;147:6;139;132:22;94:2;191:9;178:23;210:33;237:5;210:33;:::i;278:263::-;;401:2;389:9;380:7;376:23;372:32;369:2;;;422:6;414;407:22;369:2;459:9;453:16;478:33;505:5;478:33;:::i;546:402::-;;;675:2;663:9;654:7;650:23;646:32;643:2;;;696:6;688;681:22;643:2;740:9;727:23;759:33;786:5;759:33;:::i;:::-;811:5;-1:-1:-1;868:2:7;853:18;;840:32;881:35;840:32;881:35;:::i;:::-;935:7;925:17;;;633:315;;;;;:::o;953:470::-;;;;1099:2;1087:9;1078:7;1074:23;1070:32;1067:2;;;1120:6;1112;1105:22;1067:2;1164:9;1151:23;1183:33;1210:5;1183:33;:::i;:::-;1235:5;-1:-1:-1;1292:2:7;1277:18;;1264:32;1305:35;1264:32;1305:35;:::i;:::-;1057:366;;1359:7;;-1:-1:-1;;;1413:2:7;1398:18;;;;1385:32;;1057:366::o;1428:327::-;;;1557:2;1545:9;1536:7;1532:23;1528:32;1525:2;;;1578:6;1570;1563:22;1525:2;1622:9;1609:23;1641:33;1668:5;1641:33;:::i;:::-;1693:5;1745:2;1730:18;;;;1717:32;;-1:-1:-1;;;1515:240:7:o;1760:846::-;;;;;1925:2;1913:9;1904:7;1900:23;1896:32;1893:2;;;1946:6;1938;1931:22;1893:2;1990:9;1977:23;2009:33;2036:5;2009:33;:::i;:::-;2061:5;-1:-1:-1;2113:2:7;2098:18;;2085:32;;-1:-1:-1;2168:2:7;2153:18;;2140:32;2191:18;2221:14;;;2218:2;;;2253:6;2245;2238:22;2218:2;2296:6;2285:9;2281:22;2271:32;;2341:7;2334:4;2330:2;2326:13;2322:27;2312:2;;2368:6;2360;2353:22;2312:2;2413;2400:16;2439:2;2431:6;2428:14;2425:2;;;2460:6;2452;2445:22;2425:2;2510:7;2505:2;2496:6;2492:2;2488:15;2484:24;2481:37;2478:2;;;2536:6;2528;2521:22;2478:2;1883:723;;;;-1:-1:-1;;2572:2:7;2564:11;;-1:-1:-1;;;1883:723:7:o;2611:253::-;;2720:2;2708:9;2699:7;2695:23;2691:32;2688:2;;;2741:6;2733;2726:22;2688:2;2785:9;2772:23;2804:30;2828:5;2804:30;:::i;2869:257::-;;2989:2;2977:9;2968:7;2964:23;2960:32;2957:2;;;3010:6;3002;2995:22;2957:2;3047:9;3041:16;3066:30;3090:5;3066:30;:::i;3131:395::-;;;;3277:2;3265:9;3256:7;3252:23;3248:32;3245:2;;;3298:6;3290;3283:22;3245:2;3339:9;3326:23;3316:33;;3396:2;3385:9;3381:18;3368:32;3358:42;;3450:2;3439:9;3435:18;3422:32;3463:33;3490:5;3463:33;:::i;:::-;3515:5;3505:15;;;3235:291;;;;;:::o;3531:924::-;;3664:2;3652:9;3643:7;3639:23;3635:32;3632:2;;;3685:6;3677;3670:22;3632:2;3723:9;3717:16;3752:18;3793:2;3785:6;3782:14;3779:2;;;3814:6;3806;3799:22;3779:2;3857:6;3846:9;3842:22;3832:32;;3902:7;3895:4;3891:2;3887:13;3883:27;3873:2;;3929:6;3921;3914:22;3873:2;3963;3957:9;3985:2;3981;3978:10;3975:2;;;3991:18;;:::i;:::-;4066:2;4060:9;4034:2;4120:13;;-1:-1:-1;;4116:22:7;;;4140:2;4112:31;4108:40;4096:53;;;4164:18;;;4184:22;;;4161:46;4158:2;;;4210:18;;:::i;:::-;4250:10;4246:2;4239:22;4285:2;4277:6;4270:18;4325:7;4320:2;4315;4311;4307:11;4303:20;4300:33;4297:2;;;4351:6;4343;4336:22;4297:2;4369:55;4421:2;4416;4408:6;4404:15;4399:2;4395;4391:11;4369:55;:::i;:::-;4443:6;3622:833;-1:-1:-1;;;;;;;3622:833:7:o;4460:190::-;;4572:2;4560:9;4551:7;4547:23;4543:32;4540:2;;;4593:6;4585;4578:22;4540:2;-1:-1:-1;4621:23:7;;4530:120;-1:-1:-1;4530:120:7:o;4655:194::-;;4778:2;4766:9;4757:7;4753:23;4749:32;4746:2;;;4799:6;4791;4784:22;4746:2;-1:-1:-1;4827:16:7;;4736:113;-1:-1:-1;4736:113:7:o;4854:418::-;;-1:-1:-1;;;5111:3:7;5104:16;5149:6;5143:13;5165:61;5219:6;5215:1;5210:3;5206:11;5199:4;5191:6;5187:17;5165:61;:::i;:::-;5246:16;;;;5264:1;5242:24;;5094:178;-1:-1:-1;;5094:178:7:o;5277:418::-;;-1:-1:-1;;;5534:3:7;5527:16;5572:6;5566:13;5588:61;5642:6;5638:1;5633:3;5629:11;5622:4;5614:6;5610:17;5588:61;:::i;5700:429::-;;-1:-1:-1;;;5957:3:7;5950:25;6004:6;5998:13;6020:62;6075:6;6070:2;6065:3;6061:12;6054:4;6046:6;6042:17;6020:62;:::i;:::-;6102:16;;;;6120:2;6098:25;;5940:189;-1:-1:-1;;5940:189:7:o;6134:425::-;;-1:-1:-1;;;6391:3:7;6384:23;6436:6;6430:13;6452:61;6506:6;6502:1;6497:3;6493:11;6486:4;6478:6;6474:17;6452:61;:::i;:::-;6533:16;;;;6551:1;6529:24;;6374:185;-1:-1:-1;;6374:185:7:o;6564:203::-;-1:-1:-1;;;;;6728:32:7;;;;6710:51;;6698:2;6683:18;;6665:102::o;6772:375::-;-1:-1:-1;;;;;7030:15:7;;;7012:34;;7082:15;;;;7077:2;7062:18;;7055:43;7129:2;7114:18;;7107:34;;;;6962:2;6947:18;;6929:218::o;7152:274::-;-1:-1:-1;;;;;7344:32:7;;;;7326:51;;7408:2;7393:18;;7386:34;7314:2;7299:18;;7281:145::o;7431:562::-;-1:-1:-1;;;;;7644:32:7;;7626:51;;7708:2;7693:18;;7686:34;;;7756:2;7751;7736:18;;7729:30;;;7775:18;;7768:34;;;7431:562;7795:6;7845;7839:3;7824:19;;7811:49;7880:22;;;7904:3;7876:32;;;7869:46;;;;7976:2;7955:15;;;-1:-1:-1;;7951:29:7;7936:45;7932:55;;7616:377;-1:-1:-1;;;7616:377:7:o;7998:447::-;-1:-1:-1;;;;;8285:15:7;;;8267:34;;8332:2;8317:18;;8310:34;;;;8375:2;8360:18;;8353:34;;;;8423:15;;;8418:2;8403:18;;8396:43;8216:3;8201:19;;8183:262::o;8450:187::-;8615:14;;8608:22;8590:41;;8578:2;8563:18;;8545:92::o;8642:591::-;8929:25;;;-1:-1:-1;;;;;9028:15:7;;;9023:2;9008:18;;9001:43;9075:2;9060:18;;9053:34;;;;9123:15;;9118:2;9103:18;;9096:43;9170:3;9155:19;;9148:35;;;;8981:3;9199:19;;9192:35;8916:3;8901:19;;8883:350::o;9914:383::-;;10063:2;10052:9;10045:21;10095:6;10089:13;10138:6;10133:2;10122:9;10118:18;10111:34;10154:66;10213:6;10208:2;10197:9;10193:18;10188:2;10180:6;10176:15;10154:66;:::i;:::-;10281:2;10260:15;-1:-1:-1;;10256:29:7;10241:45;;;;10288:2;10237:54;;10035:262;-1:-1:-1;;10035:262:7:o;10302:329::-;10504:2;10486:21;;;10543:1;10523:18;;;10516:29;-1:-1:-1;;;10576:2:7;10561:18;;10554:36;10622:2;10607:18;;10476:155::o;10636:329::-;10838:2;10820:21;;;10877:1;10857:18;;;10850:29;-1:-1:-1;;;10910:2:7;10895:18;;10888:36;10956:2;10941:18;;10810:155::o;10970:339::-;11172:2;11154:21;;;11211:2;11191:18;;;11184:30;-1:-1:-1;;;11245:2:7;11230:18;;11223:45;11300:2;11285:18;;11144:165::o;11314:336::-;11516:2;11498:21;;;11555:2;11535:18;;;11528:30;-1:-1:-1;;;11589:2:7;11574:18;;11567:42;11641:2;11626:18;;11488:162::o;11655:331::-;11857:2;11839:21;;;11896:1;11876:18;;;11869:29;-1:-1:-1;;;11929:2:7;11914:18;;11907:38;11977:2;11962:18;;11829:157::o;11991:328::-;12193:2;12175:21;;;12232:1;12212:18;;;12205:29;-1:-1:-1;;;12265:2:7;12250:18;;12243:35;12310:2;12295:18;;12165:154::o;12324:338::-;12526:2;12508:21;;;12565:2;12545:18;;;12538:30;-1:-1:-1;;;12599:2:7;12584:18;;12577:44;12653:2;12638:18;;12498:164::o;12667:332::-;12869:2;12851:21;;;12908:1;12888:18;;;12881:29;-1:-1:-1;;;12941:2:7;12926:18;;12919:39;12990:2;12975:18;;12841:158::o;13004:332::-;13206:2;13188:21;;;13245:1;13225:18;;;13218:29;-1:-1:-1;;;13278:2:7;13263:18;;13256:39;13327:2;13312:18;;13178:158::o;13341:332::-;13543:2;13525:21;;;13582:1;13562:18;;;13555:29;-1:-1:-1;;;13615:2:7;13600:18;;13593:39;13664:2;13649:18;;13515:158::o;13678:177::-;13824:25;;;13812:2;13797:18;;13779:76::o;13860:184::-;14032:4;14020:17;;;;14002:36;;13990:2;13975:18;;13957:87::o;14049:128::-;;14120:1;14116:6;14113:1;14110:13;14107:2;;;14126:18;;:::i;:::-;-1:-1:-1;14162:9:7;;14097:80::o;14182:217::-;;14248:1;14238:2;;-1:-1:-1;;;14273:31:7;;14327:4;14324:1;14317:15;14355:4;14280:1;14345:15;14238:2;-1:-1:-1;14384:9:7;;14228:171::o;14404:168::-;;14510:1;14506;14502:6;14498:14;14495:1;14492:21;14487:1;14480:9;14473:17;14469:45;14466:2;;;14517:18;;:::i;:::-;-1:-1:-1;14557:9:7;;14456:116::o;14577:125::-;;14645:1;14642;14639:8;14636:2;;;14650:18;;:::i;:::-;-1:-1:-1;14687:9:7;;14626:76::o;14707:258::-;14779:1;14789:113;14803:6;14800:1;14797:13;14789:113;;;14879:11;;;14873:18;14860:11;;;14853:39;14825:2;14818:10;14789:113;;;14920:6;14917:1;14914:13;14911:2;;;-1:-1:-1;;14955:1:7;14937:16;;14930:27;14760:205::o;14970:380::-;15055:1;15045:12;;15102:1;15092:12;;;15113:2;;15167:4;15159:6;15155:17;15145:27;;15113:2;15220;15212:6;15209:14;15189:18;15186:38;15183:2;;;15266:10;15261:3;15257:20;15254:1;15247:31;15301:4;15298:1;15291:15;15329:4;15326:1;15319:15;15355:127;15416:10;15411:3;15407:20;15404:1;15397:31;15447:4;15444:1;15437:15;15471:4;15468:1;15461:15;15487:127;15548:10;15543:3;15539:20;15536:1;15529:31;15579:4;15576:1;15569:15;15603:4;15600:1;15593:15;15619:133;-1:-1:-1;;;;;15696:31:7;;15686:42;;15676:2;;15742:1;15739;15732:12;15757:120;15845:5;15838:13;15831:21;15824:5;15821:32;15811:2;;15867:1;15864;15857:12

Swarm Source

ipfs://88d83b87e94f3c6e56492bc72a9b8184e84cf27aa5343b59639f9820ece81ea7

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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