APE Price: $0.71 (+4.74%)

Contract

0x60f63D170f486F15F01D2A095197D34063E075De

Overview

APE Balance

Apechain LogoApechain LogoApechain Logo0 APE

APE Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Create Campaign40292422024-11-11 0:53:23102 days ago1731286403IN
0x60f63D17...063E075De
0 APE0.0373599725.42069

Latest 1 internal transaction

Parent Transaction Hash Block From To
40292422024-11-11 0:53:23102 days ago1731286403
0x60f63D17...063E075De
 Contract Creation0 APE

Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CrowdfundingFactory

Compiler Version
v0.8.28+commit.7893614a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at apescan.io on 2024-11-11
*/

// File: contracts/Crowdfunding.sol


pragma solidity ^0.8.0;

contract Crowdfunding {
    string public name;
    string public description;
    uint256 public goal;
    uint256 public deadline;
    address public owner;
    address public feeRecipient; // Address where platform fees are sent
    bool public paused;

    uint256 public constant FEE_PERCENTAGE = 169; // Represents 1.69%, in basis points (1.69 * 100)

    enum CampaignState { Active, Successful, Failed }
    CampaignState public state;

    struct Tier {
        string name;
        uint256 amount;
        uint256 backers;
    }

    struct Backer {
        uint256 totalContribution;
        mapping(uint256 => bool) fundedTiers;
    }

    Tier[] public tiers;
    mapping(address => Backer) public backers;

    modifier onlyOwner() {
        require(msg.sender == owner, "Not the owner");
        _;
    }

    modifier campaignOpen() {
        require(state == CampaignState.Active, "Campaign is not active.");
        _;
    }

    modifier notPaused() {
        require(!paused, "Contract is paused.");
        _;
    }

    /**
     * @notice Initializes a new crowdfunding campaign.
     * @param _owner The creator of the campaign.
     * @param _feeRecipient The address where platform fees are sent.
     * @param _name The name of the campaign.
     * @param _description The description of the campaign.
     * @param _goal The fundraising goal in wei.
     * @param _durationInDays Duration of the campaign in days.
     */
    constructor(
        address _owner,
        address _feeRecipient,
        string memory _name,
        string memory _description,
        uint256 _goal,
        uint256 _durationInDays
    ) {
        name = _name;
        description = _description;
        goal = _goal;
        deadline = block.timestamp + (_durationInDays * 1 days);
        owner = _owner;
        feeRecipient = _feeRecipient;
        state = CampaignState.Active;
    }

    /**
     * @notice Checks and updates the campaign state based on goal and deadline.
     */
    function checkAndUpdateCampaignState() internal {
        if (state == CampaignState.Active) {
            if (block.timestamp >= deadline) {
                state = address(this).balance >= goal ? CampaignState.Successful : CampaignState.Failed;            
            } else {
                state = address(this).balance >= goal ? CampaignState.Successful : CampaignState.Active;
            }
        }
    }

    /**
     * @notice Allows the campaign owner to withdraw funds if the campaign is successful.
     */
    function withdraw() public onlyOwner {
        checkAndUpdateCampaignState();
        require(state == CampaignState.Successful, "Campaign not successful.");

        uint256 balance = address(this).balance;
        require(balance > 0, "No balance to withdraw");

        uint256 fee = (balance * FEE_PERCENTAGE) / 10000; // Calculate 1.69% fee
        uint256 finalAmount = balance - fee;

        payable(feeRecipient).transfer(fee); // Transfer fee to feeRecipient
        payable(owner).transfer(finalAmount); // Transfer remaining balance to campaign owner
    }

    /**
     * @notice Allows contributors to receive a refund if the campaign failed.
     */
    function refund() public {
        checkAndUpdateCampaignState();
        require(state == CampaignState.Failed, "Refunds not available.");
        
        uint256 amount = backers[msg.sender].totalContribution;
        require(amount > 0, "No contribution to refund");

        backers[msg.sender].totalContribution = 0;
        payable(msg.sender).transfer(amount);
    }

    /**
     * @notice Allows users to contribute to a specific tier.
     * @param _tierIndex The index of the tier to contribute to.
     */
    function fund(uint256 _tierIndex) public payable campaignOpen notPaused {
        require(_tierIndex < tiers.length, "Invalid tier.");
        require(msg.value == tiers[_tierIndex].amount, "Incorrect amount.");

        tiers[_tierIndex].backers++;
        backers[msg.sender].totalContribution += msg.value;
        backers[msg.sender].fundedTiers[_tierIndex] = true;

        checkAndUpdateCampaignState();
    }

    /**
     * @notice Adds a new funding tier.
     * @param _name The name of the tier.
     * @param _amount The amount required for the tier.
     */
    function addTier(
        string memory _name,
        uint256 _amount
    ) public onlyOwner {
        require(_amount > 0, "Amount must be greater than 0.");
        tiers.push(Tier(_name, _amount, 0));
    }

    /**
     * @notice Removes a specific tier by index.
     * @param _index The index of the tier to remove.
     */
    function removeTier(uint256 _index) public onlyOwner {
        require(_index < tiers.length, "Tier does not exist.");
        tiers[_index] = tiers[tiers.length - 1];
        tiers.pop();
    }

    /**
     * @notice Retrieves the current campaign balance.
     * @return The current balance in wei.
     */
    function getContractBalance() public view returns (uint256) {
        return address(this).balance;
    }

    /**
     * @notice Checks if a backer has funded a specific tier.
     * @param _backer The address of the backer.
     * @param _tierIndex The index of the tier.
     * @return True if the backer funded the tier, otherwise false.
     */
    function hasFundedTier(address _backer, uint256 _tierIndex) public view returns (bool) {
        return backers[_backer].fundedTiers[_tierIndex];
    }

    /**
     * @notice Retrieves all funding tiers.
     * @return List of all tiers.
     */
    function getTiers() public view returns (Tier[] memory) {
        return tiers;
    }

    /**
     * @notice Toggles the paused state of the contract.
     */
    function togglePause() public onlyOwner {
        paused = !paused;
    }

    /**
     * @notice Retrieves the current campaign status.
     * @return The current campaign state.
     */
    function getCampaignStatus() public view returns (CampaignState) {
        if (state == CampaignState.Active && block.timestamp > deadline) {
            return address(this).balance >= goal ? CampaignState.Successful : CampaignState.Failed;
        }
        return state;
    }

    /**
     * @notice Extends the campaign deadline.
     * @param _daysToAdd Number of days to extend.
     */
    function extendDeadline(uint256 _daysToAdd) public onlyOwner campaignOpen {
        deadline += _daysToAdd * 1 days;
    }
}

// File: contracts/CrowdfundingFactory.sol


/******************************************
 *  Amendeded by A13Z Engineering         *
 *         Author: A13Z.io                *
 ******************************************/
pragma solidity ^0.8.0;


