ETH Price: $3,408.12 (+2.90%)

Contract

0xb42A79C03C67C6FAE729F1e8FAf20BBb0192a46F
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Place Bid132897192021-09-24 17:08:581156 days ago1632503338IN
0xb42A79C0...b0192a46F
2.75 ETH0.0020418883.16225613
Place Bid132823222021-09-23 13:40:531157 days ago1632404453IN
0xb42A79C0...b0192a46F
0.35 ETH0.001807573.61646882
Place Bid132635732021-09-20 15:58:351160 days ago1632153515IN
0xb42A79C0...b0192a46F
0.02 ETH0.0018493875.32203629
Place Bid132635732021-09-20 15:58:351160 days ago1632153515IN
0xb42A79C0...b0192a46F
0.02 ETH0.0013766756.06968155
Place Bid132635732021-09-20 15:58:351160 days ago1632153515IN
0xb42A79C0...b0192a46F
0.02 ETH0.0015605863.55979008
Place Bid132635732021-09-20 15:58:351160 days ago1632153515IN
0xb42A79C0...b0192a46F
0.02 ETH0.0014466758.92046797
Place Bid132596872021-09-20 1:24:151160 days ago1632101055IN
0xb42A79C0...b0192a46F
0.04 ETH0.0014834460.41811082
Place Bid132557312021-09-19 10:56:031161 days ago1632048963IN
0xb42A79C0...b0192a46F
0.25 ETH0.0025678104.58206222
Place Bid132547512021-09-19 7:18:051161 days ago1632035885IN
0xb42A79C0...b0192a46F
0.01 ETH0.0016649667.8109638
Place Bid132534732021-09-19 2:25:281161 days ago1632018328IN
0xb42A79C0...b0192a46F
6.83 ETH0.0013598455.38417778
Place Bid132526762021-09-18 23:29:351161 days ago1632007775IN
0xb42A79C0...b0192a46F
0.9 ETH0.0007398630.13356736
Place Bid132525502021-09-18 22:56:451161 days ago1632005805IN
0xb42A79C0...b0192a46F
0.56 ETH0.0007630431.07751784
Withdraw Contrac...132525122021-09-18 22:48:561161 days ago1632005336IN
0xb42A79C0...b0192a46F
0 ETH0.0015901540.30002007
Refund Bidders132524872021-09-18 22:42:081162 days ago1632004928IN
0xb42A79C0...b0192a46F
0 ETH0.03663675150
Refund Bidders132524782021-09-18 22:40:181162 days ago1632004818IN
0xb42A79C0...b0192a46F
0 ETH0.14122635150
Refund Bidders132524682021-09-18 22:36:281162 days ago1632004588IN
0xb42A79C0...b0192a46F
0 ETH0.141225150
Refund Bidders132524602021-09-18 22:34:221162 days ago1632004462IN
0xb42A79C0...b0192a46F
0 ETH0.1412292150
Place Bid132524492021-09-18 22:32:301162 days ago1632004350IN
0xb42A79C0...b0192a46F
0.02 ETH0.0022495791.62114989
Refund Bidders132524482021-09-18 22:32:081162 days ago1632004328IN
0xb42A79C0...b0192a46F
0 ETH0.14122785150
Refund Bidders132524312021-09-18 22:29:041162 days ago1632004144IN
0xb42A79C0...b0192a46F
0 ETH0.141225150
Place Bid132524232021-09-18 22:27:431162 days ago1632004063IN
0xb42A79C0...b0192a46F
1.55 ETH0.0021050885.73652892
Refund Bidders132524212021-09-18 22:27:021162 days ago1632004022IN
0xb42A79C0...b0192a46F
0 ETH0.14122785150
Refund Bidders132524092021-09-18 22:24:091162 days ago1632003849IN
0xb42A79C0...b0192a46F
0 ETH0.1412235150
Refund Bidders132523602021-09-18 22:12:191162 days ago1632003139IN
0xb42A79C0...b0192a46F
0 ETH0.14122785150
Place Bid132523422021-09-18 22:09:421162 days ago1632002982IN
0xb42A79C0...b0192a46F
0.01 ETH0.0020270582.55823067
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
132525122021-09-18 22:48:561161 days ago1632005336
0xb42A79C0...b0192a46F
132.66 ETH
132524872021-09-18 22:42:081162 days ago1632004928
0xb42A79C0...b0192a46F
0.25 ETH
132524872021-09-18 22:42:081162 days ago1632004928
0xb42A79C0...b0192a46F
0.25 ETH
132524872021-09-18 22:42:081162 days ago1632004928
0xb42A79C0...b0192a46F
0.25 ETH
132524872021-09-18 22:42:081162 days ago1632004928
0xb42A79C0...b0192a46F
1.25 ETH
132524872021-09-18 22:42:081162 days ago1632004928
0xb42A79C0...b0192a46F
0.25 ETH
132524872021-09-18 22:42:081162 days ago1632004928
0xb42A79C0...b0192a46F
0.25 ETH
132524872021-09-18 22:42:081162 days ago1632004928
0xb42A79C0...b0192a46F
1 ETH
132524872021-09-18 22:42:081162 days ago1632004928
0xb42A79C0...b0192a46F
1 ETH
132524872021-09-18 22:42:081162 days ago1632004928
0xb42A79C0...b0192a46F
0.5 ETH
132524872021-09-18 22:42:081162 days ago1632004928
0xb42A79C0...b0192a46F
0.25 ETH
132524872021-09-18 22:42:081162 days ago1632004928
0xb42A79C0...b0192a46F
0.25 ETH
132524872021-09-18 22:42:081162 days ago1632004928
0xb42A79C0...b0192a46F
0.25 ETH
132524782021-09-18 22:40:181162 days ago1632004818
0xb42A79C0...b0192a46F
0.25 ETH
132524782021-09-18 22:40:181162 days ago1632004818
0xb42A79C0...b0192a46F
0.25 ETH
132524782021-09-18 22:40:181162 days ago1632004818
0xb42A79C0...b0192a46F
0.25 ETH
132524782021-09-18 22:40:181162 days ago1632004818
0xb42A79C0...b0192a46F
1.25 ETH
132524782021-09-18 22:40:181162 days ago1632004818
0xb42A79C0...b0192a46F
0.25 ETH
132524782021-09-18 22:40:181162 days ago1632004818
0xb42A79C0...b0192a46F
0.25 ETH
132524782021-09-18 22:40:181162 days ago1632004818
0xb42A79C0...b0192a46F
0.25 ETH
132524782021-09-18 22:40:181162 days ago1632004818
0xb42A79C0...b0192a46F
0.25 ETH
132524782021-09-18 22:40:181162 days ago1632004818
0xb42A79C0...b0192a46F
0.25 ETH
132524782021-09-18 22:40:181162 days ago1632004818
0xb42A79C0...b0192a46F
0.25 ETH
132524782021-09-18 22:40:181162 days ago1632004818
0xb42A79C0...b0192a46F
0.25 ETH
132524782021-09-18 22:40:181162 days ago1632004818
0xb42A79C0...b0192a46F
0.25 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Auction

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 5 : Auction.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.7;

import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/security/Pausable.sol";
import "@openzeppelin/contracts/utils/Counters.sol";

