xDAI Price: $0.99993 (-0.01%)
Gas: 1 GWei

Contract

0x79bfE41cDbF6b7E949B93B46a2cBEFB497d71c20
Transaction Hash
Method
Block
From
To
Claim Rare391942452025-03-24 4:21:5530 days ago1742790115IN
0x79bfE41c...497d71c20
0 xDAI0.000274162
Remove L Ptokens388561852025-03-04 5:38:2050 days ago1741066700IN
0x79bfE41c...497d71c20
0 xDAI0.00036085
Claim Rare388561632025-03-04 5:36:3050 days ago1741066590IN
0x79bfE41c...497d71c20
0 xDAI0.000298532
Claim Rare373625432024-12-05 1:33:05139 days ago1733362385IN
0x79bfE41c...497d71c20
0 xDAI0.000271642
Remove L Ptokens373228282024-12-02 17:06:05141 days ago1733159165IN
0x79bfE41c...497d71c20
0 xDAI0.000360745
Claim Rare373227322024-12-02 16:58:05141 days ago1733158685IN
0x79bfE41c...497d71c20
0 xDAI0.000278932
Claim Rare361645152024-09-24 11:42:05210 days ago1727178125IN
0x79bfE41c...497d71c20
0 xDAI0.000270472
Claim Rare361182892024-09-21 17:53:15213 days ago1726941195IN
0x79bfE41c...497d71c20
0 xDAI0.000326962
Claim Rare360150092024-09-15 14:34:00219 days ago1726410840IN
0x79bfE41c...497d71c20
0 xDAI0.000289112
Claim Rare359126572024-09-09 12:46:55225 days ago1725886015IN
0x79bfE41c...497d71c20
0 xDAI0.000270622
Claim Rare354813562024-08-14 15:41:20251 days ago1723650080IN
0x79bfE41c...497d71c20
0 xDAI0.000270472
Remove L Ptokens352766112024-08-02 8:50:00264 days ago1722588600IN
0x79bfE41c...497d71c20
0 xDAI0.000336951.99640162
Remove L Ptokens352764302024-08-02 8:34:15264 days ago1722587655IN
0x79bfE41c...497d71c20
0 xDAI0.000958785
Claim Rare351653742024-07-26 17:11:45270 days ago1722013905IN
0x79bfE41c...497d71c20
0 xDAI0.000270762
Claim Rare351444422024-07-25 11:11:40271 days ago1721905900IN
0x79bfE41c...497d71c20
0 xDAI0.000291382
Claim Rare348466942024-07-07 15:49:20289 days ago1720367360IN
0x79bfE41c...497d71c20
0 xDAI0.000257912
Claim Rare345991842024-06-22 19:55:35304 days ago1719086135IN
0x79bfE41c...497d71c20
0 xDAI0.000270472
Claim Rare342950982024-06-04 15:45:15322 days ago1717515915IN
0x79bfE41c...497d71c20
0 xDAI0.000270332
Claim Rare341883042024-05-29 7:02:15329 days ago1716966135IN
0x79bfE41c...497d71c20
0 xDAI0.000321972
Claim Rare341582082024-05-27 11:45:35330 days ago1716810335IN
0x79bfE41c...497d71c20
0 xDAI0.000270332
Claim Rare339617062024-05-15 18:47:20342 days ago1715798840IN
0x79bfE41c...497d71c20
0 xDAI0.000272082
Claim Rare339509622024-05-15 3:29:55343 days ago1715743795IN
0x79bfE41c...497d71c20
0 xDAI0.0003322.27997004
Claim Rare337825432024-05-05 2:29:40353 days ago1714876180IN
0x79bfE41c...497d71c20
0 xDAI0.000174051.3536
Claim Rare334833302024-04-17 3:53:45371 days ago1713326025IN
0x79bfE41c...497d71c20
0 xDAI0.000776595.33311588
Claim Rare333019802024-04-06 6:56:25382 days ago1712386585IN
0x79bfE41c...497d71c20
0 xDAI0.00036462.83702094
View all transactions

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To
391942452025-03-24 4:21:5530 days ago1742790115
0x79bfE41c...497d71c20
0.00045487 xDAI
388561632025-03-04 5:36:3050 days ago1741066590
0x79bfE41c...497d71c20
0.00061039 xDAI
373625432024-12-05 1:33:05139 days ago1733362385
0x79bfE41c...497d71c20
0.01951485 xDAI
373227322024-12-02 16:58:05141 days ago1733158685
0x79bfE41c...497d71c20
0.00000404 xDAI
361645152024-09-24 11:42:05210 days ago1727178125
0x79bfE41c...497d71c20
0.0319766 xDAI
361182892024-09-21 17:53:15213 days ago1726941195
0x79bfE41c...497d71c20
0.00002516 xDAI
360150092024-09-15 14:34:00219 days ago1726410840
0x79bfE41c...497d71c20
0.00016259 xDAI
359126572024-09-09 12:46:55225 days ago1725886015
0x79bfE41c...497d71c20
0.05251604 xDAI
354813562024-08-14 15:41:20251 days ago1723650080
0x79bfE41c...497d71c20
0.08605162 xDAI
352766112024-08-02 8:50:00264 days ago1722588600
0x79bfE41c...497d71c20
0.00065766 xDAI
352764302024-08-02 8:34:15264 days ago1722587655
0x79bfE41c...497d71c20
0.00070395 xDAI
351653742024-07-26 17:11:45270 days ago1722013905
0x79bfE41c...497d71c20
0.14045258 xDAI
351444422024-07-25 11:11:40271 days ago1721905900
0x79bfE41c...497d71c20
0.00115263 xDAI
348466942024-07-07 15:49:20289 days ago1720367360
0x79bfE41c...497d71c20
0.0011563 xDAI
345991842024-06-22 19:55:35304 days ago1719086135
0x79bfE41c...497d71c20
0.23070497 xDAI
342950982024-06-04 15:45:15322 days ago1717515915
0x79bfE41c...497d71c20
0.37655432 xDAI
341883042024-05-29 7:02:15329 days ago1716966135
0x79bfE41c...497d71c20
0.00052811 xDAI
341582082024-05-27 11:45:35330 days ago1716810335
0x79bfE41c...497d71c20
0.61494202 xDAI
339617062024-05-15 18:47:20342 days ago1715798840
0x79bfE41c...497d71c20
1.00370213 xDAI
339509622024-05-15 3:29:55343 days ago1715743795
0x79bfE41c...497d71c20
0.00823697 xDAI
337825432024-05-05 2:29:40353 days ago1714876180
0x79bfE41c...497d71c20
0.00826315 xDAI
334833302024-04-17 3:53:45371 days ago1713326025
0x79bfE41c...497d71c20
0.00828941 xDAI
333019802024-04-06 6:56:25382 days ago1712386585
0x79bfE41c...497d71c20
0.00831576 xDAI
332808222024-04-05 0:06:50383 days ago1712275610
0x79bfE41c...497d71c20
0.00028794 xDAI
332802662024-04-04 23:18:05383 days ago1712272685
0x79bfE41c...497d71c20
0.00022738 xDAI
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Rare_Staking

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at gnosisscan.io on 2022-08-04
*/

pragma solidity >=0.6.0 <0.8.0;



/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

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

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

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

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

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

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

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

// File: contracts\rare-stake-v3.sol

pragma solidity >=0.6.0 <0.8.0;
// Writen by affinity design for anonymous client
// token = 0x57e93BB58268dE818B42E3795c97BAD58aFCD3Fe // rare token mainnet
// to = 0x5805bb63e73Ec272c74e210D280C05B41D719827  // honeyswap Rare LP token address


interface IERC1155 {
  function safeTransferFrom(address _from, address _to, uint256 _id, uint256 _amount, bytes calldata _data) external;
  function safeBatchTransferFrom(address _from, address _to, uint256[] calldata _ids, uint256[] calldata _amounts, bytes calldata _data) external;
  function balanceOf(address _owner, uint256 _id) external view returns (uint256);
  function balanceOfBatch(address[] calldata _owners, uint256[] calldata _ids) external view returns (uint256[] memory);
  function setApprovalForAll(address _operator, bool _approved) external;
  function isApprovedForAll(address _owner, address _operator) external view returns (bool isOperator);

  event TransferSingle(address indexed _operator, address indexed _from, address indexed _to, uint256 _id, uint256 _amount);
  event TransferBatch(address indexed _operator, address indexed _from, address indexed _to, uint256[] _ids, uint256[] _amounts);
  event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);
}


interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function allowance(address owner, address spender) external view returns (uint256);

    function transfer(address recipient, uint256 amount) external returns (bool);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);


    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}



