ETH Price: $3,340.90 (-1.99%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Admin Update105771282020-08-02 0:32:141613 days ago1596328334IN
0x7668a7D1...BCf205d12
0 ETH0.0167396442
Admin Update105699492020-07-31 21:58:051614 days ago1596232685IN
0x7668a7D1...BCf205d12
0 ETH0.0166395240
Admin Update104669462020-07-15 23:02:311630 days ago1594854151IN
0x7668a7D1...BCf205d12
0 ETH0.0114064126.3
Admin Update Wit...104530002020-07-13 19:06:161632 days ago1594667176IN
0x7668a7D1...BCf205d12
0 ETH0.0296059741
Admin Update Wit...104529602020-07-13 18:58:091632 days ago1594666689IN
0x7668a7D1...BCf205d12
0 ETH0.0219506130
Admin Update104075832020-07-06 18:54:391639 days ago1594061679IN
0x7668a7D1...BCf205d12
0 ETH0.0086605225
Admin Update104075432020-07-06 18:44:501639 days ago1594061090IN
0x7668a7D1...BCf205d12
0 ETH0.0079660223
Admin Update104074762020-07-06 18:29:531639 days ago1594060193IN
0x7668a7D1...BCf205d12
0 ETH0.0084683222
Admin Update103823212020-07-02 21:15:231643 days ago1593724523IN
0x7668a7D1...BCf205d12
0 ETH0.0101311826.5
Admin Update103503602020-06-27 22:01:201648 days ago1593295280IN
0x7668a7D1...BCf205d12
0 ETH0.010487929
Admin Update Ref...103502912020-06-27 21:48:491648 days ago1593294529IN
0x7668a7D1...BCf205d12
0 ETH0.0083581128
Admin Update103502632020-06-27 21:42:471648 days ago1593294167IN
0x7668a7D1...BCf205d12
0 ETH0.0084108628.00000112
Admin Update103502462020-06-27 21:39:051648 days ago1593293945IN
0x7668a7D1...BCf205d12
0 ETH0.0104663827.57142857
Admin Update103501632020-06-27 21:20:401648 days ago1593292840IN
0x7668a7D1...BCf205d12
0 ETH0.011691231.02340591
Admin Update102585002020-06-13 16:47:401662 days ago1592066860IN
0x7668a7D1...BCf205d12
0 ETH0.006361417
Admin Update102076352020-06-05 19:31:431670 days ago1591385503IN
0x7668a7D1...BCf205d12
0 ETH0.006315117
Admin Update101632272020-05-29 21:59:441677 days ago1590789584IN
0x7668a7D1...BCf205d12
0 ETH0.0057614115.62350597
Admin Update101624872020-05-29 19:13:391677 days ago1590779619IN
0x7668a7D1...BCf205d12
0 ETH0.0046611612.73392031
Admin Update101499362020-05-27 20:14:551679 days ago1590610495IN
0x7668a7D1...BCf205d12
0 ETH0.0104997126
Admin Update101459622020-05-27 5:35:311680 days ago1590557731IN
0x7668a7D1...BCf205d12
0 ETH0.0110325627.50000437
Admin Update101436632020-05-26 21:02:011680 days ago1590526921IN
0x7668a7D1...BCf205d12
0 ETH0.0091013829
Admin Update Wit...101425342020-05-26 16:54:361680 days ago1590512076IN
0x7668a7D1...BCf205d12
0 ETH0.0168315127.4
Admin Update101424742020-05-26 16:40:181680 days ago1590511218IN
0x7668a7D1...BCf205d12
0 ETH0.0112593330
Admin Update101331682020-05-25 5:49:501682 days ago1590385790IN
0x7668a7D1...BCf205d12
0 ETH0.0089426824
Admin Update101331442020-05-25 5:43:521682 days ago1590385432IN
0x7668a7D1...BCf205d12
0 ETH0.0086728222.2200027
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:
Registry

Compiler Version
v0.5.5+commit.47a71e8f

Optimization Enabled:
Yes with 200 runs

Other Settings:
byzantium EvmVersion, Apache-2.0 license
/**
 *Submitted for verification at Etherscan.io on 2020-07-08
*/

// File: contracts/IOwnable.sol

// Adaped from "@0x/contracts-utils/contracts/src/interfaces/IOwnable.sol";

pragma solidity ^0.5.5;


contract IOwnable {

    function transferOwnership1(address newOwner)
        public;

    function transferOwnership2(address newOwner)
        public;
}

// File: contracts/Ownable.sol

// Adaped from "@0x/contracts-utils/contracts/src/Ownable.sol";

pragma solidity ^0.5.5;



contract Ownable is
    IOwnable
{
    address public owner1;
    address public owner2;

    constructor ()
        public
    {
        owner1 = msg.sender;
        owner2 = msg.sender;
    }

    modifier onlyOwner() {
        require(
            (msg.sender == owner1) || (msg.sender == owner2),
            "ONLY_CONTRACT_OWNER"
        );
        _;
    }

    function transferOwnership1(address newOwner)
        public
        onlyOwner
    {
        if (newOwner != address(0)) {
            owner1 = newOwner;
        }
    }

    function transferOwnership2(address newOwner)
        public
        onlyOwner
    {
        if (newOwner != address(0)) {
            owner2 = newOwner;
        }
    }

}

// File: contracts/Registry.sol

/*

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.

*/

pragma solidity ^0.5.5;
pragma experimental ABIEncoderV2;



contract Registry is
    Ownable
{


    // Pause. When true, Registry updates (writes) are paused.
    bool public paused = false;


    /***  Microsponsors Registry Data:  ***/


    // Array of registrant addresses,
    // regardless of isWhitelisted status
    address[] private registrants;

    // Map registrant's address => isWhitelisted status.
    // Addresses authorized to transact.
    mapping (address => bool) public isWhitelisted;

    // Map each registrant's address to the `block.timestamp`
    // when the address was first registered
    mapping (address => uint) public registrantTimestamp;

    // Map each registrant's address to the address that referred them.
    mapping (address => address) private registrantToReferrer;

    // Map each referrer's address to array of addresses they referred.
    mapping (address => address[]) private referrerToRegistrants;

    // Map address => array of ContentId structs.
    // Using struct because there is not mapping to an array of strings in Solidity at this time.
    struct ContentIdStruct {
        string contentId;
    }
    mapping (address => ContentIdStruct[]) private addressToContentIds;

    // Map contentId => address (for reverse-lookups)
    mapping (string => address) private contentIdToAddress;


    /***  Constructor  ***/

    constructor ()
        public
    {

    }


    /*** Admin Pause: Adapted from OpenZeppelin (via Cryptokitties) ***/


    /// @dev Modifier to allow actions only when the contract IS NOT paused
    modifier whenNotPaused() {
        require(!paused);
        _;
    }

    /// @dev Modifier to allow actions only when the contract IS paused
    modifier whenPaused {
        require(paused);
        _;
    }

    /// @dev Called by contract owner to pause actions on this contract
    function pause() external onlyOwner whenNotPaused {
        paused = true;
    }

    /// @dev Called by contract owner to unpause the smart contract.
    /// @notice This is public rather than external so it can be called by
    ///  derived contracts.
    function unpause() public onlyOwner whenPaused {
        paused = false;
    }


    /***  Admin: Registry Management  ***/


    /// @dev Admin registers an address with a contentId.
    /// @param target Address to add or remove from whitelist.
    /// @param contentId To map the target's address to. UTF8-encoded SRN (a string).
    /// @param isApproved Whitelist status to assign to the address.
    function adminUpdate(
        address target,
        string memory contentId,
        bool isApproved
    )
        public
        onlyOwner
        whenNotPaused
    {

        address previousOwner = contentIdToAddress[contentId];

        if (previousOwner != target) {

            // If contentId already belongs to another owner address
            // it must be explicitly removed by admin remove fn
            // which will also remove that address from whitelist
            // if this was its only contentId
            if (previousOwner != 0x0000000000000000000000000000000000000000) {
                adminRemoveContentIdFromAddress(previousOwner, contentId);
            }

            // Assign content id to new registrant address
            addressToContentIds[target].push( ContentIdStruct(contentId) );
            contentIdToAddress[contentId] = target;

        }

        if (!hasRegistered(target)) {
            registrants.push(target);
            registrantTimestamp[target] = block.timestamp;
        }

        isWhitelisted[target] = isApproved;

    }


    function adminUpdateWithReferrer(
        address target,
        string memory contentId,
        bool isApproved,
        address referrer
    )
        public
        onlyOwner
        whenNotPaused
    {

        // Revert transaction (refund gas) if
        // the referrer is not whitelisted
        require(
            isWhitelisted[referrer],
            'INVALID_REFERRER'
        );

        adminUpdate(target, contentId, isApproved);

        adminUpdateReferrer(target, referrer);

    }


    function adminUpdateReferrer(
        address registrant,
        address referrer
    )
        public
        onlyOwner
        whenNotPaused
    {

        // Revert transaction (refund gas) if
        // the registrant has never registered
        require(
            hasRegistered(registrant),
            'INVALID_REGISTRANT'
        );

        // Revert transaction (refund gas) if
        // the referrer is not whitelisted
        require(
            isWhitelisted[referrer],
            'INVALID_REFERRER'
        );

        // Revert transaction (refund gas) if
        // the registrant and referrer are the same
        require(
            registrant != referrer,
            'INVALID_REFERRER'
        );

        require(
            registrantToReferrer[registrant] != referrer,
            'REFERRER_UPDATE_IS_REDUNDANT'
        );

        address previousReferrer = registrantToReferrer[registrant];

        // If the registrant had a previous referrer, remove the registrant
        // from referrerToRegistrants[previousReferrer] array
        if (previousReferrer != 0x0000000000000000000000000000000000000000) {
            address[] memory a = referrerToRegistrants[previousReferrer];
            for (uint i = 0; i < a.length; i++) {
                if (a[i] == registrant) {
                    referrerToRegistrants[previousReferrer][i] = 0x0000000000000000000000000000000000000000;
                }
            }
        }

        registrantToReferrer[registrant] = referrer;
        referrerToRegistrants[referrer].push(registrant);

    }

    /// @dev Admin updates whitelist status for a given address.
    /// @param target Address to update.
    /// @param isApproved Whitelist status to assign to address.
    function adminUpdateWhitelistStatus(
        address target,
        bool isApproved
    )
        external
        onlyOwner
        whenNotPaused
    {

        // Revert transaction (refund gas) if
        // the requested whitelist status update is redundant
        require(
            isApproved != isWhitelisted[target],
            'NO_STATUS_UPDATE_REQUIRED'
        );

        // Disallow users with no associated content ids
        // (ex: admin or user themselves may have removed content ids)
        if (isApproved == true) {
            require(
                getNumContentIds(target) > 0,
                'ADDRESS_HAS_NO_ASSOCIATED_CONTENT_IDS'
            );
        }

        isWhitelisted[target] = isApproved;

    }

    /// @dev Admin removes a contentId from a given address.
    function adminRemoveContentIdFromAddress(
        address target,
        string memory contentId
    )
        public
        onlyOwner
        whenNotPaused
    {

        require(
            contentIdToAddress[contentId] == target,
            'CONTENT_ID_DOES_NOT_BELONG_TO_ADDRESS'
        );

        contentIdToAddress[contentId] = address(0x0000000000000000000000000000000000000000);

        // Remove content id from addressToContentIds mapping
        // by replacing it with empty string
        ContentIdStruct[] memory m = addressToContentIds[target];
        for (uint i = 0; i < m.length; i++) {
            if (stringsMatch(contentId, m[i].contentId)) {
                addressToContentIds[target][i] = ContentIdStruct('');
            }
        }

        // If address has no valid content ids left, remove from Whitelist
        if (getNumContentIds(target) == 0) {
            isWhitelisted[target] = false;
        }

    }

    /// @dev Admin removes *all* contentIds from a given address.
    function adminRemoveAllContentIdsFromAddress(
        address target
    )
        public
        onlyOwner
        whenNotPaused
    {

        // Loop thru content ids from addressToContentIds mapping
        // by replacing each with empty string
        ContentIdStruct[] memory m = addressToContentIds[target];
        for (uint i = 0; i < m.length; i++) {
            addressToContentIds[target][i] = ContentIdStruct('');
        }

        // Remove from whitelist
        isWhitelisted[target] = false;

    }


    /*** Admin read-only functions ***/


    /// @dev Admin gets address mapped to a contentId,
    ///      regardless of isWhitelist status.
    function adminGetAddressByContentId(
        string calldata contentId
    )
        external
        view
        onlyOwner
        returns (address target)
    {

        return contentIdToAddress[contentId];

    }

    /// @dev Admin gets contentIds mapped to any address,
    ///      regardless of whitelist status. There is a
    ///      public-facing version of this below that only returns
    ///      content ids for whitelisted accounts.
    /// @param target Ethereum address to return contentIds for.
    function adminGetContentIdsByAddress(
        address target
    )
        external
        view
        onlyOwner
        returns (string[] memory)
    {

        ContentIdStruct[] memory m = addressToContentIds[target];
        string[] memory r = new string[](m.length);

        for (uint i = 0; i < m.length; i++) {
            r[i] =  m[i].contentId;
        }

        return r;

    }


    /// @dev Returns valid whitelisted account address by registrant index number,
    ///      regardless of whitelist status.
    function adminGetRegistrantByIndex (
        uint index
    )
        external
        view
        returns (address)
    {

        // Will throw error if specified index does not exist
        return registrants[index];

    }


    /*** User-facing functions for reading registry state ***/


    /// @dev Any address can check if an address has *ever* registered,
    /// regardless of isWhitelisted status
    function hasRegistered (
        address target
    )
        public
        view
        returns(bool)
    {

        bool _hasRegistered = false;
        for (uint i=0; i<registrants.length; i++) {
            if (registrants[i] == target) {
                return _hasRegistered = true;
            }
        }

    }

    /// @dev Returns count of all addresses that have *ever* registered,
    /// regardless of their isWhitelisted status
    function getRegistrantCount ()
        external
        view
        returns (uint)
    {

        return registrants.length;

    }

    /// @dev Returns valid whitelisted account address by registrant index number.
    function getRegistrantByIndex (
        uint index
    )
        external
        view
        returns (address)
    {

        // Will throw error if specified index does not exist
        address target = registrants[index];

        require(
            isWhitelisted[target],
            'INVALID_ADDRESS'
        );

        return target;
    }

    function getRegistrantToReferrer(address registrant)
        external
        view
        returns (address)
    {

        return registrantToReferrer[registrant];

    }

    function getReferrerToRegistrants(address referrer)
        external
        view
        returns (address[] memory)
    {

        return referrerToRegistrants[referrer];

    }

    /// @dev *Any* address can get a valid whitelisted account's contentIds.
    ///      In practice, this is called from dapp(s).
    function getContentIdsByAddress(
        address target
    )
        external
        view
        returns (string[] memory)
    {

        require(
            isWhitelisted[target],
            'INVALID_ADDRESS'
        );

        ContentIdStruct[] memory m = addressToContentIds[target];
        string[] memory r = new string[](m.length);

        for (uint i = 0; i < m.length; i++) {
            r[i] =  m[i].contentId;
        }

        return r;

    }

    /// @dev *Any* address can get a valid whitelisted account's
    ///      address if they pass in (one of) its contentId(s).
    function getAddressByContentId(
        string calldata contentId
    )
        external
        view
        returns (address)
    {

        address target = contentIdToAddress[contentId];

        require(
            isWhitelisted[target],
            'INVALID_ADDRESS'
        );

        return target;
    }


    /*** User-facing functions to update an account's own registry state ***/


    /// @dev Valid whitelisted address can remove its own content id.
    function removeContentIdFromAddress(
        string calldata contentId
    )
        external
        whenNotPaused
    {

        require(
            isWhitelisted[msg.sender],
            'INVALID_SENDER'
        );

        require(
            contentIdToAddress[contentId] == msg.sender,
            'CONTENT_ID_DOES_NOT_BELONG_TO_SENDER'
        );

        contentIdToAddress[contentId] = address(0x0000000000000000000000000000000000000000);

        // Remove content id from addressToContentIds mapping
        // by replacing it with empty string
        ContentIdStruct[] memory m = addressToContentIds[msg.sender];
        for (uint i = 0; i < m.length; i++) {
            if (stringsMatch(contentId, m[i].contentId)) {
                addressToContentIds[msg.sender][i] = ContentIdStruct('');
            }
        }

        // If address has no valid content ids left, remove from Whitelist
        if (getNumContentIds(msg.sender) == 0) {
            isWhitelisted[msg.sender] = false;
        }

    }

    /// @dev Valid whitelisted address can remove *all* contentIds from itself.
    function removeAllContentIdsFromAddress(
        address target
    )
        external
        whenNotPaused
    {

        require(
            isWhitelisted[msg.sender],
            'INVALID_SENDER'
        );

        require(
            target == msg.sender,
            'INVALID_SENDER'
        );

        // Loop thru content ids from addressToContentIds mapping
        // by replacing each with empty string
        ContentIdStruct[] memory m = addressToContentIds[target];
        for (uint i = 0; i < m.length; i++) {
            addressToContentIds[target][i] = ContentIdStruct('');
        }

        // Remove from whitelist
        isWhitelisted[target] = false;

    }


    /*** User roles and authorizations: Contract-to-contract read functions  ***/


    /**
     * The following functions check user Roles and Authorizations.
     * For now, most of them simply check `isWhitelisted()` in this contract.
     * But the long-term idea here is to create a path for Microsponsors
     * to federate: allowing other organizations to create their own
     * exchange front-ends with their own set of granular rules about minting,
     * selling and re-selling tokens, cross-exchange arbitrage, etc etc.
     */


    /// @dev Valid whitelisted address validates registration of its own
    ///      Content ID. In practice, this will be used by Microsponsors'
    ///      ERC-721 for validating that an address is authorized to mint()
    ///      a time slot for a given content id.
    function isContentIdRegisteredToCaller(
        uint32 federationId,
        string memory contentId
    )
        public
        view
        returns (bool)
    {

        // Minimal checks around federationId here in case
        // other Federation registries wish to read from this one
        require(federationId > 0, 'INVALID_FEDERATION_ID');

        // Check tx.origin (vs msg.sender) since this *is likely* invoked by
        // another contract
        require(
            isWhitelisted[tx.origin],
            'INVALID_SENDER'
        );

        address registrantAddress = contentIdToAddress[contentId];

        require(
            registrantAddress == tx.origin,
            'INVALID_SENDER'
        );

        return true;

    }

    function isMinter(
        uint32 federationId,
        address account
    )
        public
        view
        returns (bool)
    {

        // Minimal checks around federationId here in case
        // other Federation registries wish to read from this one
        require(federationId > 0, 'INVALID_FEDERATION_ID');

        require(
            isWhitelisted[account],
            'INVALID_MINTER'
        );

        return true;

    }

    function isAuthorizedTransferFrom(
        uint32 federationId,
        address from,
        address to,
        uint256 tokenId,
        address minter,
        address owner
    )
        public
        view
        returns (bool)
    {

        // Minimal checks around federationId here in case
        // other Federation registries wish to read from this one
        require(federationId > 0, 'INVALID_FEDERATION_ID');

        // The Minter must be whitelisted
        require(
            isWhitelisted[minter],
            'INVALID_TRANSFER_MINTER'
        );

        require(
            tokenId > 0,
            'INVALID_TOKEN_ID'
        );

        require(
            from != to,
            'INVALID_TRANSFER'
        );

        require(
            owner != address(0),
            'INVALID_TRANSFER'
        );

        return true;

    }


    /***  Helpers  ***/


    function stringsMatch (
        string memory a,
        string memory b
    )
        private
        pure
        returns (bool)
    {
        return (keccak256(abi.encodePacked((a))) == keccak256(abi.encodePacked((b))) );
    }


    function getNumContentIds (
        address target
    )
        private
        view
        returns (uint16)
    {

        ContentIdStruct[] memory m = addressToContentIds[target];
        uint16 counter = 0;
        for (uint i = 0; i < m.length; i++) {
            // Omit entries that are empty strings
            // (from contentIds that were removed by admin or user)
            if (!stringsMatch('', m[i].contentId)) {
                counter++;
            }
        }

        return counter;

    }


    /*** Prevent Accidents! ***/


    /// @notice No tipping!
    /// @dev Reject all Ether from being sent here.
    /// (Hopefully, we can prevent user accidents.)
    ///  Hat-tip to Cryptokitties.
    function() external payable {
        require(
            msg.sender == address(0)
        );
    }


}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[{"name":"target","type":"address"}],"name":"getContentIdsByAddress","outputs":[{"name":"","type":"string[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"index","type":"uint256"}],"name":"adminGetRegistrantByIndex","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"federationId","type":"uint32"},{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"},{"name":"minter","type":"address"},{"name":"owner","type":"address"}],"name":"isAuthorizedTransferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"federationId","type":"uint32"},{"name":"account","type":"address"}],"name":"isMinter","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"target","type":"address"}],"name":"removeAllContentIdsFromAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"registrant","type":"address"}],"name":"getRegistrantToReferrer","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"referrer","type":"address"}],"name":"getReferrerToRegistrants","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"isWhitelisted","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"target","type":"address"}],"name":"adminGetContentIdsByAddress","outputs":[{"name":"","type":"string[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner2","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"target","type":"address"}],"name":"adminRemoveAllContentIdsFromAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"contentId","type":"string"}],"name":"getAddressByContentId","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner1","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"contentId","type":"string"}],"name":"adminGetAddressByContentId","outputs":[{"name":"target","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getRegistrantCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"index","type":"uint256"}],"name":"getRegistrantByIndex","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"target","type":"address"}],"name":"hasRegistered","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"federationId","type":"uint32"},{"name":"contentId","type":"string"}],"name":"isContentIdRegisteredToCaller","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"registrant","type":"address"},{"name":"referrer","type":"address"}],"name":"adminUpdateReferrer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"registrantTimestamp","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"contentId","type":"string"}],"name":"removeContentIdFromAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"target","type":"address"},{"name":"contentId","type":"string"},{"name":"isApproved","type":"bool"}],"name":"adminUpdate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership2","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership1","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"target","type":"address"},{"name":"contentId","type":"string"}],"name":"adminRemoveContentIdFromAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"target","type":"address"},{"name":"isApproved","type":"bool"}],"name":"adminUpdateWhitelistStatus","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"target","type":"address"},{"name":"contentId","type":"string"},{"name":"isApproved","type":"bool"},{"name":"referrer","type":"address"}],"name":"adminUpdateWithReferrer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"}]