contract CrowdfundingFactory {
    address public owner;
    bool public paused;

    struct Campaign {
        address campaignAddress;
        address owner;
        string name;
        uint256 creationTime;
    }

    Campaign[] public campaigns;
    mapping(address => Campaign[]) public userCampaigns;

    modifier onlyOwner() {
        require(msg.sender == owner, "Not owner.");
        _;
    }

    modifier notPaused() {
        require(!paused, "Factory is paused");
        _;
    }

    constructor() {
        owner = msg.sender;
    }

    /**
     * @notice Creates a new crowdfunding campaign.
     * @param _name The name of the campaign.
     * @param _description A brief description of the campaign.
     * @param _goal The fundraising goal in wei.
     * @param _durationInDays Campaign duration in days.
     */
    function createCampaign(
        string memory _name,
        string memory _description,
        uint256 _goal,
        uint256 _durationInDays
    ) external notPaused {
        Crowdfunding newCampaign = new Crowdfunding(
            msg.sender,
            address(this), // Factory will collect fees
            _name,
            _description,
            _goal,
            _durationInDays
        );
        address campaignAddress = address(newCampaign);

        Campaign memory campaign = Campaign({
            campaignAddress: campaignAddress,
            owner: msg.sender,
            name: _name,
            creationTime: block.timestamp
        });

        campaigns.push(campaign);
        userCampaigns[msg.sender].push(campaign);
    }

    /**
     * @notice Withdraws accumulated fees to the owner.
     */
    function withdrawFees() external onlyOwner {
        uint256 balance = address(this).balance;
        require(balance > 0, "No fees to withdraw");

        payable(owner).transfer(balance);
    }

    /**
     * @notice Returns campaigns created by a specific user.
     * @param _user The address of the user.
     * @return List of campaigns created by the user.
     */
    function getUserCampaigns(address _user) external view returns (Campaign[] memory) {
        return userCampaigns[_user];
    }

    /**
     * @notice Toggles the paused state of the factory.
     */
    function togglePause() external onlyOwner {
        paused = !paused;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"campaigns","outputs":[{"internalType":"address","name":"campaignAddress","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"creationTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_description","type":"string"},{"internalType":"uint256","name":"_goal","type":"uint256"},{"internalType":"uint256","name":"_durationInDays","type":"uint256"}],"name":"createCampaign","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getUserCampaigns","outputs":[{"components":[{"internalType":"address","name":"campaignAddress","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"creationTime","type":"uint256"}],"internalType":"struct CrowdfundingFactory.Campaign[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"togglePause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"userCampaigns","outputs":[{"internalType":"address","name":"campaignAddress","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"creationTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawFees","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052348015600e575f5ffd5b505f80546001600160a01b0319163317905561234a8061002d5f395ff3fe608060405234801561000f575f5ffd5b5060043610610085575f3560e01c80638da5cb5b116100585780638da5cb5b146100f5578063a1e5084c1461011f578063a318f2691461013f578063c4ae316814610152575f5ffd5b8063141961bc1461008957806319ac74bd146100b5578063476343ee146100c85780635c975abb146100d2575b5f5ffd5b61009c6100973660046106e2565b61015a565b6040516100ac9493929190610727565b60405180910390f35b61009c6100c336600461077e565b610228565b6100d0610279565b005b5f546100e590600160a01b900460ff1681565b60405190151581526020016100ac565b5f54610107906001600160a01b031681565b6040516001600160a01b0390911681526020016100ac565b61013261012d3660046107a6565b610342565b6040516100ac91906107c6565b6100d061014d366004610904565b610472565b6100d061066f565b60018181548110610169575f80fd5b5f9182526020909120600490910201805460018201546002830180546001600160a01b0393841695509290911692916101a190610978565b80601f01602080910402602001604051908101604052809291908181526020018280546101cd90610978565b80156102185780601f106101ef57610100808354040283529160200191610218565b820191905f5260205f20905b8154815290600101906020018083116101fb57829003601f168201915b5050505050908060030154905084565b6002602052815f5260405f208181548110610241575f80fd5b5f9182526020909120600490910201805460018201546002830180546001600160a01b0393841696509190921693506101a190610978565b5f546001600160a01b031633146102c45760405162461bcd60e51b815260206004820152600a6024820152692737ba1037bbb732b91760b11b60448201526064015b60405180910390fd5b47806103085760405162461bcd60e51b81526020600482015260136024820152724e6f206665657320746f20776974686472617760681b60448201526064016102bb565b5f80546040516001600160a01b039091169183156108fc02918491818181858888f1935050505015801561033e573d5f5f3e3d5ffd5b5050565b6001600160a01b0381165f908152600260209081526040808320805482518185028101850190935280835260609492939192909184015b82821015610467575f848152602090819020604080516080810182526004860290920180546001600160a01b03908116845260018201541693830193909352600283018054929392918401916103ce90610978565b80601f01602080910402602001604051908101604052809291908181526020018280546103fa90610978565b80156104455780601f1061041c57610100808354040283529160200191610445565b820191905f5260205f20905b81548152906001019060200180831161042857829003601f168201915b5050505050815260200160038201548152505081526020019060010190610379565b505050509050919050565b5f54600160a01b900460ff16156104bf5760405162461bcd60e51b8152602060048201526011602482015270119858dd1bdc9e481a5cc81c185d5cd959607a1b60448201526064016102bb565b5f3330868686866040516104d2906106d5565b6104e1969594939291906109b0565b604051809103905ff0801580156104fa573d5f5f3e3d5ffd5b50604080516080810182526001600160a01b03808416825233602083019081529282018981524260608401526001805480820182555f91909152835160049091027fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6810180549285166001600160a01b031993841617815595517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf782018054919095169216919091179092555193945084939192839290917fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf801906105df9082610a4f565b5060609190910151600390910155335f90815260026020818152604080842080546001808201835591865294839020865160049096020180546001600160a01b03199081166001600160a01b0397881617825593870151918101805490941691909516179091558301518392918201906106599082610a4f565b5060608201518160030155505050505050505050565b5f546001600160a01b031633146106b55760405162461bcd60e51b815260206004820152600a6024820152692737ba1037bbb732b91760b11b60448201526064016102bb565b5f805460ff60a01b198116600160a01b9182900460ff1615909102179055565b61180a80610b0b83390190565b5f602082840312156106f2575f5ffd5b5035919050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b6001600160a01b038581168252841660208201526080604082018190525f90610752908301856106f9565b905082606083015295945050505050565b80356001600160a01b0381168114610779575f5ffd5b919050565b5f5f6040838503121561078f575f5ffd5b61079883610763565b946020939093013593505050565b5f602082840312156107b6575f5ffd5b6107bf82610763565b9392505050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561085957868503603f19018452815180516001600160a01b03908116875260208083015190911690870152604080820151608091880182905290610836908801826106f9565b6060928301519790920196909652945060209384019391909101906001016107ec565b50929695505050505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112610888575f5ffd5b813567ffffffffffffffff8111156108a2576108a2610865565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156108d1576108d1610865565b6040528181528382016020018510156108e8575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f5f60808587031215610917575f5ffd5b843567ffffffffffffffff81111561092d575f5ffd5b61093987828801610879565b945050602085013567ffffffffffffffff811115610955575f5ffd5b61096187828801610879565b949794965050505060408301359260600135919050565b600181811c9082168061098c57607f821691505b6020821081036109aa57634e487b7160e01b5f52602260045260245ffd5b50919050565b6001600160a01b0387811682528616602082015260c0604082018190525f906109db908301876106f9565b82810360608401526109ed81876106f9565b6080840195909552505060a00152949350505050565b601f821115610a4a57805f5260205f20601f840160051c81016020851015610a285750805b601f840160051c820191505b81811015610a47575f8155600101610a34565b50505b505050565b815167ffffffffffffffff811115610a6957610a69610865565b610a7d81610a778454610978565b84610a03565b6020601f821160018114610aaf575f8315610a985750848201515b5f19600385901b1c1916600184901b178455610a47565b5f84815260208120601f198516915b82811015610ade5787850151825560209485019460019092019101610abe565b5084821015610afb57868401515f19600387901b60f8161c191681555b50505050600190811b0190555056fe608060405234801561000f575f5ffd5b5060405161180a38038061180a83398101604081905261002e91610159565b5f6100398582610276565b5060016100468482610276565b5060028290556100598162015180610344565b6100639042610361565b6003555050600480546001600160a01b0319166001600160a01b03958616179055505060058054600161ff0160a01b03191691909216179055610374565b80516001600160a01b03811681146100b7575f5ffd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126100df575f5ffd5b81516001600160401b038111156100f8576100f86100bc565b604051601f8201601f19908116603f011681016001600160401b0381118282101715610126576101266100bc565b60405281815283820160200185101561013d575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f5f5f5f5f5f60c0878903121561016e575f5ffd5b610177876100a1565b9550610185602088016100a1565b60408801519095506001600160401b038111156101a0575f5ffd5b6101ac89828a016100d0565b606089015190955090506001600160401b038111156101c9575f5ffd5b6101d589828a016100d0565b608089015160a090990151979a9699509497949694959350505050565b600181811c9082168061020657607f821691505b60208210810361022457634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561027157805f5260205f20601f840160051c8101602085101561024f5750805b601f840160051c820191505b8181101561026e575f815560010161025b565b50505b505050565b81516001600160401b0381111561028f5761028f6100bc565b6102a38161029d84546101f2565b8461022a565b6020601f8211600181146102d5575f83156102be5750848201515b5f19600385901b1c1916600184901b17845561026e565b5f84815260208120601f198516915b8281101561030457878501518255602094850194600190920191016102e4565b508482101561032157868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761035b5761035b610330565b92915050565b8082018082111561035b5761035b610330565b611489806103815f395ff3fe608060405260043610610130575f3560e01c80636f9fb98a116100a85780638ece7b911161006d5780638ece7b9114610328578063b85dfb8014610347578063c19d93fb14610372578063c4ae316814610392578063ca1d209d146103a6578063de170570146103b9575f5ffd5b80636f9fb98a146102a55780637284e416146102b75780637497211b146102cb5780637adba527146102ea5780638da5cb5b14610309575f5ffd5b8063389b7533116100f9578063389b7533146101e05780633ccfd60b146102015780634019388314610215578063469048401461022a578063590e1ae3146102615780635c975abb14610275575f5ffd5b80620b46f814610134578063039af9eb1461015b57806306fdde031461018957806310550515146101aa57806329dcb0cf146101cb575b5f5ffd5b34801561013f575f5ffd5b5061014860a981565b6040519081526020015b60405180910390f35b348015610166575f5ffd5b5061017a610175366004610f09565b6103da565b60405161015293929190610f4e565b348015610194575f5ffd5b5061019d610495565b6040516101529190610f72565b3480156101b5575f5ffd5b506101be610520565b6040516101529190610f9f565b3480156101d6575f5ffd5b5061014860035481565b3480156101eb575f5ffd5b506101ff6101fa366004610f09565b61057a565b005b34801561020c575f5ffd5b506101ff610638565b348015610220575f5ffd5b5061014860025481565b348015610235575f5ffd5b50600554610249906001600160a01b031681565b6040516001600160a01b039091168152602001610152565b34801561026c575f5ffd5b506101ff6107ba565b348015610280575f5ffd5b5060055461029590600160a01b900460ff1681565b6040519015158152602001610152565b3480156102b0575f5ffd5b5047610148565b3480156102c2575f5ffd5b5061019d6108c0565b3480156102d6575f5ffd5b506101ff6102e5366004610f09565b6108cd565b3480156102f5575f5ffd5b50610295610304366004610fe0565b6109ef565b348015610314575f5ffd5b50600454610249906001600160a01b031681565b348015610333575f5ffd5b506101ff61034236600461101c565b610a1f565b348015610352575f5ffd5b506101486103613660046110d1565b60076020525f908152604090205481565b34801561037d575f5ffd5b506005546101be90600160a81b900460ff1681565b34801561039d575f5ffd5b506101ff610b10565b6101ff6103b4366004610f09565b610b5b565b3480156103c4575f5ffd5b506103cd610d44565b60405161015291906110ea565b600681815481106103e9575f80fd5b905f5260205f2090600302015f91509050805f0180546104089061116d565b80601f01602080910402602001604051908101604052809291908181526020018280546104349061116d565b801561047f5780601f106104565761010080835404028352916020019161047f565b820191905f5260205f20905b81548152906001019060200180831161046257829003601f168201915b5050505050908060010154908060020154905083565b5f80546104a19061116d565b80601f01602080910402602001604051908101604052809291908181526020018280546104cd9061116d565b80156105185780601f106104ef57610100808354040283529160200191610518565b820191905f5260205f20905b8154815290600101906020018083116104fb57829003601f168201915b505050505081565b5f80600554600160a81b900460ff16600281111561054057610540610f8b565b14801561054e575060035442115b15610569576002544710156105635750600290565b50600190565b50600554600160a81b900460ff1690565b6004546001600160a01b031633146105ad5760405162461bcd60e51b81526004016105a4906111a5565b60405180910390fd5b5f600554600160a81b900460ff1660028111156105cc576105cc610f8b565b146106135760405162461bcd60e51b815260206004820152601760248201527621b0b6b830b4b3b71034b9903737ba1030b1ba34bb329760491b60448201526064016105a4565b61062081620151806111e0565b60035f82825461063091906111f7565b909155505050565b6004546001600160a01b031633146106625760405162461bcd60e51b81526004016105a4906111a5565b61066a610e43565b6001600554600160a81b900460ff16600281111561068a5761068a610f8b565b146106d75760405162461bcd60e51b815260206004820152601860248201527f43616d706169676e206e6f74207375636365737366756c2e000000000000000060448201526064016105a4565b478061071e5760405162461bcd60e51b81526020600482015260166024820152754e6f2062616c616e636520746f20776974686472617760501b60448201526064016105a4565b5f61271061072d60a9846111e0565b610737919061120a565b90505f6107448284611229565b6005546040519192506001600160a01b03169083156108fc029084905f818181858888f1935050505015801561077c573d5f5f3e3d5ffd5b506004546040516001600160a01b039091169082156108fc029083905f818181858888f193505050501580156107b4573d5f5f3e3d5ffd5b50505050565b6107c2610e43565b6002600554600160a81b900460ff1660028111156107e2576107e2610f8b565b146108285760405162461bcd60e51b81526020600482015260166024820152752932b33ab73239903737ba1030bb30b4b630b136329760511b60448201526064016105a4565b335f90815260076020526040902054806108845760405162461bcd60e51b815260206004820152601960248201527f4e6f20636f6e747269627574696f6e20746f20726566756e640000000000000060448201526064016105a4565b335f818152600760205260408082208290555183156108fc0291849190818181858888f193505050501580156108bc573d5f5f3e3d5ffd5b5050565b600180546104a19061116d565b6004546001600160a01b031633146108f75760405162461bcd60e51b81526004016105a4906111a5565b600654811061093f5760405162461bcd60e51b81526020600482015260146024820152732a34b2b9103237b2b9903737ba1032bc34b9ba1760611b60448201526064016105a4565b6006805461094f90600190611229565b8154811061095f5761095f61123c565b905f5260205f2090600302016006828154811061097e5761097e61123c565b5f918252602090912060039091020180610998838261129c565b506001828101549082015560029182015491015560068054806109bd576109bd611374565b5f828152602081205f19909201916003830201906109db8282610ebf565b505f60018201819055600290910155905550565b6001600160a01b0382165f90815260076020908152604080832084845260010190915290205460ff165b92915050565b6004546001600160a01b03163314610a495760405162461bcd60e51b81526004016105a4906111a5565b5f8111610a985760405162461bcd60e51b815260206004820152601e60248201527f416d6f756e74206d7573742062652067726561746572207468616e20302e000060448201526064016105a4565b60408051606081018252838152602081018390525f918101829052600680546001810182559252805190916003027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f01908190610af59082611388565b50602082015181600101556040820151816002015550505050565b6004546001600160a01b03163314610b3a5760405162461bcd60e51b81526004016105a4906111a5565b6005805460ff60a01b198116600160a01b9182900460ff1615909102179055565b5f600554600160a81b900460ff166002811115610b7a57610b7a610f8b565b14610bc15760405162461bcd60e51b815260206004820152601760248201527621b0b6b830b4b3b71034b9903737ba1030b1ba34bb329760491b60448201526064016105a4565b600554600160a01b900460ff1615610c115760405162461bcd60e51b815260206004820152601360248201527221b7b73a3930b1ba1034b9903830bab9b2b21760691b60448201526064016105a4565b6006548110610c525760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103a34b2b91760991b60448201526064016105a4565b60068181548110610c6557610c6561123c565b905f5260205f209060030201600101543414610cb75760405162461bcd60e51b815260206004820152601160248201527024b731b7b93932b1ba1030b6b7bab73a1760791b60448201526064016105a4565b60068181548110610cca57610cca61123c565b5f91825260208220600260039092020101805491610ce78361143b565b9091555050335f9081526007602052604081208054349290610d0a9084906111f7565b9091555050335f9081526007602090815260408083208484526001908101909252909120805460ff19169091179055610d41610e43565b50565b60606006805480602002602001604051908101604052809291908181526020015f905b82821015610e3a578382905f5260205f2090600302016040518060600160405290815f82018054610d979061116d565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc39061116d565b8015610e0e5780601f10610de557610100808354040283529160200191610e0e565b820191905f5260205f20905b815481529060010190602001808311610df157829003601f168201915b505050505081526020016001820154815260200160028201548152505081526020019060010190610d67565b50505050905090565b5f600554600160a81b900460ff166002811115610e6257610e62610f8b565b03610ebd576003544210610ead57600254471015610e81576002610e84565b60015b6005805460ff60a81b1916600160a81b836002811115610ea657610ea6610f8b565b0217905550565b600254471015610e81575f610e84565b565b508054610ecb9061116d565b5f825580601f10610eda575050565b601f0160209004905f5260205f2090810190610d4191905b80821115610f05575f8155600101610ef2565b5090565b5f60208284031215610f19575f5ffd5b5035919050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b606081525f610f606060830186610f20565b60208301949094525060400152919050565b602081525f610f846020830184610f20565b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6020810160038310610fbf57634e487b7160e01b5f52602160045260245ffd5b91905290565b80356001600160a01b0381168114610fdb575f5ffd5b919050565b5f5f60408385031215610ff1575f5ffd5b610ffa83610fc5565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b5f5f6040838503121561102d575f5ffd5b823567ffffffffffffffff811115611043575f5ffd5b8301601f81018513611053575f5ffd5b803567ffffffffffffffff81111561106d5761106d611008565b604051601f8201601f19908116603f0116810167ffffffffffffffff8111828210171561109c5761109c611008565b6040528181528282016020018710156110b3575f5ffd5b816020840160208301375f6020928201830152969401359450505050565b5f602082840312156110e1575f5ffd5b610f8482610fc5565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561116157603f1987860301845281518051606087526111366060880182610f20565b6020838101518982015260409384015193909801929092525094938401939190910190600101611110565b50929695505050505050565b600181811c9082168061118157607f821691505b60208210810361119f57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252600d908201526c2737ba103a34329037bbb732b960991b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610a1957610a196111cc565b80820180821115610a1957610a196111cc565b5f8261122457634e487b7160e01b5f52601260045260245ffd5b500490565b81810381811115610a1957610a196111cc565b634e487b7160e01b5f52603260045260245ffd5b601f82111561129757805f5260205f20601f840160051c810160208510156112755750805b601f840160051c820191505b81811015611294575f8155600101611281565b50505b505050565b8181036112a7575050565b6112b1825461116d565b67ffffffffffffffff8111156112c9576112c9611008565b6112dd816112d7845461116d565b84611250565b5f601f821160018114611311575f83156112f75750848201545b600184901b5f19600386901b1c198216175b855550611294565b5f8581526020808220868352908220601f198616925b838110156113475782860154825560019586019590910190602001611327565b508583101561136457818501545f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52603160045260245ffd5b815167ffffffffffffffff8111156113a2576113a2611008565b6113b0816112d7845461116d565b6020601f8211600181146113e0575f83156112f7575081850151600184901b5f19600386901b1c19821617611309565b5f84815260208120601f198516915b8281101561140f57878501518255602094850194600190920191016113ef565b508482101561142c57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f6001820161144c5761144c6111cc565b506001019056fea26469706673582212206fa1d1394207519c8dc2922883ffd5ef65277341d97924b35ffc09482996ffed64736f6c634300081c0033a2646970667358221220d4e35d6fed4ebf0eb8cf6222287026c03f4ddac98ebc2674bdc8b0fa88f959f864736f6c634300081c0033

Deployed Bytecode

0x608060405234801561000f575f5ffd5b5060043610610085575f3560e01c80638da5cb5b116100585780638da5cb5b146100f5578063a1e5084c1461011f578063a318f2691461013f578063c4ae316814610152575f5ffd5b8063141961bc1461008957806319ac74bd146100b5578063476343ee146100c85780635c975abb146100d2575b5f5ffd5b61009c6100973660046106e2565b61015a565b6040516100ac9493929190610727565b60405180910390f35b61009c6100c336600461077e565b610228565b6100d0610279565b005b5f546100e590600160a01b900460ff1681565b60405190151581526020016100ac565b5f54610107906001600160a01b031681565b6040516001600160a01b0390911681526020016100ac565b61013261012d3660046107a6565b610342565b6040516100ac91906107c6565b6100d061014d366004610904565b610472565b6100d061066f565b60018181548110610169575f80fd5b5f9182526020909120600490910201805460018201546002830180546001600160a01b0393841695509290911692916101a190610978565b80601f01602080910402602001604051908101604052809291908181526020018280546101cd90610978565b80156102185780601f106101ef57610100808354040283529160200191610218565b820191905f5260205f20905b8154815290600101906020018083116101fb57829003601f168201915b5050505050908060030154905084565b6002602052815f5260405f208181548110610241575f80fd5b5f9182526020909120600490910201805460018201546002830180546001600160a01b0393841696509190921693506101a190610978565b5f546001600160a01b031633146102c45760405162461bcd60e51b815260206004820152600a6024820152692737ba1037bbb732b91760b11b60448201526064015b60405180910390fd5b47806103085760405162461bcd60e51b81526020600482015260136024820152724e6f206665657320746f20776974686472617760681b60448201526064016102bb565b5f80546040516001600160a01b039091169183156108fc02918491818181858888f1935050505015801561033e573d5f5f3e3d5ffd5b5050565b6001600160a01b0381165f908152600260209081526040808320805482518185028101850190935280835260609492939192909184015b82821015610467575f848152602090819020604080516080810182526004860290920180546001600160a01b03908116845260018201541693830193909352600283018054929392918401916103ce90610978565b80601f01602080910402602001604051908101604052809291908181526020018280546103fa90610978565b80156104455780601f1061041c57610100808354040283529160200191610445565b820191905f5260205f20905b81548152906001019060200180831161042857829003601f168201915b5050505050815260200160038201548152505081526020019060010190610379565b505050509050919050565b5f54600160a01b900460ff16156104bf5760405162461bcd60e51b8152602060048201526011602482015270119858dd1bdc9e481a5cc81c185d5cd959607a1b60448201526064016102bb565b5f3330868686866040516104d2906106d5565b6104e1969594939291906109b0565b604051809103905ff0801580156104fa573d5f5f3e3d5ffd5b50604080516080810182526001600160a01b03808416825233602083019081529282018981524260608401526001805480820182555f91909152835160049091027fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6810180549285166001600160a01b031993841617815595517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf782018054919095169216919091179092555193945084939192839290917fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf801906105df9082610a4f565b5060609190910151600390910155335f90815260026020818152604080842080546001808201835591865294839020865160049096020180546001600160a01b03199081166001600160a01b0397881617825593870151918101805490941691909516179091558301518392918201906106599082610a4f565b5060608201518160030155505050505050505050565b5f546001600160a01b031633146106b55760405162461bcd60e51b815260206004820152600a6024820152692737ba1037bbb732b91760b11b60448201526064016102bb565b5f805460ff60a01b198116600160a01b9182900460ff1615909102179055565b61180a80610b0b83390190565b5f602082840312156106f2575f5ffd5b5035919050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b6001600160a01b038581168252841660208201526080604082018190525f90610752908301856106f9565b905082606083015295945050505050565b80356001600160a01b0381168114610779575f5ffd5b919050565b5f5f6040838503121561078f575f5ffd5b61079883610763565b946020939093013593505050565b5f602082840312156107b6575f5ffd5b6107bf82610763565b9392505050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561085957868503603f19018452815180516001600160a01b03908116875260208083015190911690870152604080820151608091880182905290610836908801826106f9565b6060928301519790920196909652945060209384019391909101906001016107ec565b50929695505050505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112610888575f5ffd5b813567ffffffffffffffff8111156108a2576108a2610865565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156108d1576108d1610865565b6040528181528382016020018510156108e8575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f5f60808587031215610917575f5ffd5b843567ffffffffffffffff81111561092d575f5ffd5b61093987828801610879565b945050602085013567ffffffffffffffff811115610955575f5ffd5b61096187828801610879565b949794965050505060408301359260600135919050565b600181811c9082168061098c57607f821691505b6020821081036109aa57634e487b7160e01b5f52602260045260245ffd5b50919050565b6001600160a01b0387811682528616602082015260c0604082018190525f906109db908301876106f9565b82810360608401526109ed81876106f9565b6080840195909552505060a00152949350505050565b601f821115610a4a57805f5260205f20601f840160051c81016020851015610a285750805b601f840160051c820191505b81811015610a47575f8155600101610a34565b50505b505050565b815167ffffffffffffffff811115610a6957610a69610865565b610a7d81610a778454610978565b84610a03565b6020601f821160018114610aaf575f8315610a985750848201515b5f19600385901b1c1916600184901b178455610a47565b5f84815260208120601f198516915b82811015610ade5787850151825560209485019460019092019101610abe565b5084821015610afb57868401515f19600387901b60f8161c191681555b50505050600190811b0190555056fe608060405234801561000f575f5ffd5b5060405161180a38038061180a83398101604081905261002e91610159565b5f6100398582610276565b5060016100468482610276565b5060028290556100598162015180610344565b6100639042610361565b6003555050600480546001600160a01b0319166001600160a01b03958616179055505060058054600161ff0160a01b03191691909216179055610374565b80516001600160a01b03811681146100b7575f5ffd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126100df575f5ffd5b81516001600160401b038111156100f8576100f86100bc565b604051601f8201601f19908116603f011681016001600160401b0381118282101715610126576101266100bc565b60405281815283820160200185101561013d575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f5f5f5f5f5f60c0878903121561016e575f5ffd5b610177876100a1565b9550610185602088016100a1565b60408801519095506001600160401b038111156101a0575f5ffd5b6101ac89828a016100d0565b606089015190955090506001600160401b038111156101c9575f5ffd5b6101d589828a016100d0565b608089015160a090990151979a9699509497949694959350505050565b600181811c9082168061020657607f821691505b60208210810361022457634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561027157805f5260205f20601f840160051c8101602085101561024f5750805b601f840160051c820191505b8181101561026e575f815560010161025b565b50505b505050565b81516001600160401b0381111561028f5761028f6100bc565b6102a38161029d84546101f2565b8461022a565b6020601f8211600181146102d5575f83156102be5750848201515b5f19600385901b1c1916600184901b17845561026e565b5f84815260208120601f198516915b8281101561030457878501518255602094850194600190920191016102e4565b508482101561032157868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761035b5761035b610330565b92915050565b8082018082111561035b5761035b610330565b611489806103815f395ff3fe608060405260043610610130575f3560e01c80636f9fb98a116100a85780638ece7b911161006d5780638ece7b9114610328578063b85dfb8014610347578063c19d93fb14610372578063c4ae316814610392578063ca1d209d146103a6578063de170570146103b9575f5ffd5b80636f9fb98a146102a55780637284e416146102b75780637497211b146102cb5780637adba527146102ea5780638da5cb5b14610309575f5ffd5b8063389b7533116100f9578063389b7533146101e05780633ccfd60b146102015780634019388314610215578063469048401461022a578063590e1ae3146102615780635c975abb14610275575f5ffd5b80620b46f814610134578063039af9eb1461015b57806306fdde031461018957806310550515146101aa57806329dcb0cf146101cb575b5f5ffd5b34801561013f575f5ffd5b5061014860a981565b6040519081526020015b60405180910390f35b348015610166575f5ffd5b5061017a610175366004610f09565b6103da565b60405161015293929190610f4e565b348015610194575f5ffd5b5061019d610495565b6040516101529190610f72565b3480156101b5575f5ffd5b506101be610520565b6040516101529190610f9f565b3480156101d6575f5ffd5b5061014860035481565b3480156101eb575f5ffd5b506101ff6101fa366004610f09565b61057a565b005b34801561020c575f5ffd5b506101ff610638565b348015610220575f5ffd5b5061014860025481565b348015610235575f5ffd5b50600554610249906001600160a01b031681565b6040516001600160a01b039091168152602001610152565b34801561026c575f5ffd5b506101ff6107ba565b348015610280575f5ffd5b5060055461029590600160a01b900460ff1681565b6040519015158152602001610152565b3480156102b0575f5ffd5b5047610148565b3480156102c2575f5ffd5b5061019d6108c0565b3480156102d6575f5ffd5b506101ff6102e5366004610f09565b6108cd565b3480156102f5575f5ffd5b50610295610304366004610fe0565b6109ef565b348015610314575f5ffd5b50600454610249906001600160a01b031681565b348015610333575f5ffd5b506101ff61034236600461101c565b610a1f565b348015610352575f5ffd5b506101486103613660046110d1565b60076020525f908152604090205481565b34801561037d575f5ffd5b506005546101be90600160a81b900460ff1681565b34801561039d575f5ffd5b506101ff610b10565b6101ff6103b4366004610f09565b610b5b565b3480156103c4575f5ffd5b506103cd610d44565b60405161015291906110ea565b600681815481106103e9575f80fd5b905f5260205f2090600302015f91509050805f0180546104089061116d565b80601f01602080910402602001604051908101604052809291908181526020018280546104349061116d565b801561047f5780601f106104565761010080835404028352916020019161047f565b820191905f5260205f20905b81548152906001019060200180831161046257829003601f168201915b5050505050908060010154908060020154905083565b5f80546104a19061116d565b80601f01602080910402602001604051908101604052809291908181526020018280546104cd9061116d565b80156105185780601f106104ef57610100808354040283529160200191610518565b820191905f5260205f20905b8154815290600101906020018083116104fb57829003601f168201915b505050505081565b5f80600554600160a81b900460ff16600281111561054057610540610f8b565b14801561054e575060035442115b15610569576002544710156105635750600290565b50600190565b50600554600160a81b900460ff1690565b6004546001600160a01b031633146105ad5760405162461bcd60e51b81526004016105a4906111a5565b60405180910390fd5b5f600554600160a81b900460ff1660028111156105cc576105cc610f8b565b146106135760405162461bcd60e51b815260206004820152601760248201527621b0b6b830b4b3b71034b9903737ba1030b1ba34bb329760491b60448201526064016105a4565b61062081620151806111e0565b60035f82825461063091906111f7565b909155505050565b6004546001600160a01b031633146106625760405162461bcd60e51b81526004016105a4906111a5565b61066a610e43565b6001600554600160a81b900460ff16600281111561068a5761068a610f8b565b146106d75760405162461bcd60e51b815260206004820152601860248201527f43616d706169676e206e6f74207375636365737366756c2e000000000000000060448201526064016105a4565b478061071e5760405162461bcd60e51b81526020600482015260166024820152754e6f2062616c616e636520746f20776974686472617760501b60448201526064016105a4565b5f61271061072d60a9846111e0565b610737919061120a565b90505f6107448284611229565b6005546040519192506001600160a01b03169083156108fc029084905f818181858888f1935050505015801561077c573d5f5f3e3d5ffd5b506004546040516001600160a01b039091169082156108fc029083905f818181858888f193505050501580156107b4573d5f5f3e3d5ffd5b50505050565b6107c2610e43565b6002600554600160a81b900460ff1660028111156107e2576107e2610f8b565b146108285760405162461bcd60e51b81526020600482015260166024820152752932b33ab73239903737ba1030bb30b4b630b136329760511b60448201526064016105a4565b335f90815260076020526040902054806108845760405162461bcd60e51b815260206004820152601960248201527f4e6f20636f6e747269627574696f6e20746f20726566756e640000000000000060448201526064016105a4565b335f818152600760205260408082208290555183156108fc0291849190818181858888f193505050501580156108bc573d5f5f3e3d5ffd5b5050565b600180546104a19061116d565b6004546001600160a01b031633146108f75760405162461bcd60e51b81526004016105a4906111a5565b600654811061093f5760405162461bcd60e51b81526020600482015260146024820152732a34b2b9103237b2b9903737ba1032bc34b9ba1760611b60448201526064016105a4565b6006805461094f90600190611229565b8154811061095f5761095f61123c565b905f5260205f2090600302016006828154811061097e5761097e61123c565b5f918252602090912060039091020180610998838261129c565b506001828101549082015560029182015491015560068054806109bd576109bd611374565b5f828152602081205f19909201916003830201906109db8282610ebf565b505f60018201819055600290910155905550565b6001600160a01b0382165f90815260076020908152604080832084845260010190915290205460ff165b92915050565b6004546001600160a01b03163314610a495760405162461bcd60e51b81526004016105a4906111a5565b5f8111610a985760405162461bcd60e51b815260206004820152601e60248201527f416d6f756e74206d7573742062652067726561746572207468616e20302e000060448201526064016105a4565b60408051606081018252838152602081018390525f918101829052600680546001810182559252805190916003027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f01908190610af59082611388565b50602082015181600101556040820151816002015550505050565b6004546001600160a01b03163314610b3a5760405162461bcd60e51b81526004016105a4906111a5565b6005805460ff60a01b198116600160a01b9182900460ff1615909102179055565b5f600554600160a81b900460ff166002811115610b7a57610b7a610f8b565b14610bc15760405162461bcd60e51b815260206004820152601760248201527621b0b6b830b4b3b71034b9903737ba1030b1ba34bb329760491b60448201526064016105a4565b600554600160a01b900460ff1615610c115760405162461bcd60e51b815260206004820152601360248201527221b7b73a3930b1ba1034b9903830bab9b2b21760691b60448201526064016105a4565b6006548110610c525760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103a34b2b91760991b60448201526064016105a4565b60068181548110610c6557610c6561123c565b905f5260205f209060030201600101543414610cb75760405162461bcd60e51b815260206004820152601160248201527024b731b7b93932b1ba1030b6b7bab73a1760791b60448201526064016105a4565b60068181548110610cca57610cca61123c565b5f91825260208220600260039092020101805491610ce78361143b565b9091555050335f9081526007602052604081208054349290610d0a9084906111f7565b9091555050335f9081526007602090815260408083208484526001908101909252909120805460ff19169091179055610d41610e43565b50565b60606006805480602002602001604051908101604052809291908181526020015f905b82821015610e3a578382905f5260205f2090600302016040518060600160405290815f82018054610d979061116d565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc39061116d565b8015610e0e5780601f10610de557610100808354040283529160200191610e0e565b820191905f5260205f20905b815481529060010190602001808311610df157829003601f168201915b505050505081526020016001820154815260200160028201548152505081526020019060010190610d67565b50505050905090565b5f600554600160a81b900460ff166002811115610e6257610e62610f8b565b03610ebd576003544210610ead57600254471015610e81576002610e84565b60015b6005805460ff60a81b1916600160a81b836002811115610ea657610ea6610f8b565b0217905550565b600254471015610e81575f610e84565b565b508054610ecb9061116d565b5f825580601f10610eda575050565b601f0160209004905f5260205f2090810190610d4191905b80821115610f05575f8155600101610ef2565b5090565b5f60208284031215610f19575f5ffd5b5035919050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b606081525f610f606060830186610f20565b60208301949094525060400152919050565b602081525f610f846020830184610f20565b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6020810160038310610fbf57634e487b7160e01b5f52602160045260245ffd5b91905290565b80356001600160a01b0381168114610fdb575f5ffd5b919050565b5f5f60408385031215610ff1575f5ffd5b610ffa83610fc5565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b5f5f6040838503121561102d575f5ffd5b823567ffffffffffffffff811115611043575f5ffd5b8301601f81018513611053575f5ffd5b803567ffffffffffffffff81111561106d5761106d611008565b604051601f8201601f19908116603f0116810167ffffffffffffffff8111828210171561109c5761109c611008565b6040528181528282016020018710156110b3575f5ffd5b816020840160208301375f6020928201830152969401359450505050565b5f602082840312156110e1575f5ffd5b610f8482610fc5565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561116157603f1987860301845281518051606087526111366060880182610f20565b6020838101518982015260409384015193909801929092525094938401939190910190600101611110565b50929695505050505050565b600181811c9082168061118157607f821691505b60208210810361119f57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252600d908201526c2737ba103a34329037bbb732b960991b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610a1957610a196111cc565b80820180821115610a1957610a196111cc565b5f8261122457634e487b7160e01b5f52601260045260245ffd5b500490565b81810381811115610a1957610a196111cc565b634e487b7160e01b5f52603260045260245ffd5b601f82111561129757805f5260205f20601f840160051c810160208510156112755750805b601f840160051c820191505b81811015611294575f8155600101611281565b50505b505050565b8181036112a7575050565b6112b1825461116d565b67ffffffffffffffff8111156112c9576112c9611008565b6112dd816112d7845461116d565b84611250565b5f601f821160018114611311575f83156112f75750848201545b600184901b5f19600386901b1c198216175b855550611294565b5f8581526020808220868352908220601f198616925b838110156113475782860154825560019586019590910190602001611327565b508583101561136457818501545f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52603160045260245ffd5b815167ffffffffffffffff8111156113a2576113a2611008565b6113b0816112d7845461116d565b6020601f8211600181146113e0575f83156112f7575081850151600184901b5f19600386901b1c19821617611309565b5f84815260208120601f198516915b8281101561140f57878501518255602094850194600190920191016113ef565b508482101561142c57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f6001820161144c5761144c6111cc565b506001019056fea26469706673582212206fa1d1394207519c8dc2922883ffd5ef65277341d97924b35ffc09482996ffed64736f6c634300081c0033a2646970667358221220d4e35d6fed4ebf0eb8cf6222287026c03f4ddac98ebc2674bdc8b0fa88f959f864736f6c634300081c0033

Deployed Bytecode Sourcemap

6959:2422:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7192:27;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;7226:51;;;;;;:::i;:::-;;:::i;8700:200::-;;;:::i;:::-;;7022:18;;;;;-1:-1:-1;;;7022:18:0;;;;;;;;;1679:14:1;;1672:22;1654:41;;1642:2;1627:18;7022::0;1514:187:1;6995:20:0;;;;;-1:-1:-1;;;;;6995:20:0;;;;;;-1:-1:-1;;;;;1870:32:1;;;1852:51;;1840:2;1825:18;6995:20:0;1706:203:1;9089:129:0;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;7835:782::-;;;;;;:::i;:::-;;:::i;9301:77::-;;;:::i;7192:27::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7192:27:0;;;;-1:-1:-1;7192:27:0;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7226:51::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7226:51:0;;;;-1:-1:-1;7226:51:0;;;;;-1:-1:-1;7226:51:0;;;:::i;8700:200::-;7340:5;;-1:-1:-1;;;;;7340:5:0;7326:10;:19;7318:42;;;;-1:-1:-1;;;7318:42:0;;5528:2:1;7318:42:0;;;5510:21:1;5567:2;5547:18;;;5540:30;-1:-1:-1;;;5586:18:1;;;5579:40;5636:18;;7318:42:0;;;;;;;;;8772:21:::1;8812:11:::0;8804:43:::1;;;::::0;-1:-1:-1;;;8804:43:0;;5867:2:1;8804:43:0::1;::::0;::::1;5849:21:1::0;5906:2;5886:18;;;5879:30;-1:-1:-1;;;5925:18:1;;;5918:49;5984:18;;8804:43:0::1;5665:343:1::0;8804:43:0::1;8868:5;::::0;;8860:32:::1;::::0;-1:-1:-1;;;;;8868:5:0;;::::1;::::0;8860:32;::::1;;;::::0;8884:7;;8860:32;8868:5;8860:32;8884:7;8868:5;8860:32;::::1;;;;;;;;;;;;;;;;;;;;8743:157;8700:200::o:0;9089:129::-;-1:-1:-1;;;;;9190:20:0;;;;;;:13;:20;;;;;;;;9183:27;;;;;;;;;;;;;;;;;9153:17;;9183:27;;9190:20;;9183:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9183:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9089:129;;;:::o;7835:782::-;7429:6;;-1:-1:-1;;;7429:6:0;;;;7428:7;7420:37;;;;-1:-1:-1;;;7420:37:0;;6215:2:1;7420:37:0;;;6197:21:1;6254:2;6234:18;;;6227:30;-1:-1:-1;;;6273:18:1;;;6266:47;6330:18;;7420:37:0;6013:341:1;7420:37:0;8021:24:::1;8079:10;8112:4;8161:5;8181:12;8208:5;8228:15;8048:206;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;8351:170:0::1;::::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;8351:170:0;;::::1;::::0;;8429:10:::1;8351:170;::::0;::::1;::::0;;;;;;;;;8494:15:::1;8351:170:::0;;;;8534:9:::1;:24:::0;;;;::::1;::::0;;8265:23:::1;8534:24:::0;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;::::1;-1:-1:-1::0;;;;;;8534:24:0;;::::1;;::::0;;;;;;;;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;8021:233;;-1:-1:-1;8021:233:0;;8351:170;;;;8534:24;;;;;::::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;8534:24:0::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;::::0;8583:10:::1;8569:25;::::0;;;:13:::1;:25;::::0;;;;;;;:40;;::::1;::::0;;::::1;::::0;;;;;;;;;;;::::1;::::0;;::::1;;::::0;;-1:-1:-1;;;;;;8569:40:0;;::::1;-1:-1:-1::0;;;;;8569:40:0;;::::1;;::::0;;;;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;;;::::1;;::::0;;;;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;::::1;:::i;:::-;;;;;;;;;;;;8010:607;;;7835:782:::0;;;;:::o;9301:77::-;7340:5;;-1:-1:-1;;;;;7340:5:0;7326:10;:19;7318:42;;;;-1:-1:-1;;;7318:42:0;;5528:2:1;7318:42:0;;;5510:21:1;5567:2;5547:18;;;5540:30;-1:-1:-1;;;5586:18:1;;;5579:40;5636:18;;7318:42:0;5326:334:1;7318:42:0;9364:6:::1;::::0;;-1:-1:-1;;;;9354:16:0;::::1;-1:-1:-1::0;;;9364:6:0;;;::::1;;;9363:7;9354:16:::0;;::::1;;::::0;;9301:77::o;-1:-1:-1:-;;;;;;;;:::o;14:226:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;187:23:1;;14:226;-1:-1:-1;14:226:1:o;245:289::-;287:3;325:5;319:12;352:6;347:3;340:19;408:6;401:4;394:5;390:16;383:4;378:3;374:14;368:47;460:1;453:4;444:6;439:3;435:16;431:27;424:38;523:4;516:2;512:7;507:2;499:6;495:15;491:29;486:3;482:39;478:50;471:57;;;245:289;;;;:::o;539:487::-;-1:-1:-1;;;;;772:32:1;;;754:51;;841:32;;836:2;821:18;;814:60;910:3;905:2;890:18;;883:31;;;-1:-1:-1;;931:46:1;;957:19;;949:6;931:46;:::i;:::-;923:54;;1013:6;1008:2;997:9;993:18;986:34;539:487;;;;;;;:::o;1031:173::-;1099:20;;-1:-1:-1;;;;;1148:31:1;;1138:42;;1128:70;;1194:1;1191;1184:12;1128:70;1031:173;;;:::o;1209:300::-;1277:6;1285;1338:2;1326:9;1317:7;1313:23;1309:32;1306:52;;;1354:1;1351;1344:12;1306:52;1377:29;1396:9;1377:29;:::i;:::-;1367:39;1475:2;1460:18;;;;1447:32;;-1:-1:-1;;;1209:300:1:o;1914:186::-;1973:6;2026:2;2014:9;2005:7;2001:23;1997:32;1994:52;;;2042:1;2039;2032:12;1994:52;2065:29;2084:9;2065:29;:::i;:::-;2055:39;1914:186;-1:-1:-1;;;1914:186:1:o;2105:1190::-;2297:4;2345:2;2334:9;2330:18;2375:2;2364:9;2357:21;2398:6;2433;2427:13;2464:6;2456;2449:22;2502:2;2491:9;2487:18;2480:25;;2564:2;2554:6;2551:1;2547:14;2536:9;2532:30;2528:39;2514:53;;2602:2;2594:6;2590:15;2623:1;2633:633;2647:6;2644:1;2641:13;2633:633;;;2712:22;;;-1:-1:-1;;2708:36:1;2696:49;;2768:13;;2813:9;;-1:-1:-1;;;;;2809:35:1;;;2794:51;;2900:2;2892:11;;;2886:18;2882:44;;;2865:15;;;2858:69;2974:2;2966:11;;;2960:18;3015:4;2998:15;;;2991:29;;;2960:18;3047:50;;3079:17;;2960:18;3047:50;:::i;:::-;3150:4;3142:13;;;3136:20;3117:17;;;;3110:47;;;;3033:64;-1:-1:-1;3221:2:1;3244:12;;;;3209:15;;;;;2669:1;2662:9;2633:633;;;-1:-1:-1;3283:6:1;;2105:1190;-1:-1:-1;;;;;;2105:1190:1:o;3300:127::-;3361:10;3356:3;3352:20;3349:1;3342:31;3392:4;3389:1;3382:15;3416:4;3413:1;3406:15;3432:726;3475:5;3528:3;3521:4;3513:6;3509:17;3505:27;3495:55;;3546:1;3543;3536:12;3495:55;3586:6;3573:20;3616:18;3608:6;3605:30;3602:56;;;3638:18;;:::i;:::-;3687:2;3681:9;3779:2;3741:17;;-1:-1:-1;;3737:31:1;;;3770:2;3733:40;3729:54;3717:67;;3814:18;3799:34;;3835:22;;;3796:62;3793:88;;;3861:18;;:::i;:::-;3897:2;3890:22;3921;;;3962:19;;;3983:4;3958:30;3955:39;-1:-1:-1;3952:59:1;;;4007:1;4004;3997:12;3952:59;4071:6;4064:4;4056:6;4052:17;4045:4;4037:6;4033:17;4020:58;4126:1;4098:19;;;4119:4;4094:30;4087:41;;;;4102:6;3432:726;-1:-1:-1;;;3432:726:1:o;4163:773::-;4269:6;4277;4285;4293;4346:3;4334:9;4325:7;4321:23;4317:33;4314:53;;;4363:1;4360;4353:12;4314:53;4403:9;4390:23;4436:18;4428:6;4425:30;4422:50;;;4468:1;4465;4458:12;4422:50;4491;4533:7;4524:6;4513:9;4509:22;4491:50;:::i;:::-;4481:60;;;4594:2;4583:9;4579:18;4566:32;4623:18;4613:8;4610:32;4607:52;;;4655:1;4652;4645:12;4607:52;4678;4722:7;4711:8;4700:9;4696:24;4678:52;:::i;:::-;4163:773;;4668:62;;-1:-1:-1;;;;4799:2:1;4784:18;;4771:32;;4900:2;4885:18;4872:32;;4163:773;-1:-1:-1;4163:773:1:o;4941:380::-;5020:1;5016:12;;;;5063;;;5084:61;;5138:4;5130:6;5126:17;5116:27;;5084:61;5191:2;5183:6;5180:14;5160:18;5157:38;5154:161;;5237:10;5232:3;5228:20;5225:1;5218:31;5272:4;5269:1;5262:15;5300:4;5297:1;5290:15;5154:161;;4941:380;;;:::o;6359:723::-;-1:-1:-1;;;;;6668:32:1;;;6650:51;;6737:32;;6732:2;6717:18;;6710:60;6806:3;6801:2;6786:18;;6779:31;;;-1:-1:-1;;6833:46:1;;6859:19;;6851:6;6833:46;:::i;:::-;6927:9;6919:6;6915:22;6910:2;6899:9;6895:18;6888:50;6955:33;6981:6;6973;6955:33;:::i;:::-;7019:3;7004:19;;6997:35;;;;-1:-1:-1;;7063:3:1;7048:19;7041:35;6947:41;6359:723;-1:-1:-1;;;;6359:723:1:o;7213:518::-;7315:2;7310:3;7307:11;7304:421;;;7351:5;7348:1;7341:16;7395:4;7392:1;7382:18;7465:2;7453:10;7449:19;7446:1;7442:27;7436:4;7432:38;7501:4;7489:10;7486:20;7483:47;;;-1:-1:-1;7524:4:1;7483:47;7579:2;7574:3;7570:12;7567:1;7563:20;7557:4;7553:31;7543:41;;7634:81;7652:2;7645:5;7642:13;7634:81;;;7711:1;7697:16;;7678:1;7667:13;7634:81;;;7638:3;;7304:421;7213:518;;;:::o;7907:1299::-;8033:3;8027:10;8060:18;8052:6;8049:30;8046:56;;;8082:18;;:::i;:::-;8111:97;8201:6;8161:38;8193:4;8187:11;8161:38;:::i;:::-;8155:4;8111:97;:::i;:::-;8257:4;8288:2;8277:14;;8305:1;8300:649;;;;8993:1;9010:6;9007:89;;;-1:-1:-1;9062:19:1;;;9056:26;9007:89;-1:-1:-1;;7864:1:1;7860:11;;;7856:24;7852:29;7842:40;7888:1;7884:11;;;7839:57;9109:81;;8270:930;;8300:649;7160:1;7153:14;;;7197:4;7184:18;;-1:-1:-1;;8336:20:1;;;8454:222;8468:7;8465:1;8462:14;8454:222;;;8550:19;;;8544:26;8529:42;;8657:4;8642:20;;;;8610:1;8598:14;;;;8484:12;8454:222;;;8458:3;8704:6;8695:7;8692:19;8689:201;;;8765:19;;;8759:26;-1:-1:-1;;8848:1:1;8844:14;;;8860:3;8840:24;8836:37;8832:42;8817:58;8802:74;;8689:201;-1:-1:-1;;;;8936:1:1;8920:14;;;8916:22;8903:36;;-1:-1:-1;7907:1299:1:o

Swarm Source

ipfs://d4e35d6fed4ebf0eb8cf6222287026c03f4ddac98ebc2674bdc8b0fa88f959f8

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
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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