contract Rare_Staking {
    //-------------------Libraries---------------------------

    using SafeMath for uint;
    using SafeMath for uint8;
    using SafeMath for uint16;
    using SafeMath for uint32;
    using SafeMath for uint64;

    //-------------------Contracts-----------------------------
    IERC20 private rare;
    IERC20 private rareLP;

    IERC1155 private nft1;
    IERC1155 private nft2;
    IERC1155 private nft3;
    IERC1155 private nft4;
    IERC1155 private nft5;

    uint16 private nft1id;
    uint16 private nft2id;
    uint16 private nft3id;
    uint16 private nft4id;
    uint16 private nft5id;


    uint8 private nft1_value = 2;
    uint private nft2_value = 10 ether;
    uint private nft3_value = 25 ether;  
    uint private nft4_value = 50 ether;
    uint private nft5_value = 100 ether;

    //-------------------Storage-----------------------------
    address payable internal manager;
    uint64 private fee;
    uint public mstrLiqBal;
    uint public calcLiqBonus;
    uint public totalRareClaimed;
    uint32 public totalNumStakers;

    uint32 private A = 120400;  // period length a = 7 days in blocks = 120400
    uint32 private B = A*4;  // period length b = 21 days in blocks = 481600
    uint32 private C = A*12;  // period length c = 84 days in blocks = 1444800
    uint8 private termBonusA = 1;
    uint8 private termBonusB = 2;
    uint8 private termBonusC = 3;

    //-------------------Structs-----------------------------
    struct Term {
        uint8 bonus;
        uint8 amtInst;
        uint amtLocked;
        uint32 termLocked;
        uint32 nextClaimLocked;
        uint32 lastClaimBlock;
    }

    struct Info {
        // active vars
        mapping(uint => Term) tokenLock; // supples amt staked, returns term details
        uint totalLP;
        uint32 totalActiveStaked;
        // history vars
        uint totalRareClaimed;
        uint32 totatTimesClaimed;
        uint32 totalTimesStaked;
    }

    //-------------------Mappings---------------------------
    mapping(address => Info) public staker;

    //-------------------Events-----------------------------
    event NewStaker(address indexed _adrStaked,  uint indexed _amtLpStaked, uint indexed _releaseBlock, uint  _termNumSelected, bool _stakeSuccess);
    event LoseStaker(address indexed _adrRemoved,  uint indexed _amtLpRemoved, uint _timesStaked, bool _unStakeSuccess);
    // event UserClaim(address indexed _adrClaimed,  uint indexed _amtRareClaimed, uint _claimNum, bool _claimSuccess);
    event OwnershipTransferred(address indexed _newManager);

    //-------------------Contructor-------------------------
    constructor(address _rareAddress, address _LPAddress) {
        manager = msg.sender;
        fee = 1 ether;

        rare = IERC20(_rareAddress);
        rareLP = IERC20(_LPAddress);

    }


    //-------------------Public Functions-------------------

    // 1) stakeLPtokens ****FUNCTION THAT ALLOWS USERS TO STAKE LP TOKENS TO EARN RARE DIVIDENDS

    // NOTE* must allow THIS address via interface to erc20 interface, to spend LP tokens so it can add to pool on users behalf

    // Rare = 0x57e93BB58268dE818B42E3795c97BAD58aFCD3Fe // rare token mainnet
    // LP = 0x5805bb63e73Ec272c74e210D280C05B41D719827  // Rare LP tokens
    // Honeyswap Router = 0x1C232F01118CB8B424793ae03F870aa7D0ac7f77

    function stakeLPtokens(uint _pickterm) public payable {
        require(rareLP.allowance(msg.sender, address(this)) >= 1, "You must allow some Rare/xDai LP tokens first");
        require(msg.value >= getFee(), "You must cover the xDai transaction fee"); // currently 1 xdai
        require(_pickterm == 1 || _pickterm == 2 || _pickterm == 3, "Invalid term selection: Must be 1, 2 or 3");

        // pays fee to manager
        manager.transfer(getFee().div(2));

        // gets the allowed ammount
        uint allowedAmt = rareLP.allowance(msg.sender, address(this));

        // set login to add to current balance only if ammount is indeed the same amount, if not sets a new instance
        if(staker[msg.sender].tokenLock[allowedAmt].amtLocked == allowedAmt){
            staker[msg.sender].tokenLock[allowedAmt].amtLocked = staker[msg.sender].tokenLock[allowedAmt].amtLocked.mul(2);
            staker[msg.sender].tokenLock[allowedAmt].amtInst = uint8(staker[msg.sender].tokenLock[allowedAmt].amtInst.add(1));
            totalNumStakers = uint32(totalNumStakers.sub(1));
            staker[msg.sender].totalActiveStaked = uint32(staker[msg.sender].totalActiveStaked.sub(1));
        } else {
            staker[msg.sender].tokenLock[allowedAmt].amtLocked = allowedAmt;
            staker[msg.sender].tokenLock[allowedAmt].amtInst = 1;
        }


        // staker global mappings weeklyCompBonus
        mstrLiqBal = mstrLiqBal.add(allowedAmt);
        totalNumStakers = uint32(totalNumStakers.add(1));
        staker[msg.sender].totalLP = staker[msg.sender].totalLP.add(allowedAmt);
        staker[msg.sender].totalActiveStaked = uint32(staker[msg.sender].totalActiveStaked.add(1));
        staker[msg.sender].totalTimesStaked = uint32(staker[msg.sender].totalTimesStaked.add(1));
        staker[msg.sender].tokenLock[allowedAmt].lastClaimBlock = uint32(block.number);

        // pick term logic, sets
        if(_pickterm == 1) {
            staker[msg.sender].tokenLock[allowedAmt].termLocked = uint32(block.number.add(A));
            staker[msg.sender].tokenLock[allowedAmt].bonus = termBonusA;
        }else if(_pickterm == 2){
            staker[msg.sender].tokenLock[allowedAmt].termLocked = uint32(block.number.add(B));
            staker[msg.sender].tokenLock[allowedAmt].bonus = termBonusB;
        }else if(_pickterm == 3){
            staker[msg.sender].tokenLock[allowedAmt].termLocked = uint32(block.number.add(C));
            staker[msg.sender].tokenLock[allowedAmt].bonus = termBonusC;
        }

        // calc bonuses
        if(staker[msg.sender].tokenLock[allowedAmt].amtInst > 1){
        calcLiqBonus = calcLiqBonus.add(calcTermBonusLP(allowedAmt).sub(allowedAmt.mul(staker[msg.sender].tokenLock[allowedAmt].amtInst)));
        } else {
        calcLiqBonus = calcLiqBonus.add(calcTermBonusLP(allowedAmt));
        }

        // transfer coins from user to this contract address
        rareLP.transferFrom(msg.sender, address(this), allowedAmt);

        // emit event success
        emit NewStaker(msg.sender,allowedAmt,staker[msg.sender].tokenLock[allowedAmt].termLocked,_pickterm,true);

    }



    // 2) removeLPtokens **** add function to remove liquiditety and pays out user
    function removeLPtokens(uint _amt) chkAmt(_amt) termBlk(_amt) public {
    //  termblk(_amt) blocks amt from withdraw untill block is achived ^
    // chkAmt(_amt) makes sure the amt is valid for users address ^

    // claims rare if possible
    if(staker[msg.sender].tokenLock[_amt].nextClaimLocked <= block.number){
        claimRare(_amt);
    }

    // get instance number
    uint amtInst = staker[msg.sender].tokenLock[_amt].amtInst;

    // Remove AMT mappings
    staker[msg.sender].tokenLock[_amt].amtLocked = 0;
    staker[msg.sender].tokenLock[_amt].amtInst = uint8(staker[msg.sender].tokenLock[_amt].amtInst.sub(1));



    // Remove global mappings
    mstrLiqBal = mstrLiqBal.sub(_amt.mul(amtInst));
    calcLiqBonus = calcLiqBonus.sub(_amt.mul(amtInst));
    totalNumStakers = uint32(totalNumStakers.sub(1));
    staker[msg.sender].totalLP = staker[msg.sender].totalLP.sub(_amt.mul(amtInst));
    staker[msg.sender].totalActiveStaked = uint32(staker[msg.sender].totalActiveStaked.sub(1));


    // transfer back LP tokens
    rareLP.transfer(msg.sender, _amt.mul(amtInst));

    // emit events
    emit LoseStaker(msg.sender,_amt,staker[msg.sender].totalTimesStaked,true);

    }



    // 3) claimRare **** add function to payout user based on reward allowances
    function claimRare(uint _amt) chkAmt(_amt) blk(_amt) termBlk(_amt) public {

    // calculatee fee payout
    uint xdai_bp = calcPercentage(_amt, mstrLiqBal);
    uint xdai_payout = calcDividend(getXdaiBalance(), xdai_bp);

    // calculate old term LP bonus for removal
    uint termBonusOld = calcTermBonusLP(_amt).sub(_amt.mul(staker[msg.sender].tokenLock[_amt].amtInst));

    // calculate reward amt in rare (this includes teir bonuses and weekly bonus)
    uint reward = calcTotalBonusVal(_amt);

    // LOCK claim for another 7 days & resets weekly rewards
    staker[msg.sender].tokenLock[_amt].nextClaimLocked = uint32(block.number + A); 
    staker[msg.sender].tokenLock[_amt].lastClaimBlock = uint32(block.number);

    // Change lifetime stats
    totalRareClaimed = totalRareClaimed.add(reward);
    calcLiqBonus = calcLiqBonus.sub(termBonusOld);
    staker[msg.sender].tokenLock[_amt].bonus = 1;
    staker[msg.sender].tokenLock[_amt].termLocked = 0;
    staker[msg.sender].totalRareClaimed = staker[msg.sender].totalRareClaimed.add(reward);
    staker[msg.sender].totatTimesClaimed = uint32(staker[msg.sender].totatTimesClaimed.add(1));

    // Transfer fee payout in xdai from contract
    payable(msg.sender).transfer(xdai_payout);

    // transfer funds
    rare.transfer(msg.sender, reward);

    // emit events
    // emit UserClaim(msg.sender,reward,staker[msg.sender].totatTimesClaimed,true);

    }

    // 4) RenewStake **** add function to relock current position for a new bonus lengeth
    function renewStake(uint _amt, uint _pickterm) chkAmt(_amt) termBlk(_amt) public payable {
    require(getActiveStakedNum() >= 1, "Must Have Something Stake To Set New Terms"); // prevents renewing with nothing
    require(_pickterm == 1 || _pickterm == 2 || _pickterm == 3, "invalied term selection: Must be 1, 2 or 3");
    require(msg.value >= getFee(), "You must cover the xDai transaction fee"); // currently 10 cents amtLocked

    // pays fee to manager
    manager.transfer(getFee().div(2));

    // global settings set
    staker[msg.sender].tokenLock[_amt].lastClaimBlock = uint32(block.number);

    // pick term logic, sets
        if(_pickterm == 1) {
            staker[msg.sender].tokenLock[_amt].termLocked = uint32(block.number.add(A));
            staker[msg.sender].tokenLock[_amt].bonus = termBonusA;
        }else if(_pickterm == 2){
            staker[msg.sender].tokenLock[_amt].termLocked = uint32(block.number.add(B));
            staker[msg.sender].tokenLock[_amt].bonus = termBonusB;
        }else if(_pickterm == 3){
            staker[msg.sender].tokenLock[_amt].termLocked = uint32(block.number.add(C));
            staker[msg.sender].tokenLock[_amt].bonus = termBonusC;
        }

    // calc bonuses
    if(staker[msg.sender].tokenLock[_amt].amtInst > 1){
    calcLiqBonus = calcLiqBonus.add(calcTermBonusLP(_amt).sub(_amt.mul(staker[msg.sender].tokenLock[_amt].amtInst)));
    } else {
    calcLiqBonus = calcLiqBonus.add(calcTermBonusLP(_amt));
    }

    // emit event success
    emit NewStaker(msg.sender,_amt,staker[msg.sender].tokenLock[_amt].termLocked,_pickterm,true);

    }

    //-------------------Exl Calc Return Functions----------

    // Calculates Dividend Amount cycle payout in wei Based On Basis Points supplyed
    function calcDividend(uint _poolBal, uint _basisPoints) public pure returns(uint) {
        require(_poolBal >= 1, "Failed to meet minimum (1 wei) required payout");
        return _poolBal.mul(_basisPoints).div(100 ether);
    }


    // calculates pool percentage in basis points  100% = 100 ether, 10% = 10 ether, 1% = 1 ether
    function calcPercentage(uint _stakedBal, uint _totalBal) public pure returns (uint) {
        require((_stakedBal.mul(100 ether)).div(_totalBal) >= 1, "Failed to meet minimum percentage, To small to even calculate!");
        uint x = _totalBal;
        uint y = _stakedBal;
        uint p = y.mul(100 ether).div(x);
        return p;
    }


    // calculate estimated rare returns, based on amount of weeks spesified
    function calcEstFutureReturns(uint _amt, uint _pickterm, uint _weekNum) public view returns(uint) {
        // prevents infinit loop glitch
        require(_weekNum >= 1, "Must select more then 1 week");
        uint weeklyCompBP;
        // calcs points based on weeks
        for (uint i = 0; i <= _weekNum-1; i++) {
            weeklyCompBP = weeklyCompBP + 1 ether;
        }
        uint lpWeeklyBonus = calcDividend(_amt,weeklyCompBP);
        uint mstLiqTemp = calcLiqBonus.add(lpWeeklyBonus);
        uint termBonusLp = _amt.mul(staker[msg.sender].tokenLock[_amt].amtInst).mul(_pickterm);
        uint bonusBpAmt = calcPercentage(termBonusLp.add(lpWeeklyBonus),mstLiqTemp);
        uint bonusRareAmt = calcDividend(rare.balanceOf(address(this)),bonusBpAmt);
        return bonusRareAmt.mul(_weekNum);
    }


    //-------------------User Calc Functions---------------------
    // # gets active term multipler, returns 1, 2 or 3 ✓
    function getTermBonus(uint _amt) chkAmt(_amt) public view returns(uint) {
        return staker[msg.sender].tokenLock[_amt].bonus;
    }

    // # gets term remainder on active staked amt, returned in blocks ✓
    function getTermLeft(uint _amt) chkAmt(_amt) public view returns(uint) {
        if(staker[msg.sender].tokenLock[_amt].termLocked <= block.number){
        return 0;
        } else {
        return staker[msg.sender].tokenLock[_amt].termLocked.sub(block.number);
        }
    }

    // # gets time of when next week multiplier flips, returns in block ✓
    function getWeekLeft(uint _amt) chkAmt(_amt) public view returns(uint) {
        return A.sub((block.number.sub(staker[msg.sender].tokenLock[_amt].lastClaimBlock)).mod(A));
    }

     // # gets instances percentage of the pool, returns in bp ✓
    function getCurrentTermBonusBP(uint _amt) chkAmt(_amt) public view returns(uint){
        // Calculates current term bonus in relation to the total
        return calcTermBP(_amt);
    }

    // # gets this instances accumulated weekly bonus basis points amount, returns in bp ✓
    function getCurrentWeeklyBonusBP(uint _amt) chkAmt(_amt) public view returns(uint){
        // Calculates current weekly bonus in bp
        return calcWeeklyBonusBP(_amt);
    }

    // # gets this instances estmate of payout of rare coin on next claim, returns in wei
    function getNextClaimReward(uint _amt) chkAmt(_amt) public view returns(uint){
        // calculate weekly reward amt in rare and adds it to the tier reward
        return calcTotalBonusVal(_amt);
    }

    // # gets this instances estmate of payout of rare coin on next claim, returns in wei
    function isAmtUnlocked(uint _amt) chkAmt(_amt) public view returns(bool){
        // calculate weekly reward amt in rare and adds it to the tier reward
        if(staker[msg.sender].tokenLock[_amt].termLocked <= block.number){
            return true;
        } else {
            return false;
        }
    }

    // # gets this instances estmate of payout of rare coin on next claim, returns in wei
    function canClaim(uint _amt) chkAmt(_amt) public view returns(bool){
        // calculate weekly reward amt in rare and adds it to the tier reward
        if(staker[msg.sender].tokenLock[_amt].nextClaimLocked <= block.number){
            return true;
        } else {
            return false;
        }
    }

    //-------------------User Stat View Functions---------------------
    // #gets user total amount lp tokens staked ✓
    function getTotalLPtokens() public view returns (uint) {
        return staker[msg.sender].totalLP;
    }

    // #gets user total amount of rare coin claimed to date ✓
    function getTotalClaimedAmt() public view returns (uint) {
        return staker[msg.sender].totalRareClaimed;
    }

    // #gets user total amount of staked sessions to date ✓
    function getActiveStakedNum() public view returns (uint) {
        return staker[msg.sender].totalActiveStaked;
    }

    // #gets user total amount of completed staked sessions to date ✓
    function getHistoryStakedNum() public view returns (uint) {
        return staker[msg.sender].totalTimesStaked;
    }

    // #gets user total times claimed to date ✓
    function getTotalTimesClaimed() public view returns (uint) {
        return staker[msg.sender].totatTimesClaimed;
    }      

   //-------------------Global Stat View Functions---------------------

    // #gets global fee amount per staker
    function getFee() public view returns (uint) {
        uint userFee = fee;

        // if uses have this nft in their possision apply fee deduction
        if (nft1.balanceOf(msg.sender, nft1id) >= 1){
            return userFee = userFee.div(nft1_value);
        } else {
            return fee;
        }

    }

   // #gets balance of rare tokens this contract adress has
    function getRareBalance() public view returns (uint) {
        return uint(rare.balanceOf(address(this)));
    }

    // #gets balance of xdai contract adress has, only manager
    function getXdaiBalance() public view returns (uint) {
        return uint(address(this).balance);
    }

    //-------------------Interal Functions---------------------

    // Returns the divid amt in rare owed based on active stake and teir rewards, ***Used for other calculations
    function calcTotalBonusVal(uint _amt) internal view returns(uint) {
        return calcTermVal(_amt).add(calcWeeklyBonusVal(_amt));
    }


    // Calculate term bonus rare amt based on AMT liquidity supplied, returns term bonus payout in wei, ***Used for other calculations
    function calcTermVal(uint _amt) internal view returns(uint) {
        uint lpTermBonus = calcTermBonusLP(_amt);
        uint bp = calcPercentage(lpTermBonus,calcLiqBonus);
        return calcDividend(rare.balanceOf(address(this)), bp);
    }

    // Calculate weekly bonus rare amt based on the number of weeks not claimed, returns weekly bonus in wei
    function calcWeeklyBonusVal(uint _amt) internal view returns(uint) {
        uint lpWeeklyBonus = calcWeeklyBonusLP(_amt);
        uint mstrTempLiqBal = calcLiqBonus.add(lpWeeklyBonus);
        uint termLP = calcTermBonusLP(_amt);
        uint bp = calcPercentage(termLP.add(lpWeeklyBonus),mstrTempLiqBal);
        uint fullPayoutAmt = calcDividend(rare.balanceOf(address(this)), bp);
        return fullPayoutAmt.sub(calcTermVal(_amt));
    }


    // Returns the tier bonus liquidity amt of spisific active Lp tokens. ✓ ***Used for other calculations chkAmt(_amt)
    function calcTermBonusLP(uint _amt) internal  view returns(uint) {
        return _amt.mul(staker[msg.sender].tokenLock[_amt].amtInst).mul(staker[msg.sender].tokenLock[_amt].bonus);
    }

    // Calculates the weekly bonus amt of lp tokens staked. ✓ ***Used for other calculations  chkAmt(_amt)
    function calcWeeklyBonusLP(uint _amt) internal view returns(uint) {
        uint weeklyBP = calcWeeklyBonusBP(_amt);
        return calcDividend(_amt,weeklyBP);
    }

    // Returns the divid amt in rare owed based on active stake and teir rewards, ***Used for other calculations
    function calcTermBP(uint _amt) internal view returns(uint) {
        uint bonusAmt = calcTermBonusLP(_amt);
        return calcPercentage(bonusAmt,calcLiqBonus);
    }

    // Returns the bp in rare owed based on active stake and teir rewards, ***Used for other calculations
    function calcWeeklyBonusBP(uint _amt) internal view returns(uint) {

        // init vars
        uint weeklyCompBP;
        uint payments;

        // calculates number of outstanting payments - fomrula = ((_blkNum.sub(_lastClaimed)).div(_blocksPerWeek));
        payments = ((block.number.sub(staker[msg.sender].tokenLock[_amt].lastClaimBlock)).div(A));

        // prevents infinit loop glitch
        // require(payments >= 1, "Must wait until your weeks end to calculate");

        if(payments >= 1) {

        // adds 1 percent bonus on initial investment, compounds term bonuses, in basis points for every week user did not claim
        for (uint i = 0; i <= payments-1; i++) {
            weeklyCompBP = weeklyCompBP + 1 ether;
        }

        // calculate for nft bonuses
        // NFT 2 Bonus
        if (nft2.balanceOf(msg.sender, nft2id) >= 1){
            weeklyCompBP = weeklyCompBP.add(nft2_value);
        }
        // NFT 3 Bonus
        if (nft3.balanceOf(msg.sender, nft3id) >= 1){
            weeklyCompBP = weeklyCompBP.add(nft3_value);
        }
        // NFT 4 Bonus
        if (nft4.balanceOf(msg.sender, nft4id) >= 1){
            weeklyCompBP = weeklyCompBP.add(nft4_value);
        }
        // NFT 5 Bonus
        if (nft5.balanceOf(msg.sender, nft5id) >= 1){
            weeklyCompBP = weeklyCompBP.add(nft5_value);
        }

        return weeklyCompBP;

        } else {
            return 0;
        }
    }



    //-------------------Manager Functions------------------



    // #set the NFT addresses, only manager
    function setNFTAddrs(address _nft1, uint16 _id1, address _nft2, uint16 _id2, address _nft3, uint16 _id3, address _nft4, uint16 _id4, address _nft5, uint16 _id5) public 
restricted {
        nft1 = IERC1155(_nft1);
        nft2 = IERC1155(_nft2);
        nft3 = IERC1155(_nft3);
        nft4 = IERC1155(_nft4);
        nft5 = IERC1155(_nft5);

        nft1id = _id1;
        nft2id = _id2;
        nft3id = _id3;
        nft4id = _id4;
        nft5id = _id5;
    }



    // $sets fee price of submission
    function setFee(uint64 _fee) public restricted {
        require(_fee <= 10 ether, "Cant set the fee higher then 10 xDai");
        fee = _fee;
    }


    // $sets week 1 week length in blocks
    function setWeekLength(uint32 _blockNum) public restricted {
        A = _blockNum;
    }


    // $sets a new manager of the contract
    function setManager(address payable _newManager) public restricted {
        manager = _newManager;
        emit OwnershipTransferred(_newManager);
    }



    //-------------------Modifiers Functions----------------
    //   while (blockTarget >= currentBlock) = true, unlocked
    //   while (blockTarget <= currentBlock) = untrue, locked

    modifier termBlk(uint _amt) {
        require(staker[msg.sender].tokenLock[_amt].termLocked <= block.number, "Locked until term is finnished"); // allow after target reached
        _;
    }

    modifier blk(uint _amt) {
        require(staker[msg.sender].tokenLock[_amt].nextClaimLocked <= block.number, "Locked until the week is up"); // allow after target reached
        _;
    }

    // *makes sure amt is staked by the user first
    modifier chkAmt(uint _amt) {
        require(staker[msg.sender].tokenLock[_amt].amtLocked == _amt.mul(staker[msg.sender].tokenLock[_amt].amtInst), "You must enter an amount you currently have staked");        _;
    }

    // *creates a restricted fuction unless you are the manager
    modifier restricted() {
        require(msg.sender == manager, "You are not the manager");
        _;
    }

    //-------------------Special Functions------------------


    // selfDestruct USE? INCASE OF NOT FINNISHED YET ---------------------------------------------------------------
    // function selfDestruct() public restricted {
    //     // rare.transfer(manager, getRareBalance());
    //     // rareLP.transfer(manager, getRareBalance());
    //     selfdestruct(manager);
    // }

}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_rareAddress","type":"address"},{"internalType":"address","name":"_LPAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_adrRemoved","type":"address"},{"indexed":true,"internalType":"uint256","name":"_amtLpRemoved","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_timesStaked","type":"uint256"},{"indexed":false,"internalType":"bool","name":"_unStakeSuccess","type":"bool"}],"name":"LoseStaker","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_adrStaked","type":"address"},{"indexed":true,"internalType":"uint256","name":"_amtLpStaked","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_releaseBlock","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_termNumSelected","type":"uint256"},{"indexed":false,"internalType":"bool","name":"_stakeSuccess","type":"bool"}],"name":"NewStaker","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_newManager","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"uint256","name":"_poolBal","type":"uint256"},{"internalType":"uint256","name":"_basisPoints","type":"uint256"}],"name":"calcDividend","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amt","type":"uint256"},{"internalType":"uint256","name":"_pickterm","type":"uint256"},{"internalType":"uint256","name":"_weekNum","type":"uint256"}],"name":"calcEstFutureReturns","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"calcLiqBonus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakedBal","type":"uint256"},{"internalType":"uint256","name":"_totalBal","type":"uint256"}],"name":"calcPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amt","type":"uint256"}],"name":"canClaim","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amt","type":"uint256"}],"name":"claimRare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getActiveStakedNum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amt","type":"uint256"}],"name":"getCurrentTermBonusBP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amt","type":"uint256"}],"name":"getCurrentWeeklyBonusBP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHistoryStakedNum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amt","type":"uint256"}],"name":"getNextClaimReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRareBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amt","type":"uint256"}],"name":"getTermBonus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amt","type":"uint256"}],"name":"getTermLeft","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalClaimedAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalLPtokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalTimesClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amt","type":"uint256"}],"name":"getWeekLeft","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getXdaiBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amt","type":"uint256"}],"name":"isAmtUnlocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mstrLiqBal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amt","type":"uint256"}],"name":"removeLPtokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amt","type":"uint256"},{"internalType":"uint256","name":"_pickterm","type":"uint256"}],"name":"renewStake","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint64","name":"_fee","type":"uint64"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_newManager","type":"address"}],"name":"setManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_nft1","type":"address"},{"internalType":"uint16","name":"_id1","type":"uint16"},{"internalType":"address","name":"_nft2","type":"address"},{"internalType":"uint16","name":"_id2","type":"uint16"},{"internalType":"address","name":"_nft3","type":"address"},{"internalType":"uint16","name":"_id3","type":"uint16"},{"internalType":"address","name":"_nft4","type":"address"},{"internalType":"uint16","name":"_id4","type":"uint16"},{"internalType":"address","name":"_nft5","type":"address"},{"internalType":"uint16","name":"_id5","type":"uint16"}],"name":"setNFTAddrs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_blockNum","type":"uint32"}],"name":"setWeekLength","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pickterm","type":"uint256"}],"name":"stakeLPtokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"staker","outputs":[{"internalType":"uint256","name":"totalLP","type":"uint256"},{"internalType":"uint32","name":"totalActiveStaked","type":"uint32"},{"internalType":"uint256","name":"totalRareClaimed","type":"uint256"},{"internalType":"uint32","name":"totatTimesClaimed","type":"uint32"},{"internalType":"uint32","name":"totalTimesStaked","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalNumStakers","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRareClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