contract Auction is Ownable, Pausable {
  using Counters for Counters.Counter;

  uint256 public immutable minimumUnitPrice;
  uint256 public immutable minimumBidIncrement;
  uint256 public immutable unitPriceStepSize;
  uint256 public immutable minimumQuantity;
  uint256 public immutable maximumQuantity;
  uint256 public immutable numberOfAuctions;
  uint256 public immutable itemsPerDay;
  address payable public immutable beneficiaryAddress;

  Counters.Counter private _auctionIDCounter;
  Counters.Counter private _bidPlacedCounter;

  bool private _allowWithdrawals;

  event AuctionStarted(uint256 auctionID);
  event AuctionEnded(uint256 auctionID);
  event BidPlaced(uint256 indexed auctionID, address indexed bidder, uint256 bidIndex, uint256 unitPrice, uint256 quantity);
  event WinnerSelected(uint256 indexed auctionID, address indexed bidder, uint256 unitPrice, uint256 quantity);
  event BidderRefunded(address indexed bidder, uint256 refundAmount);

  struct Bid {
    uint256 unitPrice;
    uint256 quantity;
  }

  struct AuctionStatus {
    bool started;
    bool ended;
  }

  // auctionID => auction status tracker
  mapping (uint256 => AuctionStatus) private _auctionStatus;
  // bidder address => current bid
  mapping (address => Bid) private _bids;
  // auctionID => remainingItemsPerAuction
  mapping (uint256 => uint256) private _remainingItemsPerAuction;

  // Ownership is immediately transferred to contractOwner.
  // Beneficiary address cannot be changed after deployment.
  constructor(
    address _contractOwner,
    address payable _beneficiaryAddress,
    uint256 _minimumUnitPrice,
    uint256 _minimumBidIncrement,
    uint256 _unitPriceStepSize,
    uint256 _minimumQuantity,
    uint256 _maximumQuantity,
    uint256 _numberOfAuctions,
    uint256 _itemsPerDay
  ) {
    beneficiaryAddress = _beneficiaryAddress;
    transferOwnership(_contractOwner);
    minimumUnitPrice = _minimumUnitPrice;
    minimumBidIncrement = _minimumBidIncrement;
    unitPriceStepSize = _unitPriceStepSize;
    minimumQuantity = _minimumQuantity;
    maximumQuantity = _maximumQuantity;
    numberOfAuctions = _numberOfAuctions;
    itemsPerDay = _itemsPerDay;
    // Set up the _remainingItemsPerAuction tracker.
    for(uint256 i = 0; i < _numberOfAuctions; i++) {
      _remainingItemsPerAuction[i] = _itemsPerDay;
    }
    pause();
  }

  modifier whenAuctionActive() {
    require(!currentAuctionStatus().ended, "Auction has already ended.");
    require(currentAuctionStatus().started, "Auction hasn't started yet.");
    _;
  }

  modifier whenPreAuction() {
    require(!currentAuctionStatus().ended, "Auction has already ended.");
    require(!currentAuctionStatus().started, "Auction has already started.");
    _;
  }

  modifier whenAuctionEnded() {
    require(currentAuctionStatus().ended, "Auction hasn't ended yet.");
    require(currentAuctionStatus().started, "Auction hasn't started yet.");
    _;
  }

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

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

  function setAllowWithdrawals(bool allowWithdrawals_) public onlyOwner {
    _allowWithdrawals = allowWithdrawals_;
  }

  function getAllowWithdrawals() public view returns (bool) {
    return _allowWithdrawals;
  }

  function auctionStatus(uint256 _auctionID) public view returns (AuctionStatus memory) {
    return _auctionStatus[_auctionID];
  }

  function currentAuctionStatus() public view returns (AuctionStatus memory) {
    return _auctionStatus[getCurrentAuctionID()];
  }

  // Returns the balance currently held in this contract.
  function contractBalance() external view returns (uint256) {
    return address(this).balance;
  }

  function bidsPlacedCount() external view returns (uint256) {
    return _bidPlacedCounter.current();
  }

  function getCurrentAuctionID() public view returns (uint) {
    return _auctionIDCounter.current();
  }

  function incrementAuctionID() public onlyOwner whenPaused whenAuctionEnded {
    _auctionIDCounter.increment();
    require(_auctionIDCounter.current() < numberOfAuctions, "Max number of auctions reached.");
  }

  // this function should only ever be used if something goes wrong, so it doesn't have the whenAuctionEnded modifier
  function decrementAuctionID() public onlyOwner whenPaused {
    _auctionIDCounter.decrement();
  }

  function startAuction() external onlyOwner whenPreAuction {
    uint256 currentAuctionID = getCurrentAuctionID();
    _auctionStatus[currentAuctionID].started = true;
    if (paused()) {
      unpause();
    }
    emit AuctionStarted(currentAuctionID);
  }

  function endAuction() external onlyOwner whenAuctionActive {
    uint256 currentAuctionID = getCurrentAuctionID();
    _auctionStatus[currentAuctionID].ended = true;
    if (!paused()) {
      pause();
    }
    emit AuctionEnded(currentAuctionID);
  }

  function getBid(address bidder) external view returns (Bid memory) {
    return _bids[bidder];
  }

  function getRemainingItemsForAuction(uint256 auctionID) external view returns (uint256) {
    require(auctionID < numberOfAuctions, "Invalid auctionID.");
    return _remainingItemsPerAuction[auctionID];
  }

  // Requires a sorted list of winners. You can submit the winners in any batch size you want, but order matters.
  function selectWinners(address[] calldata bidders) external onlyOwner whenPaused whenAuctionEnded {
    uint256 auctionID = getCurrentAuctionID();
    // Iterate over each winning address until we reach the end of the winners list or we deplete _remainingItemsPerAuction for this auctionID.
    for(uint256 i = 0; i < bidders.length; i++) {
      address bidder = bidders[i];
      uint256 bidUnitPrice = _bids[bidder].unitPrice;
      uint256 bidQuantity = _bids[bidder].quantity;

      // Skip bidders whose bid quantity or unit price is already 0.
      if (bidUnitPrice == 0 || bidQuantity == 0) {
        continue;
      }

      if (_remainingItemsPerAuction[auctionID] == bidQuantity) {
        // STOP: _remainingItemsPerAuction has been depleted, and the quantity for this bid made us hit 0 exactly.
        _bids[bidder] = Bid(0,0);
        emit WinnerSelected(auctionID, bidder, bidUnitPrice, bidQuantity);
        _remainingItemsPerAuction[auctionID] = 0;
        break;
      } else if (_remainingItemsPerAuction[auctionID] < bidQuantity) {
        // STOP: _remainingItemsPerAuction has been depleted, and the quantity for this bid made us go negative (quantity too high to give the bidder all they asked for)
        emit WinnerSelected(auctionID, bidder, bidUnitPrice, _remainingItemsPerAuction[auctionID]);
        // Don't set unitPrice to 0 here as there is still at least 1 quantity remaining.
        // Must set _remainingItemsPerAuction to 0 AFTER this.
        _bids[bidder].quantity -= _remainingItemsPerAuction[auctionID];
        _remainingItemsPerAuction[auctionID] = 0;
        break;
      } else {
        // CONTINUE: _remainingItemsPerAuction hasn't been depleted yet...
        _bids[bidder] = Bid(0,0);
        emit WinnerSelected(auctionID, bidder, bidUnitPrice, bidQuantity);
        _remainingItemsPerAuction[auctionID] -= bidQuantity;
      }
    }
  }

  // Refunds losing bidders from the contract's balance.
  function refundBidders(address payable[] calldata bidders) external onlyOwner whenPaused whenAuctionEnded {
    uint256 totalRefundAmount = 0;
    for(uint256 i = 0; i < bidders.length; i++) {
      address payable bidder = bidders[i];
      uint256 refundAmount = _bids[bidder].unitPrice * _bids[bidder].quantity;

      // Skip bidders who aren't entitled to a refund.
      if (refundAmount == 0) {
        continue;
      }

      _bids[bidder] = Bid(0,0);
      (bool success, ) = bidder.call{ value: refundAmount }("");
      require(success, "Transfer failed.");
      totalRefundAmount += refundAmount;
      emit BidderRefunded(bidder, refundAmount);
    }
  }

  function withdrawContractBalance() external onlyOwner {
    (bool success, ) = beneficiaryAddress.call{value: address(this).balance}("");
    require(success, "Transfer failed.");
  }

  // Note: this function allows claiming refunds even before the winners are selected. It's up to the owner to only allow withdrawals when appropriate.
  // It's also the responsbility of the owner to keep enough ether in the contract for refunds.
  function claimRefund() external whenPaused whenAuctionEnded {
    // This must be the final auction.
    require(getCurrentAuctionID() == (numberOfAuctions - 1), "Withdrawals allowed after final auction has ended.");
    // Withdrawals must not be paused.
    require(_allowWithdrawals, "Withdrawals are not allowed right now.");
    uint256 refundAmount = _bids[msg.sender].unitPrice * _bids[msg.sender].quantity;
    require(refundAmount > 0, "Refund amount is 0.");
    _bids[msg.sender] = Bid(0,0);
    (bool success, ) = msg.sender.call{ value: refundAmount }("");
    require(success, "Transfer failed.");
    emit BidderRefunded(msg.sender, refundAmount);
  }

  // When a bidder places a bid or updates their existing bid, they will use this function.
  // - total value can never be lowered
  // - unit price can never be lowered
  // - quantity can be raised or lowered, but only if unit price is raised to meet or exceed previous total price
  function placeBid(uint256 quantity, uint256 unitPrice) external payable whenNotPaused whenAuctionActive {
    // If the bidder is increasing their bid, the amount being added must be greater than or equal to the minimum bid increment.
    if (msg.value > 0 && msg.value < minimumBidIncrement) {
      revert("Bid lower than minimum bid increment.");
    }

    // Cache initial bid values.
    uint256 initialUnitPrice = _bids[msg.sender].unitPrice;
    uint256 initialQuantity = _bids[msg.sender].quantity;
    uint256 initialTotalValue = initialUnitPrice * initialQuantity;

    // Cache final bid values.
    uint256 finalUnitPrice = unitPrice;
    uint256 finalQuantity = quantity;
    uint256 finalTotalValue = initialTotalValue + msg.value;

    // Don't allow bids with a unit price scale smaller than unitPriceStepSize.
    // For example, allow 1.01 or 111.01 but don't allow 1.011.
    require(finalUnitPrice % unitPriceStepSize == 0, "Unit price step too small.");

    // Reject bids that don't have a quantity within the valid range.
    require(finalQuantity >= minimumQuantity, "Quantity too low.");
    require(finalQuantity <= maximumQuantity, "Quantity too high.");

    // Total value can never be lowered.
    require(finalTotalValue >= initialTotalValue, "Total value can't be lowered.");

    // Unit price can never be lowered.
    // Quantity can be raised or lowered, but it can only be lowered if the unit price is raised to meet or exceed the initial total value. Ensuring the the unit price is never lowered takes care of this.
    require(finalUnitPrice >= initialUnitPrice, "Unit price can't be lowered.");

    // Ensure the new totalValue equals quantity * the unit price that was given in this txn exactly. This is important to prevent rounding errors later when returning ether.
    require(finalQuantity * finalUnitPrice == finalTotalValue, "Quantity * Unit Price != Total Value");

    // Unit price must be greater than or equal to the minimumUnitPrice.
    require(finalUnitPrice >= minimumUnitPrice, "Bid unit price too low.");

    // Something must be changing from the initial bid for this new bid to be valid.
    if (initialUnitPrice == finalUnitPrice && initialQuantity == finalQuantity) {
      revert("This bid doesn't change anything.");
    }

    // Update the bidder's bid.
    _bids[msg.sender].unitPrice = finalUnitPrice;
    _bids[msg.sender].quantity = finalQuantity;

    emit BidPlaced(_auctionIDCounter.current(), msg.sender, _bidPlacedCounter.current(), finalUnitPrice, finalQuantity);
    // Increment after emitting the BidPlaced event because counter is 0-indexed.
    _bidPlacedCounter.increment();
  }

  // Handles receiving ether to the contract.
  // Reject all direct payments to the contract except from beneficiary and owner.
  // Bids must be placed using the placeBid function.
  receive() external payable {
    require(msg.value > 0, "No ether was sent.");
    require(msg.sender == beneficiaryAddress || msg.sender == owner(), "Only owner or beneficiary can fund contract.");
  }
}