60806040526001805460a060020a60ff021916905534801561002057600080fd5b506000805433600160a060020a03199182168117835560018054909216179055612cd190819061005090396000f3fe6080604052600436106101ea576000357c0100000000000000000000000000000000000000000000000000000000900480637b97d03411610114578063ccc7ca2a116100b2578063e982d5a911610081578063e982d5a91461053f578063ed5d0bcf1461055f578063f5ccddcc1461057f578063fc7ee7ef1461059f576101ea565b8063ccc7ca2a146104bf578063da502460146104df578063de08679a146104ff578063e2b375a91461051f576101ea565b80639a108b79116100ee5780639a108b791461043f578063a0d035261461045f578063abe617831461047f578063b90606f81461049f576101ea565b80637b97d034146103e85780638456cb59146104085780639568d29c1461041d576101ea565b80633af32abf1161018c5780635485bcf91161015b5780635485bcf91461037e5780635c975abb1461039e5780636b805204146103b357806373688914146103d3576101ea565b80633af32abf146103145780633f4ba83a1461033457806349816041146103495780635270972514610369576101ea565b806312d26ac8116101c857806312d26ac81461028757806320a033bd146102a7578063260e6316146102c7578063331fab2f146102e7576101ea565b806301be6de9146101f75780630cb2da071461022d5780630d1e35911461025a575b33156101f557600080fd5b005b34801561020357600080fd5b5061021761021236600461224f565b6105bf565b6040516102249190612ab1565b60405180910390f35b34801561023957600080fd5b5061024d610248366004612447565b610786565b6040516102249190612a92565b34801561026657600080fd5b5061027a610275366004612484565b6107b2565b6040516102249190612ac2565b34801561029357600080fd5b5061027a6102a2366004612465565b6108a2565b3480156102b357600080fd5b506101f56102c236600461224f565b610913565b3480156102d357600080fd5b5061024d6102e236600461224f565b610b15565b3480156102f357600080fd5b5061030761030236600461224f565b610b33565b6040516102249190612aa0565b34801561032057600080fd5b5061027a61032f36600461224f565b610ba9565b34801561034057600080fd5b506101f5610bbe565b34801561035557600080fd5b5061021761036436600461224f565b610c3a565b34801561037557600080fd5b5061024d610df5565b34801561038a57600080fd5b506101f561039936600461224f565b610e04565b3480156103aa57600080fd5b5061027a610fc8565b3480156103bf57600080fd5b5061024d6103ce366004612405565b610fd8565b3480156103df57600080fd5b5061024d611043565b3480156103f457600080fd5b5061024d610403366004612405565b611052565b34801561041457600080fd5b506101f56110ca565b34801561042957600080fd5b5061043261114b565b6040516102249190612bc0565b34801561044b57600080fd5b5061024d61045a366004612447565b611152565b34801561046b57600080fd5b5061027a61047a36600461224f565b6111b0565b34801561048b57600080fd5b5061027a61049a36600461250b565b61120e565b3480156104ab57600080fd5b506101f56104ba366004612275565b6112c5565b3480156104cb57600080fd5b506104326104da36600461224f565b61157e565b3480156104eb57600080fd5b506101f56104fa366004612405565b611590565b34801561050b57600080fd5b506101f561051a366004612327565b611851565b34801561052b57600080fd5b506101f561053a36600461224f565b611a2c565b34801561054b57600080fd5b506101f561055a36600461224f565b611a9e565b34801561056b57600080fd5b506101f561057a3660046122df565b611b11565b34801561058b57600080fd5b506101f561059a3660046122af565b611da5565b3480156105ab57600080fd5b506101f56105ba36600461238c565b611ea7565b600160a060020a03811660009081526003602052604090205460609060ff1615156106085760405160e560020a62461bcd0281526004016105ff90612ad0565b60405180910390fd5b600160a060020a0382166000908152600760209081526040808320805482518185028101850190935280835260609492939192909184015b828210156106f757600084815260209081902060408051918501805460026001821615610100026000190190911604601f81018590048502840183018352938301848152929390928492909184918401828280156106df5780601f106106b4576101008083540402835291602001916106df565b820191906000526020600020905b8154815290600101906020018083116106c257829003601f168201915b50505050508152505081526020019060010190610640565b5050505090506060815160405190808252806020026020018201604052801561073457816020015b606081526020019060019003908161071f5790505b50905060005b825181101561077c57828181518110151561075157fe5b6020908102909101015151825183908390811061076a57fe5b6020908102909101015260010161073a565b509150505b919050565b600060028281548110151561079757fe5b600091825260209091200154600160a060020a031692915050565b600063ffffffff871615156107dc5760405160e560020a62461bcd0281526004016105ff90612b40565b600160a060020a03831660009081526003602052604090205460ff1615156108195760405160e560020a62461bcd0281526004016105ff90612b20565b83151561083b5760405160e560020a62461bcd0281526004016105ff90612b30565b600160a060020a03868116908616141561086a5760405160e560020a62461bcd0281526004016105ff90612ba0565b600160a060020a03821615156108955760405160e560020a62461bcd0281526004016105ff90612ba0565b5060019695505050505050565b600063ffffffff831615156108cc5760405160e560020a62461bcd0281526004016105ff90612b40565b600160a060020a03821660009081526003602052604090205460ff1615156109095760405160e560020a62461bcd0281526004016105ff90612b50565b5060015b92915050565b60015460a060020a900460ff161561092a57600080fd5b3360009081526003602052604090205460ff16151561095e5760405160e560020a62461bcd0281526004016105ff90612b90565b600160a060020a03811633146109895760405160e560020a62461bcd0281526004016105ff90612b90565b600160a060020a0381166000908152600760209081526040808320805482518185028101850190935280835260609492939192909184015b82821015610a7857600084815260209081902060408051918501805460026001821615610100026000190190911604601f8101859004850284018301835293830184815292939092849290918491840182828015610a605780601f10610a3557610100808354040283529160200191610a60565b820191906000526020600020905b815481529060010190602001808311610a4357829003601f168201915b505050505081525050815260200190600101906109c1565b509293506000925050505b8151811015610af257604080518082018252600060208083018281528352600160a060020a03871682526007905291909120805483908110610ac157fe5b906000526020600020016000820151816000019080519060200190610ae79291906120ea565b505050600101610a83565b5050600160a060020a03166000908152600360205260409020805460ff19169055565b600160a060020a039081166000908152600560205260409020541690565b600160a060020a038116600090815260066020908152604091829020805483518184028101840190945280845260609392830182828015610b9d57602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610b7f575b50505050509050919050565b60036020526000908152604090205460ff1681565b600054600160a060020a0316331480610be15750600154600160a060020a031633145b1515610c025760405160e560020a62461bcd0281526004016105ff90612b60565b60015460a060020a900460ff161515610c1a57600080fd5b6001805474ff000000000000000000000000000000000000000019169055565b600054606090600160a060020a0316331480610c605750600154600160a060020a031633145b1515610c815760405160e560020a62461bcd0281526004016105ff90612b60565b600160a060020a0382166000908152600760209081526040808320805482518185028101850190935280835260609492939192909184015b82821015610d7057600084815260209081902060408051918501805460026001821615610100026000190190911604601f8101859004850284018301835293830184815292939092849290918491840182828015610d585780601f10610d2d57610100808354040283529160200191610d58565b820191906000526020600020905b815481529060010190602001808311610d3b57829003601f168201915b50505050508152505081526020019060010190610cb9565b50505050905060608151604051908082528060200260200182016040528015610dad57816020015b6060815260200190600190039081610d985790505b50905060005b825181101561077c578281815181101515610dca57fe5b60209081029091010151518251839083908110610de357fe5b60209081029091010152600101610db3565b600154600160a060020a031681565b600054600160a060020a0316331480610e275750600154600160a060020a031633145b1515610e485760405160e560020a62461bcd0281526004016105ff90612b60565b60015460a060020a900460ff1615610e5f57600080fd5b600160a060020a0381166000908152600760209081526040808320805482518185028101850190935280835260609492939192909184015b82821015610f4e57600084815260209081902060408051918501805460026001821615610100026000190190911604601f8101859004850284018301835293830184815292939092849290918491840182828015610f365780601f10610f0b57610100808354040283529160200191610f36565b820191906000526020600020905b815481529060010190602001808311610f1957829003601f168201915b50505050508152505081526020019060010190610e97565b509293506000925050505b8151811015610af257604080518082018252600060208083018281528352600160a060020a03871682526007905291909120805483908110610f9757fe5b906000526020600020016000820151816000019080519060200190610fbd9291906120ea565b505050600101610f59565b60015460a060020a900460ff1681565b60008060088484604051610fed929190612a79565b908152604080516020928190038301902054600160a060020a03166000818152600390935291205490915060ff16151561103c5760405160e560020a62461bcd0281526004016105ff90612ad0565b9392505050565b600054600160a060020a031681565b60008054600160a060020a03163314806110765750600154600160a060020a031633145b15156110975760405160e560020a62461bcd0281526004016105ff90612b60565b600883836040516110a9929190612a79565b90815260405190819003602001902054600160a060020a0316905092915050565b600054600160a060020a03163314806110ed5750600154600160a060020a031633145b151561110e5760405160e560020a62461bcd0281526004016105ff90612b60565b60015460a060020a900460ff161561112557600080fd5b6001805474ff0000000000000000000000000000000000000000191660a060020a179055565b6002545b90565b60008060028381548110151561116457fe5b6000918252602080832090910154600160a060020a0316808352600390915260409091205490915060ff16151561090d5760405160e560020a62461bcd0281526004016105ff90612ad0565b600080805b6002548110156112075783600160a060020a03166002828154811015156111d857fe5b600091825260209091200154600160a060020a031614156111ff5750600191506107819050565b6001016111b5565b5050919050565b600063ffffffff831615156112385760405160e560020a62461bcd0281526004016105ff90612b40565b3260009081526003602052604090205460ff16151561126c5760405160e560020a62461bcd0281526004016105ff90612b90565b600060088360405161127e9190612a86565b90815260405190819003602001902054600160a060020a031690503281146112bb5760405160e560020a62461bcd0281526004016105ff90612b90565b5060019392505050565b600054600160a060020a03163314806112e85750600154600160a060020a031633145b15156113095760405160e560020a62461bcd0281526004016105ff90612b60565b60015460a060020a900460ff161561132057600080fd5b611329826111b0565b151561134a5760405160e560020a62461bcd0281526004016105ff90612b00565b600160a060020a03811660009081526003602052604090205460ff1615156113875760405160e560020a62461bcd0281526004016105ff90612b80565b600160a060020a0382811690821614156113b65760405160e560020a62461bcd0281526004016105ff90612b80565b600160a060020a03828116600090815260056020526040902054811690821614156113f65760405160e560020a62461bcd0281526004016105ff90612bb0565b600160a060020a0380831660009081526005602052604090205416801561152557600160a060020a03811660009081526006602090815260409182902080548351818402810184019094528084526060939283018282801561148157602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311611463575b50939450600093505050505b81518110156115225784600160a060020a031682828151811015156114ae57fe5b90602001906020020151600160a060020a0316141561151a57600160a060020a03831660009081526006602052604081208054839081106114eb57fe5b9060005260206000200160006101000a815481600160a060020a030219169083600160a060020a031602179055505b60010161148d565b50505b50600160a060020a039182166000818152600560209081526040808320805496909516600160a060020a031996871681179095559382526006815292812080546001810182559082529290209091018054909216179055565b60046020526000908152604090205481565b60015460a060020a900460ff16156115a757600080fd5b3360009081526003602052604090205460ff1615156115db5760405160e560020a62461bcd0281526004016105ff90612b90565b33600160a060020a0316600883836040516115f7929190612a79565b90815260405190819003602001902054600160a060020a0316146116305760405160e560020a62461bcd0281526004016105ff90612ae0565b600060088383604051611644929190612a79565b90815260408051602092819003830181208054600160a060020a031916600160a060020a03959095169490941790935533600090815260078352818120805480850286018501909352828552606094939092919084015b8282101561175257600084815260209081902060408051918501805460026001821615610100026000190190911604601f810185900485028401830183529383018481529293909284929091849184018282801561173a5780601f1061170f5761010080835404028352916020019161173a565b820191906000526020600020905b81548152906001019060200180831161171d57829003601f168201915b5050505050815250508152602001906001019061169b565b509293506000925050505b8151811015611820576117bd84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050855186925085915081106117ad57fe5b6020908102909101015151611f5a565b156118185760408051808201825260006020808301828152835233825260079052919091208054839081106117ee57fe5b9060005260206000200160008201518160000190805190602001906118149291906120ea565b5050505b60010161175d565b5061182a33611fb3565b61ffff16151561184c57336000908152600360205260409020805460ff191690555b505050565b600054600160a060020a03163314806118745750600154600160a060020a031633145b15156118955760405160e560020a62461bcd0281526004016105ff90612b60565b60015460a060020a900460ff16156118ac57600080fd5b60006008836040516118be9190612a86565b90815260405190819003602001902054600160a060020a0390811691508416811461199457600160a060020a038116156118fc576118fc8184611b11565b600160a060020a03841660009081526007602090815260408083208151808401909252868252805460018101808355918552938390208251805192959394919093019261194f92849291909101906120ea565b50505050836008846040516119649190612a86565b9081526040519081900360200190208054600160a060020a0392909216600160a060020a03199092169190911790555b61199d846111b0565b15156119fe5760028054600181019091557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace018054600160a060020a031916600160a060020a03861690811790915560009081526004602052604090204290555b50600160a060020a03929092166000908152600360205260409020805460ff19169215159290921790915550565b600054600160a060020a0316331480611a4f5750600154600160a060020a031633145b1515611a705760405160e560020a62461bcd0281526004016105ff90612b60565b600160a060020a03811615611a9b5760018054600160a060020a031916600160a060020a0383161790555b50565b600054600160a060020a0316331480611ac15750600154600160a060020a031633145b1515611ae25760405160e560020a62461bcd0281526004016105ff90612b60565b600160a060020a03811615611a9b5760008054600160a060020a038316600160a060020a031990911617905550565b600054600160a060020a0316331480611b345750600154600160a060020a031633145b1515611b555760405160e560020a62461bcd0281526004016105ff90612b60565b60015460a060020a900460ff1615611b6c57600080fd5b81600160a060020a0316600882604051611b869190612a86565b90815260405190819003602001902054600160a060020a031614611bbf5760405160e560020a62461bcd0281526004016105ff90612b70565b6000600882604051611bd19190612a86565b90815260408051602092819003830181208054600160a060020a031916600160a060020a03958616179055928516600090815260078352818120805480850286018501909352828552606094939092919084015b82821015611cdc57600084815260209081902060408051918501805460026001821615610100026000190190911604601f8101859004850284018301835293830184815292939092849290918491840182828015611cc45780601f10611c9957610100808354040283529160200191611cc4565b820191906000526020600020905b815481529060010190602001808311611ca757829003601f168201915b50505050508152505081526020019060010190611c25565b509293506000925050505b8151811015611d6e57611d028383838151811015156117ad57fe5b15611d6657604080518082018252600060208083018281528352600160a060020a03881682526007905291909120805483908110611d3c57fe5b906000526020600020016000820151816000019080519060200190611d629291906120ea565b5050505b600101611ce7565b50611d7883611fb3565b61ffff16151561184c575050600160a060020a03166000908152600360205260409020805460ff19169055565b600054600160a060020a0316331480611dc85750600154600160a060020a031633145b1515611de95760405160e560020a62461bcd0281526004016105ff90612b60565b60015460a060020a900460ff1615611e0057600080fd5b600160a060020a03821660009081526003602052604090205460ff1615158115151415611e425760405160e560020a62461bcd0281526004016105ff90612af0565b60018115151415611e7c576000611e5883611fb3565b61ffff1611611e7c5760405160e560020a62461bcd0281526004016105ff90612b10565b600160a060020a03919091166000908152600360205260409020805460ff1916911515919091179055565b600054600160a060020a0316331480611eca5750600154600160a060020a031633145b1515611eeb5760405160e560020a62461bcd0281526004016105ff90612b60565b60015460a060020a900460ff1615611f0257600080fd5b600160a060020a03811660009081526003602052604090205460ff161515611f3f5760405160e560020a62461bcd0281526004016105ff90612b80565b611f4a848484611851565b611f5484826112c5565b50505050565b600081604051602001611f6d9190612a86565b6040516020818303038152906040528051906020012083604051602001611f949190612a86565b6040516020818303038152906040528051906020012014905092915050565b600160a060020a03811660009081526007602090815260408083208054825181850281018501909352808352606093859084015b8282101561209e57600084815260209081902060408051918501805460026001821615610100026000190190911604601f81018590048502840183018352938301848152929390928492909184918401828280156120865780601f1061205b57610100808354040283529160200191612086565b820191906000526020600020905b81548152906001019060200180831161206957829003601f168201915b50505050508152505081526020019060010190611fe7565b5092935060009250829150505b825181101561077c576120d56040518060200160405280600081525084838151811015156117ad57fe5b15156120e2576001909101905b6001016120ab565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061212b57805160ff1916838001178555612158565b82800160010185558215612158579182015b8281111561215857825182559160200191906001019061213d565b50612164929150612168565b5090565b61114f91905b80821115612164576000815560010161216e565b600061103c8235612c30565b600061103c8235612c3b565b600080601f830184136121ac57600080fd5b50813567ffffffffffffffff8111156121c457600080fd5b6020830191508360018202830111156121dc57600080fd5b9250929050565b6000601f820183136121f457600080fd5b813561220761220282612bf5565b612bce565b9150808252602083016020830185838301111561222357600080fd5b61222e838284612c55565b50505092915050565b600061103c823561114f565b600061103c8235612c4c565b60006020828403121561226157600080fd5b600061226d8484612182565b949350505050565b6000806040838503121561228857600080fd5b60006122948585612182565b92505060206122a585828601612182565b9150509250929050565b600080604083850312156122c257600080fd5b60006122ce8585612182565b92505060206122a58582860161218e565b600080604083850312156122f257600080fd5b60006122fe8585612182565b925050602083013567ffffffffffffffff81111561231b57600080fd5b6122a5858286016121e3565b60008060006060848603121561233c57600080fd5b60006123488686612182565b935050602084013567ffffffffffffffff81111561236557600080fd5b612371868287016121e3565b92505060406123828682870161218e565b9150509250925092565b600080600080608085870312156123a257600080fd5b60006123ae8787612182565b945050602085013567ffffffffffffffff8111156123cb57600080fd5b6123d7878288016121e3565b93505060406123e88782880161218e565b92505060606123f987828801612182565b91505092959194509250565b6000806020838503121561241857600080fd5b823567ffffffffffffffff81111561242f57600080fd5b61243b8582860161219a565b92509250509250929050565b60006020828403121561245957600080fd5b600061226d8484612237565b6000806040838503121561247857600080fd5b60006122948585612243565b60008060008060008060c0878903121561249d57600080fd5b60006124a98989612243565b96505060206124ba89828a01612182565b95505060406124cb89828a01612182565b94505060606124dc89828a01612237565b93505060806124ed89828a01612182565b92505060a06124fe89828a01612182565b9150509295509295509295565b6000806040838503121561251e57600080fd5b60006122fe8585612243565b6000612536838361254a565b505060200190565b600061103c838361266f565b61255381612c30565b82525050565b600061256482612c23565b61256e8185612c27565b935061257983612c1d565b60005b828110156125a45761258f86835161252a565b955061259a82612c1d565b915060010161257c565b5093949350505050565b60006125b982612c23565b6125c38185612c27565b9350836020820285016125d585612c1d565b60005b8481101561260c5783830388526125f083835161253e565b92506125fb82612c1d565b6020989098019791506001016125d8565b50909695505050505050565b61255381612c3b565b600061262d8385610781565b935061263a838584612c55565b50500190565b600061264b82612c23565b6126558185610781565b9350612665818560208601612c61565b9290920192915050565b600061267a82612c23565b6126848185612c27565b9350612694818560208601612c61565b61269d81612c8d565b9093019392505050565b60006126b4600f83612c27565b7f494e56414c49445f414444524553530000000000000000000000000000000000815260200192915050565b60006126ed602483612c27565b7f434f4e54454e545f49445f444f45535f4e4f545f42454c4f4e475f544f5f534581527f4e44455200000000000000000000000000000000000000000000000000000000602082015260400192915050565b600061274c601983612c27565b7f4e4f5f5354415455535f5550444154455f524551554952454400000000000000815260200192915050565b6000612785601283612c27565b7f494e56414c49445f52454749535452414e540000000000000000000000000000815260200192915050565b60006127be602583612c27565b7f414444524553535f4841535f4e4f5f4153534f4349415445445f434f4e54454e81527f545f494453000000000000000000000000000000000000000000000000000000602082015260400192915050565b600061281d601783612c27565b7f494e56414c49445f5452414e534645525f4d494e544552000000000000000000815260200192915050565b6000612856601083612c27565b7f494e56414c49445f544f4b454e5f494400000000000000000000000000000000815260200192915050565b600061288f601583612c27565b7f494e56414c49445f46454445524154494f4e5f49440000000000000000000000815260200192915050565b60006128c8600e83612c27565b7f494e56414c49445f4d494e544552000000000000000000000000000000000000815260200192915050565b6000612901601383612c27565b7f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000815260200192915050565b600061293a602583612c27565b7f434f4e54454e545f49445f444f45535f4e4f545f42454c4f4e475f544f5f414481527f4452455353000000000000000000000000000000000000000000000000000000602082015260400192915050565b6000612999601083612c27565b7f494e56414c49445f524546455252455200000000000000000000000000000000815260200192915050565b60006129d2600e83612c27565b7f494e56414c49445f53454e444552000000000000000000000000000000000000815260200192915050565b6000612a0b601083612c27565b7f494e56414c49445f5452414e5346455200000000000000000000000000000000815260200192915050565b6000612a44601c83612c27565b7f52454645525245525f5550444154455f49535f524544554e44414e5400000000815260200192915050565b6125538161114f565b600061226d828486612621565b600061103c8284612640565b6020810161090d828461254a565b6020808252810161103c8184612559565b6020808252810161103c81846125ae565b6020810161090d8284612618565b6020808252810161090d816126a7565b6020808252810161090d816126e0565b6020808252810161090d8161273f565b6020808252810161090d81612778565b6020808252810161090d816127b1565b6020808252810161090d81612810565b6020808252810161090d81612849565b6020808252810161090d81612882565b6020808252810161090d816128bb565b6020808252810161090d816128f4565b6020808252810161090d8161292d565b6020808252810161090d8161298c565b6020808252810161090d816129c5565b6020808252810161090d816129fe565b6020808252810161090d81612a37565b6020810161090d8284612a70565b60405181810167ffffffffffffffff81118282101715612bed57600080fd5b604052919050565b600067ffffffffffffffff821115612c0c57600080fd5b506020601f91909101601f19160190565b60200190565b5190565b90815260200190565b600061090d82612c40565b151590565b600160a060020a031690565b63ffffffff1690565b82818337506000910152565b60005b83811015612c7c578181015183820152602001612c64565b83811115611f545750506000910152565b601f01601f19169056fea265627a7a72305820a529162f18f5d7ff18e455c541754a61772039075f32476783e37ea26fcb9a886c6578706572696d656e74616cf50037