608060405260026006601e6101000a81548160ff021916908360ff160217905550678ac7230489e8000060075568015af1d78b58c400006008556802b5e3af16b188000060095568056bc75e2d63100000600a556201d650600f60046101000a81548163ffffffff021916908363ffffffff1602179055506004600f60049054906101000a900463ffffffff1602600f60086101000a81548163ffffffff021916908363ffffffff160217905550600c600f60049054906101000a900463ffffffff1602600f600c6101000a81548163ffffffff021916908363ffffffff1602179055506001600f60106101000a81548160ff021916908360ff1602179055506002600f60116101000a81548160ff021916908360ff1602179055506003600f60126101000a81548160ff021916908360ff1602179055503480156200014457600080fd5b506040516200626538038062006265833981810160405260408110156200016a57600080fd5b81019080805190602001909291908051906020019092919050505033600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550670de0b6b3a7640000600b60146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050615fdb806200028a6000396000f3fe6080604052600436106101e35760003560e01c80636cd70de611610102578063bd8f25d711610095578063d3b2168211610064578063d3b2168214610a09578063d85dc9c214610a5a578063dfe02bdc14610a85578063f3f12d7914610ab6576101e3565b8063bd8f25d714610911578063c95c0d891461093c578063ced72f871461098d578063d0ebdbe7146109b8576101e3565b8063a37b06d4116100d1578063a37b06d41461073a578063a3a5265114610793578063ac8b4c88146107be578063b84f576f146108d6576101e3565b80636cd70de6146105eb5780637e7efe8f1461061657806382e4eda4146106795780638ba3f7d21461070c576101e3565b80633a4d326f1161017a578063575c978e11610149578063575c978e146104f45780635a630d7a1461051f57806362348f97146105645780636b9cb82c146105b3576101e3565b80633a4d326f14610400578063537f38011461044f57806354b6558b1461049e578063568cc229146104c9576101e3565b8063316e2b34116101b6578063316e2b34146103205780633638227b1461036f57806336d90ffe1461039a578063380f1b36146103d5576101e3565b8063027e37ca146101e857806304f8bb3a146102415780630f6ff069146102905780631c924705146102d1575b600080fd5b3480156101f457600080fd5b5061022b6004803603604081101561020b57600080fd5b810190808035906020019092919080359060200190929190505050610ae1565b6040518082815260200191505060405180910390f35b34801561024d57600080fd5b5061027a6004803603602081101561026457600080fd5b8101908080359060200190929190505050610b73565b6040518082815260200191505060405180910390f35b34801561029c57600080fd5b506102cf600480360360208110156102b357600080fd5b81019080803563ffffffff169060200190929190505050610d0b565b005b3480156102dd57600080fd5b5061030a600480360360208110156102f457600080fd5b8101908080359060200190929190505050610df2565b6040518082815260200191505060405180910390f35b34801561032c57600080fd5b506103596004803603602081101561034357600080fd5b8101908080359060200190929190505050610f2c565b6040518082815260200191505060405180910390f35b34801561037b57600080fd5b50610384611066565b6040518082815260200191505060405180910390f35b3480156103a657600080fd5b506103d3600480360360208110156103bd57600080fd5b81019080803590602001909291905050506110b0565b005b3480156103e157600080fd5b506103ea61189e565b6040518082815260200191505060405180910390f35b34801561040c57600080fd5b506104396004803603602081101561042357600080fd5b8101908080359060200190929190505050611968565b6040518082815260200191505060405180910390f35b34801561045b57600080fd5b506104886004803603602081101561047257600080fd5b8101908080359060200190929190505050611aa2565b6040518082815260200191505060405180910390f35b3480156104aa57600080fd5b506104b3611ca6565b6040518082815260200191505060405180910390f35b3480156104d557600080fd5b506104de611d06565b6040518082815260200191505060405180910390f35b34801561050057600080fd5b50610509611d0c565b6040518082815260200191505060405180910390f35b34801561052b57600080fd5b506105626004803603602081101561054257600080fd5b81019080803567ffffffffffffffff169060200190929190505050611d12565b005b34801561057057600080fd5b5061059d6004803603602081101561058757600080fd5b8101908080359060200190929190505050611e6c565b6040518082815260200191505060405180910390f35b6105e9600480360360408110156105c957600080fd5b810190808035906020019092919080359060200190929190505050612099565b005b3480156105f757600080fd5b50610600612a5c565b6040518082815260200191505060405180910390f35b34801561062257600080fd5b506106636004803603606081101561063957600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050612aa6565b6040518082815260200191505060405180910390f35b34801561068557600080fd5b506106c86004803603602081101561069c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612d13565b604051808681526020018563ffffffff1681526020018481526020018363ffffffff1681526020018263ffffffff1681526020019550505050505060405180910390f35b6107386004803603602081101561072257600080fd5b8101908080359060200190929190505050612d79565b005b34801561074657600080fd5b5061077d6004803603604081101561075d57600080fd5b810190808035906020019092919080359060200190929190505050613e69565b6040518082815260200191505060405180910390f35b34801561079f57600080fd5b506107a8613f3a565b6040518082815260200191505060405180910390f35b3480156107ca57600080fd5b506108d460048036036101408110156107e257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803561ffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803561ffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803561ffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803561ffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803561ffff169060200190929190505050613f42565b005b3480156108e257600080fd5b5061090f600480360360208110156108f957600080fd5b81019080803590602001909291905050506141e7565b005b34801561091d57600080fd5b50610926614a42565b6040518082815260200191505060405180910390f35b34801561094857600080fd5b506109756004803603602081101561095f57600080fd5b8101908080359060200190929190505050614aa2565b60405180821515815260200191505060405180910390f35b34801561099957600080fd5b506109a2614c52565b6040518082815260200191505060405180910390f35b3480156109c457600080fd5b50610a07600480360360208110156109db57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614db6565b005b348015610a1557600080fd5b50610a4260048036036020811015610a2c57600080fd5b8101908080359060200190929190505050614f00565b60405180821515815260200191505060405180910390f35b348015610a6657600080fd5b50610a6f6150b0565b6040518082815260200191505060405180910390f35b348015610a9157600080fd5b50610a9a615110565b604051808263ffffffff16815260200191505060405180910390f35b348015610ac257600080fd5b50610acb615126565b6040518082815260200191505060405180910390f35b60006001831015610b3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615e16602e913960400191505060405180910390fd5b610b6b68056bc75e2d63100000610b5d848661512c90919063ffffffff16565b6151b290919063ffffffff16565b905092915050565b600081610bef601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160019054906101000a900460ff1660ff168261512c90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008381526020019081526020016000206001015414610c9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180615f1e6032913960400191505060405180910390fd5b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600084815260200190815260200160002060000160009054906101000a900460ff1660ff16915050919050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610dce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f596f7520617265206e6f7420746865206d616e6167657200000000000000000081525060200191505060405180910390fd5b80600f60046101000a81548163ffffffff021916908363ffffffff16021790555050565b600081610e6e601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160019054906101000a900460ff1660ff168261512c90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008381526020019081526020016000206001015414610f1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180615f1e6032913960400191505060405180910390fd5b610f24836151fc565b915050919050565b600081610fa8601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160019054906101000a900460ff1660ff168261512c90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008381526020019081526020016000206001015414611055576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180615f1e6032913960400191505060405180910390fd5b61105e83615228565b915050919050565b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154905090565b8061112a601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160019054906101000a900460ff1660ff168261512c90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060010154146111d7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180615f1e6032913960400191505060405180910390fd5b8143601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060020160009054906101000a900463ffffffff1663ffffffff1611156112ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f4c6f636b656420756e74696c207465726d2069732066696e6e6973686564000081525060200191505060405180910390fd5b43601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600085815260200190815260200160002060020160049054906101000a900463ffffffff1663ffffffff161161133757611336836141e7565b5b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600085815260200190815260200160002060000160019054906101000a900460ff1660ff1690506000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000868152602001908152602001600020600101819055506114786001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600087815260200190815260200160002060000160019054906101000a900460ff1660ff1661571690919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600086815260200190815260200160002060000160016101000a81548160ff021916908360ff16021790555061150d6114fc828661512c90919063ffffffff16565b600c5461571690919063ffffffff16565b600c8190555061153a611529828661512c90919063ffffffff16565b600d5461571690919063ffffffff16565b600d8190555061156c6001600f60009054906101000a900463ffffffff1663ffffffff1661571690919063ffffffff16565b600f60006101000a81548163ffffffff021916908363ffffffff1602179055506115f36115a2828661512c90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015461571690919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506116a56001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900463ffffffff1663ffffffff1661571690919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548163ffffffff021916908363ffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33611757848861512c90919063ffffffff16565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156117aa57600080fd5b505af11580156117be573d6000803e3d6000fd5b505050506040513d60208110156117d457600080fd5b810190808051906020019092919050505050833373ffffffffffffffffffffffffffffffffffffffff167f8ffaab89f3f3781897b78f7d9ed4bec5778e2a837a25f5773fb6c2c1bf4f2b6c601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160049054906101000a900463ffffffff166001604051808363ffffffff16815260200182151581526020019250505060405180910390a350505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561192857600080fd5b505afa15801561193c573d6000803e3d6000fd5b505050506040513d602081101561195257600080fd5b8101908080519060200190929190505050905090565b6000816119e4601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160019054906101000a900460ff1660ff168261512c90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008381526020019081526020016000206001015414611a91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180615f1e6032913960400191505060405180910390fd5b611a9a83615760565b915050919050565b600081611b1e601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160019054906101000a900460ff1660ff168261512c90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008381526020019081526020016000206001015414611bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180615f1e6032913960400191505060405180910390fd5b611c9e611c77600f60049054906101000a900463ffffffff1663ffffffff16611c69601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600088815260200190815260200160002060020160089054906101000a900463ffffffff1663ffffffff164361571690919063ffffffff16565b61578290919063ffffffff16565b600f60049054906101000a900463ffffffff1663ffffffff1661571690919063ffffffff16565b915050919050565b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900463ffffffff1663ffffffff16905090565b600c5481565b600e5481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611dd5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f596f7520617265206e6f7420746865206d616e6167657200000000000000000081525060200191505060405180910390fd5b678ac7230489e800008167ffffffffffffffff161115611e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180615df26024913960400191505060405180910390fd5b80600b60146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b600081611ee8601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160019054906101000a900460ff1660ff168261512c90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008381526020019081526020016000206001015414611f95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180615f1e6032913960400191505060405180910390fd5b43601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600085815260200190815260200160002060020160009054906101000a900463ffffffff1663ffffffff16116120115760009150612093565b61209043601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600086815260200190815260200160002060020160009054906101000a900463ffffffff1663ffffffff1661571690919063ffffffff16565b91505b50919050565b81612113601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160019054906101000a900460ff1660ff168261512c90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060010154146121c0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180615f1e6032913960400191505060405180910390fd5b8243601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060020160009054906101000a900463ffffffff1663ffffffff1611156122a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f4c6f636b656420756e74696c207465726d2069732066696e6e6973686564000081525060200191505060405180910390fd5b60016122ad611ca6565b1015612304576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615e6b602a913960400191505060405180910390fd5b60018314806123135750600283145b8061231e5750600383145b612373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615ef4602a913960400191505060405180910390fd5b61237b614c52565b3410156123d3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180615e446027913960400191505060405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc61242a600261241c614c52565b6151b290919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015612455573d6000803e3d6000fd5b5043601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600086815260200190815260200160002060020160086101000a81548163ffffffff021916908363ffffffff16021790555060018314156125f6576124ff600f60049054906101000a900463ffffffff1663ffffffff16436157cc90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600086815260200190815260200160002060020160006101000a81548163ffffffff021916908363ffffffff160217905550600f60109054906101000a900460ff16601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600086815260200190815260200160002060000160006101000a81548160ff021916908360ff16021790555061284a565b60028314156127215761262a600f60089054906101000a900463ffffffff1663ffffffff16436157cc90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600086815260200190815260200160002060020160006101000a81548163ffffffff021916908363ffffffff160217905550600f60119054906101000a900460ff16601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600086815260200190815260200160002060000160006101000a81548160ff021916908360ff160217905550612849565b600383141561284857612755600f600c9054906101000a900463ffffffff1663ffffffff16436157cc90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600086815260200190815260200160002060020160006101000a81548163ffffffff021916908363ffffffff160217905550600f60129054906101000a900460ff16601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600086815260200190815260200160002060000160006101000a81548160ff021916908360ff1602179055505b5b5b6001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600086815260200190815260200160002060000160019054906101000a900460ff1660ff16111561296b5761296061294f612938601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600088815260200190815260200160002060000160019054906101000a900460ff1660ff168761512c90919063ffffffff16565b61294187615854565b61571690919063ffffffff16565b600d546157cc90919063ffffffff16565b600d8190555061298f565b61298861297785615854565b600d546157cc90919063ffffffff16565b600d819055505b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600085815260200190815260200160002060020160009054906101000a900463ffffffff1663ffffffff16843373ffffffffffffffffffffffffffffffffffffffff167f5be76f11b0a6c1f6d83b914370e22b9ed54ad8a1ecedc55792fe54a57baa36268660016040518083815260200182151581526020019250505060405180910390a450505050565b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154905090565b60006001821015612b1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4d7573742073656c656374206d6f7265207468656e2031207765656b0000000081525060200191505060405180910390fd5b600080600090505b600184038111612b4b57670de0b6b3a7640000820191508080600101915050612b27565b506000612b588683610ae1565b90506000612b7182600d546157cc90919063ffffffff16565b90506000612c0087612bf2601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008c815260200190815260200160002060000160019054906101000a900460ff1660ff168b61512c90919063ffffffff16565b61512c90919063ffffffff16565b90506000612c20612c1a85846157cc90919063ffffffff16565b84613e69565b90506000612cef60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612cae57600080fd5b505afa158015612cc2573d6000803e3d6000fd5b505050506040513d6020811015612cd857600080fd5b810190808051906020019092919050505083610ae1565b9050612d04888261512c90919063ffffffff16565b96505050505050509392505050565b60106020528060005260406000206000915090508060010154908060020160009054906101000a900463ffffffff16908060030154908060040160009054906101000a900463ffffffff16908060040160049054906101000a900463ffffffff16905085565b60018060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015612e2157600080fd5b505afa158015612e35573d6000803e3d6000fd5b505050506040513d6020811015612e4b57600080fd5b81019080805190602001909291905050501015612eb3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180615f50602d913960400191505060405180910390fd5b612ebb614c52565b341015612f13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180615e446027913960400191505060405180910390fd5b6001811480612f225750600281145b80612f2d5750600381145b612f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180615f7d6029913960400191505060405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc612fd96002612fcb614c52565b6151b290919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015613004573d6000803e3d6000fd5b506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b1580156130ae57600080fd5b505afa1580156130c2573d6000803e3d6000fd5b505050506040513d60208110156130d857600080fd5b8101908080519060200190929190505050905080601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000838152602001908152602001600020600101541415613412576131b36002601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008481526020019081526020016000206001015461512c90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000838152602001908152602001600020600101819055506132876001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600084815260200190815260200160002060000160019054906101000a900460ff1660ff166157cc90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160016101000a81548160ff021916908360ff1602179055506133216001600f60009054906101000a900463ffffffff1663ffffffff1661571690919063ffffffff16565b600f60006101000a81548163ffffffff021916908363ffffffff1602179055506133ad6001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900463ffffffff1663ffffffff1661571690919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548163ffffffff021916908363ffffffff1602179055506134de565b80601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000838152602001908152602001600020600101819055506001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160016101000a81548160ff021916908360ff1602179055505b6134f381600c546157cc90919063ffffffff16565b600c819055506135256001600f60009054906101000a900463ffffffff1663ffffffff166157cc90919063ffffffff16565b600f60006101000a81548163ffffffff021916908363ffffffff16021790555061359a81601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546157cc90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555061364c6001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900463ffffffff1663ffffffff166157cc90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548163ffffffff021916908363ffffffff1602179055506137186001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160049054906101000a900463ffffffff1663ffffffff166157cc90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160046101000a81548163ffffffff021916908363ffffffff16021790555043601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060020160086101000a81548163ffffffff021916908363ffffffff160217905550600182141561391857613821600f60049054906101000a900463ffffffff1663ffffffff16436157cc90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060020160006101000a81548163ffffffff021916908363ffffffff160217905550600f60109054906101000a900460ff16601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160006101000a81548160ff021916908360ff160217905550613b6c565b6002821415613a435761394c600f60089054906101000a900463ffffffff1663ffffffff16436157cc90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060020160006101000a81548163ffffffff021916908363ffffffff160217905550600f60119054906101000a900460ff16601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160006101000a81548160ff021916908360ff160217905550613b6b565b6003821415613b6a57613a77600f600c9054906101000a900463ffffffff1663ffffffff16436157cc90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060020160006101000a81548163ffffffff021916908363ffffffff160217905550600f60129054906101000a900460ff16601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160006101000a81548160ff021916908360ff1602179055505b5b5b6001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160019054906101000a900460ff1660ff161115613c8d57613c82613c71613c5a601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600085815260200190815260200160002060000160019054906101000a900460ff1660ff168461512c90919063ffffffff16565b613c6384615854565b61571690919063ffffffff16565b600d546157cc90919063ffffffff16565b600d81905550613cb1565b613caa613c9982615854565b600d546157cc90919063ffffffff16565b600d819055505b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015613d6257600080fd5b505af1158015613d76573d6000803e3d6000fd5b505050506040513d6020811015613d8c57600080fd5b810190808051906020019092919050505050601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600082815260200190815260200160002060020160009054906101000a900463ffffffff1663ffffffff16813373ffffffffffffffffffffffffffffffffffffffff167f5be76f11b0a6c1f6d83b914370e22b9ed54ad8a1ecedc55792fe54a57baa36268560016040518083815260200182151581526020019250505060405180910390a45050565b60006001613e9b83613e8d68056bc75e2d631000008761512c90919063ffffffff16565b6151b290919063ffffffff16565b1015613ef2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e815260200180615eb6603e913960400191505060405180910390fd5b600082905060008490506000613f2c83613f1e68056bc75e2d631000008561512c90919063ffffffff16565b6151b290919063ffffffff16565b905080935050505092915050565b600047905090565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614005576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f596f7520617265206e6f7420746865206d616e6167657200000000000000000081525060200191505060405180910390fd5b89600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555087600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555088600660146101000a81548161ffff021916908361ffff16021790555086600660166101000a81548161ffff021916908361ffff16021790555084600660186101000a81548161ffff021916908361ffff160217905550826006601a6101000a81548161ffff021916908361ffff160217905550806006601c6101000a81548161ffff021916908361ffff16021790555050505050505050505050565b80614261601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160019054906101000a900460ff1660ff168261512c90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000838152602001908152602001600020600101541461430e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180615f1e6032913960400191505060405180910390fd5b8143601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060020160049054906101000a900463ffffffff1663ffffffff1611156143f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4c6f636b656420756e74696c20746865207765656b206973207570000000000081525060200191505060405180910390fd5b8243601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060020160009054906101000a900463ffffffff1663ffffffff1611156144d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f4c6f636b656420756e74696c207465726d2069732066696e6e6973686564000081525060200191505060405180910390fd5b60006144e285600c54613e69565b905060006144f76144f1613f3a565b83610ae1565b9050600061458e614577601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008a815260200190815260200160002060000160019054906101000a900460ff1660ff168961512c90919063ffffffff16565b61458089615854565b61571690919063ffffffff16565b9050600061459b886151fc565b9050600f60049054906101000a900463ffffffff1663ffffffff164301601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008a815260200190815260200160002060020160046101000a81548163ffffffff021916908363ffffffff16021790555043601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008a815260200190815260200160002060020160086101000a81548163ffffffff021916908363ffffffff1602179055506146b681600e546157cc90919063ffffffff16565b600e819055506146d182600d5461571690919063ffffffff16565b600d819055506001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008a815260200190815260200160002060000160006101000a81548160ff021916908360ff1602179055506000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008a815260200190815260200160002060020160006101000a81548163ffffffff021916908363ffffffff16021790555061481281601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301546157cc90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301819055506148c46001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160009054906101000a900463ffffffff1663ffffffff166157cc90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160006101000a81548163ffffffff021916908363ffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f1935050505015801561496a573d6000803e3d6000fd5b5060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156149fc57600080fd5b505af1158015614a10573d6000803e3d6000fd5b505050506040513d6020811015614a2657600080fd5b8101908080519060200190929190505050505050505050505050565b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160009054906101000a900463ffffffff1663ffffffff16905090565b600081614b1e601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160019054906101000a900460ff1660ff168261512c90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008381526020019081526020016000206001015414614bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180615f1e6032913960400191505060405180910390fd5b43601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600085815260200190815260200160002060020160049054906101000a900463ffffffff1663ffffffff1611614c475760019150614c4c565b600091505b50919050565b600080600b60149054906101000a900467ffffffffffffffff1667ffffffffffffffff1690506001600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e33600660149054906101000a900461ffff166040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018261ffff1681526020019250505060206040518083038186803b158015614d1e57600080fd5b505afa158015614d32573d6000803e3d6000fd5b505050506040513d6020811015614d4857600080fd5b810190808051906020019092919050505010614d8e57614d836006601e9054906101000a900460ff1660ff16826151b290919063ffffffff16565b905080915050614db3565b600b60149054906101000a900467ffffffffffffffff1667ffffffffffffffff169150505b90565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614e79576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f596f7520617265206e6f7420746865206d616e6167657200000000000000000081525060200191505060405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616360405160405180910390a250565b600081614f7c601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160019054906101000a900460ff1660ff168261512c90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008381526020019081526020016000206001015414615029576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180615f1e6032913960400191505060405180910390fd5b43601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600085815260200190815260200160002060020160009054906101000a900463ffffffff1663ffffffff16116150a557600191506150aa565b600091505b50919050565b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160049054906101000a900463ffffffff1663ffffffff16905090565b600f60009054906101000a900463ffffffff1681565b600d5481565b60008083141561513f57600090506151ac565b600082840290508284828161515057fe5b04146151a7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180615e956021913960400191505060405180910390fd5b809150505b92915050565b60006151f483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061594e565b905092915050565b600061522161520a83615a14565b61521384615b5e565b6157cc90919063ffffffff16565b9050919050565b60008060006152d6600f60049054906101000a900463ffffffff1663ffffffff166152c8601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600088815260200190815260200160002060020160089054906101000a900463ffffffff1663ffffffff164361571690919063ffffffff16565b6151b290919063ffffffff16565b90506001811061570a5760005b60018203811161530757670de0b6b3a76400008301925080806001019150506152e3565b506001600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e33600660169054906101000a900461ffff166040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018261ffff1681526020019250505060206040518083038186803b1580156153ae57600080fd5b505afa1580156153c2573d6000803e3d6000fd5b505050506040513d60208110156153d857600080fd5b81019080805190602001909291905050501061540657615403600754836157cc90919063ffffffff16565b91505b6001600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e33600660189054906101000a900461ffff166040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018261ffff1681526020019250505060206040518083038186803b1580156154ac57600080fd5b505afa1580156154c0573d6000803e3d6000fd5b505050506040513d60208110156154d657600080fd5b81019080805190602001909291905050501061550457615501600854836157cc90919063ffffffff16565b91505b6001600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e336006601a9054906101000a900461ffff166040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018261ffff1681526020019250505060206040518083038186803b1580156155aa57600080fd5b505afa1580156155be573d6000803e3d6000fd5b505050506040513d60208110156155d457600080fd5b810190808051906020019092919050505010615602576155ff600954836157cc90919063ffffffff16565b91505b6001600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e336006601c9054906101000a900461ffff166040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018261ffff1681526020019250505060206040518083038186803b1580156156a857600080fd5b505afa1580156156bc573d6000803e3d6000fd5b505050506040513d60208110156156d257600080fd5b810190808051906020019092919050505010615700576156fd600a54836157cc90919063ffffffff16565b91505b8192505050615711565b6000925050505b919050565b600061575883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250615c50565b905092915050565b60008061576c83615854565b905061577a81600d54613e69565b915050919050565b60006157c483836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250615d10565b905092915050565b60008082840190508381101561584a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000615947601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600084815260200190815260200160002060000160009054906101000a900460ff1660ff16615939601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600086815260200190815260200160002060000160019054906101000a900460ff1660ff168561512c90919063ffffffff16565b61512c90919063ffffffff16565b9050919050565b600080831182906159fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156159bf5780820151818401526020810190506159a4565b50505050905090810190601f1680156159ec5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581615a0657fe5b049050809150509392505050565b600080615a2083615dd1565b90506000615a3982600d546157cc90919063ffffffff16565b90506000615a4685615854565b90506000615a66615a6085846157cc90919063ffffffff16565b84613e69565b90506000615b3560008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015615af457600080fd5b505afa158015615b08573d6000803e3d6000fd5b505050506040513d6020811015615b1e57600080fd5b810190808051906020019092919050505083610ae1565b9050615b52615b4388615b5e565b8261571690919063ffffffff16565b95505050505050919050565b600080615b6a83615854565b90506000615b7a82600d54613e69565b9050615c4760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015615c0657600080fd5b505afa158015615c1a573d6000803e3d6000fd5b505050506040513d6020811015615c3057600080fd5b810190808051906020019092919050505082610ae1565b92505050919050565b6000838311158290615cfd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615cc2578082015181840152602081019050615ca7565b50505050905090810190601f168015615cef5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000808314158290615dbd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615d82578082015181840152602081019050615d67565b50505050905090810190601f168015615daf5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50828481615dc757fe5b0690509392505050565b600080615ddd83615228565b9050615de98382610ae1565b91505091905056fe43616e7420736574207468652066656520686967686572207468656e20313020784461694661696c656420746f206d656574206d696e696d756d2028312077656929207265717569726564207061796f7574596f75206d75737420636f766572207468652078446169207472616e73616374696f6e206665654d757374204861766520536f6d657468696e67205374616b6520546f20536574204e6577205465726d73536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774661696c656420746f206d656574206d696e696d756d2070657263656e746167652c20546f20736d616c6c20746f206576656e2063616c63756c61746521696e76616c696564207465726d2073656c656374696f6e3a204d75737420626520312c2032206f722033596f75206d75737420656e74657220616e20616d6f756e7420796f752063757272656e746c792068617665207374616b6564596f75206d75737420616c6c6f7720736f6d6520526172652f78446169204c5020746f6b656e73206669727374496e76616c6964207465726d2073656c656374696f6e3a204d75737420626520312c2032206f722033a26469706673582212207705ae4b295b2e9af22b25eaff05ca23492afd4cc58a25529d255f1f0bc380be64736f6c6343000706003300000000000000000000000057e93bb58268de818b42e3795c97bad58afcd3fe0000000000000000000000005805bb63e73ec272c74e210d280c05b41d719827