File 2 of 5 : Counters.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

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

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

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

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

File 3 of 5 : Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

File 4 of 5 : Pausable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../utils/Context.sol";

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

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

    bool private _paused;

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

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

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

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

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

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

File 5 of 5 : Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _setOwner(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

Settings
{
  "remappings": [],
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "evmVersion": "london",
  "libraries": {},
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_contractOwner","type":"address"},{"internalType":"address payable","name":"_beneficiaryAddress","type":"address"},{"internalType":"uint256","name":"_minimumUnitPrice","type":"uint256"},{"internalType":"uint256","name":"_minimumBidIncrement","type":"uint256"},{"internalType":"uint256","name":"_unitPriceStepSize","type":"uint256"},{"internalType":"uint256","name":"_minimumQuantity","type":"uint256"},{"internalType":"uint256","name":"_maximumQuantity","type":"uint256"},{"internalType":"uint256","name":"_numberOfAuctions","type":"uint256"},{"internalType":"uint256","name":"_itemsPerDay","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"auctionID","type":"uint256"}],"name":"AuctionEnded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"auctionID","type":"uint256"}],"name":"AuctionStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"auctionID","type":"uint256"},{"indexed":true,"internalType":"address","name":"bidder","type":"address"},{"indexed":false,"internalType":"uint256","name":"bidIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"unitPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"BidPlaced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"bidder","type":"address"},{"indexed":false,"internalType":"uint256","name":"refundAmount","type":"uint256"}],"name":"BidderRefunded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"auctionID","type":"uint256"},{"indexed":true,"internalType":"address","name":"bidder","type":"address"},{"indexed":false,"internalType":"uint256","name":"unitPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"WinnerSelected","type":"event"},{"inputs":[{"internalType":"uint256","name":"_auctionID","type":"uint256"}],"name":"auctionStatus","outputs":[{"components":[{"internalType":"bool","name":"started","type":"bool"},{"internalType":"bool","name":"ended","type":"bool"}],"internalType":"struct Auction.AuctionStatus","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"beneficiaryAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bidsPlacedCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimRefund","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentAuctionStatus","outputs":[{"components":[{"internalType":"bool","name":"started","type":"bool"},{"internalType":"bool","name":"ended","type":"bool"}],"internalType":"struct Auction.AuctionStatus","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decrementAuctionID","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endAuction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAllowWithdrawals","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"bidder","type":"address"}],"name":"getBid","outputs":[{"components":[{"internalType":"uint256","name":"unitPrice","type":"uint256"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"internalType":"struct Auction.Bid","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentAuctionID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"auctionID","type":"uint256"}],"name":"getRemainingItemsForAuction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"incrementAuctionID","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"itemsPerDay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maximumQuantity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumBidIncrement","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumQuantity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumUnitPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numberOfAuctions","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"uint256","name":"unitPrice","type":"uint256"}],"name":"placeBid","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address payable[]","name":"bidders","type":"address[]"}],"name":"refundBidders","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"bidders","type":"address[]"}],"name":"selectWinners","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"allowWithdrawals_","type":"bool"}],"name":"setAllowWithdrawals","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startAuction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unitPriceStepSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawContractBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6101806040523480156200001257600080fd5b50604051620048073803806200480783398181016040528101906200003891906200050f565b620000586200004c6200015060201b60201c565b6200015860201b60201c565b60008060146101000a81548160ff0219169083151502179055508773ffffffffffffffffffffffffffffffffffffffff166101608173ffffffffffffffffffffffffffffffffffffffff1660601b81525050620000bb896200021c60201b60201c565b86608081815250508560a081815250508460c081815250508360e0818152505082610100818152505081610120818152505080610140818152505060005b828110156200013057816006600083815260200190815260200160002081905550808062000127906200075a565b915050620000f9565b50620001416200033260201b60201c565b505050505050505050620008cb565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200022c6200015060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000252620003d360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002ab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002a290620006d5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156200031e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003159062000691565b60405180910390fd5b6200032f816200015860201b60201c565b50565b620003426200015060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000368620003d360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003c1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003b890620006d5565b60405180910390fd5b620003d1620003fc60201b60201c565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200040c620004b460201b60201c565b156200044f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200044690620006b3565b60405180910390fd5b6001600060146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586200049b6200015060201b60201c565b604051620004aa919062000674565b60405180910390a1565b60008060149054906101000a900460ff16905090565b600081519050620004db816200087d565b92915050565b600081519050620004f28162000897565b92915050565b6000815190506200050981620008b1565b92915050565b60008060008060008060008060006101208a8c031215620005355762000534620007d7565b5b6000620005458c828d01620004ca565b9950506020620005588c828d01620004e1565b98505060406200056b8c828d01620004f8565b97505060606200057e8c828d01620004f8565b9650506080620005918c828d01620004f8565b95505060a0620005a48c828d01620004f8565b94505060c0620005b78c828d01620004f8565b93505060e0620005ca8c828d01620004f8565b925050610100620005de8c828d01620004f8565b9150509295985092959850929598565b620005f98162000708565b82525050565b60006200060e602683620006f7565b91506200061b82620007dc565b604082019050919050565b600062000635601083620006f7565b915062000642826200082b565b602082019050919050565b60006200065c602083620006f7565b9150620006698262000854565b602082019050919050565b60006020820190506200068b6000830184620005ee565b92915050565b60006020820190508181036000830152620006ac81620005ff565b9050919050565b60006020820190508181036000830152620006ce8162000626565b9050919050565b60006020820190508181036000830152620006f0816200064d565b9050919050565b600082825260208201905092915050565b6000620007158262000730565b9050919050565b6000620007298262000730565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620007678262000750565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156200079d576200079c620007a8565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600080fd5b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b620008888162000708565b81146200089457600080fd5b50565b620008a2816200071c565b8114620008ae57600080fd5b50565b620008bc8162000750565b8114620008c857600080fd5b50565b60805160a05160c05160e0516101005161012051610140516101605160601c613e8d6200097a6000396000818161023101528181611fe501526125240152600061267501526000818161088501528181610a5601528181610bdd015261170f015260008181610f2101526120b20152600081816107f70152610ebe015260008181610e52015261144c015260008181610d34015261255901526000818161091301526110570152613e8d6000f3fe6080604052600436106101e75760003560e01c80638da5cb5b11610102578063d0986ac111610095578063ec89b5e011610064578063ec89b5e014610736578063f2fde38b14610761578063f4d62fa21461078a578063fe67a54b146107b5576102fc565b8063d0986ac11461068c578063d2f51ec5146106b5578063d9c4870e146106e0578063eada586b1461070b576102fc565b8063b66dcb3c116100d1578063b66dcb3c146105e4578063bfab3db91461060d578063c04b18d814610624578063c8b342ab1461064f576102fc565b80638da5cb5b1461054e57806396da43b614610579578063ac60be66146105b6578063b5545a3c146105cd576102fc565b806351357dc31161017a578063715018a611610149578063715018a6146104ca5780637f06cd22146104e15780638456cb591461050c5780638b7afe2e14610523576102fc565b806351357dc31461045557806357c90de51461046c5780635c975abb146104885780636b64c769146104b3576102fc565b8063338bd126116101b6578063338bd126146103bf5780633decef81146103ea5780633f4ba83a1461041357806350d9d4721461042a576102fc565b80631d75ddcc146103015780631e01ea221461032c578063219dd20d14610357578063247aa86a14610394576102fc565b366102fc576000341161022f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610226906133d9565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102bb575061028c6107cc565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6102fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102f1906134d9565b60405180910390fd5b005b600080fd5b34801561030d57600080fd5b506103166107f5565b60405161032391906135cf565b60405180910390f35b34801561033857600080fd5b50610341610819565b60405161034e9190613599565b60405180910390f35b34801561036357600080fd5b5061037e60048036038101906103799190612d1d565b610881565b60405161038b91906135cf565b60405180910390f35b3480156103a057600080fd5b506103a9610900565b6040516103b691906135cf565b60405180910390f35b3480156103cb57600080fd5b506103d4610911565b6040516103e191906135cf565b60405180910390f35b3480156103f657600080fd5b50610411600480360381019061040c9190612cf0565b610935565b005b34801561041f57600080fd5b506104286109ce565b005b34801561043657600080fd5b5061043f610a54565b60405161044c91906135cf565b60405180910390f35b34801561046157600080fd5b5061046a610a78565b005b61048660048036038101906104819190612d4a565b610c48565b005b34801561049457600080fd5b5061049d61120d565b6040516104aa919061323e565b60405180910390f35b3480156104bf57600080fd5b506104c8611223565b005b3480156104d657600080fd5b506104df6113c2565b005b3480156104ed57600080fd5b506104f661144a565b60405161050391906135cf565b60405180910390f35b34801561051857600080fd5b5061052161146e565b005b34801561052f57600080fd5b506105386114f4565b60405161054591906135cf565b60405180910390f35b34801561055a57600080fd5b506105636107cc565b6040516105709190613208565b60405180910390f35b34801561058557600080fd5b506105a0600480360381019061059b9190612d1d565b6114fc565b6040516105ad9190613599565b60405180910390f35b3480156105c257600080fd5b506105cb61155f565b005b3480156105d957600080fd5b506105e261162e565b005b3480156105f057600080fd5b5061060b60048036038101906106069190612c56565b611a11565b005b34801561061957600080fd5b50610622611f65565b005b34801561063057600080fd5b506106396120b0565b60405161064691906135cf565b60405180910390f35b34801561065b57600080fd5b5061067660048036038101906106719190612bfc565b6120d4565b60405161068391906135b4565b60405180910390f35b34801561069857600080fd5b506106b360048036038101906106ae9190612ca3565b612141565b005b3480156106c157600080fd5b506106ca61250b565b6040516106d7919061323e565b60405180910390f35b3480156106ec57600080fd5b506106f5612522565b6040516107029190613223565b60405180910390f35b34801561071757600080fd5b50610720612546565b60405161072d91906135cf565b60405180910390f35b34801561074257600080fd5b5061074b612557565b60405161075891906135cf565b60405180910390f35b34801561076d57600080fd5b5061078860048036038101906107839190612bfc565b61257b565b005b34801561079657600080fd5b5061079f612673565b6040516107ac91906135cf565b60405180910390f35b3480156107c157600080fd5b506107ca612697565b005b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b610821612ac4565b6004600061082d610900565b81526020019081526020016000206040518060400160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a900460ff161515151581525050905090565b60007f000000000000000000000000000000000000000000000000000000000000000082106108e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108dc90613379565b60405180910390fd5b60066000838152602001908152602001600020549050919050565b600061090c6001612834565b905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b61093d612842565b73ffffffffffffffffffffffffffffffffffffffff1661095b6107cc565b73ffffffffffffffffffffffffffffffffffffffff16146109b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a890613479565b60405180910390fd5b80600360006101000a81548160ff02191690831515021790555050565b6109d6612842565b73ffffffffffffffffffffffffffffffffffffffff166109f46107cc565b73ffffffffffffffffffffffffffffffffffffffff1614610a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4190613479565b60405180910390fd5b610a5261284a565b565b7f000000000000000000000000000000000000000000000000000000000000000081565b610a80612842565b73ffffffffffffffffffffffffffffffffffffffff16610a9e6107cc565b73ffffffffffffffffffffffffffffffffffffffff1614610af4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aeb90613479565b60405180910390fd5b610afc61120d565b610b3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3290613259565b60405180910390fd5b610b43610819565b60200151610b86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7d906134f9565b60405180910390fd5b610b8e610819565b60000151610bd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc890613459565b60405180910390fd5b610bdb60016128eb565b7f0000000000000000000000000000000000000000000000000000000000000000610c066001612834565b10610c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3d906132b9565b60405180910390fd5b565b610c5061120d565b15610c90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8790613399565b60405180910390fd5b610c98610819565b6020015115610cdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd390613499565b60405180910390fd5b610ce4610819565b60000151610d27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1e90613459565b60405180910390fd5b600034118015610d5657507f000000000000000000000000000000000000000000000000000000000000000034105b15610d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8d906134b9565b60405180910390fd5b6000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015490506000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154905060008183610e3291906136bc565b90506000849050600086905060003484610e4c9190613666565b905060007f000000000000000000000000000000000000000000000000000000000000000084610e7c91906137ed565b14610ebc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb3906133f9565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000821015610f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1690613559565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000821115610f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7990613279565b60405180910390fd5b83811015610fc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbc90613339565b60405180910390fd5b85831015611008576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fff90613439565b60405180910390fd5b80838361101591906136bc565b14611055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104c906133b9565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008310156110b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110af90613359565b60405180910390fd5b82861480156110c657508185145b15611106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fd90613319565b60405180910390fd5b82600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555081600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055503373ffffffffffffffffffffffffffffffffffffffff166111b56001612834565b7fe0771bb8191f40e2c9380d044dd32271d56e14b7722162d048aa9ebe13eefbb16111e06002612834565b86866040516111f193929190613613565b60405180910390a361120360026128eb565b5050505050505050565b60008060149054906101000a900460ff16905090565b61122b612842565b73ffffffffffffffffffffffffffffffffffffffff166112496107cc565b73ffffffffffffffffffffffffffffffffffffffff161461129f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129690613479565b60405180910390fd5b6112a7610819565b60200151156112eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e290613499565b60405180910390fd5b6112f3610819565b6000015115611337576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132e906132f9565b60405180910390fd5b6000611341610900565b905060016004600083815260200190815260200160002060000160006101000a81548160ff02191690831515021790555061137a61120d565b15611388576113876109ce565b5b7f1bb96dff6ab5005aff98cdc0cf176bb7d8e0423cb48e02217d35b042cec81e9f816040516113b791906135cf565b60405180910390a150565b6113ca612842565b73ffffffffffffffffffffffffffffffffffffffff166113e86107cc565b73ffffffffffffffffffffffffffffffffffffffff161461143e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143590613479565b60405180910390fd5b6114486000612901565b565b7f000000000000000000000000000000000000000000000000000000000000000081565b611476612842565b73ffffffffffffffffffffffffffffffffffffffff166114946107cc565b73ffffffffffffffffffffffffffffffffffffffff16146114ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e190613479565b60405180910390fd5b6114f26129c5565b565b600047905090565b611504612ac4565b600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a900460ff1615151515815250509050919050565b611567612842565b73ffffffffffffffffffffffffffffffffffffffff166115856107cc565b73ffffffffffffffffffffffffffffffffffffffff16146115db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d290613479565b60405180910390fd5b6115e361120d565b611622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161990613259565b60405180910390fd5b61162c6001612a68565b565b61163661120d565b611675576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166c90613259565b60405180910390fd5b61167d610819565b602001516116c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b7906134f9565b60405180910390fd5b6116c8610819565b6000015161170b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170290613459565b60405180910390fd5b60017f00000000000000000000000000000000000000000000000000000000000000006117389190613716565b611740610900565b14611780576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177790613579565b60405180910390fd5b600360009054906101000a900460ff166117cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c690613539565b60405180910390fd5b6000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461186191906136bc565b9050600081116118a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189d90613419565b60405180910390fd5b6040518060400160405280600081526020016000815250600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082015181600001556020820151816001015590505060003373ffffffffffffffffffffffffffffffffffffffff1682604051611939906131f3565b60006040518083038185875af1925050503d8060008114611976576040519150601f19603f3d011682016040523d82523d6000602084013e61197b565b606091505b50509050806119bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b690613519565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff167fb68630624831a3c69cc6bb427a9b914261a14121aa4a23b9a98bcb9b0d98afdf83604051611a0591906135cf565b60405180910390a25050565b611a19612842565b73ffffffffffffffffffffffffffffffffffffffff16611a376107cc565b73ffffffffffffffffffffffffffffffffffffffff1614611a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8490613479565b60405180910390fd5b611a9561120d565b611ad4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acb90613259565b60405180910390fd5b611adc610819565b60200151611b1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b16906134f9565b60405180910390fd5b611b27610819565b60000151611b6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6190613459565b60405180910390fd5b6000611b74610900565b905060005b83839050811015611f5f576000848483818110611b9957611b9861387c565b5b9050602002016020810190611bae9190612bfc565b90506000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015490506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490506000821480611c4d5750600081145b15611c5a57505050611f4c565b8060066000878152602001908152602001600020541415611d54576040518060400160405280600081526020016000815250600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101559050508273ffffffffffffffffffffffffffffffffffffffff16857f3d210d5ae36955ded2bdf69bd956eb075b7fd07362288c7df1797cd8eb1199bf8484604051611d2b9291906135ea565b60405180910390a360006006600087815260200190815260200160002081905550505050611f5f565b8060066000878152602001908152602001600020541015611e60578273ffffffffffffffffffffffffffffffffffffffff16857f3d210d5ae36955ded2bdf69bd956eb075b7fd07362288c7df1797cd8eb1199bf84600660008a815260200190815260200160002054604051611dcb9291906135ea565b60405180910390a36006600086815260200190815260200160002054600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000828254611e389190613716565b9250508190555060006006600087815260200190815260200160002081905550505050611f5f565b6040518060400160405280600081526020016000815250600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101559050508273ffffffffffffffffffffffffffffffffffffffff16857f3d210d5ae36955ded2bdf69bd956eb075b7fd07362288c7df1797cd8eb1199bf8484604051611f169291906135ea565b60405180910390a380600660008781526020019081526020016000206000828254611f419190613716565b925050819055505050505b8080611f57906137a4565b915050611b79565b50505050565b611f6d612842565b73ffffffffffffffffffffffffffffffffffffffff16611f8b6107cc565b73ffffffffffffffffffffffffffffffffffffffff1614611fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd890613479565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1647604051612027906131f3565b60006040518083038185875af1925050503d8060008114612064576040519150601f19603f3d011682016040523d82523d6000602084013e612069565b606091505b50509050806120ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a490613519565b60405180910390fd5b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b6120dc612ae2565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806040016040529081600082015481526020016001820154815250509050919050565b612149612842565b73ffffffffffffffffffffffffffffffffffffffff166121676107cc565b73ffffffffffffffffffffffffffffffffffffffff16146121bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b490613479565b60405180910390fd5b6121c561120d565b612204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fb90613259565b60405180910390fd5b61220c610819565b6020015161224f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612246906134f9565b60405180910390fd5b612257610819565b6000015161229a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229190613459565b60405180910390fd5b6000805b838390508110156125055760008484838181106122be576122bd61387c565b5b90506020020160208101906122d39190612c29565b90506000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461236791906136bc565b905060008114156123795750506124f2565b6040518060400160405280600081526020016000815250600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082015181600001556020820151816001015590505060008273ffffffffffffffffffffffffffffffffffffffff168260405161240c906131f3565b60006040518083038185875af1925050503d8060008114612449576040519150601f19603f3d011682016040523d82523d6000602084013e61244e565b606091505b5050905080612492576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248990613519565b60405180910390fd5b818561249e9190613666565b94508273ffffffffffffffffffffffffffffffffffffffff167fb68630624831a3c69cc6bb427a9b914261a14121aa4a23b9a98bcb9b0d98afdf836040516124e691906135cf565b60405180910390a25050505b80806124fd906137a4565b91505061229e565b50505050565b6000600360009054906101000a900460ff16905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006125526002612834565b905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b612583612842565b73ffffffffffffffffffffffffffffffffffffffff166125a16107cc565b73ffffffffffffffffffffffffffffffffffffffff16146125f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ee90613479565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265e906132d9565b60405180910390fd5b61267081612901565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b61269f612842565b73ffffffffffffffffffffffffffffffffffffffff166126bd6107cc565b73ffffffffffffffffffffffffffffffffffffffff1614612713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270a90613479565b60405180910390fd5b61271b610819565b602001511561275f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275690613499565b60405180910390fd5b612767610819565b600001516127aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a190613459565b60405180910390fd5b60006127b4610900565b905060016004600083815260200190815260200160002060000160016101000a81548160ff0219169083151502179055506127ed61120d565b6127fa576127f961146e565b5b7f45806e512b1f4f10e33e8b3cb64d1d11d998d8c554a95e0841fc1c701278bd5d8160405161282991906135cf565b60405180910390a150565b600081600001549050919050565b600033905090565b61285261120d565b612891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288890613259565b60405180910390fd5b60008060146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6128d4612842565b6040516128e19190613208565b60405180910390a1565b6001816000016000828254019250508190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6129cd61120d565b15612a0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0490613399565b60405180910390fd5b6001600060146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612a51612842565b604051612a5e9190613208565b60405180910390a1565b60008160000154905060008111612ab4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aab90613299565b60405180910390fd5b6001810382600001819055505050565b60405180604001604052806000151581526020016000151581525090565b604051806040016040528060008152602001600081525090565b600081359050612b0b81613dfb565b92915050565b600081359050612b2081613e12565b92915050565b60008083601f840112612b3c57612b3b6138b0565b5b8235905067ffffffffffffffff811115612b5957612b586138ab565b5b602083019150836020820283011115612b7557612b746138b5565b5b9250929050565b60008083601f840112612b9257612b916138b0565b5b8235905067ffffffffffffffff811115612baf57612bae6138ab565b5b602083019150836020820283011115612bcb57612bca6138b5565b5b9250929050565b600081359050612be181613e29565b92915050565b600081359050612bf681613e40565b92915050565b600060208284031215612c1257612c116138bf565b5b6000612c2084828501612afc565b91505092915050565b600060208284031215612c3f57612c3e6138bf565b5b6000612c4d84828501612b11565b91505092915050565b60008060208385031215612c6d57612c6c6138bf565b5b600083013567ffffffffffffffff811115612c8b57612c8a6138ba565b5b612c9785828601612b26565b92509250509250929050565b60008060208385031215612cba57612cb96138bf565b5b600083013567ffffffffffffffff811115612cd857612cd76138ba565b5b612ce485828601612b7c565b92509250509250929050565b600060208284031215612d0657612d056138bf565b5b6000612d1484828501612bd2565b91505092915050565b600060208284031215612d3357612d326138bf565b5b6000612d4184828501612be7565b91505092915050565b60008060408385031215612d6157612d606138bf565b5b6000612d6f85828601612be7565b9250506020612d8085828601612be7565b9150509250929050565b612d938161375c565b82525050565b612da28161374a565b82525050565b612db18161376e565b82525050565b612dc08161376e565b82525050565b6000612dd3601483613655565b9150612dde826138c4565b602082019050919050565b6000612df6601283613655565b9150612e01826138ed565b602082019050919050565b6000612e19601b83613655565b9150612e2482613916565b602082019050919050565b6000612e3c601f83613655565b9150612e478261393f565b602082019050919050565b6000612e5f602683613655565b9150612e6a82613968565b604082019050919050565b6000612e82601c83613655565b9150612e8d826139b7565b602082019050919050565b6000612ea5602183613655565b9150612eb0826139e0565b604082019050919050565b6000612ec8601d83613655565b9150612ed382613a2f565b602082019050919050565b6000612eeb601783613655565b9150612ef682613a58565b602082019050919050565b6000612f0e601283613655565b9150612f1982613a81565b602082019050919050565b6000612f31601083613655565b9150612f3c82613aaa565b602082019050919050565b6000612f54602483613655565b9150612f5f82613ad3565b604082019050919050565b6000612f77601283613655565b9150612f8282613b22565b602082019050919050565b6000612f9a601a83613655565b9150612fa582613b4b565b602082019050919050565b6000612fbd601383613655565b9150612fc882613b74565b602082019050919050565b6000612fe0601c83613655565b9150612feb82613b9d565b602082019050919050565b6000613003601b83613655565b915061300e82613bc6565b602082019050919050565b6000613026602083613655565b915061303182613bef565b602082019050919050565b6000613049601a83613655565b915061305482613c18565b602082019050919050565b600061306c602583613655565b915061307782613c41565b604082019050919050565b600061308f602c83613655565b915061309a82613c90565b604082019050919050565b60006130b2601983613655565b91506130bd82613cdf565b602082019050919050565b60006130d560008361364a565b91506130e082613d08565b600082019050919050565b60006130f8601083613655565b915061310382613d0b565b602082019050919050565b600061311b602683613655565b915061312682613d34565b604082019050919050565b600061313e601183613655565b915061314982613d83565b602082019050919050565b6000613161603283613655565b915061316c82613dac565b604082019050919050565b60408201600082015161318d6000850182612da8565b5060208201516131a06020850182612da8565b50505050565b6040820160008201516131bc60008501826131d5565b5060208201516131cf60208501826131d5565b50505050565b6131de8161379a565b82525050565b6131ed8161379a565b82525050565b60006131fe826130c8565b9150819050919050565b600060208201905061321d6000830184612d99565b92915050565b60006020820190506132386000830184612d8a565b92915050565b60006020820190506132536000830184612db7565b92915050565b6000602082019050818103600083015261327281612dc6565b9050919050565b6000602082019050818103600083015261329281612de9565b9050919050565b600060208201905081810360008301526132b281612e0c565b9050919050565b600060208201905081810360008301526132d281612e2f565b9050919050565b600060208201905081810360008301526132f281612e52565b9050919050565b6000602082019050818103600083015261331281612e75565b9050919050565b6000602082019050818103600083015261333281612e98565b9050919050565b6000602082019050818103600083015261335281612ebb565b9050919050565b6000602082019050818103600083015261337281612ede565b9050919050565b6000602082019050818103600083015261339281612f01565b9050919050565b600060208201905081810360008301526133b281612f24565b9050919050565b600060208201905081810360008301526133d281612f47565b9050919050565b600060208201905081810360008301526133f281612f6a565b9050919050565b6000602082019050818103600083015261341281612f8d565b9050919050565b6000602082019050818103600083015261343281612fb0565b9050919050565b6000602082019050818103600083015261345281612fd3565b9050919050565b6000602082019050818103600083015261347281612ff6565b9050919050565b6000602082019050818103600083015261349281613019565b9050919050565b600060208201905081810360008301526134b28161303c565b9050919050565b600060208201905081810360008301526134d28161305f565b9050919050565b600060208201905081810360008301526134f281613082565b9050919050565b60006020820190508181036000830152613512816130a5565b9050919050565b60006020820190508181036000830152613532816130eb565b9050919050565b600060208201905081810360008301526135528161310e565b9050919050565b6000602082019050818103600083015261357281613131565b9050919050565b6000602082019050818103600083015261359281613154565b9050919050565b60006040820190506135ae6000830184613177565b92915050565b60006040820190506135c960008301846131a6565b92915050565b60006020820190506135e460008301846131e4565b92915050565b60006040820190506135ff60008301856131e4565b61360c60208301846131e4565b9392505050565b600060608201905061362860008301866131e4565b61363560208301856131e4565b61364260408301846131e4565b949350505050565b600081905092915050565b600082825260208201905092915050565b60006136718261379a565b915061367c8361379a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156136b1576136b061381e565b5b828201905092915050565b60006136c78261379a565b91506136d28361379a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561370b5761370a61381e565b5b828202905092915050565b60006137218261379a565b915061372c8361379a565b92508282101561373f5761373e61381e565b5b828203905092915050565b60006137558261377a565b9050919050565b60006137678261377a565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006137af8261379a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156137e2576137e161381e565b5b600182019050919050565b60006137f88261379a565b91506138038361379a565b9250826138135761381261384d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f5175616e7469747920746f6f20686967682e0000000000000000000000000000600082015250565b7f436f756e7465723a2064656372656d656e74206f766572666c6f770000000000600082015250565b7f4d6178206e756d626572206f662061756374696f6e7320726561636865642e00600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f41756374696f6e2068617320616c726561647920737461727465642e00000000600082015250565b7f546869732062696420646f65736e2774206368616e676520616e797468696e6760008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b7f546f74616c2076616c75652063616e2774206265206c6f77657265642e000000600082015250565b7f42696420756e697420707269636520746f6f206c6f772e000000000000000000600082015250565b7f496e76616c69642061756374696f6e49442e0000000000000000000000000000600082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f5175616e74697479202a20556e697420507269636520213d20546f74616c205660008201527f616c756500000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f206574686572207761732073656e742e0000000000000000000000000000600082015250565b7f556e6974207072696365207374657020746f6f20736d616c6c2e000000000000600082015250565b7f526566756e6420616d6f756e7420697320302e00000000000000000000000000600082015250565b7f556e69742070726963652063616e2774206265206c6f77657265642e00000000600082015250565b7f41756374696f6e206861736e27742073746172746564207965742e0000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f41756374696f6e2068617320616c726561647920656e6465642e000000000000600082015250565b7f426964206c6f776572207468616e206d696e696d756d2062696420696e63726560008201527f6d656e742e000000000000000000000000000000000000000000000000000000602082015250565b7f4f6e6c79206f776e6572206f722062656e65666963696172792063616e20667560008201527f6e6420636f6e74726163742e0000000000000000000000000000000000000000602082015250565b7f41756374696f6e206861736e277420656e646564207965742e00000000000000600082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f5769746864726177616c7320617265206e6f7420616c6c6f776564207269676860008201527f74206e6f772e0000000000000000000000000000000000000000000000000000602082015250565b7f5175616e7469747920746f6f206c6f772e000000000000000000000000000000600082015250565b7f5769746864726177616c7320616c6c6f7765642061667465722066696e616c2060008201527f61756374696f6e2068617320656e6465642e0000000000000000000000000000602082015250565b613e048161374a565b8114613e0f57600080fd5b50565b613e1b8161375c565b8114613e2657600080fd5b50565b613e328161376e565b8114613e3d57600080fd5b50565b613e498161379a565b8114613e5457600080fd5b5056fea26469706673582212200e65d15c1b0c40b8249f8464bf356e21236386545e0e90369542eb2642a51be164736f6c63430008070033000000000000000000000000255f420f8c20903e012742542c58271d5c19e31b0000000000000000000000001f3621d2d57ee42d3e0cc0aa42156d0c3f7744a500000000000000000000000000000000000000000000000003782dace9d90000000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000bb8