Deployed Bytecode

0x6080604052600436106101ea576000357c0100000000000000000000000000000000000000000000000000000000900480637b97d03411610114578063ccc7ca2a116100b2578063e982d5a911610081578063e982d5a91461053f578063ed5d0bcf1461055f578063f5ccddcc1461057f578063fc7ee7ef1461059f576101ea565b8063ccc7ca2a146104bf578063da502460146104df578063de08679a146104ff578063e2b375a91461051f576101ea565b80639a108b79116100ee5780639a108b791461043f578063a0d035261461045f578063abe617831461047f578063b90606f81461049f576101ea565b80637b97d034146103e85780638456cb59146104085780639568d29c1461041d576101ea565b80633af32abf1161018c5780635485bcf91161015b5780635485bcf91461037e5780635c975abb1461039e5780636b805204146103b357806373688914146103d3576101ea565b80633af32abf146103145780633f4ba83a1461033457806349816041146103495780635270972514610369576101ea565b806312d26ac8116101c857806312d26ac81461028757806320a033bd146102a7578063260e6316146102c7578063331fab2f146102e7576101ea565b806301be6de9146101f75780630cb2da071461022d5780630d1e35911461025a575b33156101f557600080fd5b005b34801561020357600080fd5b5061021761021236600461224f565b6105bf565b6040516102249190612ab1565b60405180910390f35b34801561023957600080fd5b5061024d610248366004612447565b610786565b6040516102249190612a92565b34801561026657600080fd5b5061027a610275366004612484565b6107b2565b6040516102249190612ac2565b34801561029357600080fd5b5061027a6102a2366004612465565b6108a2565b3480156102b357600080fd5b506101f56102c236600461224f565b610913565b3480156102d357600080fd5b5061024d6102e236600461224f565b610b15565b3480156102f357600080fd5b5061030761030236600461224f565b610b33565b6040516102249190612aa0565b34801561032057600080fd5b5061027a61032f36600461224f565b610ba9565b34801561034057600080fd5b506101f5610bbe565b34801561035557600080fd5b5061021761036436600461224f565b610c3a565b34801561037557600080fd5b5061024d610df5565b34801561038a57600080fd5b506101f561039936600461224f565b610e04565b3480156103aa57600080fd5b5061027a610fc8565b3480156103bf57600080fd5b5061024d6103ce366004612405565b610fd8565b3480156103df57600080fd5b5061024d611043565b3480156103f457600080fd5b5061024d610403366004612405565b611052565b34801561041457600080fd5b506101f56110ca565b34801561042957600080fd5b5061043261114b565b6040516102249190612bc0565b34801561044b57600080fd5b5061024d61045a366004612447565b611152565b34801561046b57600080fd5b5061027a61047a36600461224f565b6111b0565b34801561048b57600080fd5b5061027a61049a36600461250b565b61120e565b3480156104ab57600080fd5b506101f56104ba366004612275565b6112c5565b3480156104cb57600080fd5b506104326104da36600461224f565b61157e565b3480156104eb57600080fd5b506101f56104fa366004612405565b611590565b34801561050b57600080fd5b506101f561051a366004612327565b611851565b34801561052b57600080fd5b506101f561053a36600461224f565b611a2c565b34801561054b57600080fd5b506101f561055a36600461224f565b611a9e565b34801561056b57600080fd5b506101f561057a3660046122df565b611b11565b34801561058b57600080fd5b506101f561059a3660046122af565b611da5565b3480156105ab57600080fd5b506101f56105ba36600461238c565b611ea7565b600160a060020a03811660009081526003602052604090205460609060ff1615156106085760405160e560020a62461bcd0281526004016105ff90612ad0565b60405180910390fd5b600160a060020a0382166000908152600760209081526040808320805482518185028101850190935280835260609492939192909184015b828210156106f757600084815260209081902060408051918501805460026001821615610100026000190190911604601f81018590048502840183018352938301848152929390928492909184918401828280156106df5780601f106106b4576101008083540402835291602001916106df565b820191906000526020600020905b8154815290600101906020018083116106c257829003601f168201915b50505050508152505081526020019060010190610640565b5050505090506060815160405190808252806020026020018201604052801561073457816020015b606081526020019060019003908161071f5790505b50905060005b825181101561077c57828181518110151561075157fe5b6020908102909101015151825183908390811061076a57fe5b6020908102909101015260010161073a565b509150505b919050565b600060028281548110151561079757fe5b600091825260209091200154600160a060020a031692915050565b600063ffffffff871615156107dc5760405160e560020a62461bcd0281526004016105ff90612b40565b600160a060020a03831660009081526003602052604090205460ff1615156108195760405160e560020a62461bcd0281526004016105ff90612b20565b83151561083b5760405160e560020a62461bcd0281526004016105ff90612b30565b600160a060020a03868116908616141561086a5760405160e560020a62461bcd0281526004016105ff90612ba0565b600160a060020a03821615156108955760405160e560020a62461bcd0281526004016105ff90612ba0565b5060019695505050505050565b600063ffffffff831615156108cc5760405160e560020a62461bcd0281526004016105ff90612b40565b600160a060020a03821660009081526003602052604090205460ff1615156109095760405160e560020a62461bcd0281526004016105ff90612b50565b5060015b92915050565b60015460a060020a900460ff161561092a57600080fd5b3360009081526003602052604090205460ff16151561095e5760405160e560020a62461bcd0281526004016105ff90612b90565b600160a060020a03811633146109895760405160e560020a62461bcd0281526004016105ff90612b90565b600160a060020a0381166000908152600760209081526040808320805482518185028101850190935280835260609492939192909184015b82821015610a7857600084815260209081902060408051918501805460026001821615610100026000190190911604601f8101859004850284018301835293830184815292939092849290918491840182828015610a605780601f10610a3557610100808354040283529160200191610a60565b820191906000526020600020905b815481529060010190602001808311610a4357829003601f168201915b505050505081525050815260200190600101906109c1565b509293506000925050505b8151811015610af257604080518082018252600060208083018281528352600160a060020a03871682526007905291909120805483908110610ac157fe5b906000526020600020016000820151816000019080519060200190610ae79291906120ea565b505050600101610a83565b5050600160a060020a03166000908152600360205260409020805460ff19169055565b600160a060020a039081166000908152600560205260409020541690565b600160a060020a038116600090815260066020908152604091829020805483518184028101840190945280845260609392830182828015610b9d57602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610b7f575b50505050509050919050565b60036020526000908152604090205460ff1681565b600054600160a060020a0316331480610be15750600154600160a060020a031633145b1515610c025760405160e560020a62461bcd0281526004016105ff90612b60565b60015460a060020a900460ff161515610c1a57600080fd5b6001805474ff000000000000000000000000000000000000000019169055565b600054606090600160a060020a0316331480610c605750600154600160a060020a031633145b1515610c815760405160e560020a62461bcd0281526004016105ff90612b60565b600160a060020a0382166000908152600760209081526040808320805482518185028101850190935280835260609492939192909184015b82821015610d7057600084815260209081902060408051918501805460026001821615610100026000190190911604601f8101859004850284018301835293830184815292939092849290918491840182828015610d585780601f10610d2d57610100808354040283529160200191610d58565b820191906000526020600020905b815481529060010190602001808311610d3b57829003601f168201915b50505050508152505081526020019060010190610cb9565b50505050905060608151604051908082528060200260200182016040528015610dad57816020015b6060815260200190600190039081610d985790505b50905060005b825181101561077c578281815181101515610dca57fe5b60209081029091010151518251839083908110610de357fe5b60209081029091010152600101610db3565b600154600160a060020a031681565b600054600160a060020a0316331480610e275750600154600160a060020a031633145b1515610e485760405160e560020a62461bcd0281526004016105ff90612b60565b60015460a060020a900460ff1615610e5f57600080fd5b600160a060020a0381166000908152600760209081526040808320805482518185028101850190935280835260609492939192909184015b82821015610f4e57600084815260209081902060408051918501805460026001821615610100026000190190911604601f8101859004850284018301835293830184815292939092849290918491840182828015610f365780601f10610f0b57610100808354040283529160200191610f36565b820191906000526020600020905b815481529060010190602001808311610f1957829003601f168201915b50505050508152505081526020019060010190610e97565b509293506000925050505b8151811015610af257604080518082018252600060208083018281528352600160a060020a03871682526007905291909120805483908110610f9757fe5b906000526020600020016000820151816000019080519060200190610fbd9291906120ea565b505050600101610f59565b60015460a060020a900460ff1681565b60008060088484604051610fed929190612a79565b908152604080516020928190038301902054600160a060020a03166000818152600390935291205490915060ff16151561103c5760405160e560020a62461bcd0281526004016105ff90612ad0565b9392505050565b600054600160a060020a031681565b60008054600160a060020a03163314806110765750600154600160a060020a031633145b15156110975760405160e560020a62461bcd0281526004016105ff90612b60565b600883836040516110a9929190612a79565b90815260405190819003602001902054600160a060020a0316905092915050565b600054600160a060020a03163314806110ed5750600154600160a060020a031633145b151561110e5760405160e560020a62461bcd0281526004016105ff90612b60565b60015460a060020a900460ff161561112557600080fd5b6001805474ff0000000000000000000000000000000000000000191660a060020a179055565b6002545b90565b60008060028381548110151561116457fe5b6000918252602080832090910154600160a060020a0316808352600390915260409091205490915060ff16151561090d5760405160e560020a62461bcd0281526004016105ff90612ad0565b600080805b6002548110156112075783600160a060020a03166002828154811015156111d857fe5b600091825260209091200154600160a060020a031614156111ff5750600191506107819050565b6001016111b5565b5050919050565b600063ffffffff831615156112385760405160e560020a62461bcd0281526004016105ff90612b40565b3260009081526003602052604090205460ff16151561126c5760405160e560020a62461bcd0281526004016105ff90612b90565b600060088360405161127e9190612a86565b90815260405190819003602001902054600160a060020a031690503281146112bb5760405160e560020a62461bcd0281526004016105ff90612b90565b5060019392505050565b600054600160a060020a03163314806112e85750600154600160a060020a031633145b15156113095760405160e560020a62461bcd0281526004016105ff90612b60565b60015460a060020a900460ff161561132057600080fd5b611329826111b0565b151561134a5760405160e560020a62461bcd0281526004016105ff90612b00565b600160a060020a03811660009081526003602052604090205460ff1615156113875760405160e560020a62461bcd0281526004016105ff90612b80565b600160a060020a0382811690821614156113b65760405160e560020a62461bcd0281526004016105ff90612b80565b600160a060020a03828116600090815260056020526040902054811690821614156113f65760405160e560020a62461bcd0281526004016105ff90612bb0565b600160a060020a0380831660009081526005602052604090205416801561152557600160a060020a03811660009081526006602090815260409182902080548351818402810184019094528084526060939283018282801561148157602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311611463575b50939450600093505050505b81518110156115225784600160a060020a031682828151811015156114ae57fe5b90602001906020020151600160a060020a0316141561151a57600160a060020a03831660009081526006602052604081208054839081106114eb57fe5b9060005260206000200160006101000a815481600160a060020a030219169083600160a060020a031602179055505b60010161148d565b50505b50600160a060020a039182166000818152600560209081526040808320805496909516600160a060020a031996871681179095559382526006815292812080546001810182559082529290209091018054909216179055565b60046020526000908152604090205481565b60015460a060020a900460ff16156115a757600080fd5b3360009081526003602052604090205460ff1615156115db5760405160e560020a62461bcd0281526004016105ff90612b90565b33600160a060020a0316600883836040516115f7929190612a79565b90815260405190819003602001902054600160a060020a0316146116305760405160e560020a62461bcd0281526004016105ff90612ae0565b600060088383604051611644929190612a79565b90815260408051602092819003830181208054600160a060020a031916600160a060020a03959095169490941790935533600090815260078352818120805480850286018501909352828552606094939092919084015b8282101561175257600084815260209081902060408051918501805460026001821615610100026000190190911604601f810185900485028401830183529383018481529293909284929091849184018282801561173a5780601f1061170f5761010080835404028352916020019161173a565b820191906000526020600020905b81548152906001019060200180831161171d57829003601f168201915b5050505050815250508152602001906001019061169b565b509293506000925050505b8151811015611820576117bd84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050855186925085915081106117ad57fe5b6020908102909101015151611f5a565b156118185760408051808201825260006020808301828152835233825260079052919091208054839081106117ee57fe5b9060005260206000200160008201518160000190805190602001906118149291906120ea565b5050505b60010161175d565b5061182a33611fb3565b61ffff16151561184c57336000908152600360205260409020805460ff191690555b505050565b600054600160a060020a03163314806118745750600154600160a060020a031633145b15156118955760405160e560020a62461bcd0281526004016105ff90612b60565b60015460a060020a900460ff16156118ac57600080fd5b60006008836040516118be9190612a86565b90815260405190819003602001902054600160a060020a0390811691508416811461199457600160a060020a038116156118fc576118fc8184611b11565b600160a060020a03841660009081526007602090815260408083208151808401909252868252805460018101808355918552938390208251805192959394919093019261194f92849291909101906120ea565b50505050836008846040516119649190612a86565b9081526040519081900360200190208054600160a060020a0392909216600160a060020a03199092169190911790555b61199d846111b0565b15156119fe5760028054600181019091557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace018054600160a060020a031916600160a060020a03861690811790915560009081526004602052604090204290555b50600160a060020a03929092166000908152600360205260409020805460ff19169215159290921790915550565b600054600160a060020a0316331480611a4f5750600154600160a060020a031633145b1515611a705760405160e560020a62461bcd0281526004016105ff90612b60565b600160a060020a03811615611a9b5760018054600160a060020a031916600160a060020a0383161790555b50565b600054600160a060020a0316331480611ac15750600154600160a060020a031633145b1515611ae25760405160e560020a62461bcd0281526004016105ff90612b60565b600160a060020a03811615611a9b5760008054600160a060020a038316600160a060020a031990911617905550565b600054600160a060020a0316331480611b345750600154600160a060020a031633145b1515611b555760405160e560020a62461bcd0281526004016105ff90612b60565b60015460a060020a900460ff1615611b6c57600080fd5b81600160a060020a0316600882604051611b869190612a86565b90815260405190819003602001902054600160a060020a031614611bbf5760405160e560020a62461bcd0281526004016105ff90612b70565b6000600882604051611bd19190612a86565b90815260408051602092819003830181208054600160a060020a031916600160a060020a03958616179055928516600090815260078352818120805480850286018501909352828552606094939092919084015b82821015611cdc57600084815260209081902060408051918501805460026001821615610100026000190190911604601f8101859004850284018301835293830184815292939092849290918491840182828015611cc45780601f10611c9957610100808354040283529160200191611cc4565b820191906000526020600020905b815481529060010190602001808311611ca757829003601f168201915b50505050508152505081526020019060010190611c25565b509293506000925050505b8151811015611d6e57611d028383838151811015156117ad57fe5b15611d6657604080518082018252600060208083018281528352600160a060020a03881682526007905291909120805483908110611d3c57fe5b906000526020600020016000820151816000019080519060200190611d629291906120ea565b5050505b600101611ce7565b50611d7883611fb3565b61ffff16151561184c575050600160a060020a03166000908152600360205260409020805460ff19169055565b600054600160a060020a0316331480611dc85750600154600160a060020a031633145b1515611de95760405160e560020a62461bcd0281526004016105ff90612b60565b60015460a060020a900460ff1615611e0057600080fd5b600160a060020a03821660009081526003602052604090205460ff1615158115151415611e425760405160e560020a62461bcd0281526004016105ff90612af0565b60018115151415611e7c576000611e5883611fb3565b61ffff1611611e7c5760405160e560020a62461bcd0281526004016105ff90612b10565b600160a060020a03919091166000908152600360205260409020805460ff1916911515919091179055565b600054600160a060020a0316331480611eca5750600154600160a060020a031633145b1515611eeb5760405160e560020a62461bcd0281526004016105ff90612b60565b60015460a060020a900460ff1615611f0257600080fd5b600160a060020a03811660009081526003602052604090205460ff161515611f3f5760405160e560020a62461bcd0281526004016105ff90612b80565b611f4a848484611851565b611f5484826112c5565b50505050565b600081604051602001611f6d9190612a86565b6040516020818303038152906040528051906020012083604051602001611f949190612a86565b6040516020818303038152906040528051906020012014905092915050565b600160a060020a03811660009081526007602090815260408083208054825181850281018501909352808352606093859084015b8282101561209e57600084815260209081902060408051918501805460026001821615610100026000190190911604601f81018590048502840183018352938301848152929390928492909184918401828280156120865780601f1061205b57610100808354040283529160200191612086565b820191906000526020600020905b81548152906001019060200180831161206957829003601f168201915b50505050508152505081526020019060010190611fe7565b5092935060009250829150505b825181101561077c576120d56040518060200160405280600081525084838151811015156117ad57fe5b15156120e2576001909101905b6001016120ab565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061212b57805160ff1916838001178555612158565b82800160010185558215612158579182015b8281111561215857825182559160200191906001019061213d565b50612164929150612168565b5090565b61114f91905b80821115612164576000815560010161216e565b600061103c8235612c30565b600061103c8235612c3b565b600080601f830184136121ac57600080fd5b50813567ffffffffffffffff8111156121c457600080fd5b6020830191508360018202830111156121dc57600080fd5b9250929050565b6000601f820183136121f457600080fd5b813561220761220282612bf5565b612bce565b9150808252602083016020830185838301111561222357600080fd5b61222e838284612c55565b50505092915050565b600061103c823561114f565b600061103c8235612c4c565b60006020828403121561226157600080fd5b600061226d8484612182565b949350505050565b6000806040838503121561228857600080fd5b60006122948585612182565b92505060206122a585828601612182565b9150509250929050565b600080604083850312156122c257600080fd5b60006122ce8585612182565b92505060206122a58582860161218e565b600080604083850312156122f257600080fd5b60006122fe8585612182565b925050602083013567ffffffffffffffff81111561231b57600080fd5b6122a5858286016121e3565b60008060006060848603121561233c57600080fd5b60006123488686612182565b935050602084013567ffffffffffffffff81111561236557600080fd5b612371868287016121e3565b92505060406123828682870161218e565b9150509250925092565b600080600080608085870312156123a257600080fd5b60006123ae8787612182565b945050602085013567ffffffffffffffff8111156123cb57600080fd5b6123d7878288016121e3565b93505060406123e88782880161218e565b92505060606123f987828801612182565b91505092959194509250565b6000806020838503121561241857600080fd5b823567ffffffffffffffff81111561242f57600080fd5b61243b8582860161219a565b92509250509250929050565b60006020828403121561245957600080fd5b600061226d8484612237565b6000806040838503121561247857600080fd5b60006122948585612243565b60008060008060008060c0878903121561249d57600080fd5b60006124a98989612243565b96505060206124ba89828a01612182565b95505060406124cb89828a01612182565b94505060606124dc89828a01612237565b93505060806124ed89828a01612182565b92505060a06124fe89828a01612182565b9150509295509295509295565b6000806040838503121561251e57600080fd5b60006122fe8585612243565b6000612536838361254a565b505060200190565b600061103c838361266f565b61255381612c30565b82525050565b600061256482612c23565b61256e8185612c27565b935061257983612c1d565b60005b828110156125a45761258f86835161252a565b955061259a82612c1d565b915060010161257c565b5093949350505050565b60006125b982612c23565b6125c38185612c27565b9350836020820285016125d585612c1d565b60005b8481101561260c5783830388526125f083835161253e565b92506125fb82612c1d565b6020989098019791506001016125d8565b50909695505050505050565b61255381612c3b565b600061262d8385610781565b935061263a838584612c55565b50500190565b600061264b82612c23565b6126558185610781565b9350612665818560208601612c61565b9290920192915050565b600061267a82612c23565b6126848185612c27565b9350612694818560208601612c61565b61269d81612c8d565b9093019392505050565b60006126b4600f83612c27565b7f494e56414c49445f414444524553530000000000000000000000000000000000815260200192915050565b60006126ed602483612c27565b7f434f4e54454e545f49445f444f45535f4e4f545f42454c4f4e475f544f5f534581527f4e44455200000000000000000000000000000000000000000000000000000000602082015260400192915050565b600061274c601983612c27565b7f4e4f5f5354415455535f5550444154455f524551554952454400000000000000815260200192915050565b6000612785601283612c27565b7f494e56414c49445f52454749535452414e540000000000000000000000000000815260200192915050565b60006127be602583612c27565b7f414444524553535f4841535f4e4f5f4153534f4349415445445f434f4e54454e81527f545f494453000000000000000000000000000000000000000000000000000000602082015260400192915050565b600061281d601783612c27565b7f494e56414c49445f5452414e534645525f4d494e544552000000000000000000815260200192915050565b6000612856601083612c27565b7f494e56414c49445f544f4b454e5f494400000000000000000000000000000000815260200192915050565b600061288f601583612c27565b7f494e56414c49445f46454445524154494f4e5f49440000000000000000000000815260200192915050565b60006128c8600e83612c27565b7f494e56414c49445f4d494e544552000000000000000000000000000000000000815260200192915050565b6000612901601383612c27565b7f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000815260200192915050565b600061293a602583612c27565b7f434f4e54454e545f49445f444f45535f4e4f545f42454c4f4e475f544f5f414481527f4452455353000000000000000000000000000000000000000000000000000000602082015260400192915050565b6000612999601083612c27565b7f494e56414c49445f524546455252455200000000000000000000000000000000815260200192915050565b60006129d2600e83612c27565b7f494e56414c49445f53454e444552000000000000000000000000000000000000815260200192915050565b6000612a0b601083612c27565b7f494e56414c49445f5452414e5346455200000000000000000000000000000000815260200192915050565b6000612a44601c83612c27565b7f52454645525245525f5550444154455f49535f524544554e44414e5400000000815260200192915050565b6125538161114f565b600061226d828486612621565b600061103c8284612640565b6020810161090d828461254a565b6020808252810161103c8184612559565b6020808252810161103c81846125ae565b6020810161090d8284612618565b6020808252810161090d816126a7565b6020808252810161090d816126e0565b6020808252810161090d8161273f565b6020808252810161090d81612778565b6020808252810161090d816127b1565b6020808252810161090d81612810565b6020808252810161090d81612849565b6020808252810161090d81612882565b6020808252810161090d816128bb565b6020808252810161090d816128f4565b6020808252810161090d8161292d565b6020808252810161090d8161298c565b6020808252810161090d816129c5565b6020808252810161090d816129fe565b6020808252810161090d81612a37565b6020810161090d8284612a70565b60405181810167ffffffffffffffff81118282101715612bed57600080fd5b604052919050565b600067ffffffffffffffff821115612c0c57600080fd5b506020601f91909101601f19160190565b60200190565b5190565b90815260200190565b600061090d82612c40565b151590565b600160a060020a031690565b63ffffffff1690565b82818337506000910152565b60005b83811015612c7c578181015183820152602001612c64565b83811115611f545750506000910152565b601f01601f19169056fea265627a7a72305820a529162f18f5d7ff18e455c541754a61772039075f32476783e37ea26fcb9a886c6578706572696d656e74616cf50037