Deployed Bytecode

0x6080604052600436106101e35760003560e01c80636cd70de611610102578063bd8f25d711610095578063d3b2168211610064578063d3b2168214610a09578063d85dc9c214610a5a578063dfe02bdc14610a85578063f3f12d7914610ab6576101e3565b8063bd8f25d714610911578063c95c0d891461093c578063ced72f871461098d578063d0ebdbe7146109b8576101e3565b8063a37b06d4116100d1578063a37b06d41461073a578063a3a5265114610793578063ac8b4c88146107be578063b84f576f146108d6576101e3565b80636cd70de6146105eb5780637e7efe8f1461061657806382e4eda4146106795780638ba3f7d21461070c576101e3565b80633a4d326f1161017a578063575c978e11610149578063575c978e146104f45780635a630d7a1461051f57806362348f97146105645780636b9cb82c146105b3576101e3565b80633a4d326f14610400578063537f38011461044f57806354b6558b1461049e578063568cc229146104c9576101e3565b8063316e2b34116101b6578063316e2b34146103205780633638227b1461036f57806336d90ffe1461039a578063380f1b36146103d5576101e3565b8063027e37ca146101e857806304f8bb3a146102415780630f6ff069146102905780631c924705146102d1575b600080fd5b3480156101f457600080fd5b5061022b6004803603604081101561020b57600080fd5b810190808035906020019092919080359060200190929190505050610ae1565b6040518082815260200191505060405180910390f35b34801561024d57600080fd5b5061027a6004803603602081101561026457600080fd5b8101908080359060200190929190505050610b73565b6040518082815260200191505060405180910390f35b34801561029c57600080fd5b506102cf600480360360208110156102b357600080fd5b81019080803563ffffffff169060200190929190505050610d0b565b005b3480156102dd57600080fd5b5061030a600480360360208110156102f457600080fd5b8101908080359060200190929190505050610df2565b6040518082815260200191505060405180910390f35b34801561032c57600080fd5b506103596004803603602081101561034357600080fd5b8101908080359060200190929190505050610f2c565b6040518082815260200191505060405180910390f35b34801561037b57600080fd5b50610384611066565b6040518082815260200191505060405180910390f35b3480156103a657600080fd5b506103d3600480360360208110156103bd57600080fd5b81019080803590602001909291905050506110b0565b005b3480156103e157600080fd5b506103ea61189e565b6040518082815260200191505060405180910390f35b34801561040c57600080fd5b506104396004803603602081101561042357600080fd5b8101908080359060200190929190505050611968565b6040518082815260200191505060405180910390f35b34801561045b57600080fd5b506104886004803603602081101561047257600080fd5b8101908080359060200190929190505050611aa2565b6040518082815260200191505060405180910390f35b3480156104aa57600080fd5b506104b3611ca6565b6040518082815260200191505060405180910390f35b3480156104d557600080fd5b506104de611d06565b6040518082815260200191505060405180910390f35b34801561050057600080fd5b50610509611d0c565b6040518082815260200191505060405180910390f35b34801561052b57600080fd5b506105626004803603602081101561054257600080fd5b81019080803567ffffffffffffffff169060200190929190505050611d12565b005b34801561057057600080fd5b5061059d6004803603602081101561058757600080fd5b8101908080359060200190929190505050611e6c565b6040518082815260200191505060405180910390f35b6105e9600480360360408110156105c957600080fd5b810190808035906020019092919080359060200190929190505050612099565b005b3480156105f757600080fd5b50610600612a5c565b6040518082815260200191505060405180910390f35b34801561062257600080fd5b506106636004803603606081101561063957600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050612aa6565b6040518082815260200191505060405180910390f35b34801561068557600080fd5b506106c86004803603602081101561069c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612d13565b604051808681526020018563ffffffff1681526020018481526020018363ffffffff1681526020018263ffffffff1681526020019550505050505060405180910390f35b6107386004803603602081101561072257600080fd5b8101908080359060200190929190505050612d79565b005b34801561074657600080fd5b5061077d6004803603604081101561075d57600080fd5b810190808035906020019092919080359060200190929190505050613e69565b6040518082815260200191505060405180910390f35b34801561079f57600080fd5b506107a8613f3a565b6040518082815260200191505060405180910390f35b3480156107ca57600080fd5b506108d460048036036101408110156107e257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803561ffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803561ffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803561ffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803561ffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803561ffff169060200190929190505050613f42565b005b3480156108e257600080fd5b5061090f600480360360208110156108f957600080fd5b81019080803590602001909291905050506141e7565b005b34801561091d57600080fd5b50610926614a42565b6040518082815260200191505060405180910390f35b34801561094857600080fd5b506109756004803603602081101561095f57600080fd5b8101908080359060200190929190505050614aa2565b60405180821515815260200191505060405180910390f35b34801561099957600080fd5b506109a2614c52565b6040518082815260200191505060405180910390f35b3480156109c457600080fd5b50610a07600480360360208110156109db57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614db6565b005b348015610a1557600080fd5b50610a4260048036036020811015610a2c57600080fd5b8101908080359060200190929190505050614f00565b60405180821515815260200191505060405180910390f35b348015610a6657600080fd5b50610a6f6150b0565b6040518082815260200191505060405180910390f35b348015610a9157600080fd5b50610a9a615110565b604051808263ffffffff16815260200191505060405180910390f35b348015610ac257600080fd5b50610acb615126565b6040518082815260200191505060405180910390f35b60006001831015610b3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615e16602e913960400191505060405180910390fd5b610b6b68056bc75e2d63100000610b5d848661512c90919063ffffffff16565b6151b290919063ffffffff16565b905092915050565b600081610bef601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160019054906101000a900460ff1660ff168261512c90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008381526020019081526020016000206001015414610c9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180615f1e6032913960400191505060405180910390fd5b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600084815260200190815260200160002060000160009054906101000a900460ff1660ff16915050919050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610dce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f596f7520617265206e6f7420746865206d616e6167657200000000000000000081525060200191505060405180910390fd5b80600f60046101000a81548163ffffffff021916908363ffffffff16021790555050565b600081610e6e601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160019054906101000a900460ff1660ff168261512c90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008381526020019081526020016000206001015414610f1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180615f1e6032913960400191505060405180910390fd5b610f24836151fc565b915050919050565b600081610fa8601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160019054906101000a900460ff1660ff168261512c90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008381526020019081526020016000206001015414611055576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180615f1e6032913960400191505060405180910390fd5b61105e83615228565b915050919050565b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154905090565b8061112a601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160019054906101000a900460ff1660ff168261512c90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060010154146111d7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180615f1e6032913960400191505060405180910390fd5b8143601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060020160009054906101000a900463ffffffff1663ffffffff1611156112ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f4c6f636b656420756e74696c207465726d2069732066696e6e6973686564000081525060200191505060405180910390fd5b43601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600085815260200190815260200160002060020160049054906101000a900463ffffffff1663ffffffff161161133757611336836141e7565b5b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600085815260200190815260200160002060000160019054906101000a900460ff1660ff1690506000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000868152602001908152602001600020600101819055506114786001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600087815260200190815260200160002060000160019054906101000a900460ff1660ff1661571690919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600086815260200190815260200160002060000160016101000a81548160ff021916908360ff16021790555061150d6114fc828661512c90919063ffffffff16565b600c5461571690919063ffffffff16565b600c8190555061153a611529828661512c90919063ffffffff16565b600d5461571690919063ffffffff16565b600d8190555061156c6001600f60009054906101000a900463ffffffff1663ffffffff1661571690919063ffffffff16565b600f60006101000a81548163ffffffff021916908363ffffffff1602179055506115f36115a2828661512c90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015461571690919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506116a56001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900463ffffffff1663ffffffff1661571690919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548163ffffffff021916908363ffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33611757848861512c90919063ffffffff16565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156117aa57600080fd5b505af11580156117be573d6000803e3d6000fd5b505050506040513d60208110156117d457600080fd5b810190808051906020019092919050505050833373ffffffffffffffffffffffffffffffffffffffff167f8ffaab89f3f3781897b78f7d9ed4bec5778e2a837a25f5773fb6c2c1bf4f2b6c601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160049054906101000a900463ffffffff166001604051808363ffffffff16815260200182151581526020019250505060405180910390a350505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561192857600080fd5b505afa15801561193c573d6000803e3d6000fd5b505050506040513d602081101561195257600080fd5b8101908080519060200190929190505050905090565b6000816119e4601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160019054906101000a900460ff1660ff168261512c90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008381526020019081526020016000206001015414611a91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180615f1e6032913960400191505060405180910390fd5b611a9a83615760565b915050919050565b600081611b1e601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160019054906101000a900460ff1660ff168261512c90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008381526020019081526020016000206001015414611bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180615f1e6032913960400191505060405180910390fd5b611c9e611c77600f60049054906101000a900463ffffffff1663ffffffff16611c69601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600088815260200190815260200160002060020160089054906101000a900463ffffffff1663ffffffff164361571690919063ffffffff16565b61578290919063ffffffff16565b600f60049054906101000a900463ffffffff1663ffffffff1661571690919063ffffffff16565b915050919050565b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900463ffffffff1663ffffffff16905090565b600c5481565b600e5481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611dd5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f596f7520617265206e6f7420746865206d616e6167657200000000000000000081525060200191505060405180910390fd5b678ac7230489e800008167ffffffffffffffff161115611e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180615df26024913960400191505060405180910390fd5b80600b60146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b600081611ee8601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160019054906101000a900460ff1660ff168261512c90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008381526020019081526020016000206001015414611f95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180615f1e6032913960400191505060405180910390fd5b43601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600085815260200190815260200160002060020160009054906101000a900463ffffffff1663ffffffff16116120115760009150612093565b61209043601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600086815260200190815260200160002060020160009054906101000a900463ffffffff1663ffffffff1661571690919063ffffffff16565b91505b50919050565b81612113601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160019054906101000a900460ff1660ff168261512c90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060010154146121c0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180615f1e6032913960400191505060405180910390fd5b8243601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060020160009054906101000a900463ffffffff1663ffffffff1611156122a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f4c6f636b656420756e74696c207465726d2069732066696e6e6973686564000081525060200191505060405180910390fd5b60016122ad611ca6565b1015612304576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615e6b602a913960400191505060405180910390fd5b60018314806123135750600283145b8061231e5750600383145b612373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615ef4602a913960400191505060405180910390fd5b61237b614c52565b3410156123d3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180615e446027913960400191505060405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc61242a600261241c614c52565b6151b290919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015612455573d6000803e3d6000fd5b5043601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600086815260200190815260200160002060020160086101000a81548163ffffffff021916908363ffffffff16021790555060018314156125f6576124ff600f60049054906101000a900463ffffffff1663ffffffff16436157cc90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600086815260200190815260200160002060020160006101000a81548163ffffffff021916908363ffffffff160217905550600f60109054906101000a900460ff16601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600086815260200190815260200160002060000160006101000a81548160ff021916908360ff16021790555061284a565b60028314156127215761262a600f60089054906101000a900463ffffffff1663ffffffff16436157cc90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600086815260200190815260200160002060020160006101000a81548163ffffffff021916908363ffffffff160217905550600f60119054906101000a900460ff16601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600086815260200190815260200160002060000160006101000a81548160ff021916908360ff160217905550612849565b600383141561284857612755600f600c9054906101000a900463ffffffff1663ffffffff16436157cc90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600086815260200190815260200160002060020160006101000a81548163ffffffff021916908363ffffffff160217905550600f60129054906101000a900460ff16601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600086815260200190815260200160002060000160006101000a81548160ff021916908360ff1602179055505b5b5b6001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600086815260200190815260200160002060000160019054906101000a900460ff1660ff16111561296b5761296061294f612938601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600088815260200190815260200160002060000160019054906101000a900460ff1660ff168761512c90919063ffffffff16565b61294187615854565b61571690919063ffffffff16565b600d546157cc90919063ffffffff16565b600d8190555061298f565b61298861297785615854565b600d546157cc90919063ffffffff16565b600d819055505b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600085815260200190815260200160002060020160009054906101000a900463ffffffff1663ffffffff16843373ffffffffffffffffffffffffffffffffffffffff167f5be76f11b0a6c1f6d83b914370e22b9ed54ad8a1ecedc55792fe54a57baa36268660016040518083815260200182151581526020019250505060405180910390a450505050565b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154905090565b60006001821015612b1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4d7573742073656c656374206d6f7265207468656e2031207765656b0000000081525060200191505060405180910390fd5b600080600090505b600184038111612b4b57670de0b6b3a7640000820191508080600101915050612b27565b506000612b588683610ae1565b90506000612b7182600d546157cc90919063ffffffff16565b90506000612c0087612bf2601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008c815260200190815260200160002060000160019054906101000a900460ff1660ff168b61512c90919063ffffffff16565b61512c90919063ffffffff16565b90506000612c20612c1a85846157cc90919063ffffffff16565b84613e69565b90506000612cef60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612cae57600080fd5b505afa158015612cc2573d6000803e3d6000fd5b505050506040513d6020811015612cd857600080fd5b810190808051906020019092919050505083610ae1565b9050612d04888261512c90919063ffffffff16565b96505050505050509392505050565b60106020528060005260406000206000915090508060010154908060020160009054906101000a900463ffffffff16908060030154908060040160009054906101000a900463ffffffff16908060040160049054906101000a900463ffffffff16905085565b60018060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015612e2157600080fd5b505afa158015612e35573d6000803e3d6000fd5b505050506040513d6020811015612e4b57600080fd5b81019080805190602001909291905050501015612eb3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180615f50602d913960400191505060405180910390fd5b612ebb614c52565b341015612f13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180615e446027913960400191505060405180910390fd5b6001811480612f225750600281145b80612f2d5750600381145b612f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180615f7d6029913960400191505060405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc612fd96002612fcb614c52565b6151b290919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015613004573d6000803e3d6000fd5b506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b1580156130ae57600080fd5b505afa1580156130c2573d6000803e3d6000fd5b505050506040513d60208110156130d857600080fd5b8101908080519060200190929190505050905080601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000838152602001908152602001600020600101541415613412576131b36002601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008481526020019081526020016000206001015461512c90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000838152602001908152602001600020600101819055506132876001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600084815260200190815260200160002060000160019054906101000a900460ff1660ff166157cc90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160016101000a81548160ff021916908360ff1602179055506133216001600f60009054906101000a900463ffffffff1663ffffffff1661571690919063ffffffff16565b600f60006101000a81548163ffffffff021916908363ffffffff1602179055506133ad6001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900463ffffffff1663ffffffff1661571690919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548163ffffffff021916908363ffffffff1602179055506134de565b80601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000838152602001908152602001600020600101819055506001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160016101000a81548160ff021916908360ff1602179055505b6134f381600c546157cc90919063ffffffff16565b600c819055506135256001600f60009054906101000a900463ffffffff1663ffffffff166157cc90919063ffffffff16565b600f60006101000a81548163ffffffff021916908363ffffffff16021790555061359a81601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546157cc90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555061364c6001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900463ffffffff1663ffffffff166157cc90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548163ffffffff021916908363ffffffff1602179055506137186001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160049054906101000a900463ffffffff1663ffffffff166157cc90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160046101000a81548163ffffffff021916908363ffffffff16021790555043601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060020160086101000a81548163ffffffff021916908363ffffffff160217905550600182141561391857613821600f60049054906101000a900463ffffffff1663ffffffff16436157cc90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060020160006101000a81548163ffffffff021916908363ffffffff160217905550600f60109054906101000a900460ff16601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160006101000a81548160ff021916908360ff160217905550613b6c565b6002821415613a435761394c600f60089054906101000a900463ffffffff1663ffffffff16436157cc90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060020160006101000a81548163ffffffff021916908363ffffffff160217905550600f60119054906101000a900460ff16601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160006101000a81548160ff021916908360ff160217905550613b6b565b6003821415613b6a57613a77600f600c9054906101000a900463ffffffff1663ffffffff16436157cc90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060020160006101000a81548163ffffffff021916908363ffffffff160217905550600f60129054906101000a900460ff16601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160006101000a81548160ff021916908360ff1602179055505b5b5b6001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160019054906101000a900460ff1660ff161115613c8d57613c82613c71613c5a601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600085815260200190815260200160002060000160019054906101000a900460ff1660ff168461512c90919063ffffffff16565b613c6384615854565b61571690919063ffffffff16565b600d546157cc90919063ffffffff16565b600d81905550613cb1565b613caa613c9982615854565b600d546157cc90919063ffffffff16565b600d819055505b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015613d6257600080fd5b505af1158015613d76573d6000803e3d6000fd5b505050506040513d6020811015613d8c57600080fd5b810190808051906020019092919050505050601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600082815260200190815260200160002060020160009054906101000a900463ffffffff1663ffffffff16813373ffffffffffffffffffffffffffffffffffffffff167f5be76f11b0a6c1f6d83b914370e22b9ed54ad8a1ecedc55792fe54a57baa36268560016040518083815260200182151581526020019250505060405180910390a45050565b60006001613e9b83613e8d68056bc75e2d631000008761512c90919063ffffffff16565b6151b290919063ffffffff16565b1015613ef2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e815260200180615eb6603e913960400191505060405180910390fd5b600082905060008490506000613f2c83613f1e68056bc75e2d631000008561512c90919063ffffffff16565b6151b290919063ffffffff16565b905080935050505092915050565b600047905090565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614005576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f596f7520617265206e6f7420746865206d616e6167657200000000000000000081525060200191505060405180910390fd5b89600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555087600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555088600660146101000a81548161ffff021916908361ffff16021790555086600660166101000a81548161ffff021916908361ffff16021790555084600660186101000a81548161ffff021916908361ffff160217905550826006601a6101000a81548161ffff021916908361ffff160217905550806006601c6101000a81548161ffff021916908361ffff16021790555050505050505050505050565b80614261601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160019054906101000a900460ff1660ff168261512c90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000838152602001908152602001600020600101541461430e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180615f1e6032913960400191505060405180910390fd5b8143601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060020160049054906101000a900463ffffffff1663ffffffff1611156143f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4c6f636b656420756e74696c20746865207765656b206973207570000000000081525060200191505060405180910390fd5b8243601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060020160009054906101000a900463ffffffff1663ffffffff1611156144d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f4c6f636b656420756e74696c207465726d2069732066696e6e6973686564000081525060200191505060405180910390fd5b60006144e285600c54613e69565b905060006144f76144f1613f3a565b83610ae1565b9050600061458e614577601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008a815260200190815260200160002060000160019054906101000a900460ff1660ff168961512c90919063ffffffff16565b61458089615854565b61571690919063ffffffff16565b9050600061459b886151fc565b9050600f60049054906101000a900463ffffffff1663ffffffff164301601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008a815260200190815260200160002060020160046101000a81548163ffffffff021916908363ffffffff16021790555043601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008a815260200190815260200160002060020160086101000a81548163ffffffff021916908363ffffffff1602179055506146b681600e546157cc90919063ffffffff16565b600e819055506146d182600d5461571690919063ffffffff16565b600d819055506001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008a815260200190815260200160002060000160006101000a81548160ff021916908360ff1602179055506000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008a815260200190815260200160002060020160006101000a81548163ffffffff021916908363ffffffff16021790555061481281601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301546157cc90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301819055506148c46001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160009054906101000a900463ffffffff1663ffffffff166157cc90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160006101000a81548163ffffffff021916908363ffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f1935050505015801561496a573d6000803e3d6000fd5b5060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156149fc57600080fd5b505af1158015614a10573d6000803e3d6000fd5b505050506040513d6020811015614a2657600080fd5b8101908080519060200190929190505050505050505050505050565b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160009054906101000a900463ffffffff1663ffffffff16905090565b600081614b1e601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160019054906101000a900460ff1660ff168261512c90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008381526020019081526020016000206001015414614bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180615f1e6032913960400191505060405180910390fd5b43601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600085815260200190815260200160002060020160049054906101000a900463ffffffff1663ffffffff1611614c475760019150614c4c565b600091505b50919050565b600080600b60149054906101000a900467ffffffffffffffff1667ffffffffffffffff1690506001600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e33600660149054906101000a900461ffff166040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018261ffff1681526020019250505060206040518083038186803b158015614d1e57600080fd5b505afa158015614d32573d6000803e3d6000fd5b505050506040513d6020811015614d4857600080fd5b810190808051906020019092919050505010614d8e57614d836006601e9054906101000a900460ff1660ff16826151b290919063ffffffff16565b905080915050614db3565b600b60149054906101000a900467ffffffffffffffff1667ffffffffffffffff169150505b90565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614e79576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f596f7520617265206e6f7420746865206d616e6167657200000000000000000081525060200191505060405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616360405160405180910390a250565b600081614f7c601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160019054906101000a900460ff1660ff168261512c90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008381526020019081526020016000206001015414615029576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180615f1e6032913960400191505060405180910390fd5b43601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600085815260200190815260200160002060020160009054906101000a900463ffffffff1663ffffffff16116150a557600191506150aa565b600091505b50919050565b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160049054906101000a900463ffffffff1663ffffffff16905090565b600f60009054906101000a900463ffffffff1681565b600d5481565b60008083141561513f57600090506151ac565b600082840290508284828161515057fe5b04146151a7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180615e956021913960400191505060405180910390fd5b809150505b92915050565b60006151f483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061594e565b905092915050565b600061522161520a83615a14565b61521384615b5e565b6157cc90919063ffffffff16565b9050919050565b60008060006152d6600f60049054906101000a900463ffffffff1663ffffffff166152c8601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600088815260200190815260200160002060020160089054906101000a900463ffffffff1663ffffffff164361571690919063ffffffff16565b6151b290919063ffffffff16565b90506001811061570a5760005b60018203811161530757670de0b6b3a76400008301925080806001019150506152e3565b506001600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e33600660169054906101000a900461ffff166040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018261ffff1681526020019250505060206040518083038186803b1580156153ae57600080fd5b505afa1580156153c2573d6000803e3d6000fd5b505050506040513d60208110156153d857600080fd5b81019080805190602001909291905050501061540657615403600754836157cc90919063ffffffff16565b91505b6001600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e33600660189054906101000a900461ffff166040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018261ffff1681526020019250505060206040518083038186803b1580156154ac57600080fd5b505afa1580156154c0573d6000803e3d6000fd5b505050506040513d60208110156154d657600080fd5b81019080805190602001909291905050501061550457615501600854836157cc90919063ffffffff16565b91505b6001600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e336006601a9054906101000a900461ffff166040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018261ffff1681526020019250505060206040518083038186803b1580156155aa57600080fd5b505afa1580156155be573d6000803e3d6000fd5b505050506040513d60208110156155d457600080fd5b810190808051906020019092919050505010615602576155ff600954836157cc90919063ffffffff16565b91505b6001600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e336006601c9054906101000a900461ffff166040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018261ffff1681526020019250505060206040518083038186803b1580156156a857600080fd5b505afa1580156156bc573d6000803e3d6000fd5b505050506040513d60208110156156d257600080fd5b810190808051906020019092919050505010615700576156fd600a54836157cc90919063ffffffff16565b91505b8192505050615711565b6000925050505b919050565b600061575883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250615c50565b905092915050565b60008061576c83615854565b905061577a81600d54613e69565b915050919050565b60006157c483836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250615d10565b905092915050565b60008082840190508381101561584a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000615947601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600084815260200190815260200160002060000160009054906101000a900460ff1660ff16615939601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600086815260200190815260200160002060000160019054906101000a900460ff1660ff168561512c90919063ffffffff16565b61512c90919063ffffffff16565b9050919050565b600080831182906159fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156159bf5780820151818401526020810190506159a4565b50505050905090810190601f1680156159ec5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581615a0657fe5b049050809150509392505050565b600080615a2083615dd1565b90506000615a3982600d546157cc90919063ffffffff16565b90506000615a4685615854565b90506000615a66615a6085846157cc90919063ffffffff16565b84613e69565b90506000615b3560008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015615af457600080fd5b505afa158015615b08573d6000803e3d6000fd5b505050506040513d6020811015615b1e57600080fd5b810190808051906020019092919050505083610ae1565b9050615b52615b4388615b5e565b8261571690919063ffffffff16565b95505050505050919050565b600080615b6a83615854565b90506000615b7a82600d54613e69565b9050615c4760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015615c0657600080fd5b505afa158015615c1a573d6000803e3d6000fd5b505050506040513d6020811015615c3057600080fd5b810190808051906020019092919050505082610ae1565b92505050919050565b6000838311158290615cfd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615cc2578082015181840152602081019050615ca7565b50505050905090810190601f168015615cef5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000808314158290615dbd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615d82578082015181840152602081019050615d67565b50505050905090810190601f168015615daf5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50828481615dc757fe5b0690509392505050565b600080615ddd83615228565b9050615de98382610ae1565b91505091905056fe43616e7420736574207468652066656520686967686572207468656e20313020784461694661696c656420746f206d656574206d696e696d756d2028312077656929207265717569726564207061796f7574596f75206d75737420636f766572207468652078446169207472616e73616374696f6e206665654d757374204861766520536f6d657468696e67205374616b6520546f20536574204e6577205465726d73536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774661696c656420746f206d656574206d696e696d756d2070657263656e746167652c20546f20736d616c6c20746f206576656e2063616c63756c61746521696e76616c696564207465726d2073656c656374696f6e3a204d75737420626520312c2032206f722033596f75206d75737420656e74657220616e20616d6f756e7420796f752063757272656e746c792068617665207374616b6564596f75206d75737420616c6c6f7720736f6d6520526172652f78446169204c5020746f6b656e73206669727374496e76616c6964207465726d2073656c656374696f6e3a204d75737420626520312c2032206f722033a26469706673582212207705ae4b295b2e9af22b25eaff05ca23492afd4cc58a25529d255f1f0bc380be64736f6c63430007060033

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

00000000000000000000000057e93bb58268de818b42e3795c97bad58afcd3fe0000000000000000000000005805bb63e73ec272c74e210d280c05b41d719827

-----Decoded View---------------
Arg [0] : _rareAddress (address): 0x57e93BB58268dE818B42E3795c97BAD58aFCD3Fe
Arg [1] : _LPAddress (address): 0x5805bb63e73Ec272c74e210D280C05B41D719827

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000057e93bb58268de818b42e3795c97bad58afcd3fe
Arg [1] : 0000000000000000000000005805bb63e73ec272c74e210d280c05b41d719827


Block Transaction Gas Used Reward
view all blocks validated

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

Validator Index Block Amount
View All Withdrawals

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

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