Deployed Bytecode

0x6080604052600436106101e75760003560e01c80638da5cb5b11610102578063d0986ac111610095578063ec89b5e011610064578063ec89b5e014610736578063f2fde38b14610761578063f4d62fa21461078a578063fe67a54b146107b5576102fc565b8063d0986ac11461068c578063d2f51ec5146106b5578063d9c4870e146106e0578063eada586b1461070b576102fc565b8063b66dcb3c116100d1578063b66dcb3c146105e4578063bfab3db91461060d578063c04b18d814610624578063c8b342ab1461064f576102fc565b80638da5cb5b1461054e57806396da43b614610579578063ac60be66146105b6578063b5545a3c146105cd576102fc565b806351357dc31161017a578063715018a611610149578063715018a6146104ca5780637f06cd22146104e15780638456cb591461050c5780638b7afe2e14610523576102fc565b806351357dc31461045557806357c90de51461046c5780635c975abb146104885780636b64c769146104b3576102fc565b8063338bd126116101b6578063338bd126146103bf5780633decef81146103ea5780633f4ba83a1461041357806350d9d4721461042a576102fc565b80631d75ddcc146103015780631e01ea221461032c578063219dd20d14610357578063247aa86a14610394576102fc565b366102fc576000341161022f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610226906133d9565b60405180910390fd5b7f0000000000000000000000001f3621d2d57ee42d3e0cc0aa42156d0c3f7744a573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102bb575061028c6107cc565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6102fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102f1906134d9565b60405180910390fd5b005b600080fd5b34801561030d57600080fd5b506103166107f5565b60405161032391906135cf565b60405180910390f35b34801561033857600080fd5b50610341610819565b60405161034e9190613599565b60405180910390f35b34801561036357600080fd5b5061037e60048036038101906103799190612d1d565b610881565b60405161038b91906135cf565b60405180910390f35b3480156103a057600080fd5b506103a9610900565b6040516103b691906135cf565b60405180910390f35b3480156103cb57600080fd5b506103d4610911565b6040516103e191906135cf565b60405180910390f35b3480156103f657600080fd5b50610411600480360381019061040c9190612cf0565b610935565b005b34801561041f57600080fd5b506104286109ce565b005b34801561043657600080fd5b5061043f610a54565b60405161044c91906135cf565b60405180910390f35b34801561046157600080fd5b5061046a610a78565b005b61048660048036038101906104819190612d4a565b610c48565b005b34801561049457600080fd5b5061049d61120d565b6040516104aa919061323e565b60405180910390f35b3480156104bf57600080fd5b506104c8611223565b005b3480156104d657600080fd5b506104df6113c2565b005b3480156104ed57600080fd5b506104f661144a565b60405161050391906135cf565b60405180910390f35b34801561051857600080fd5b5061052161146e565b005b34801561052f57600080fd5b506105386114f4565b60405161054591906135cf565b60405180910390f35b34801561055a57600080fd5b506105636107cc565b6040516105709190613208565b60405180910390f35b34801561058557600080fd5b506105a0600480360381019061059b9190612d1d565b6114fc565b6040516105ad9190613599565b60405180910390f35b3480156105c257600080fd5b506105cb61155f565b005b3480156105d957600080fd5b506105e261162e565b005b3480156105f057600080fd5b5061060b60048036038101906106069190612c56565b611a11565b005b34801561061957600080fd5b50610622611f65565b005b34801561063057600080fd5b506106396120b0565b60405161064691906135cf565b60405180910390f35b34801561065b57600080fd5b5061067660048036038101906106719190612bfc565b6120d4565b60405161068391906135b4565b60405180910390f35b34801561069857600080fd5b506106b360048036038101906106ae9190612ca3565b612141565b005b3480156106c157600080fd5b506106ca61250b565b6040516106d7919061323e565b60405180910390f35b3480156106ec57600080fd5b506106f5612522565b6040516107029190613223565b60405180910390f35b34801561071757600080fd5b50610720612546565b60405161072d91906135cf565b60405180910390f35b34801561074257600080fd5b5061074b612557565b60405161075891906135cf565b60405180910390f35b34801561076d57600080fd5b5061078860048036038101906107839190612bfc565b61257b565b005b34801561079657600080fd5b5061079f612673565b6040516107ac91906135cf565b60405180910390f35b3480156107c157600080fd5b506107ca612697565b005b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f000000000000000000000000000000000000000000000000000000000000000181565b610821612ac4565b6004600061082d610900565b81526020019081526020016000206040518060400160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a900460ff161515151581525050905090565b60007f000000000000000000000000000000000000000000000000000000000000000382106108e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108dc90613379565b60405180910390fd5b60066000838152602001908152602001600020549050919050565b600061090c6001612834565b905090565b7f00000000000000000000000000000000000000000000000003782dace9d9000081565b61093d612842565b73ffffffffffffffffffffffffffffffffffffffff1661095b6107cc565b73ffffffffffffffffffffffffffffffffffffffff16146109b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a890613479565b60405180910390fd5b80600360006101000a81548160ff02191690831515021790555050565b6109d6612842565b73ffffffffffffffffffffffffffffffffffffffff166109f46107cc565b73ffffffffffffffffffffffffffffffffffffffff1614610a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4190613479565b60405180910390fd5b610a5261284a565b565b7f000000000000000000000000000000000000000000000000000000000000000381565b610a80612842565b73ffffffffffffffffffffffffffffffffffffffff16610a9e6107cc565b73ffffffffffffffffffffffffffffffffffffffff1614610af4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aeb90613479565b60405180910390fd5b610afc61120d565b610b3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3290613259565b60405180910390fd5b610b43610819565b60200151610b86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7d906134f9565b60405180910390fd5b610b8e610819565b60000151610bd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc890613459565b60405180910390fd5b610bdb60016128eb565b7f0000000000000000000000000000000000000000000000000000000000000003610c066001612834565b10610c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3d906132b9565b60405180910390fd5b565b610c5061120d565b15610c90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8790613399565b60405180910390fd5b610c98610819565b6020015115610cdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd390613499565b60405180910390fd5b610ce4610819565b60000151610d27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1e90613459565b60405180910390fd5b600034118015610d5657507f000000000000000000000000000000000000000000000000002386f26fc1000034105b15610d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8d906134b9565b60405180910390fd5b6000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015490506000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154905060008183610e3291906136bc565b90506000849050600086905060003484610e4c9190613666565b905060007f000000000000000000000000000000000000000000000000002386f26fc1000084610e7c91906137ed565b14610ebc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb3906133f9565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000001821015610f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1690613559565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000001e821115610f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7990613279565b60405180910390fd5b83811015610fc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbc90613339565b60405180910390fd5b85831015611008576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fff90613439565b60405180910390fd5b80838361101591906136bc565b14611055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104c906133b9565b60405180910390fd5b7f00000000000000000000000000000000000000000000000003782dace9d900008310156110b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110af90613359565b60405180910390fd5b82861480156110c657508185145b15611106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fd90613319565b60405180910390fd5b82600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555081600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055503373ffffffffffffffffffffffffffffffffffffffff166111b56001612834565b7fe0771bb8191f40e2c9380d044dd32271d56e14b7722162d048aa9ebe13eefbb16111e06002612834565b86866040516111f193929190613613565b60405180910390a361120360026128eb565b5050505050505050565b60008060149054906101000a900460ff16905090565b61122b612842565b73ffffffffffffffffffffffffffffffffffffffff166112496107cc565b73ffffffffffffffffffffffffffffffffffffffff161461129f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129690613479565b60405180910390fd5b6112a7610819565b60200151156112eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e290613499565b60405180910390fd5b6112f3610819565b6000015115611337576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132e906132f9565b60405180910390fd5b6000611341610900565b905060016004600083815260200190815260200160002060000160006101000a81548160ff02191690831515021790555061137a61120d565b15611388576113876109ce565b5b7f1bb96dff6ab5005aff98cdc0cf176bb7d8e0423cb48e02217d35b042cec81e9f816040516113b791906135cf565b60405180910390a150565b6113ca612842565b73ffffffffffffffffffffffffffffffffffffffff166113e86107cc565b73ffffffffffffffffffffffffffffffffffffffff161461143e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143590613479565b60405180910390fd5b6114486000612901565b565b7f000000000000000000000000000000000000000000000000002386f26fc1000081565b611476612842565b73ffffffffffffffffffffffffffffffffffffffff166114946107cc565b73ffffffffffffffffffffffffffffffffffffffff16146114ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e190613479565b60405180910390fd5b6114f26129c5565b565b600047905090565b611504612ac4565b600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a900460ff1615151515815250509050919050565b611567612842565b73ffffffffffffffffffffffffffffffffffffffff166115856107cc565b73ffffffffffffffffffffffffffffffffffffffff16146115db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d290613479565b60405180910390fd5b6115e361120d565b611622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161990613259565b60405180910390fd5b61162c6001612a68565b565b61163661120d565b611675576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166c90613259565b60405180910390fd5b61167d610819565b602001516116c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b7906134f9565b60405180910390fd5b6116c8610819565b6000015161170b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170290613459565b60405180910390fd5b60017f00000000000000000000000000000000000000000000000000000000000000036117389190613716565b611740610900565b14611780576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177790613579565b60405180910390fd5b600360009054906101000a900460ff166117cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c690613539565b60405180910390fd5b6000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461186191906136bc565b9050600081116118a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189d90613419565b60405180910390fd5b6040518060400160405280600081526020016000815250600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082015181600001556020820151816001015590505060003373ffffffffffffffffffffffffffffffffffffffff1682604051611939906131f3565b60006040518083038185875af1925050503d8060008114611976576040519150601f19603f3d011682016040523d82523d6000602084013e61197b565b606091505b50509050806119bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b690613519565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff167fb68630624831a3c69cc6bb427a9b914261a14121aa4a23b9a98bcb9b0d98afdf83604051611a0591906135cf565b60405180910390a25050565b611a19612842565b73ffffffffffffffffffffffffffffffffffffffff16611a376107cc565b73ffffffffffffffffffffffffffffffffffffffff1614611a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8490613479565b60405180910390fd5b611a9561120d565b611ad4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acb90613259565b60405180910390fd5b611adc610819565b60200151611b1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b16906134f9565b60405180910390fd5b611b27610819565b60000151611b6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6190613459565b60405180910390fd5b6000611b74610900565b905060005b83839050811015611f5f576000848483818110611b9957611b9861387c565b5b9050602002016020810190611bae9190612bfc565b90506000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015490506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490506000821480611c4d5750600081145b15611c5a57505050611f4c565b8060066000878152602001908152602001600020541415611d54576040518060400160405280600081526020016000815250600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101559050508273ffffffffffffffffffffffffffffffffffffffff16857f3d210d5ae36955ded2bdf69bd956eb075b7fd07362288c7df1797cd8eb1199bf8484604051611d2b9291906135ea565b60405180910390a360006006600087815260200190815260200160002081905550505050611f5f565b8060066000878152602001908152602001600020541015611e60578273ffffffffffffffffffffffffffffffffffffffff16857f3d210d5ae36955ded2bdf69bd956eb075b7fd07362288c7df1797cd8eb1199bf84600660008a815260200190815260200160002054604051611dcb9291906135ea565b60405180910390a36006600086815260200190815260200160002054600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000828254611e389190613716565b9250508190555060006006600087815260200190815260200160002081905550505050611f5f565b6040518060400160405280600081526020016000815250600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101559050508273ffffffffffffffffffffffffffffffffffffffff16857f3d210d5ae36955ded2bdf69bd956eb075b7fd07362288c7df1797cd8eb1199bf8484604051611f169291906135ea565b60405180910390a380600660008781526020019081526020016000206000828254611f419190613716565b925050819055505050505b8080611f57906137a4565b915050611b79565b50505050565b611f6d612842565b73ffffffffffffffffffffffffffffffffffffffff16611f8b6107cc565b73ffffffffffffffffffffffffffffffffffffffff1614611fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd890613479565b60405180910390fd5b60007f0000000000000000000000001f3621d2d57ee42d3e0cc0aa42156d0c3f7744a573ffffffffffffffffffffffffffffffffffffffff1647604051612027906131f3565b60006040518083038185875af1925050503d8060008114612064576040519150601f19603f3d011682016040523d82523d6000602084013e612069565b606091505b50509050806120ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a490613519565b60405180910390fd5b50565b7f000000000000000000000000000000000000000000000000000000000000001e81565b6120dc612ae2565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806040016040529081600082015481526020016001820154815250509050919050565b612149612842565b73ffffffffffffffffffffffffffffffffffffffff166121676107cc565b73ffffffffffffffffffffffffffffffffffffffff16146121bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b490613479565b60405180910390fd5b6121c561120d565b612204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fb90613259565b60405180910390fd5b61220c610819565b6020015161224f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612246906134f9565b60405180910390fd5b612257610819565b6000015161229a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229190613459565b60405180910390fd5b6000805b838390508110156125055760008484838181106122be576122bd61387c565b5b90506020020160208101906122d39190612c29565b90506000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461236791906136bc565b905060008114156123795750506124f2565b6040518060400160405280600081526020016000815250600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082015181600001556020820151816001015590505060008273ffffffffffffffffffffffffffffffffffffffff168260405161240c906131f3565b60006040518083038185875af1925050503d8060008114612449576040519150601f19603f3d011682016040523d82523d6000602084013e61244e565b606091505b5050905080612492576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248990613519565b60405180910390fd5b818561249e9190613666565b94508273ffffffffffffffffffffffffffffffffffffffff167fb68630624831a3c69cc6bb427a9b914261a14121aa4a23b9a98bcb9b0d98afdf836040516124e691906135cf565b60405180910390a25050505b80806124fd906137a4565b91505061229e565b50505050565b6000600360009054906101000a900460ff16905090565b7f0000000000000000000000001f3621d2d57ee42d3e0cc0aa42156d0c3f7744a581565b60006125526002612834565b905090565b7f000000000000000000000000000000000000000000000000002386f26fc1000081565b612583612842565b73ffffffffffffffffffffffffffffffffffffffff166125a16107cc565b73ffffffffffffffffffffffffffffffffffffffff16146125f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ee90613479565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265e906132d9565b60405180910390fd5b61267081612901565b50565b7f0000000000000000000000000000000000000000000000000000000000000bb881565b61269f612842565b73ffffffffffffffffffffffffffffffffffffffff166126bd6107cc565b73ffffffffffffffffffffffffffffffffffffffff1614612713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270a90613479565b60405180910390fd5b61271b610819565b602001511561275f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275690613499565b60405180910390fd5b612767610819565b600001516127aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a190613459565b60405180910390fd5b60006127b4610900565b905060016004600083815260200190815260200160002060000160016101000a81548160ff0219169083151502179055506127ed61120d565b6127fa576127f961146e565b5b7f45806e512b1f4f10e33e8b3cb64d1d11d998d8c554a95e0841fc1c701278bd5d8160405161282991906135cf565b60405180910390a150565b600081600001549050919050565b600033905090565b61285261120d565b612891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288890613259565b60405180910390fd5b60008060146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6128d4612842565b6040516128e19190613208565b60405180910390a1565b6001816000016000828254019250508190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6129cd61120d565b15612a0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0490613399565b60405180910390fd5b6001600060146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612a51612842565b604051612a5e9190613208565b60405180910390a1565b60008160000154905060008111612ab4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aab90613299565b60405180910390fd5b6001810382600001819055505050565b60405180604001604052806000151581526020016000151581525090565b604051806040016040528060008152602001600081525090565b600081359050612b0b81613dfb565b92915050565b600081359050612b2081613e12565b92915050565b60008083601f840112612b3c57612b3b6138b0565b5b8235905067ffffffffffffffff811115612b5957612b586138ab565b5b602083019150836020820283011115612b7557612b746138b5565b5b9250929050565b60008083601f840112612b9257612b916138b0565b5b8235905067ffffffffffffffff811115612baf57612bae6138ab565b5b602083019150836020820283011115612bcb57612bca6138b5565b5b9250929050565b600081359050612be181613e29565b92915050565b600081359050612bf681613e40565b92915050565b600060208284031215612c1257612c116138bf565b5b6000612c2084828501612afc565b91505092915050565b600060208284031215612c3f57612c3e6138bf565b5b6000612c4d84828501612b11565b91505092915050565b60008060208385031215612c6d57612c6c6138bf565b5b600083013567ffffffffffffffff811115612c8b57612c8a6138ba565b5b612c9785828601612b26565b92509250509250929050565b60008060208385031215612cba57612cb96138bf565b5b600083013567ffffffffffffffff811115612cd857612cd76138ba565b5b612ce485828601612b7c565b92509250509250929050565b600060208284031215612d0657612d056138bf565b5b6000612d1484828501612bd2565b91505092915050565b600060208284031215612d3357612d326138bf565b5b6000612d4184828501612be7565b91505092915050565b60008060408385031215612d6157612d606138bf565b5b6000612d6f85828601612be7565b9250506020612d8085828601612be7565b9150509250929050565b612d938161375c565b82525050565b612da28161374a565b82525050565b612db18161376e565b82525050565b612dc08161376e565b82525050565b6000612dd3601483613655565b9150612dde826138c4565b602082019050919050565b6000612df6601283613655565b9150612e01826138ed565b602082019050919050565b6000612e19601b83613655565b9150612e2482613916565b602082019050919050565b6000612e3c601f83613655565b9150612e478261393f565b602082019050919050565b6000612e5f602683613655565b9150612e6a82613968565b604082019050919050565b6000612e82601c83613655565b9150612e8d826139b7565b602082019050919050565b6000612ea5602183613655565b9150612eb0826139e0565b604082019050919050565b6000612ec8601d83613655565b9150612ed382613a2f565b602082019050919050565b6000612eeb601783613655565b9150612ef682613a58565b602082019050919050565b6000612f0e601283613655565b9150612f1982613a81565b602082019050919050565b6000612f31601083613655565b9150612f3c82613aaa565b602082019050919050565b6000612f54602483613655565b9150612f5f82613ad3565b604082019050919050565b6000612f77601283613655565b9150612f8282613b22565b602082019050919050565b6000612f9a601a83613655565b9150612fa582613b4b565b602082019050919050565b6000612fbd601383613655565b9150612fc882613b74565b602082019050919050565b6000612fe0601c83613655565b9150612feb82613b9d565b602082019050919050565b6000613003601b83613655565b915061300e82613bc6565b602082019050919050565b6000613026602083613655565b915061303182613bef565b602082019050919050565b6000613049601a83613655565b915061305482613c18565b602082019050919050565b600061306c602583613655565b915061307782613c41565b604082019050919050565b600061308f602c83613655565b915061309a82613c90565b604082019050919050565b60006130b2601983613655565b91506130bd82613cdf565b602082019050919050565b60006130d560008361364a565b91506130e082613d08565b600082019050919050565b60006130f8601083613655565b915061310382613d0b565b602082019050919050565b600061311b602683613655565b915061312682613d34565b604082019050919050565b600061313e601183613655565b915061314982613d83565b602082019050919050565b6000613161603283613655565b915061316c82613dac565b604082019050919050565b60408201600082015161318d6000850182612da8565b5060208201516131a06020850182612da8565b50505050565b6040820160008201516131bc60008501826131d5565b5060208201516131cf60208501826131d5565b50505050565b6131de8161379a565b82525050565b6131ed8161379a565b82525050565b60006131fe826130c8565b9150819050919050565b600060208201905061321d6000830184612d99565b92915050565b60006020820190506132386000830184612d8a565b92915050565b60006020820190506132536000830184612db7565b92915050565b6000602082019050818103600083015261327281612dc6565b9050919050565b6000602082019050818103600083015261329281612de9565b9050919050565b600060208201905081810360008301526132b281612e0c565b9050919050565b600060208201905081810360008301526132d281612e2f565b9050919050565b600060208201905081810360008301526132f281612e52565b9050919050565b6000602082019050818103600083015261331281612e75565b9050919050565b6000602082019050818103600083015261333281612e98565b9050919050565b6000602082019050818103600083015261335281612ebb565b9050919050565b6000602082019050818103600083015261337281612ede565b9050919050565b6000602082019050818103600083015261339281612f01565b9050919050565b600060208201905081810360008301526133b281612f24565b9050919050565b600060208201905081810360008301526133d281612f47565b9050919050565b600060208201905081810360008301526133f281612f6a565b9050919050565b6000602082019050818103600083015261341281612f8d565b9050919050565b6000602082019050818103600083015261343281612fb0565b9050919050565b6000602082019050818103600083015261345281612fd3565b9050919050565b6000602082019050818103600083015261347281612ff6565b9050919050565b6000602082019050818103600083015261349281613019565b9050919050565b600060208201905081810360008301526134b28161303c565b9050919050565b600060208201905081810360008301526134d28161305f565b9050919050565b600060208201905081810360008301526134f281613082565b9050919050565b60006020820190508181036000830152613512816130a5565b9050919050565b60006020820190508181036000830152613532816130eb565b9050919050565b600060208201905081810360008301526135528161310e565b9050919050565b6000602082019050818103600083015261357281613131565b9050919050565b6000602082019050818103600083015261359281613154565b9050919050565b60006040820190506135ae6000830184613177565b92915050565b60006040820190506135c960008301846131a6565b92915050565b60006020820190506135e460008301846131e4565b92915050565b60006040820190506135ff60008301856131e4565b61360c60208301846131e4565b9392505050565b600060608201905061362860008301866131e4565b61363560208301856131e4565b61364260408301846131e4565b949350505050565b600081905092915050565b600082825260208201905092915050565b60006136718261379a565b915061367c8361379a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156136b1576136b061381e565b5b828201905092915050565b60006136c78261379a565b91506136d28361379a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561370b5761370a61381e565b5b828202905092915050565b60006137218261379a565b915061372c8361379a565b92508282101561373f5761373e61381e565b5b828203905092915050565b60006137558261377a565b9050919050565b60006137678261377a565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006137af8261379a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156137e2576137e161381e565b5b600182019050919050565b60006137f88261379a565b91506138038361379a565b9250826138135761381261384d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f5175616e7469747920746f6f20686967682e0000000000000000000000000000600082015250565b7f436f756e7465723a2064656372656d656e74206f766572666c6f770000000000600082015250565b7f4d6178206e756d626572206f662061756374696f6e7320726561636865642e00600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f41756374696f6e2068617320616c726561647920737461727465642e00000000600082015250565b7f546869732062696420646f65736e2774206368616e676520616e797468696e6760008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b7f546f74616c2076616c75652063616e2774206265206c6f77657265642e000000600082015250565b7f42696420756e697420707269636520746f6f206c6f772e000000000000000000600082015250565b7f496e76616c69642061756374696f6e49442e0000000000000000000000000000600082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f5175616e74697479202a20556e697420507269636520213d20546f74616c205660008201527f616c756500000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f206574686572207761732073656e742e0000000000000000000000000000600082015250565b7f556e6974207072696365207374657020746f6f20736d616c6c2e000000000000600082015250565b7f526566756e6420616d6f756e7420697320302e00000000000000000000000000600082015250565b7f556e69742070726963652063616e2774206265206c6f77657265642e00000000600082015250565b7f41756374696f6e206861736e27742073746172746564207965742e0000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f41756374696f6e2068617320616c726561647920656e6465642e000000000000600082015250565b7f426964206c6f776572207468616e206d696e696d756d2062696420696e63726560008201527f6d656e742e000000000000000000000000000000000000000000000000000000602082015250565b7f4f6e6c79206f776e6572206f722062656e65666963696172792063616e20667560008201527f6e6420636f6e74726163742e0000000000000000000000000000000000000000602082015250565b7f41756374696f6e206861736e277420656e646564207965742e00000000000000600082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f5769746864726177616c7320617265206e6f7420616c6c6f776564207269676860008201527f74206e6f772e0000000000000000000000000000000000000000000000000000602082015250565b7f5175616e7469747920746f6f206c6f772e000000000000000000000000000000600082015250565b7f5769746864726177616c7320616c6c6f7765642061667465722066696e616c2060008201527f61756374696f6e2068617320656e6465642e0000000000000000000000000000602082015250565b613e048161374a565b8114613e0f57600080fd5b50565b613e1b8161375c565b8114613e2657600080fd5b50565b613e328161376e565b8114613e3d57600080fd5b50565b613e498161379a565b8114613e5457600080fd5b5056fea26469706673582212200e65d15c1b0c40b8249f8464bf356e21236386545e0e90369542eb2642a51be164736f6c63430008070033

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