Deployed Bytecode Sourcemap

1865:18842:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20657:10;:24;20635:57;;;;;;1865:18842;13588:485;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;13588:485:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;11565:239;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11565:239:0;;;;;;;;:::i;:::-;;;;;;;;18657:900;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;18657:900:0;;;;;;;;:::i;:::-;;;;;;;;18186:463;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;18186:463:0;;;;;;;;:::i;15847:712::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;15847:712:0;;;;;;;;:::i;13073:179::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;13073:179:0;;;;;;;;:::i;13260:186::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;13260:186:0;;;;;;;;:::i;:::-;;;;;;;;2282:46;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2282:46:0;;;;;;;;:::i;4004:80::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4004:80:0;;;:::i;11015:410::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11015:410:0;;;;;;;;:::i;511:21::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;511:21:0;;;:::i;9783:535::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9783:535:0;;;;;;;;:::i;1975:26::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1975:26:0;;;:::i;14212:330::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;14212:330:0;;;;;;;;:::i;483:21::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;483:21:0;;;:::i;10477:228::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10477:228:0;;;;;;;;:::i;3739:82::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3739:82:0;;;:::i;12466:140::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12466:140:0;;;:::i;:::-;;;;;;;;12698:367;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;12698:367:0;;;;;;;;:::i;11999:335::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11999:335:0;;;;;;;;:::i;17400:778::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;17400:778:0;;;;;;;;:::i;6084:1627::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6084:1627:0;;;;;;;;:::i;2446:52::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2446:52:0;;;;;;;;:::i;14706:1052::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;14706:1052:0;;;;;;;;:::i;4422:1119::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4422:1119:0;;;;;;;;:::i;1014:176::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1014:176:0;;;;;;;;:::i;830:::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;830:176:0;;;;;;;;:::i;8732:976::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8732:976:0;;;;;;;;:::i;7893:769::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7893:769:0;;;;;;;;:::i;5551:523::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5551:523:0;;;;;;;;:::i;13588:485::-;-1:-1:-1;;;;;13759:21:0;;;;;;:13;:21;;;;;;13702:15;;13759:21;;13737:86;;;;;;-1:-1:-1;;;;;13737:86:0;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13865:27:0;;;;;;:19;:27;;;;;;;;13836:56;;;;;;;;;;;;;;;;;:26;;:56;;13865:27;;13836:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13836:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13903:17;13936:1;:8;13923:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13903:42:0;-1:-1:-1;13963:6:0;13958:85;13979:1;:8;13975:1;:12;13958:85;;;14017:1;14019;14017:4;;;;;;;;;;;;;;;;;;;:14;14009:4;;:1;;14011;;14009:4;;;;;;;;;;;;;;:22;13989:3;;13958:85;;;-1:-1:-1;14062:1:0;-1:-1:-1;;13588:485:0;;;;:::o;11565:239::-;11679:7;11776:11;11788:5;11776:18;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11776:18:0;;11565:239;-1:-1:-1;;11565:239:0:o;18657:900::-;18895:4;19054:16;;;;;19046:50;;;;-1:-1:-1;;;;;19046:50:0;;;;;;;;;-1:-1:-1;;;;;19174:21:0;;;;;;:13;:21;;;;;;;;19152:94;;;;;;-1:-1:-1;;;;;19152:94:0;;;;;;;;;19281:11;;;19259:77;;;;-1:-1:-1;;;;;19259:77:0;;;;;;;;;-1:-1:-1;;;;;19371:10:0;;;;;;;;19349:76;;;;-1:-1:-1;;;;;19349:76:0;;;;;;;;;-1:-1:-1;;;;;19460:19:0;;;;19438:85;;;;-1:-1:-1;;;;;19438:85:0;;;;;;;;;-1:-1:-1;19543:4:0;18657:900;;;;;;;;:::o;18186:463::-;18315:4;18474:16;;;;;18466:50;;;;-1:-1:-1;;;;;18466:50:0;;;;;;;;;-1:-1:-1;;;;;18551:22:0;;;;;;:13;:22;;;;;;;;18529:86;;;;;;-1:-1:-1;;;;;18529:86:0;;;;;;;;;-1:-1:-1;18635:4:0;18186:463;;;;;:::o;15847:712::-;3484:6;;-1:-1:-1;;;3484:6:0;;;;3483:7;3475:16;;;;;;16014:10;16000:25;;;;:13;:25;;;;;;;;15978:89;;;;;;-1:-1:-1;;;;;15978:89:0;;;;;;;;;-1:-1:-1;;;;;16102:20:0;;16112:10;16102:20;16080:84;;;;-1:-1:-1;;;;;16080:84:0;;;;;;;;;-1:-1:-1;;;;;16321:27:0;;;;;;:19;:27;;;;;;;;16292:56;;;;;;;;;;;;;;;;;:26;;:56;;16321:27;;16292:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16292:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16292:56:0;;-1:-1:-1;16364:6:0;;-1:-1:-1;;;16359:115:0;16380:1;:8;16376:1;:12;16359:115;;;16443:19;;;;;;;;-1:-1:-1;16443:19:0;;;;;;;;;-1:-1:-1;;;;;16410:27:0;;;;:19;:27;;;;;;:30;;16438:1;;16410:30;;;;;;;;;;;;;:52;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;16390:3:0;;16359:115;;;-1:-1:-1;;;;;;;16520:21:0;16544:5;16520:21;;;:13;:21;;;;;:29;;-1:-1:-1;;16520:29:0;;;15847:712::o;13073:179::-;-1:-1:-1;;;;;13210:32:0;;;13176:7;13210:32;;;:20;:32;;;;;;;;13073:179::o;13260:186::-;-1:-1:-1;;;;;13405:31:0;;;;;;:21;:31;;;;;;;;;13398:38;;;;;;;;;;;;;;;;;13362:16;;13398:38;;;13405:31;13398:38;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13398:38:0;;;;;;;;;;;;;;;;;;;;;;;13260:186;;;:::o;2282:46::-;;;;;;;;;;;;;;;:::o;4004:80::-;722:6;;-1:-1:-1;;;;;722:6:0;708:10;:20;;707:48;;-1:-1:-1;748:6:0;;-1:-1:-1;;;;;748:6:0;734:10;:20;707:48;685:117;;;;;;-1:-1:-1;;;;;685:117:0;;;;;;;;;3631:6;;-1:-1:-1;;;3631:6:0;;;;3623:15;;;;;;;;4062:6;:14;;-1:-1:-1;;4062:14:0;;;4004:80::o;11015:410::-;722:6;;11153:15;;-1:-1:-1;;;;;722:6:0;708:10;:20;;707:48;;-1:-1:-1;748:6:0;;-1:-1:-1;;;;;748:6:0;734:10;:20;707:48;685:117;;;;;;-1:-1:-1;;;;;685:117:0;;;;;;;;;-1:-1:-1;;;;;11217:27:0;;;;;;:19;:27;;;;;;;;11188:56;;;;;;;;;;;;;;;;;:26;;:56;;11217:27;;11188:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11188:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11255:17;11288:1;:8;11275:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11255:42:0;-1:-1:-1;11315:6:0;11310:85;11331:1;:8;11327:1;:12;11310:85;;;11369:1;11371;11369:4;;;;;;;;;;;;;;;;;;;:14;11361:4;;:1;;11363;;11361:4;;;;;;;;;;;;;;:22;11341:3;;11310:85;;511:21;;;-1:-1:-1;;;;;511:21:0;;:::o;9783:535::-;722:6;;-1:-1:-1;;;;;722:6:0;708:10;:20;;707:48;;-1:-1:-1;748:6:0;;-1:-1:-1;;;;;748:6:0;734:10;:20;707:48;685:117;;;;;;-1:-1:-1;;;;;685:117:0;;;;;;;;;3484:6;;-1:-1:-1;;;3484:6:0;;;;3483:7;3475:16;;;;;;-1:-1:-1;;;;;10080:27:0;;;;;;:19;:27;;;;;;;;10051:56;;;;;;;;;;;;;;;;;:26;;:56;;10080:27;;10051:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10051:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10051:56:0;;-1:-1:-1;10123:6:0;;-1:-1:-1;;;10118:115:0;10139:1;:8;10135:1;:12;10118:115;;;10202:19;;;;;;;;-1:-1:-1;10202:19:0;;;;;;;;;-1:-1:-1;;;;;10169:27:0;;;;:19;:27;;;;;;:30;;10197:1;;10169:30;;;;;;;;;;;;;:52;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;10149:3:0;;10118:115;;1975:26;;;-1:-1:-1;;;1975:26:0;;;;;:::o;14212:330::-;14336:7;14363:14;14380:18;14399:9;;14380:29;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14380:29:0;;14444:21;;;:13;:21;;;;;;14380:29;;-1:-1:-1;14444:21:0;;14422:86;;;;;;-1:-1:-1;;;;;14422:86:0;;;;;;;;;14528:6;14212:330;-1:-1:-1;;;14212:330:0:o;483:21::-;;;-1:-1:-1;;;;;483:21:0;;:::o;10477:228::-;10625:14;722:6;;-1:-1:-1;;;;;722:6:0;708:10;:20;;707:48;;-1:-1:-1;748:6:0;;-1:-1:-1;;;;;748:6:0;734:10;:20;707:48;685:117;;;;;;-1:-1:-1;;;;;685:117:0;;;;;;;;;10666:18;10685:9;;10666:29;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10666:29:0;;-1:-1:-1;10477:228:0;;;;:::o;3739:82::-;722:6;;-1:-1:-1;;;;;722:6:0;708:10;:20;;707:48;;-1:-1:-1;748:6:0;;-1:-1:-1;;;;;748:6:0;734:10;:20;707:48;685:117;;;;;;-1:-1:-1;;;;;685:117:0;;;;;;;;;3484:6;;-1:-1:-1;;;3484:6:0;;;;3483:7;3475:16;;;;;;3809:4;3800:13;;-1:-1:-1;;3800:13:0;-1:-1:-1;;;3800:13:0;;;3739:82::o;12466:140::-;12578:11;:18;12466:140;;:::o;12698:367::-;12807:7;12897:14;12914:11;12926:5;12914:18;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12914:18:0;12967:21;;;:13;:21;;;;;;;;12914:18;;-1:-1:-1;12967:21:0;;12945:86;;;;;;-1:-1:-1;;;;;12945:86:0;;;;;;;;11999:335;12102:4;;;12164:161;12181:11;:18;12179:20;;12164:161;;;12243:6;-1:-1:-1;;;;;12225:24:0;:11;12237:1;12225:14;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12225:14:0;:24;12221:93;;;-1:-1:-1;12294:4:0;;-1:-1:-1;12270:28:0;;-1:-1:-1;12270:28:0;12221:93;12201:3;;12164:161;;;;11999:335;;;;:::o;17400:778::-;17558:4;17717:16;;;;;17709:50;;;;-1:-1:-1;;;;;17709:50:0;;;;;;;;;17915:9;17901:24;;;;:13;:24;;;;;;;;17879:88;;;;;;-1:-1:-1;;;;;17879:88:0;;;;;;;;;17980:25;18008:18;18027:9;18008:29;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18008:29:0;;-1:-1:-1;18093:9:0;18072:30;;18050:94;;;;-1:-1:-1;;;;;18050:94:0;;;;;;;;;-1:-1:-1;18164:4:0;;17400:778;-1:-1:-1;;;17400:778:0:o;6084:1627::-;722:6;;-1:-1:-1;;;;;722:6:0;708:10;:20;;707:48;;-1:-1:-1;748:6:0;;-1:-1:-1;;;;;748:6:0;734:10;:20;707:48;685:117;;;;;;-1:-1:-1;;;;;685:117:0;;;;;;;;;3484:6;;-1:-1:-1;;;3484:6:0;;;;3483:7;3475:16;;;;;;6369:25;6383:10;6369:13;:25::i;:::-;6347:93;;;;;;-1:-1:-1;;;;;6347:93:0;;;;;;;;;-1:-1:-1;;;;;6566:23:0;;;;;;:13;:23;;;;;;;;6544:89;;;;;;-1:-1:-1;;;;;6544:89:0;;;;;;;;;-1:-1:-1;;;;;6768:22:0;;;;;;;;6746:88;;;;-1:-1:-1;;;;;6746:88:0;;;;;;;;;-1:-1:-1;;;;;6869:32:0;;;;;;;:20;:32;;;;;;;;:44;;;;;6847:122;;;;-1:-1:-1;;;;;6847:122:0;;;;;;;;;-1:-1:-1;;;;;7009:32:0;;;6982:24;7009:32;;;:20;:32;;;;;;;7198:62;;7194:393;;-1:-1:-1;;;;;7298:39:0;;;;;;:21;:39;;;;;;;;;7277:60;;;;;;;;;;;;;;;;;:18;;:60;;;7298:39;7277:60;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7277:60:0;;;;;;;;;;;;;;;;-1:-1:-1;7277:60:0;;-1:-1:-1;7357:6:0;;-1:-1:-1;;;;7352:224:0;7373:1;:8;7369:1;:12;7352:224;;;7419:10;-1:-1:-1;;;;;7411:18:0;:1;7413;7411:4;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7411:18:0;;7407:154;;;-1:-1:-1;;;;;7454:39:0;;7499:42;7454:39;;;:21;:39;;;;;:42;;7494:1;;7454:42;;;;;;;;;;;;;;:87;;;;;-1:-1:-1;;;;;7454:87:0;;;;;-1:-1:-1;;;;;7454:87:0;;;;;;7407:154;7383:3;;7352:224;;;;7194:393;;-1:-1:-1;;;;;;7599:32:0;;;;;;;:20;:32;;;;;;;;:43;;;;;;-1:-1:-1;;;;;;7599:43:0;;;;;;;;7653:31;;;:21;:31;;;;;27:10:-1;;7599:43:0;23:18:-1;;45:23;;7653:48:0;;;;;;;;;;;;;;;;;6084:1627::o;2446:52::-;;;;;;;;;;;;;:::o;14706:1052::-;3484:6;;-1:-1:-1;;;3484:6:0;;;;3483:7;3475:16;;;;;;14880:10;14866:25;;;;:13;:25;;;;;;;;14844:89;;;;;;-1:-1:-1;;;;;14844:89:0;;;;;;;;;15001:10;-1:-1:-1;;;;;14968:43:0;:18;14987:9;;14968:29;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14968:29:0;:43;14946:129;;;;-1:-1:-1;;;;;14946:129:0;;;;;;;;;15128:42;15088:18;15107:9;;15088:29;;;;;;;;;;;;;;;;;;;;;;;;:83;;-1:-1:-1;;;;;;15088:83:0;-1:-1:-1;;;;;15088:83:0;;;;;;;;;;;15342:10;-1:-1:-1;15322:31:0;;;:19;:31;;;;;15293:60;;;;;;;;;;;;;;;:26;;15088:29;15322:31;;15293:60;-1:-1:-1;15293:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15293:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15293:60:0;;-1:-1:-1;15369:6:0;;-1:-1:-1;;;15364:198:0;15385:1;:8;15381:1;:12;15364:198;;;15419:39;15432:9;;15419:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;;15443:4:0;;:1;;-1:-1:-1;15445:1:0;;-1:-1:-1;15443:4:0;;;;;;;;;;;;;;;:14;15419:12;:39::i;:::-;15415:136;;;15516:19;;;;;;;;-1:-1:-1;15516:19:0;;;;;;;;;15499:10;15479:31;;:19;:31;;;;;;:34;;15511:1;;15479:34;;;;;;;;;;;;;:56;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;15415:136:0;15395:3;;15364:198;;;;15654:28;15671:10;15654:16;:28::i;:::-;:33;;;15650:99;;;15718:10;15732:5;15704:25;;;:13;:25;;;;;:33;;-1:-1:-1;;15704:33:0;;;15650:99;3502:1;14706:1052;;:::o;4422:1119::-;722:6;;-1:-1:-1;;;;;722:6:0;708:10;:20;;707:48;;-1:-1:-1;748:6:0;;-1:-1:-1;;;;;748:6:0;734:10;:20;707:48;685:117;;;;;;-1:-1:-1;;;;;685:117:0;;;;;;;;;3484:6;;-1:-1:-1;;;3484:6:0;;;;3483:7;3475:16;;;;;;4611:21;4635:18;4654:9;4635:29;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4635:29:0;;;;-1:-1:-1;4681:23:0;;;;4677:657;;-1:-1:-1;;;;;4976:59:0;;;4972:157;;5056:57;5088:13;5103:9;5056:31;:57::i;:::-;-1:-1:-1;;;;;5205:27:0;;;;;;:19;:27;;;;;;;;5239:26;;;;;;;;;;;27:10:-1;;39:1;23:18;;45:23;;;5205:62:0;;;;;;;;;;;23:18:-1;;5239:26:0;;5205:62;;;;;;;;;;;;;;;:::i;:::-;;;;;5314:6;5282:18;5301:9;5282:29;;;;;;;;;;;;;;;;;;;;;:38;;-1:-1:-1;;;;;5282:38:0;;;;-1:-1:-1;;;;;;5282:38:0;;;;;;;;;4677:657;5351:21;5365:6;5351:13;:21::i;:::-;5350:22;5346:139;;;5389:11;27:10:-1;;39:1;23:18;;45:23;;;5389:24:0;;;;-1:-1:-1;;;;;;5389:24:0;-1:-1:-1;;;;;5389:24:0;;;;;;;;-1:-1:-1;5428:27:0;;;:19;5389:24;5428:27;;;;5458:15;5428:45;;5346:139;-1:-1:-1;;;;;;5497:21:0;;;;;;;;:13;:21;;;;;:34;;-1:-1:-1;;5497:34:0;;;;;;;;;;;-1:-1:-1;4422:1119:0:o;1014:176::-;722:6;;-1:-1:-1;;;;;722:6:0;708:10;:20;;707:48;;-1:-1:-1;748:6:0;;-1:-1:-1;;;;;748:6:0;734:10;:20;707:48;685:117;;;;;;-1:-1:-1;;;;;685:117:0;;;;;;;;;-1:-1:-1;;;;;1115:22:0;;;1111:72;;1154:6;:17;;-1:-1:-1;;;;;;1154:17:0;-1:-1:-1;;;;;1154:17:0;;;;;1111:72;1014:176;:::o;830:::-;722:6;;-1:-1:-1;;;;;722:6:0;708:10;:20;;707:48;;-1:-1:-1;748:6:0;;-1:-1:-1;;;;;748:6:0;734:10;:20;707:48;685:117;;;;;;-1:-1:-1;;;;;685:117:0;;;;;;;;;-1:-1:-1;;;;;931:22:0;;;927:72;;970:6;:17;;-1:-1:-1;;;;;970:17:0;;-1:-1:-1;;;;;;970:17:0;;;;;;830:176;:::o;8732:976::-;722:6;;-1:-1:-1;;;;;722:6:0;708:10;:20;;707:48;;-1:-1:-1;748:6:0;;-1:-1:-1;;;;;748:6:0;734:10;:20;707:48;685:117;;;;;;-1:-1:-1;;;;;685:117:0;;;;;;;;;3484:6;;-1:-1:-1;;;3484:6:0;;;;3483:7;3475:16;;;;;;8970:6;-1:-1:-1;;;;;8937:39:0;:18;8956:9;8937:29;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8937:29:0;:39;8915:126;;;;-1:-1:-1;;;;;8915:126:0;;;;;;;;;9094:42;9054:18;9073:9;9054:29;;;;;;;;;;;;;;;;;;;;;;;:83;;-1:-1:-1;;;;;;9054:83:0;-1:-1:-1;;;;;9054:83:0;;;;;;9288:27;;;-1:-1:-1;9288:27:0;;;:19;:27;;;;;9259:56;;;;;;;;;;;;;;;:26;;9054:29;9288:27;;9259:56;-1:-1:-1;9259:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9259:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9259:56:0;;-1:-1:-1;9331:6:0;;-1:-1:-1;;;9326:194:0;9347:1;:8;9343:1;:12;9326:194;;;9381:39;9394:9;9405:1;9407;9405:4;;;;;;;;;9381:39;9377:132;;;9474:19;;;;;;;;-1:-1:-1;9474:19:0;;;;;;;;;-1:-1:-1;;;;;9441:27:0;;;;:19;:27;;;;;;:30;;9469:1;;9441:30;;;;;;;;;;;;;:52;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;9377:132:0;9357:3;;9326:194;;;;9612:24;9629:6;9612:16;:24::i;:::-;:29;;;9608:91;;;-1:-1:-1;;;;;;;9658:21:0;9682:5;9658:21;;;:13;:21;;;;;:29;;-1:-1:-1;;9658:29:0;;;8732:976::o;7893:769::-;722:6;;-1:-1:-1;;;;;722:6:0;708:10;:20;;707:48;;-1:-1:-1;748:6:0;;-1:-1:-1;;;;;748:6:0;734:10;:20;707:48;685:117;;;;;;-1:-1:-1;;;;;685:117:0;;;;;;;;;3484:6;;-1:-1:-1;;;3484:6:0;;;;3483:7;3475:16;;;;;;-1:-1:-1;;;;;8211:21:0;;;;;;:13;:21;;;;;;;;8197:35;;;;;;;8175:110;;;;-1:-1:-1;;;;;8175:110:0;;;;;;;;;8446:4;8432:18;;;;8428:178;;;8520:1;8493:24;8510:6;8493:16;:24::i;:::-;:28;;;8467:127;;;;-1:-1:-1;;;;;8467:127:0;;;;;;;;;-1:-1:-1;;;;;8618:21:0;;;;;;;;:13;:21;;;;;:34;;-1:-1:-1;;8618:34:0;;;;;;;;;;7893:769::o;5551:523::-;722:6;;-1:-1:-1;;;;;722:6:0;708:10;:20;;707:48;;-1:-1:-1;748:6:0;;-1:-1:-1;;;;;748:6:0;734:10;:20;707:48;685:117;;;;;;-1:-1:-1;;;;;685:117:0;;;;;;;;;3484:6;;-1:-1:-1;;;3484:6:0;;;;3483:7;3475:16;;;;;;-1:-1:-1;;;;;5892:23:0;;;;;;:13;:23;;;;;;;;5870:89;;;;;;-1:-1:-1;;;;;5870:89:0;;;;;;;;;5972:42;5984:6;5992:9;6003:10;5972:11;:42::i;:::-;6027:37;6047:6;6055:8;6027:19;:37::i;:::-;5551:523;;;;:::o;19596:239::-;19727:4;19821:1;19803:21;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;19803:21:0;;;19793:32;;;;;;19785:1;19767:21;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;19767:21:0;;;19757:32;;;;;;:68;19749:78;;19596:239;;;;:::o;19845:532::-;-1:-1:-1;;;;;20008:27:0;;19953:6;20008:27;;;:19;:27;;;;;;;;19979:56;;;;;;;;;;;;;;;;;:26;;19953:6;;19979:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19979:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19979:56:0;;-1:-1:-1;20046:14:0;;-1:-1:-1;20046:14:0;;-1:-1:-1;;20075:266:0;20096:1;:8;20092:1;:12;20075:266;;;20252:32;;;;;;;;;;;;;20269:1;20271;20269:4;;;;;;;;;20252:32;20251:33;20247:83;;;20305:9;;;;;20247:83;20106:3;;20075:266;;1865:18842;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1865:18842:0;;;-1:-1:-1;1865:18842:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;5:118:-1;;72:46;110:6;97:20;72:46;;130:112;;194:43;229:6;216:20;194:43;;264:336;;;372:4;360:17;;356:27;-1:-1;346:2;;397:1;394;387:12;346:2;-1:-1;417:20;;457:18;446:30;;443:2;;;489:1;486;479:12;443:2;523:4;515:6;511:17;499:29;;573:3;566;558:6;554:16;544:8;540:31;537:40;534:2;;;590:1;587;580:12;534:2;339:261;;;;;;609:442;;704:4;692:17;;688:27;-1:-1;678:2;;729:1;726;719:12;678:2;766:6;753:20;788:65;803:49;845:6;803:49;;;788:65;;;779:74;;873:6;866:5;859:21;909:4;901:6;897:17;942:4;935:5;931:16;977:3;968:6;963:3;959:16;956:25;953:2;;;994:1;991;984:12;953:2;1004:41;1038:6;1033:3;1028;1004:41;;;671:380;;;;;;;;1059:118;;1126:46;1164:6;1151:20;1126:46;;1184:116;;1250:45;1287:6;1274:20;1250:45;;1307:241;;1411:2;1399:9;1390:7;1386:23;1382:32;1379:2;;;1427:1;1424;1417:12;1379:2;1462:1;1479:53;1524:7;1504:9;1479:53;;;1469:63;1373:175;-1:-1;;;;1373:175;1555:366;;;1676:2;1664:9;1655:7;1651:23;1647:32;1644:2;;;1692:1;1689;1682:12;1644:2;1727:1;1744:53;1789:7;1769:9;1744:53;;;1734:63;;1706:97;1834:2;1852:53;1897:7;1888:6;1877:9;1873:22;1852:53;;;1842:63;;1813:98;1638:283;;;;;;1928:360;;;2046:2;2034:9;2025:7;2021:23;2017:32;2014:2;;;2062:1;2059;2052:12;2014:2;2097:1;2114:53;2159:7;2139:9;2114:53;;;2104:63;;2076:97;2204:2;2222:50;2264:7;2255:6;2244:9;2240:22;2222:50;;2295:472;;;2426:2;2414:9;2405:7;2401:23;2397:32;2394:2;;;2442:1;2439;2432:12;2394:2;2477:1;2494:53;2539:7;2519:9;2494:53;;;2484:63;;2456:97;2612:2;2601:9;2597:18;2584:32;2636:18;2628:6;2625:30;2622:2;;;2668:1;2665;2658:12;2622:2;2688:63;2743:7;2734:6;2723:9;2719:22;2688:63;;2774:591;;;;2919:2;2907:9;2898:7;2894:23;2890:32;2887:2;;;2935:1;2932;2925:12;2887:2;2970:1;2987:53;3032:7;3012:9;2987:53;;;2977:63;;2949:97;3105:2;3094:9;3090:18;3077:32;3129:18;3121:6;3118:30;3115:2;;;3161:1;3158;3151:12;3115:2;3181:63;3236:7;3227:6;3216:9;3212:22;3181:63;;;3171:73;;3056:194;3281:2;3299:50;3341:7;3332:6;3321:9;3317:22;3299:50;;;3289:60;;3260:95;2881:484;;;;;;3372:717;;;;;3534:3;3522:9;3513:7;3509:23;3505:33;3502:2;;;3551:1;3548;3541:12;3502:2;3586:1;3603:53;3648:7;3628:9;3603:53;;;3593:63;;3565:97;3721:2;3710:9;3706:18;3693:32;3745:18;3737:6;3734:30;3731:2;;;3777:1;3774;3767:12;3731:2;3797:63;3852:7;3843:6;3832:9;3828:22;3797:63;;;3787:73;;3672:194;3897:2;3915:50;3957:7;3948:6;3937:9;3933:22;3915:50;;;3905:60;;3876:95;4002:2;4020:53;4065:7;4056:6;4045:9;4041:22;4020:53;;;4010:63;;3981:98;3496:593;;;;;;;;4096:367;;;4220:2;4208:9;4199:7;4195:23;4191:32;4188:2;;;4236:1;4233;4226:12;4188:2;4271:31;;4322:18;4311:30;;4308:2;;;4354:1;4351;4344:12;4308:2;4382:65;4439:7;4430:6;4419:9;4415:22;4382:65;;;4372:75;;;;4250:203;4182:281;;;;;;4470:241;;4574:2;4562:9;4553:7;4549:23;4545:32;4542:2;;;4590:1;4587;4580:12;4542:2;4625:1;4642:53;4687:7;4667:9;4642:53;;4718:364;;;4838:2;4826:9;4817:7;4813:23;4809:32;4806:2;;;4854:1;4851;4844:12;4806:2;4889:1;4906:52;4950:7;4930:9;4906:52;;5089:867;;;;;;;5277:3;5265:9;5256:7;5252:23;5248:33;5245:2;;;5294:1;5291;5284:12;5245:2;5329:1;5346:52;5390:7;5370:9;5346:52;;;5336:62;;5308:96;5435:2;5453:53;5498:7;5489:6;5478:9;5474:22;5453:53;;;5443:63;;5414:98;5543:2;5561:53;5606:7;5597:6;5586:9;5582:22;5561:53;;;5551:63;;5522:98;5651:2;5669:53;5714:7;5705:6;5694:9;5690:22;5669:53;;;5659:63;;5630:98;5759:3;5778:53;5823:7;5814:6;5803:9;5799:22;5778:53;;;5768:63;;5738:99;5868:3;5887:53;5932:7;5923:6;5912:9;5908:22;5887:53;;;5877:63;;5847:99;5239:717;;;;;;;;;5963:470;;;6093:2;6081:9;6072:7;6068:23;6064:32;6061:2;;;6109:1;6106;6099:12;6061:2;6144:1;6161:52;6205:7;6185:9;6161:52;;6441:171;;6527:45;6568:3;6561:5;6527:45;;;-1:-1;;6601:4;6592:14;;6520:92;6621:179;;6733:61;6790:3;6783:5;6733:61;;6808:110;6881:31;6906:5;6881:31;;;6876:3;6869:44;6863:55;;;7083:621;;7228:54;7276:5;7228:54;;;7295:86;7374:6;7369:3;7295:86;;;7288:93;;7401:56;7451:5;7401:56;;;7478:1;7463:219;7488:6;7485:1;7482:13;7463:219;;;7535:63;7594:3;7585:6;7579:13;7535:63;;;7528:70;;7615:60;7668:6;7615:60;;;7605:70;-1:-1;7510:1;7503:9;7463:219;;;-1:-1;7695:3;;7207:497;-1:-1;;;;7207:497;7741:827;;7898:60;7952:5;7898:60;;;7971:92;8056:6;8051:3;7971:92;;;7964:99;;8086:3;8128:4;8120:6;8116:17;8111:3;8107:27;8154:62;8210:5;8154:62;;;8237:1;8222:307;8247:6;8244:1;8241:13;8222:307;;;8309:9;8303:4;8299:20;8294:3;8287:33;8335:76;8406:4;8397:6;8391:13;8335:76;;;8327:84;;8428:66;8487:6;8428:66;;;8517:4;8508:14;;;;;8418:76;-1:-1;8269:1;8262:9;8222:307;;;-1:-1;8542:4;;7877:691;-1:-1;;;;;;7877:691;8576:111;8653:28;8675:5;8653:28;;8717:303;;8850:89;8932:6;8927:3;8850:89;;;8843:96;;8944:43;8980:6;8975:3;8968:5;8944:43;;;-1:-1;;8999:16;;8837:183;9027:360;;9157:39;9190:5;9157:39;;;9208:89;9290:6;9285:3;9208:89;;;9201:96;;9302:52;9347:6;9342:3;9335:4;9328:5;9324:16;9302:52;;;9366:16;;;;;9137:250;-1:-1;;9137:250;9394:319;;9492:35;9521:5;9492:35;;;9539:61;9593:6;9588:3;9539:61;;;9532:68;;9605:52;9650:6;9645:3;9638:4;9631:5;9627:16;9605:52;;;9678:29;9700:6;9678:29;;;9669:39;;;;9472:241;-1:-1;;;9472:241;9721:364;;9881:67;9945:2;9940:3;9881:67;;;9981:66;9961:87;;10076:2;10067:12;;9867:218;-1:-1;;9867:218;10094:465;;10254:67;10318:2;10313:3;10254:67;;;10354:66;10334:87;;10455:66;10450:2;10441:12;;10434:88;10550:2;10541:12;;10240:319;-1:-1;;10240:319;10568:364;;10728:67;10792:2;10787:3;10728:67;;;10828:66;10808:87;;10923:2;10914:12;;10714:218;-1:-1;;10714:218;10941:364;;11101:67;11165:2;11160:3;11101:67;;;11201:66;11181:87;;11296:2;11287:12;;11087:218;-1:-1;;11087:218;11314:465;;11474:67;11538:2;11533:3;11474:67;;;11574:66;11554:87;;11675:66;11670:2;11661:12;;11654:88;11770:2;11761:12;;11460:319;-1:-1;;11460:319;11788:364;;11948:67;12012:2;12007:3;11948:67;;;12048:66;12028:87;;12143:2;12134:12;;11934:218;-1:-1;;11934:218;12161:364;;12321:67;12385:2;12380:3;12321:67;;;12421:66;12401:87;;12516:2;12507:12;;12307:218;-1:-1;;12307:218;12534:364;;12694:67;12758:2;12753:3;12694:67;;;12794:66;12774:87;;12889:2;12880:12;;12680:218;-1:-1;;12680:218;12907:364;;13067:67;13131:2;13126:3;13067:67;;;13167:66;13147:87;;13262:2;13253:12;;13053:218;-1:-1;;13053:218;13280:364;;13440:67;13504:2;13499:3;13440:67;;;13540:66;13520:87;;13635:2;13626:12;;13426:218;-1:-1;;13426:218;13653:465;;13813:67;13877:2;13872:3;13813:67;;;13913:66;13893:87;;14014:66;14009:2;14000:12;;13993:88;14109:2;14100:12;;13799:319;-1:-1;;13799:319;14127:364;;14287:67;14351:2;14346:3;14287:67;;;14387:66;14367:87;;14482:2;14473:12;;14273:218;-1:-1;;14273:218;14500:364;;14660:67;14724:2;14719:3;14660:67;;;14760:66;14740:87;;14855:2;14846:12;;14646:218;-1:-1;;14646:218;14873:364;;15033:67;15097:2;15092:3;15033:67;;;15133:66;15113:87;;15228:2;15219:12;;15019:218;-1:-1;;15019:218;15246:364;;15406:67;15470:2;15465:3;15406:67;;;15506:66;15486:87;;15601:2;15592:12;;15392:218;-1:-1;;15392:218;15618:120;15701:31;15726:5;15701:31;;15745:286;;15901:105;16002:3;15993:6;15985;15901:105;;16038:266;;16184:95;16275:3;16266:6;16184:95;;16311:213;16429:2;16414:18;;16443:71;16418:9;16487:6;16443:71;;16531:361;16699:2;16713:47;;;16684:18;;16774:108;16684:18;16868:6;16774:108;;16899:385;17079:2;17093:47;;;17064:18;;17154:120;17064:18;17260:6;17154:120;;17291:201;17403:2;17388:18;;17417:65;17392:9;17455:6;17417:65;;17499:407;17690:2;17704:47;;;17675:18;;17765:131;17675:18;17765:131;;17913:407;18104:2;18118:47;;;18089:18;;18179:131;18089:18;18179:131;;18327:407;18518:2;18532:47;;;18503:18;;18593:131;18503:18;18593:131;;18741:407;18932:2;18946:47;;;18917:18;;19007:131;18917:18;19007:131;;19155:407;19346:2;19360:47;;;19331:18;;19421:131;19331:18;19421:131;;19569:407;19760:2;19774:47;;;19745:18;;19835:131;19745:18;19835:131;;19983:407;20174:2;20188:47;;;20159:18;;20249:131;20159:18;20249:131;;20397:407;20588:2;20602:47;;;20573:18;;20663:131;20573:18;20663:131;;20811:407;21002:2;21016:47;;;20987:18;;21077:131;20987:18;21077:131;;21225:407;21416:2;21430:47;;;21401:18;;21491:131;21401:18;21491:131;;21639:407;21830:2;21844:47;;;21815:18;;21905:131;21815:18;21905:131;;22053:407;22244:2;22258:47;;;22229:18;;22319:131;22229:18;22319:131;;22467:407;22658:2;22672:47;;;22643:18;;22733:131;22643:18;22733:131;;22881:407;23072:2;23086:47;;;23057:18;;23147:131;23057:18;23147:131;;23295:407;23486:2;23500:47;;;23471:18;;23561:131;23471:18;23561:131;;23709:213;23827:2;23812:18;;23841:71;23816:9;23885:6;23841:71;;23929:256;23991:2;23985:9;24017:17;;;24092:18;24077:34;;24113:22;;;24074:62;24071:2;;;24149:1;24146;24139:12;24071:2;24165;24158:22;23969:216;;-1:-1;23969:216;24192:259;;24336:18;24328:6;24325:30;24322:2;;;24368:1;24365;24358:12;24322:2;-1:-1;24441:4;24412;24389:17;;;;-1:-1;;24385:33;24431:15;;24259:192;24460:121;24569:4;24557:17;;24538:43;24728:107;24818:12;;24802:33;25425:178;25543:19;;;25592:4;25583:14;;25536:67;26292:105;;26361:31;26386:5;26361:31;;26404:92;26477:13;26470:21;;26453:43;26503:128;-1:-1;;;;;26572:54;;26555:76;27156:95;27235:10;27224:22;;27207:44;27259:145;27340:6;27335:3;27330;27317:30;-1:-1;27396:1;27378:16;;27371:27;27310:94;27413:268;27478:1;27485:101;27499:6;27496:1;27493:13;27485:101;;;27566:11;;;27560:18;27547:11;;;27540:39;27521:2;27514:10;27485:101;;;27601:6;27598:1;27595:13;27592:2;;;-1:-1;;27666:1;27648:16;;27641:27;27462:219;27689:97;27777:2;27757:14;-1:-1;;27753:28;;27737:49

Swarm Source

bzzr://a529162f18f5d7ff18e455c541754a61772039075f32476783e37ea26fcb9a88

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.