000000000000000000000000255f420f8c20903e012742542c58271d5c19e31b0000000000000000000000001f3621d2d57ee42d3e0cc0aa42156d0c3f7744a500000000000000000000000000000000000000000000000003782dace9d90000000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000bb8

-----Decoded View---------------
Arg [0] : _contractOwner (address): 0x255F420F8C20903E012742542C58271d5c19e31b
Arg [1] : _beneficiaryAddress (address): 0x1F3621d2d57EE42d3E0cC0aA42156d0C3f7744A5
Arg [2] : _minimumUnitPrice (uint256): 250000000000000000
Arg [3] : _minimumBidIncrement (uint256): 10000000000000000
Arg [4] : _unitPriceStepSize (uint256): 10000000000000000
Arg [5] : _minimumQuantity (uint256): 1
Arg [6] : _maximumQuantity (uint256): 30
Arg [7] : _numberOfAuctions (uint256): 3
Arg [8] : _itemsPerDay (uint256): 3000

-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 000000000000000000000000255f420f8c20903e012742542c58271d5c19e31b
Arg [1] : 0000000000000000000000001f3621d2d57ee42d3e0cc0aa42156d0c3f7744a5
Arg [2] : 00000000000000000000000000000000000000000000000003782dace9d90000
Arg [3] : 000000000000000000000000000000000000000000000000002386f26fc10000
Arg [4] : 000000000000000000000000000000000000000000000000002386f26fc10000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [6] : 000000000000000000000000000000000000000000000000000000000000001e
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000bb8


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  ]
[ 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.