MON Price: $0.019112 (+4.33%)

Contract

0x2Fefc721812f3e614F869964635B07bdf3E0379A

Overview

MON Balance

Monad Chain LogoMonad Chain LogoMonad Chain Logo0 MON

MON Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Add Whitelist Ph...483308342026-01-13 0:22:0211 days ago1768263722IN
0x2Fefc721...df3E0379A
0 MON0.11840325127.5
Upgrade Field482415762026-01-12 14:26:0612 days ago1768227966IN
0x2Fefc721...df3E0379A
0 MON0.03063001102.10004247
Upgrade Field482414872026-01-12 14:25:3012 days ago1768227930IN
0x2Fefc721...df3E0379A
0 MON0.03063001102.10004247
Upgrade Field482408572026-01-12 14:21:1812 days ago1768227678IN
0x2Fefc721...df3E0379A
0 MON0.05105002102.10004247
Purchase Initial...481441512026-01-12 3:35:2812 days ago1768188928IN
0x2Fefc721...df3E0379A
500 MON0.0338577102.10004247
Purchase Initial...481420562026-01-12 3:21:2812 days ago1768188088IN
0x2Fefc721...df3E0379A
500 MON0.03384754101.94
Purchase Initial...481156752026-01-12 0:25:1312 days ago1768177513IN
0x2Fefc721...df3E0379A
500 MON0.03384754101.94
Add Whitelist Ph...481137732026-01-12 0:12:2912 days ago1768176749IN
0x2Fefc721...df3E0379A
0 MON0.0090252100.0001
Purchase Initial...481081432026-01-11 23:34:5013 days ago1768174490IN
0x2Fefc721...df3E0379A
500 MON0.0508012102
Purchase Initial...480852362026-01-11 21:01:4313 days ago1768165303IN
0x2Fefc721...df3E0379A
500 MON0.0338577102.10004247
Purchase Initial...480677592026-01-11 19:04:5313 days ago1768158293IN
0x2Fefc721...df3E0379A
500 MON0.0338577102.10004247
Purchase Initial...480652862026-01-11 18:48:2113 days ago1768157301IN
0x2Fefc721...df3E0379A
500 MON0.05073684102
Add Whitelist Ph...480622372026-01-11 18:27:5813 days ago1768156078IN
0x2Fefc721...df3E0379A
0 MON0.0092057102
Add Whitelist Ph...480621382026-01-11 18:27:1913 days ago1768156039IN
0x2Fefc721...df3E0379A
0 MON0.0090252100.0001
Purchase Initial...480510022026-01-11 17:12:4713 days ago1768151567IN
0x2Fefc721...df3E0379A
500 MON0.05073684102
Purchase Initial...480371352026-01-11 15:39:5613 days ago1768145996IN
0x2Fefc721...df3E0379A
500 MON0.0663226200
Purchase Initial...480153542026-01-11 13:14:1813 days ago1768137258IN
0x2Fefc721...df3E0379A
500 MON0.05073684102
Purchase Initial...480086642026-01-11 12:29:3413 days ago1768134574IN
0x2Fefc721...df3E0379A
500 MON0.05073673102
Add Whitelist Ph...480064932026-01-11 12:15:0413 days ago1768133704IN
0x2Fefc721...df3E0379A
0 MON0.02677412100.0001
Purchase Initial...479606052026-01-11 7:08:1113 days ago1768115291IN
0x2Fefc721...df3E0379A
500 MON0.0338577102.10004247
Purchase Initial...479329402026-01-11 4:03:1113 days ago1768104191IN
0x2Fefc721...df3E0379A
500 MON0.03471415104.55
Purchase Initial...479314582026-01-11 3:53:1813 days ago1768103598IN
0x2Fefc721...df3E0379A
500 MON0.03382452102
Add Whitelist Ph...478970642026-01-11 0:03:3913 days ago1768089819IN
0x2Fefc721...df3E0379A
0 MON0.28941316102
Purchase Initial...478330152026-01-10 16:55:3814 days ago1768064138IN
0x2Fefc721...df3E0379A
500 MON0.05073673102
Purchase Initial...478244492026-01-10 15:58:2414 days ago1768060704IN
0x2Fefc721...df3E0379A
500 MON0.03386746102
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
481441512026-01-12 3:35:2812 days ago1768188928
0x2Fefc721...df3E0379A
500 MON
481420562026-01-12 3:21:2812 days ago1768188088
0x2Fefc721...df3E0379A
500 MON
481156752026-01-12 0:25:1312 days ago1768177513
0x2Fefc721...df3E0379A
500 MON
481081432026-01-11 23:34:5013 days ago1768174490
0x2Fefc721...df3E0379A
500 MON
480852362026-01-11 21:01:4313 days ago1768165303
0x2Fefc721...df3E0379A
500 MON
480677592026-01-11 19:04:5313 days ago1768158293
0x2Fefc721...df3E0379A
500 MON
480652862026-01-11 18:48:2113 days ago1768157301
0x2Fefc721...df3E0379A
500 MON
480510022026-01-11 17:12:4713 days ago1768151567
0x2Fefc721...df3E0379A
500 MON
480371352026-01-11 15:39:5613 days ago1768145996
0x2Fefc721...df3E0379A
500 MON
480153542026-01-11 13:14:1813 days ago1768137258
0x2Fefc721...df3E0379A
500 MON
480086642026-01-11 12:29:3413 days ago1768134574
0x2Fefc721...df3E0379A
500 MON
479606052026-01-11 7:08:1113 days ago1768115291
0x2Fefc721...df3E0379A
500 MON
479329402026-01-11 4:03:1113 days ago1768104191
0x2Fefc721...df3E0379A
500 MON
479314582026-01-11 3:53:1813 days ago1768103598
0x2Fefc721...df3E0379A
500 MON
478330152026-01-10 16:55:3814 days ago1768064138
0x2Fefc721...df3E0379A
500 MON
478244492026-01-10 15:58:2414 days ago1768060704
0x2Fefc721...df3E0379A
500 MON
477222482026-01-10 4:35:3214 days ago1768019732
0x2Fefc721...df3E0379A
500 MON
477115122026-01-10 3:23:4314 days ago1768015423
0x2Fefc721...df3E0379A
500 MON
476758422026-01-09 23:25:2315 days ago1768001123
0x2Fefc721...df3E0379A
500 MON
476640542026-01-09 22:06:4115 days ago1767996401
0x2Fefc721...df3E0379A
500 MON
476200512026-01-09 17:12:0415 days ago1767978724
0x2Fefc721...df3E0379A
500 MON
474378592026-01-08 20:54:0216 days ago1767905642
0x2Fefc721...df3E0379A
500 MON
474363842026-01-08 20:44:1116 days ago1767905051
0x2Fefc721...df3E0379A
500 MON
474250782026-01-08 19:28:3116 days ago1767900511
0x2Fefc721...df3E0379A
500 MON
473869602026-01-08 15:13:3316 days ago1767885213
0x2Fefc721...df3E0379A
500 MON
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PetroGame

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at monadscan.com on 2025-12-09
*/

// File: artifacts/contract/contract (1)/contract/PetroGame/utils/Context.sol


pragma solidity ^0.8.20;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}
// File: artifacts/contract/contract (1)/contract/PetroGame/utils/Ownable.sol


pragma solidity ^0.8.20;


abstract contract Ownable is Context {
    address private _owner;
    error OwnableUnauthorizedAccount(address account);
    error OwnableInvalidOwner(address owner);
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    function _checkOwner() internal view virtual {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}
// File: artifacts/contract/contract (1)/contract/PetroGame/utils/EnumerableSetLib.sol


pragma solidity ^0.8.4;

library EnumerableSetLib {
    error IndexOutOfBounds();
    error ValueIsZeroSentinel();
    error ExceedsCapacity();

    uint256 private constant _ZERO_SENTINEL = 0xfbb67fda52d4bfb8bf;
    uint256 private constant _ENUMERABLE_ADDRESS_SET_SLOT_SEED = 0x978aab92;
    uint256 private constant _ENUMERABLE_WORD_SET_SLOT_SEED = 0x18fb5864;

    struct AddressSet { uint256 _spacer; }
    struct Bytes32Set { uint256 _spacer; }
    struct Uint256Set { uint256 _spacer; }
    struct Int256Set { uint256 _spacer; }
    struct Uint8Set { uint256 data; }

    function length(Uint256Set storage set) internal view returns (uint256 result) {
        result = length(_toBytes32Set(set));
    }

    function contains(Uint256Set storage set, uint256 value) internal view returns (bool result) {
        result = contains(_toBytes32Set(set), bytes32(value));
    }

    function add(Uint256Set storage set, uint256 value) internal returns (bool result) {
        result = add(_toBytes32Set(set), bytes32(value));
    }

    function remove(Uint256Set storage set, uint256 value) internal returns (bool result) {
        result = remove(_toBytes32Set(set), bytes32(value));
    }

    function at(Uint256Set storage set, uint256 i) internal view returns (uint256 result) {
        result = uint256(at(_toBytes32Set(set), i));
    }

    // --- Private Helpers to reduce size (Using Bytes32 logic for Uint256) ---
    function length(Bytes32Set storage set) internal view returns (uint256 result) {
        bytes32 rootSlot = _rootSlot(set);
        assembly {
            let n := sload(not(rootSlot))
            result := shr(1, n)
        }
    }

    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool result) {
        bytes32 rootSlot = _rootSlot(set);
        assembly {
            if eq(value, _ZERO_SENTINEL) { mstore(0x00, 0xf5a267f1) revert(0x1c, 0x04) }
            if iszero(value) { value := _ZERO_SENTINEL }
            mstore(0x20, rootSlot)
            mstore(0x00, value)
            result := iszero(iszero(sload(keccak256(0x00, 0x40))))
        }
    }

    function add(Bytes32Set storage set, bytes32 value) internal returns (bool result) {
        bytes32 rootSlot = _rootSlot(set);
        assembly {
            if eq(value, _ZERO_SENTINEL) { mstore(0x00, 0xf5a267f1) revert(0x1c, 0x04) }
            if iszero(value) { value := _ZERO_SENTINEL }
            mstore(0x20, rootSlot)
            mstore(0x00, value)
            let p := keccak256(0x00, 0x40)
            if iszero(sload(p)) {
                let n := sload(not(rootSlot))
                mstore(0x00, n) // Use scratch space
                sstore(add(rootSlot, shr(1, n)), value)
                sstore(p, add(1, shr(1, n)))
                sstore(not(rootSlot), add(n, 2)) 
                result := 1
            }
        }
    }

    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool result) {
        bytes32 rootSlot = _rootSlot(set);
        assembly {
            if eq(value, _ZERO_SENTINEL) { mstore(0x00, 0xf5a267f1) revert(0x1c, 0x04) }
            if iszero(value) { value := _ZERO_SENTINEL }
            mstore(0x20, rootSlot)
            mstore(0x00, value)
            let p := keccak256(0x00, 0x40)
            let position := sload(p)
            if position {
                let n := shr(1, sload(not(rootSlot)))
                let lastValue := sload(add(rootSlot, sub(n, 1)))
                if iszero(eq(value, lastValue)) {
                    sstore(add(rootSlot, sub(position, 1)), lastValue)
                    mstore(0x00, lastValue)
                    sstore(keccak256(0x00, 0x40), position)
                }
                sstore(not(rootSlot), sub(shl(1, n), 2))
                sstore(p, 0)
                result := 1
            }
        }
    }

    function at(Bytes32Set storage set, uint256 i) internal view returns (bytes32 result) {
        bytes32 rootSlot = _rootSlot(set);
        assembly {
             if iszero(lt(i, shr(1, sload(not(rootSlot))))) {
                mstore(0x00, 0x4e23d035) // IndexOutOfBounds()
                revert(0x1c, 0x04)
            }
            result := sload(add(rootSlot, i))
            result := mul(result, iszero(eq(result, _ZERO_SENTINEL)))
        }
    }

    function _rootSlot(Bytes32Set storage s) private pure returns (bytes32 r) {
        assembly {
            mstore(0x04, _ENUMERABLE_WORD_SET_SLOT_SEED)
            mstore(0x00, s.slot)
            r := keccak256(0x00, 0x24)
        }
    }

    function _toBytes32Set(Uint256Set storage s) private pure returns (Bytes32Set storage c) {
        assembly { c.slot := s.slot }
    }
}
// File: artifacts/contract/contract (1)/contract/PetroGame/utils/FixedPointMathLib.sol


pragma solidity ^0.8.4;

library FixedPointMathLib {
    uint256 internal constant WAD = 1e18;

    function mulWad(uint256 x, uint256 y) internal pure returns (uint256 z) {
        assembly {
            if mul(y, gt(x, div(not(0), y))) {
                mstore(0x00, 0xbac65e5b) 
                revert(0x1c, 0x04)
            }
            z := div(mul(x, y), WAD)
        }
    }

    function mulDiv(uint256 x, uint256 y, uint256 d) internal pure returns (uint256 z) {
        assembly {
            if iszero(mul(or(iszero(x), eq(div(mul(x, y), x), y)), d)) {
                mstore(0x00, 0xad251c27) 
                revert(0x1c, 0x04)
            }
            z := div(mul(x, y), d)
        }
    }
}
// File: artifacts/contract/contract (1)/contract/PetroGame/interfaces/IPetro.sol

//SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.19;

interface IPetro {
    function mint(address to, uint256 amt) external;
    function burn(uint256 value) external;
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, uint256 value) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 value) external returns (bool);
    function transferFrom(address from, address to, uint256 value) external returns (bool);
}
// File: artifacts/contract/contract (1)/contract/PetroGame/types/Rig.sol


pragma solidity ^0.8.19;

struct Rig {
    uint256 rigIndex; 
    uint256 id;
    uint256 x;
    uint256 y;
    uint256 hashrate;
    uint256 powerConsumption;
    uint256 cost;
    bool inProduction;
}
// File: artifacts/contract/contract (1)/contract/PetroGame/types/Field.sol


pragma solidity ^0.8.19;

struct Field {
    uint256 fieldIndex; 
    uint256 maxRigs;    
    uint256 currRigs;   
    uint256 totalPowerOutput;
    uint256 currPowerOutput;
    uint256 x;
    uint256 y;
}
// File: artifacts/contract/contract (1)/contract/PetroGame/types/NewField.sol


pragma solidity ^0.8.19;

struct NewField {
    uint256 maxRigs; 
    uint256 totalPowerOutput;
    uint256 cost;
    bool inProduction;
    uint256 x;
    uint256 y;
}
// File: artifacts/contract/contract (1)/contract/PetroGame/libraries/Errors.sol


pragma solidity ^0.8.19;

library Errors {
    error IncorrectValue();
    error AlreadyPurchasedInitialField();
    error StarterRigAlreadyAcquired();
    error FieldAtMaxCapacity();
    error FieldInadequatePowerOutput();
    error PlayerDoesNotOwnRig();
    error GreatDepression();
    error RigNotInProduction();
    error TooPoor();
    error NewFieldNotInProduction();
    error CannotDowngradeAField();
    error NoRewardsPending();
    error CannotDecreaseBelowZero();
    error InvalidRigCoordinates();
    error FieldDimensionsInvalid();
    error NeedToInitializeField();
    error InvalidReferrer();
    error NonExistentRig();
    error CantModifyStarterRig();
    error NonExistentField();
    error CantModifyStarterField();
    error AlreadyAtMaxField();
    error CantBuyNewFieldYet();
    error InvalidRigIndex();
    error InvalidFieldIndex();
    error InvalidFee();
    error InvalidPowerOutput();
    error MiningHasntStarted();
    error WithdrawFailed();
}
// File: artifacts/contract/contract (1)/contract/PetroGame/libraries/Events.sol


pragma solidity ^0.8.19;

library Events {
    event MiningStarted(uint256 startBlock);
    event NewRigAdded(uint256 indexed rigIndex, uint256 hashRate, uint256 powerConsumption, uint256 cost, bool inProduction);
    event RigProductionToggled(uint256 indexed rigIndex, bool inProduction);
    event FieldProductionToggled(uint256 indexed fieldIndex, bool inProduction);
    event NewFieldAdded(uint256 indexed fieldIndex, uint256 totalPowerOutput, uint256 cost, bool inProduction, uint256 x, uint256 y);
    event RigSecondaryMarketAdded(uint256 indexed rigIndex, uint256 price);
    event InitialFieldPurchased(address indexed player);
    event FreeRigRedeemed(address indexed player);
    event RigSold(address indexed player, uint256 indexed rigIndex, uint256 secondHandPrice, uint256 rigId, uint256 x, uint256 y);
    event RigBought(address indexed payer, address indexed player, uint256 indexed rigIndex, uint256 cost, uint256 rigId, uint256 x, uint256 y);
    event FieldBought(address indexed player, uint256 indexed fieldIndex, uint256 cost);
    event PlayerHashrateIncreased(address indexed player, uint256 playerHashrate, uint256 playerPendingRewards);
    event PlayerHashrateDecreased(address indexed player, uint256 playerHashrate, uint256 playerPendingRewards);
    event RewardsClaimed(address indexed player, uint256 rewards);
    event RigCostChanged(uint256 indexed rigIndex, uint256 newCost);
    event FieldCostChanged(uint256 indexed fieldIndex, uint256 newCost);
}
// File: artifacts/contract/contract (1)/contract/PetroGame/PetroGame.sol


pragma solidity ^0.8.19;





// --- ORACLE ---
interface IUniswapV2Pair {
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function token0() external view returns (address);
}






contract PetroGame is Ownable {
    using EnumerableSetLib for EnumerableSetLib.Uint256Set;

    address public petroToken;
    address public devWallet; 
    address public marketingWallet; 

    // ORACLE SETTINGS
    address public liquidityPair; // PETRO/MON 
    bool public useOracle = false; 
    uint256 public manualPetroPrice = 0.0001 ether; 

    uint256 public startBlock;
    bool public miningHasStarted;
    
    uint256 universalRigId;
    uint256 public uniqueRigCount;
    uint256 public fieldCount;

    uint256 public lastRewardBlock;
    uint256 public totalHashrate;
    uint256 public cumulativePetroPerHash;
    
    // COOLDOWN 
    uint256 public cooldown = 86400; 
    
    mapping(address => uint256) public lastUpgradeTime; 
    mapping(address => uint256) public lastClaimTime; 

    mapping(address => uint256) public playerHashrate;
    mapping(address => uint256) public playerPendingRewards;
    mapping(address => uint256) public playerPetroDebt;
    
    mapping(uint256 => Rig) public rigs;
    mapping(uint256 => NewField) public fields;
    
    mapping(address => EnumerableSetLib.Uint256Set) public playerRigsOwned;
    mapping(uint256 => Rig) public playerRigsId;
    mapping(address => Field) public ownerToField;
    
    mapping(address => bool) public initializedStarterField;
    mapping(address => bool) public acquiredStarterRig;
    
    mapping(address => mapping(uint256 => mapping(uint256 => bool))) public playerOccupiedCoords;
    mapping(address => mapping(uint256 => mapping(uint256 => uint256))) public gridRigIndex; 
    
    mapping(address => address) public referrals;
    mapping(address => address[]) public referredUsers;
    
    mapping(address => uint256) public referralPetroBalance; 
    mapping(address => uint256) public totalMonCommission;   
    
    uint8 public currentPhase = 0; 
    
    
    uint256 public initialFieldPrice = 1000 ether;   
    uint256 public constant PHASE1_PRICE = 1 ether; 
    uint256 public constant PHASE2_PRICE = 500 ether;   
    
    mapping(address => bool) public whitelistPhase1;
    mapping(address => bool) public whitelistPhase2;

    uint256 public immutable STARTER_RIG_INDEX;
    uint256 public immutable STARTER_FIELD_INDEX;

    uint256 public constant INITIAL_PETRO_PER_BLOCK = 868055555555555555; 
    uint256 public constant REWARDS_PRECISION = 1e18;

    event FieldUpgraded(address indexed player, uint256 newLevel, uint256 newMaxRigs, uint256 newPower);
    event ReferralRewardClaimed(address indexed user, uint256 amount);
    event ClaimFeePaid(address indexed user, uint256 totalFee, uint256 devShare, uint256 marketingShare);
    event PhaseChanged(uint8 newPhase);
    event OracleUpdated(address pair, bool status);

    constructor() Ownable(msg.sender) {
        devWallet = msg.sender;
        marketingWallet = msg.sender;

        _addRig(100, 1, 0); STARTER_RIG_INDEX = 1;
        _addRig(180, 6, 21 * 1e18); _addRig(420, 8, 36 * 1e18); 
        _addRig(720, 10, 54 * 1e18); _addRig(1000, 10, 60 * 1e18); 
        _addRig(5000, 30, 180 * 1e18); _addRig(15000, 50, 375 * 1e18); 
        _addRig(20000, 90, 600 * 1e18); _addRig(60000, 200, 1200 * 1e18); 
        _addRig(200000, 600, 3600 * 1e18); _addRig(1120000, 3200, 8000 * 1e18); 
        _addRig(800000, 2000, 9000 * 1e18); _addRig(1336000, 3000, 12000 * 1e18); 
        _addRig(2508000, 5000, 18000 * 1e18); _addRig(3484000, 4500, 28000 * 1e18); 

        fields[++fieldCount] = NewField(4, 28, 0, false, 2, 2); STARTER_FIELD_INDEX = fieldCount;
        fields[++fieldCount] = NewField(8, 168, 210 * 1e18, false, 2, 4);
        fields[++fieldCount] = NewField(12, 420, 1125 * 1e18, false, 3, 4);
        fields[++fieldCount] = NewField(16, 1120, 888 * 1e18, false, 4, 4);
        fields[++fieldCount] = NewField(20, 7000, 1065 * 1e18, false, 4, 5);
        fields[++fieldCount] = NewField(20, 13125, 1275 * 1e18, false, 4, 5);
        fields[++fieldCount] = NewField(20, 19685, 2550 * 1e18, false, 4, 5);
    }

    function _addRig(uint256 hashrate, uint256 power, uint256 cost) internal {
        uniqueRigCount++;
        rigs[uniqueRigCount] = Rig(uniqueRigCount, type(uint256).max, type(uint256).max, type(uint256).max, hashrate, power, cost, false);
    }

    function setLiquidityPair(address _pair, bool _enabled) external onlyOwner {
        liquidityPair = _pair;
        useOracle = _enabled;
        emit OracleUpdated(_pair, _enabled);
    }

    function setManualPetroPrice(uint256 _priceInWei) external onlyOwner {
        manualPetroPrice = _priceInWei;
    }

    function getPetroPrice() public view returns (uint256) {
        if (!useOracle || liquidityPair == address(0)) {
            return manualPetroPrice;
        }
        (uint112 reserve0, uint112 reserve1, ) = IUniswapV2Pair(liquidityPair).getReserves();
        address token0 = IUniswapV2Pair(liquidityPair).token0();
        if (reserve0 == 0 || reserve1 == 0) return manualPetroPrice;
        uint256 reserveMON;
        uint256 reservePETRO;
        if (token0 == petroToken) {
            reservePETRO = reserve0;
            reserveMON = reserve1;
        } else {
            reserveMON = reserve0;
            reservePETRO = reserve1;
        }
        return (reserveMON * 1e18) / reservePETRO;
    }
    
    function setMarketingWallet(address _wallet) external onlyOwner {
        marketingWallet = _wallet;
    }
    
    function setPhase(uint8 _phase) external onlyOwner {
        currentPhase = _phase;
        emit PhaseChanged(_phase);
    }

    function addWhitelistPhase1(address[] calldata _users) external onlyOwner {
        for(uint i=0; i<_users.length; i++) {
            whitelistPhase1[_users[i]] = true;
        }
    }

    function addWhitelistPhase2(address[] calldata _users) external onlyOwner {
        for(uint i=0; i<_users.length; i++) {
            whitelistPhase2[_users[i]] = true;
        }
    }

    function getPendingReward(address _user) public view returns (uint256) {
        uint256 _accPetroPerHash = cumulativePetroPerHash;
        if (block.number > lastRewardBlock && totalHashrate != 0) {
            uint256 rewards = (block.number - lastRewardBlock) * INITIAL_PETRO_PER_BLOCK;
            _accPetroPerHash += (rewards * REWARDS_PRECISION) / totalHashrate;
        }
        return playerPendingRewards[_user] + (playerHashrate[_user] * (_accPetroPerHash - playerPetroDebt[_user])) / REWARDS_PRECISION;
    }
    
    function claimRewards() external payable {
        if (!miningHasStarted) revert Errors.MiningHasntStarted();
        _updateRewards(msg.sender);
        
        uint256 totalReward = playerPendingRewards[msg.sender];
        if (totalReward > 0) {
            uint256 timeDiff = block.timestamp - lastClaimTime[msg.sender];
            uint256 hoursPassed = timeDiff / 3600; 
            
            uint256 burnPercent = 0;
            uint256 startFee = 30; 

            if (hoursPassed >= startFee) {
                burnPercent = 0; 
            } else {
                burnPercent = startFee - hoursPassed; 
            }

            uint256 currentPetroPrice = getPetroPrice(); 
            uint256 claimValueInMon = (totalReward * currentPetroPrice) / 1e18;
            uint256 requiredFee = (claimValueInMon * 10) / 100; 
            require(msg.value >= requiredFee, "Insufficient Pay-to-Claim Fee");

            uint256 devShare = requiredFee / 2;
            uint256 marketingShare = requiredFee - devShare;
            payable(devWallet).transfer(devShare);
            payable(marketingWallet).transfer(marketingShare);
            emit ClaimFeePaid(msg.sender, requiredFee, devShare, marketingShare);

            playerPendingRewards[msg.sender] = 0; 
            lastClaimTime[msg.sender] = block.timestamp; 

            uint256 burnAmount = (totalReward * burnPercent) / 100;
            uint256 netReward = totalReward - burnAmount;

            uint256 contractShare = (totalReward * 75) / 1000; 
            uint256 refShare = (totalReward * 25) / 1000; 

            IPetro(petroToken).mint(msg.sender, netReward);

            address referrer = referrals[msg.sender];
            if (referrer != address(0)) {
                IPetro(petroToken).mint(address(this), contractShare);
                referralPetroBalance[referrer] += refShare;
            } else {
                IPetro(petroToken).mint(address(this), contractShare + refShare);
            }
            emit Events.RewardsClaimed(msg.sender, netReward);
        }
    }

    
    function purchaseInitialField(address referrer) external payable {
        if (initializedStarterField[msg.sender]) revert Errors.AlreadyPurchasedInitialField();
        require(currentPhase > 0, "Sales not started");

        uint256 priceToPay;
        
        
        if (currentPhase == 1) {
            require(whitelistPhase1[msg.sender], "Not Whitelisted for Phase 1");
            priceToPay = PHASE1_PRICE;
        } 
        else if (currentPhase == 2) {
            require(whitelistPhase2[msg.sender], "Not Whitelisted for Phase 2");
            priceToPay = PHASE2_PRICE;
        } 
        else {
            
            priceToPay = initialFieldPrice; 

        
            if (referrer != address(0) && referrer != msg.sender) {
                priceToPay = (initialFieldPrice * 90) / 100; 
            }
        }

        if (msg.value < priceToPay) revert Errors.IncorrectValue();

        bool isValidRef = (referrer != address(0) && referrer != msg.sender && currentPhase == 3);
        
        if (isValidRef) {
            
            uint256 refShare = (initialFieldPrice * 10) / 100;
            
            uint256 remainingShare = msg.value - refShare;

            payable(referrer).transfer(refShare);
            totalMonCommission[referrer] += refShare;
            referrals[msg.sender] = referrer;
            referredUsers[referrer].push(msg.sender);

            if (marketingWallet != address(0) && marketingWallet != devWallet) {
                uint256 splitAmount = remainingShare / 2; 
                payable(devWallet).transfer(splitAmount);
                payable(marketingWallet).transfer(remainingShare - splitAmount);
            } else {
                
                payable(devWallet).transfer(remainingShare); 
            }

        } else {
            
            if (marketingWallet != address(0) && marketingWallet != devWallet) {
                uint256 splitAmount = msg.value / 2;
                payable(devWallet).transfer(splitAmount);
                payable(marketingWallet).transfer(msg.value - splitAmount);
            } else {
                payable(devWallet).transfer(msg.value);
            }
        }

        initializedStarterField[msg.sender] = true;
        lastClaimTime[msg.sender] = block.timestamp; 

        NewField memory newField = fields[STARTER_FIELD_INDEX];
        Field storage field = ownerToField[msg.sender];
        field.fieldIndex = STARTER_FIELD_INDEX;
        field.maxRigs = newField.maxRigs;
        field.totalPowerOutput = newField.totalPowerOutput;
        field.currPowerOutput = 0;
        field.x = newField.x;
        field.y = newField.y;
        emit Events.InitialFieldPurchased(msg.sender);
    }

    function upgradeField() external {
        require(currentPhase == 3, "Game has not started yet (Upgrades Locked)");
        if (!initializedStarterField[msg.sender]) revert Errors.NeedToInitializeField();
        require(block.timestamp >= lastUpgradeTime[msg.sender] + cooldown, "Cooldown active: Please wait.");
        Field storage userField = ownerToField[msg.sender];
        uint256 nextLevelIndex = userField.fieldIndex + 1;
        if (nextLevelIndex > fieldCount) revert Errors.AlreadyAtMaxField();
        NewField memory nextFieldData = fields[nextLevelIndex];
        bool success = IPetro(petroToken).transferFrom(msg.sender, address(this), nextFieldData.cost);
        require(success, "Token transfer failed");
        if (nextFieldData.cost > 0) IPetro(petroToken).burn(nextFieldData.cost);
        userField.fieldIndex = nextLevelIndex;
        userField.maxRigs = nextFieldData.maxRigs;
        userField.totalPowerOutput = nextFieldData.totalPowerOutput;
        userField.x = nextFieldData.x; 
        userField.y = nextFieldData.y; 
        lastUpgradeTime[msg.sender] = block.timestamp;
        emit FieldUpgraded(msg.sender, nextLevelIndex, nextFieldData.maxRigs, nextFieldData.totalPowerOutput);
    }

    function buyMiner(uint256 minerIndex, uint256 x, uint256 y) external {
        require(currentPhase == 3, "Game has not started yet (Drilling Locked)");
        if (!initializedStarterField[msg.sender]) revert Errors.NeedToInitializeField();
        Rig memory rig = rigs[minerIndex];
        if (rig.rigIndex == 0) revert Errors.NonExistentRig(); 
        bool success = IPetro(petroToken).transferFrom(msg.sender, address(this), rig.cost);
        require(success, "Token transfer failed");
        if (rig.cost > 0) IPetro(petroToken).burn(rig.cost);
        _mintRig(msg.sender, minerIndex, x, y, rig.cost);
    }

    function claimReferralEarnings() external {
        uint256 amount = referralPetroBalance[msg.sender];
        require(amount > 0, "No referral earnings");
        referralPetroBalance[msg.sender] = 0;
        IPetro(petroToken).mint(msg.sender, amount); 
        emit ReferralRewardClaimed(msg.sender, amount);
    }

    function getReferralStats(address user) external view returns (uint256 userCount, uint256 totalMon, uint256 pendingPetro) {
        return (referredUsers[user].length, totalMonCommission[user], referralPetroBalance[user]);
    }

    function withdrawPetro() external onlyOwner {
        uint256 balance = IPetro(petroToken).balanceOf(address(this));
        require(balance > 0, "No PETRO");
        IPetro(petroToken).transfer(devWallet, balance);
    }

    function withdrawMON() external onlyOwner {
        uint256 balance = address(this).balance;
        require(balance > 0, "No MON");
        payable(devWallet).transfer(balance);
    }

    function getFreeStarterRig(uint256 x, uint256 y) external {
        require(currentPhase == 3, "Game has not started yet (Drilling Locked)");
        if (acquiredStarterRig[msg.sender]) revert Errors.StarterRigAlreadyAcquired();
        if (!initializedStarterField[msg.sender]) revert Errors.NeedToInitializeField();
        acquiredStarterRig[msg.sender] = true;
        _mintRig(msg.sender, STARTER_RIG_INDEX, x, y, 0); 
    }
    
    function removeRig(uint256 x, uint256 y) external {
        if (!playerOccupiedCoords[msg.sender][x][y]) revert Errors.RigNotInProduction();
        Field storage field = ownerToField[msg.sender];
        uint256 rIndex = gridRigIndex[msg.sender][x][y];
        Rig memory rigInfo = rigs[rIndex];
        _updateRewards(msg.sender);
        
        if (totalHashrate >= rigInfo.hashrate) {
            totalHashrate -= rigInfo.hashrate;
        } else {
            totalHashrate = 0;
        }
        if (playerHashrate[msg.sender] >= rigInfo.hashrate) {
            playerHashrate[msg.sender] -= rigInfo.hashrate;
        } else {
            playerHashrate[msg.sender] = 0;
        }
        if (field.currPowerOutput >= rigInfo.powerConsumption) {
            field.currPowerOutput -= rigInfo.powerConsumption;
        } else {
            field.currPowerOutput = 0;
        }

        playerOccupiedCoords[msg.sender][x][y] = false;
        gridRigIndex[msg.sender][x][y] = 0;
        if (field.currRigs > 0) field.currRigs--;
        emit Events.PlayerHashrateDecreased(msg.sender, playerHashrate[msg.sender], playerPendingRewards[msg.sender]);
    }

    function _mintRig(address player, uint256 rigIndex, uint256 x, uint256 y, uint256 cost) internal {
        Rig memory rig = rigs[rigIndex];
        Field storage field = ownerToField[player];
        if (_isInvalidCoordinates(player, x, y, field.x, field.y)) revert Errors.InvalidRigCoordinates();
        if (field.currRigs >= field.maxRigs) revert Errors.FieldAtMaxCapacity();

        if (field.currPowerOutput + rig.powerConsumption > field.totalPowerOutput) revert Errors.FieldInadequatePowerOutput();
        field.currPowerOutput += rig.powerConsumption;
        universalRigId++;
        rig.x = x;
        rig.y = y;
        rig.id = universalRigId;
        playerOccupiedCoords[player][x][y] = true;
        gridRigIndex[player][x][y] = rigIndex;
        playerRigsOwned[player].add(universalRigId);
        playerRigsId[universalRigId] = rig;
        field.currRigs++;
        _increaseHashrate(player, rig.hashrate);
        emit Events.RigBought(player, player, rigIndex, cost, universalRigId, x, y);
    }

    function _increaseHashrate(address player, uint256 hashrate) internal {
        if (!miningHasStarted) {
            miningHasStarted = true;
            startBlock = block.number;
            lastRewardBlock = block.number;
            emit Events.MiningStarted(startBlock);
        }
        _updateRewards(player);
        totalHashrate += hashrate;
        playerHashrate[player] += hashrate;
        emit Events.PlayerHashrateIncreased(player, playerHashrate[player], playerPendingRewards[player]);
    }

    function _updateRewards(address player) internal {
        _updateCumulativeRewards();
        playerPendingRewards[player] += (playerHashrate[player] * (cumulativePetroPerHash - playerPetroDebt[player])) / REWARDS_PRECISION;
        playerPetroDebt[player] = cumulativePetroPerHash;
    }

    function _updateCumulativeRewards() internal {
        if (block.number <= lastRewardBlock) return;
        if (totalHashrate == 0) {
            lastRewardBlock = block.number;
            return;
        }
        uint256 rewards = (block.number - lastRewardBlock) * INITIAL_PETRO_PER_BLOCK; 
        cumulativePetroPerHash += (rewards * REWARDS_PRECISION) / totalHashrate;
        lastRewardBlock = block.number;
    }

    function _isInvalidCoordinates(address player, uint256 desiredX, uint256 desiredY, uint256 fieldX, uint256 fieldY) internal view returns (bool) {
        if (desiredX >= fieldX || desiredY >= fieldY) return true;
        return playerOccupiedCoords[player][desiredX][desiredY];
    }

    function setPetro(address _petro) external onlyOwner {
        petroToken = _petro;
    }

    function getNextFieldInfo(uint256 currentLevel) external view returns (uint256 cost, uint256 newMaxRigs, uint256 newPower) {
        if (currentLevel >= fieldCount) return (0,0,0);
        NewField memory next = fields[currentLevel + 1];
        return (next.cost, next.maxRigs, next.totalPowerOutput);
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyAtMaxField","type":"error"},{"inputs":[],"name":"AlreadyPurchasedInitialField","type":"error"},{"inputs":[],"name":"FieldAtMaxCapacity","type":"error"},{"inputs":[],"name":"FieldInadequatePowerOutput","type":"error"},{"inputs":[],"name":"IncorrectValue","type":"error"},{"inputs":[],"name":"InvalidRigCoordinates","type":"error"},{"inputs":[],"name":"MiningHasntStarted","type":"error"},{"inputs":[],"name":"NeedToInitializeField","type":"error"},{"inputs":[],"name":"NonExistentRig","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"RigNotInProduction","type":"error"},{"inputs":[],"name":"StarterRigAlreadyAcquired","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"totalFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"devShare","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingShare","type":"uint256"}],"name":"ClaimFeePaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"newLevel","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newMaxRigs","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newPower","type":"uint256"}],"name":"FieldUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"}],"name":"InitialFieldPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"startBlock","type":"uint256"}],"name":"MiningStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"OracleUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"newPhase","type":"uint8"}],"name":"PhaseChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"playerHashrate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"playerPendingRewards","type":"uint256"}],"name":"PlayerHashrateDecreased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"playerHashrate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"playerPendingRewards","type":"uint256"}],"name":"PlayerHashrateIncreased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ReferralRewardClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"rewards","type":"uint256"}],"name":"RewardsClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"payer","type":"address"},{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":true,"internalType":"uint256","name":"rigIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"cost","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rigId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"x","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"y","type":"uint256"}],"name":"RigBought","type":"event"},{"inputs":[],"name":"INITIAL_PETRO_PER_BLOCK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PHASE1_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PHASE2_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REWARDS_PRECISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STARTER_FIELD_INDEX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STARTER_RIG_INDEX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"acquiredStarterRig","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"addWhitelistPhase1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"addWhitelistPhase2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minerIndex","type":"uint256"},{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"buyMiner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimReferralEarnings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimRewards","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"cooldown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cumulativePetroPerHash","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentPhase","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fieldCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"fields","outputs":[{"internalType":"uint256","name":"maxRigs","type":"uint256"},{"internalType":"uint256","name":"totalPowerOutput","type":"uint256"},{"internalType":"uint256","name":"cost","type":"uint256"},{"internalType":"bool","name":"inProduction","type":"bool"},{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"getFreeStarterRig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"currentLevel","type":"uint256"}],"name":"getNextFieldInfo","outputs":[{"internalType":"uint256","name":"cost","type":"uint256"},{"internalType":"uint256","name":"newMaxRigs","type":"uint256"},{"internalType":"uint256","name":"newPower","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getPendingReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPetroPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getReferralStats","outputs":[{"internalType":"uint256","name":"userCount","type":"uint256"},{"internalType":"uint256","name":"totalMon","type":"uint256"},{"internalType":"uint256","name":"pendingPetro","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"gridRigIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialFieldPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"initializedStarterField","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastClaimTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastRewardBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastUpgradeTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualPetroPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"miningHasStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ownerToField","outputs":[{"internalType":"uint256","name":"fieldIndex","type":"uint256"},{"internalType":"uint256","name":"maxRigs","type":"uint256"},{"internalType":"uint256","name":"currRigs","type":"uint256"},{"internalType":"uint256","name":"totalPowerOutput","type":"uint256"},{"internalType":"uint256","name":"currPowerOutput","type":"uint256"},{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"petroToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"playerHashrate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"playerOccupiedCoords","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"playerPendingRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"playerPetroDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"playerRigsId","outputs":[{"internalType":"uint256","name":"rigIndex","type":"uint256"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"},{"internalType":"uint256","name":"hashrate","type":"uint256"},{"internalType":"uint256","name":"powerConsumption","type":"uint256"},{"internalType":"uint256","name":"cost","type":"uint256"},{"internalType":"bool","name":"inProduction","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"playerRigsOwned","outputs":[{"internalType":"uint256","name":"_spacer","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"referrer","type":"address"}],"name":"purchaseInitialField","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"referralPetroBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"referrals","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"referredUsers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"removeRig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rigs","outputs":[{"internalType":"uint256","name":"rigIndex","type":"uint256"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"},{"internalType":"uint256","name":"hashrate","type":"uint256"},{"internalType":"uint256","name":"powerConsumption","type":"uint256"},{"internalType":"uint256","name":"cost","type":"uint256"},{"internalType":"bool","name":"inProduction","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setLiquidityPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_priceInWei","type":"uint256"}],"name":"setManualPetroPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_petro","type":"address"}],"name":"setPetro","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_phase","type":"uint8"}],"name":"setPhase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalHashrate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalMonCommission","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniqueRigCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"upgradeField","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"useOracle","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistPhase1","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistPhase2","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawMON","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawPetro","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c06040525f600460146101000a81548160ff021916908315150217905550655af3107a400060055562015180600e555f60215f6101000a81548160ff021916908360ff160217905550683635c9adc5dea0000060225534801562000062575f80fd5b50335f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620000d7575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401620000ce919062000a7a565b60405180910390fd5b620000e8816200084160201b60201c565b503360025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503360035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200017e606460015f6200090260201b60201c565b600160808181525050620001a560b460066801236efcbcbb3400006200090260201b60201c565b620001c46101a460086801f399b1438a1000006200090260201b60201c565b620001e36102d0600a6802ed6689e54f1800006200090260201b60201c565b620002026103e8600a680340aad21b3b7000006200090260201b60201c565b62000221611388601e6809c2007651b25000006200090260201b60201c565b62000240613a9860326814542ba12a337c00006200090260201b60201c565b6200025f614e20605a682086ac3510526000006200090260201b60201c565b6200027e61ea6060c868410d586a20a4c000006200090260201b60201c565b6200029f62030d4061025868c328093e61ee4000006200090260201b60201c565b620002c162111700610c806901b1ae4d6e2ef50000006200090260201b60201c565b620002e3620c35006107d06901e7e4171bf4d3a000006200090260201b60201c565b62000305621462c0610bb869028a857425466f8000006200090260201b60201c565b62000327622644e06113886903cfc82e37e9a74000006200090260201b60201c565b62000349623529606111946905ede20f01a4598000006200090260201b60201c565b6040518060c0016040528060048152602001601c81526020015f81526020015f1515815260200160028152602001600281525060155f600a5f81546200038f9062000acb565b91905081905581526020019081526020015f205f820151815f015560208201518160010155604082015181600201556060820151816003015f6101000a81548160ff0219169083151502179055506080820151816004015560a08201518160050155905050600a5460a081815250506040518060c001604052806008815260200160a88152602001680b6255df5f5008000081526020015f1515815260200160028152602001600481525060155f600a5f81546200044d9062000acb565b91905081905581526020019081526020015f205f820151815f015560208201518160010155604082015181600201556060820151816003015f6101000a81548160ff0219169083151502179055506080820151816004015560a082015181600501559050506040518060c00160405280600c81526020016101a48152602001683cfc82e37e9a74000081526020015f1515815260200160038152602001600481525060155f600a5f8154620005029062000acb565b91905081905581526020019081526020015f205f820151815f015560208201518160010155604082015181600201556060820151816003015f6101000a81548160ff0219169083151502179055506080820151816004015560a082015181600501559050506040518060c0016040528060108152602001610460815260200168302379bf2ca2e0000081526020015f1515815260200160048152602001600481525060155f600a5f8154620005b79062000acb565b91905081905581526020019081526020015f205f820151815f015560208201518160010155604082015181600201556060820151816003015f6101000a81548160ff0219169083151502179055506080820151816004015560a082015181600501559050506040518060c0016040528060148152602001611b5881526020016839bbd811635f04000081526020015f1515815260200160048152602001600581525060155f600a5f81546200066c9062000acb565b91905081905581526020019081526020015f205f820151815f015560208201518160010155604082015181600201556060820151816003015f6101000a81548160ff0219169083151502179055506080820151816004015560a082015181600501559050506040518060c0016040528060148152602001613345815260200168451e2df0c2af0c000081526020015f1515815260200160048152602001600581525060155f600a5f8154620007219062000acb565b91905081905581526020019081526020015f205f820151815f015560208201518160010155604082015181600201556060820151816003015f6101000a81548160ff0219169083151502179055506080820151816004015560a082015181600501559050506040518060c0016040528060148152602001614ce58152602001688a3c5be1855e18000081526020015f1515815260200160048152602001600581525060155f600a5f8154620007d69062000acb565b91905081905581526020019081526020015f205f820151815f015560208201518160010155604082015181600201556060820151816003015f6101000a81548160ff0219169083151502179055506080820151816004015560a0820151816005015590505062000b17565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60095f815480929190620009169062000acb565b919050555060405180610100016040528060095481526020017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81526020017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81526020017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81526020018481526020018381526020018281526020015f151581525060145f60095481526020019081526020015f205f820151815f01556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e0820151816007015f6101000a81548160ff021916908315150217905550905050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000a628262000a37565b9050919050565b62000a748162000a56565b82525050565b5f60208201905062000a8f5f83018462000a69565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f819050919050565b5f62000ad78262000ac2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362000b0c5762000b0b62000a95565b5b600182019050919050565b60805160a051615bb462000b4e5f395f818161224b01528181612cc20152612d8801525f81816134c001526134f30152615bb45ff3fe6080604052600436106103cd575f3560e01c8063715018a6116101fc578063b3c0d5e411610117578063d013eb0a116100aa578063e92820e611610079578063e92820e614610ec2578063f2fde38b14610efe578063f322b65f14610f26578063f37785a214610f3c578063f6934a9f14610f52576103cd565b8063d013eb0a14610e0a578063d09d4abd14610e32578063e2b15d8c14610e5c578063e5b691d814610e98576103cd565b8063c03afb59116100e6578063c03afb5914610d27578063c2df398214610d4f578063c7fda10414610d8b578063cc53b27614610dce576103cd565b8063b3c0d5e414610c57578063b55de1a814610c7f578063b77cf9c614610cc1578063bb485bbd14610cfd576103cd565b806386b3cd261161018f5780639ca423b31161015e5780639ca423b314610b9f578063a269435d14610bdb578063a9f8d18114610c03578063ad154c6814610c2d576103cd565b806386b3cd2614610af75780638da5cb5b14610b215780638ea5220f14610b4b57806394fc19e414610b75576103cd565b8063808a5457116101cb578063808a545714610a6557806384ae48b514610a8f57806384caff8314610aa557806384db13d214610acf576103cd565b8063715018a6146109d157806375ddec4b146109e757806375f0a87414610a11578063787a08a614610a3b576103cd565b806333437f64116102ec5780634df9d6ba1161027f5780635d098b381161024e5780635d098b381461092d5780635ee36f74146109555780635f7f44e11461097f5780636a8fa041146109bb576103cd565b80634df9d6ba146108815780634fe6f7a9146108bd57806356fbab7a146108e75780635a5ccef014610903576103cd565b8063426222d5116102bb578063426222d5146107c95780634487872414610805578063476e2e661461082f57806348cd4cb114610857576103cd565b806333437f641461071d578063372500ab146107475780633d5e1f1e1461075157806340f5da9e1461078d576103cd565b80631913785611610364578063234f3f1b11610333578063234f3f1b1461063f578063238760641461067b5780632aabc69e146106a35780633041a520146106e1576103cd565b8063191378561461056c5780631c52ef27146105ad5780631dbd6bc8146105d757806321bade1314610601576103cd565b806307604998116103a0578063076049981461049057806312544abc146104cc578063136d5072146104f457806316ccbed214610530576103cd565b80630504023b146103d157806305244d77146103f9578063055ad42e1461043c57806306bbf22814610466575b5f80fd5b3480156103dc575f80fd5b506103f760048036038101906103f29190614d26565b610f8e565b005b348015610404575f80fd5b5061041f600480360381019061041a9190614d84565b610fd9565b604051610433989796959493929190614dd8565b60405180910390f35b348015610447575f80fd5b50610450611029565b60405161045d9190614e6f565b60405180910390f35b348015610471575f80fd5b5061047a61103b565b6040516104879190614e97565b60405180910390f35b34801561049b575f80fd5b506104b660048036038101906104b19190614eb0565b611060565b6040516104c39190614f00565b60405180910390f35b3480156104d7575f80fd5b506104f260048036038101906104ed9190614f7a565b61108b565b005b3480156104ff575f80fd5b5061051a60048036038101906105159190614d26565b611134565b6040516105279190614f00565b60405180910390f35b34801561053b575f80fd5b5061055660048036038101906105519190614d26565b61114e565b6040516105639190614fc5565b60405180910390f35b348015610577575f80fd5b50610592600480360381019061058d9190614d84565b61116b565b6040516105a496959493929190614fde565b60405180910390f35b3480156105b8575f80fd5b506105c16111af565b6040516105ce9190614f00565b60405180910390f35b3480156105e2575f80fd5b506105eb6111b5565b6040516105f89190614f00565b60405180910390f35b34801561060c575f80fd5b5061062760048036038101906106229190614d26565b611464565b6040516106369392919061503d565b60405180910390f35b34801561064a575f80fd5b5061066560048036038101906106609190614d26565b611531565b6040516106729190614f00565b60405180910390f35b348015610686575f80fd5b506106a1600480360381019061069c919061509c565b611546565b005b3480156106ae575f80fd5b506106c960048036038101906106c49190614d84565b6115e5565b6040516106d89392919061503d565b60405180910390f35b3480156106ec575f80fd5b5061070760048036038101906107029190614d26565b611692565b6040516107149190614f00565b60405180910390f35b348015610728575f80fd5b506107316116a7565b60405161073e9190614f00565b60405180910390f35b61074f6116ad565b005b34801561075c575f80fd5b5061077760048036038101906107729190614d26565b611d66565b6040516107849190614f00565b60405180910390f35b348015610798575f80fd5b506107b360048036038101906107ae9190614d26565b611d7b565b6040516107c09190614f00565b60405180910390f35b3480156107d4575f80fd5b506107ef60048036038101906107ea9190614d26565b611d90565b6040516107fc9190614f00565b60405180910390f35b348015610810575f80fd5b50610819611da5565b6040516108269190614fc5565b60405180910390f35b34801561083a575f80fd5b50610855600480360381019061085091906150da565b611db8565b005b348015610862575f80fd5b5061086b6120dc565b6040516108789190614f00565b60405180910390f35b34801561088c575f80fd5b506108a760048036038101906108a29190614d26565b6120e2565b6040516108b49190614f00565b60405180910390f35b3480156108c8575f80fd5b506108d1612249565b6040516108de9190614f00565b60405180910390f35b61090160048036038101906108fc9190614d26565b61226d565b005b34801561090e575f80fd5b50610917612e34565b6040516109249190614f00565b60405180910390f35b348015610938575f80fd5b50610953600480360381019061094e9190614d26565b612e3a565b005b348015610960575f80fd5b50610969612e85565b6040516109769190614f00565b60405180910390f35b34801561098a575f80fd5b506109a560048036038101906109a09190614d26565b612e92565b6040516109b29190614fc5565b60405180910390f35b3480156109c6575f80fd5b506109cf612eaf565b005b3480156109dc575f80fd5b506109e5613056565b005b3480156109f2575f80fd5b506109fb613069565b604051610a089190614f00565b60405180910390f35b348015610a1c575f80fd5b50610a2561306f565b604051610a329190614e97565b60405180910390f35b348015610a46575f80fd5b50610a4f613094565b604051610a5c9190614f00565b60405180910390f35b348015610a70575f80fd5b50610a7961309a565b604051610a869190614e97565b60405180910390f35b348015610a9a575f80fd5b50610aa36130bf565b005b348015610ab0575f80fd5b50610ab961325e565b604051610ac69190614f00565b60405180910390f35b348015610ada575f80fd5b50610af56004803603810190610af09190614d84565b613264565b005b348015610b02575f80fd5b50610b0b613276565b604051610b189190614f00565b60405180910390f35b348015610b2c575f80fd5b50610b35613282565b604051610b429190614e97565b60405180910390f35b348015610b56575f80fd5b50610b5f6132a9565b604051610b6c9190614e97565b60405180910390f35b348015610b80575f80fd5b50610b896132ce565b604051610b969190614fc5565b60405180910390f35b348015610baa575f80fd5b50610bc56004803603810190610bc09190614d26565b6132e0565b604051610bd29190614e97565b60405180910390f35b348015610be6575f80fd5b50610c016004803603810190610bfc919061512a565b613310565b005b348015610c0e575f80fd5b50610c176134eb565b604051610c249190614f00565b60405180910390f35b348015610c38575f80fd5b50610c416134f1565b604051610c4e9190614f00565b60405180910390f35b348015610c62575f80fd5b50610c7d6004803603810190610c789190614f7a565b613515565b005b348015610c8a575f80fd5b50610ca56004803603810190610ca09190614d26565b6135be565b604051610cb89796959493929190615168565b60405180910390f35b348015610ccc575f80fd5b50610ce76004803603810190610ce29190614d26565b6135fc565b604051610cf49190614f00565b60405180910390f35b348015610d08575f80fd5b50610d11613611565b604051610d1e9190614f00565b60405180910390f35b348015610d32575f80fd5b50610d4d6004803603810190610d4891906151ff565b613617565b005b348015610d5a575f80fd5b50610d756004803603810190610d709190614d26565b613673565b604051610d829190614fc5565b60405180910390f35b348015610d96575f80fd5b50610db16004803603810190610dac9190614d84565b613690565b604051610dc5989796959493929190614dd8565b60405180910390f35b348015610dd9575f80fd5b50610df46004803603810190610def9190614d26565b6136e0565b604051610e019190614fc5565b60405180910390f35b348015610e15575f80fd5b50610e306004803603810190610e2b919061512a565b6136fd565b005b348015610e3d575f80fd5b50610e46613be4565b604051610e539190614f00565b60405180910390f35b348015610e67575f80fd5b50610e826004803603810190610e7d9190614eb0565b613bf0565b604051610e8f9190614fc5565b60405180910390f35b348015610ea3575f80fd5b50610eac613c25565b604051610eb99190614f00565b60405180910390f35b348015610ecd575f80fd5b50610ee86004803603810190610ee3919061522a565b613c31565b604051610ef59190614e97565b60405180910390f35b348015610f09575f80fd5b50610f246004803603810190610f1f9190614d26565b613c79565b005b348015610f31575f80fd5b50610f3a613cfd565b005b348015610f47575f80fd5b50610f50613db3565b005b348015610f5d575f80fd5b50610f786004803603810190610f739190614d26565b614266565b604051610f859190614f00565b60405180910390f35b610f9661427a565b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6014602052805f5260405f205f91509050805f015490806001015490806002015490806003015490806004015490806005015490806006015490806007015f9054906101000a900460ff16905088565b60215f9054906101000a900460ff1681565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601c602052825f5260405f20602052815f5260405f20602052805f5260405f205f9250925050505481565b61109361427a565b5f5b8282905081101561112f57600160245f8585858181106110b8576110b7615268565b5b90506020020160208101906110cd9190614d26565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080611127906152c2565b915050611095565b505050565b6016602052805f5260405f205f91509050805f0154905081565b6019602052805f5260405f205f915054906101000a900460ff1681565b6015602052805f5260405f205f91509050805f015490806001015490806002015490806003015f9054906101000a900460ff16908060040154908060050154905086565b600d5481565b5f600460149054906101000a900460ff16158061121e57505f73ffffffffffffffffffffffffffffffffffffffff1660045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b1561122d576005549050611461565b5f8060045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611299573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112bd9190615385565b50915091505f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561132d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061135191906153e9565b90505f836dffffffffffffffffffffffffffff16148061138057505f826dffffffffffffffffffffffffffff16145b15611392576005549350505050611461565b5f8060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361141357846dffffffffffffffffffffffffffff169050836dffffffffffffffffffffffffffff16915061143a565b846dffffffffffffffffffffffffffff169150836dffffffffffffffffffffffffffff1690505b80670de0b6b3a76400008361144f9190615414565b6114599190615482565b955050505050505b90565b5f805f601e5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905060205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054601f5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549250925092509193909250565b6011602052805f5260405f205f915090505481565b61154e61427a565b8160045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600460146101000a81548160ff0219169083151502179055507f94c9cbe1d9aa7af08484f82ab0179d6db973a391236668c34192d954ff32c06c82826040516115d99291906154b2565b60405180910390a15050565b5f805f600a5484106115ff575f805f92509250925061168b565b5f60155f60018761161091906154d9565b81526020019081526020015f206040518060c00160405290815f82015481526020016001820154815260200160028201548152602001600382015f9054906101000a900460ff161515151581526020016004820154815260200160058201548152505090508060400151815f01518260200151935093509350505b9193909250565b601f602052805f5260405f205f915090505481565b60095481565b60075f9054906101000a900460ff166116f2576040517f602fe2ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116fb33614301565b5f60125f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f811115611d63575f60105f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20544261178e919061550c565b90505f610e108261179f9190615482565b90505f80601e90508083106117b6575f91506117c5565b82816117c2919061550c565b91505b5f6117ce6111b5565b90505f670de0b6b3a764000082886117e69190615414565b6117f09190615482565b90505f6064600a836118029190615414565b61180c9190615482565b905080341015611851576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184890615599565b60405180910390fd5b5f60028261185f9190615482565b90505f818361186e919061550c565b905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f193505050501580156118d4573d5f803e3d5ffd5b5060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611939573d5f803e3d5ffd5b503373ffffffffffffffffffffffffffffffffffffffff167fb3aa4172b89ad35b55207df3917001046668de5f42c54b312c9e0b02e2968c8b8484846040516119849392919061503d565b60405180910390a25f60125f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055504260105f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f6064888c611a1f9190615414565b611a299190615482565b90505f818c611a38919061550c565b90505f6103e8604b8e611a4b9190615414565b611a559190615482565b90505f6103e860198f611a689190615414565b611a729190615482565b905060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1933856040518363ffffffff1660e01b8152600401611ad09291906155b7565b5f604051808303815f87803b158015611ae7575f80fd5b505af1158015611af9573d5f803e3d5ffd5b505050505f601d5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611c715760015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1930856040518363ffffffff1660e01b8152600401611bec9291906155b7565b5f604051808303815f87803b158015611c03575f80fd5b505af1158015611c15573d5f803e3d5ffd5b5050505081601f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611c6591906154d9565b92505081905550611d06565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19308486611cbb91906154d9565b6040518363ffffffff1660e01b8152600401611cd89291906155b7565b5f604051808303815f87803b158015611cef575f80fd5b505af1158015611d01573d5f803e3d5ffd5b505050505b3373ffffffffffffffffffffffffffffffffffffffff167ffc30cddea38e2bf4d6ea7d3f9ed3b6ad7f176419f4963bd81318067a4aee73fe85604051611d4c9190614f00565b60405180910390a250505050505050505050505050505b50565b600f602052805f5260405f205f915090505481565b6012602052805f5260405f205f915090505481565b6013602052805f5260405f205f915090505481565b600460149054906101000a900460ff1681565b600360215f9054906101000a900460ff1660ff1614611e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e039061564e565b60405180910390fd5b60195f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611e8c576040517f350ac7f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60145f8581526020019081526020015f20604051806101000160405290815f8201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015f9054906101000a900460ff16151515158152505090505f815f015103611f47576040517f990e7a0b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33308560c001516040518463ffffffff1660e01b8152600401611faa9392919061566c565b6020604051808303815f875af1158015611fc6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fea91906156b5565b90508061202c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120239061572a565b60405180910390fd5b5f8260c0015111156120c45760015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342966c688360c001516040518263ffffffff1660e01b81526004016120969190614f00565b5f604051808303815f87803b1580156120ad575f80fd5b505af11580156120bf573d5f803e3d5ffd5b505050505b6120d5338686868660c00151614448565b5050505050565b60065481565b5f80600d549050600b54431180156120fc57505f600c5414155b15612155575f670c0bf3edba3178e3600b5443612119919061550c565b6121239190615414565b9050600c54670de0b6b3a76400008261213c9190615414565b6121469190615482565b8261215191906154d9565b9150505b670de0b6b3a764000060135f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054826121a7919061550c565b60115f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546121ef9190615414565b6121f99190615482565b60125f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461224191906154d9565b915050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60195f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156122ee576040517f241b37b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60215f9054906101000a900460ff1660ff1611612341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233890615792565b60405180910390fd5b5f600160215f9054906101000a900460ff1660ff16036123f45760235f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166123e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123db906157fa565b60405180910390fd5b670de0b6b3a76400009050612539565b600260215f9054906101000a900460ff1660ff16036124a75760245f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248d90615862565b60405180910390fd5b681b1ae4d6e2ef5000009050612538565b60225490505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561251457503373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612537576064605a60225461252a9190615414565b6125349190615482565b90505b5b5b80341015612573576040517fd2ade55600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156125dc57503373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156125f95750600360215f9054906101000a900460ff1660ff16145b90508015612a03575f6064600a6022546126139190615414565b61261d9190615482565b90505f813461262c919061550c565b90508473ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f19350505050158015612671573d5f803e3d5ffd5b508160205f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546126be91906154d9565b9250508190555084601d5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601e5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2033908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f73ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141580156128a6575060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15612996575f6002826128b99190615482565b905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f1935050505015801561291f573d5f803e3d5ffd5b5060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8284612967919061550c565b90811502906040515f60405180830381858888f1935050505015801561298f573d5f803e3d5ffd5b50506129fc565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156129fa573d5f803e3d5ffd5b505b5050612c25565b5f73ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015612ace575060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15612bbe575f600234612ae19190615482565b905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015612b47573d5f803e3d5ffd5b5060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8234612b8f919061550c565b90811502906040515f60405180830381858888f19350505050158015612bb7573d5f803e3d5ffd5b5050612c24565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3490811502906040515f60405180830381858888f19350505050158015612c22573d5f803e3d5ffd5b505b5b600160195f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055504260105f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f60155f7f000000000000000000000000000000000000000000000000000000000000000081526020019081526020015f206040518060c00160405290815f82015481526020016001820154815260200160028201548152602001600382015f9054906101000a900460ff161515151581526020016004820154815260200160058201548152505090505f60185f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090507f0000000000000000000000000000000000000000000000000000000000000000815f0181905550815f01518160010181905550816020015181600301819055505f8160040181905550816080015181600501819055508160a0015181600601819055503373ffffffffffffffffffffffffffffffffffffffff167febe01df6d96920585e2744874d810e5560bc050e9ff947aa34f10422a33cbc2760405160405180910390a25050505050565b600c5481565b612e4261427a565b8060035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b681b1ae4d6e2ef50000081565b601a602052805f5260405f205f915054906101000a900460ff1681565b612eb761427a565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612f129190614e97565b602060405180830381865afa158015612f2d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f519190615894565b90505f8111612f95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f8c90615909565b60405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016130129291906155b7565b6020604051808303815f875af115801561302e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061305291906156b5565b5050565b61305e61427a565b6130675f614877565b565b60225481565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f601f5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f8111613142576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313990615971565b60405180910390fd5b5f601f5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1933836040518363ffffffff1660e01b81526004016131e09291906155b7565b5f604051808303815f87803b1580156131f7575f80fd5b505af1158015613209573d5f803e3d5ffd5b505050503373ffffffffffffffffffffffffffffffffffffffff167f5be4d22009fea85381595ed91090bc5c0bc92a93fe07ed7472c5888eb1993f83826040516132539190614f00565b60405180910390a250565b60055481565b61326c61427a565b8060058190555050565b670de0b6b3a764000081565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075f9054906101000a900460ff1681565b601d602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360215f9054906101000a900460ff1660ff1614613364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335b9061564e565b60405180910390fd5b601a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156133e5576040517f9d38dc2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60195f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16613465576040517f350ac7f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001601a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506134e7337f000000000000000000000000000000000000000000000000000000000000000084845f614448565b5050565b600b5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b61351d61427a565b5f5b828290508110156135b957600160235f85858581811061354257613541615268565b5b90506020020160208101906135579190614d26565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555080806135b1906152c2565b91505061351f565b505050565b6018602052805f5260405f205f91509050805f0154908060010154908060020154908060030154908060040154908060050154908060060154905087565b6010602052805f5260405f205f915090505481565b600a5481565b61361f61427a565b8060215f6101000a81548160ff021916908360ff1602179055507fa6dcc92f45df25789d5639b7a0c97ba1edf3bb1c0b5dd3376fd96a0db87c4642816040516136689190614e6f565b60405180910390a150565b6023602052805f5260405f205f915054906101000a900460ff1681565b6017602052805f5260405f205f91509050805f015490806001015490806002015490806003015490806004015490806005015490806006015490806007015f9054906101000a900460ff16905088565b6024602052805f5260405f205f915054906101000a900460ff1681565b601b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f205f8281526020019081526020015f205f9054906101000a900460ff1661379b576040517f5522b5a300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60185f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f601c5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8581526020019081526020015f205f8481526020019081526020015f205490505f60145f8381526020019081526020015f20604051806101000160405290815f8201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015f9054906101000a900460ff16151515158152505090506138c233614301565b8060800151600c54106138f0578060800151600c5f8282546138e4919061550c565b925050819055506138f8565b5f600c819055505b806080015160115f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541061399c57806080015160115f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254613990919061550c565b925050819055506139df565b5f60115f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b8060a00151836004015410613a11578060a00151836004015f828254613a05919061550c565b92505081905550613a1b565b5f83600401819055505b5f601b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8781526020019081526020015f205f8681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f601c5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8781526020019081526020015f205f8681526020019081526020015f20819055505f83600201541115613b1357826002015f815480929190613b0d9061598f565b91905055505b3373ffffffffffffffffffffffffffffffffffffffff167fe331ada0d0e61e9a4196bf4994f2519193d70a601daff346c4276d591664da9a60115f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205460125f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054604051613bd59291906159b6565b60405180910390a25050505050565b670de0b6b3a764000081565b601b602052825f5260405f20602052815f5260405f20602052805f5260405f205f92509250509054906101000a900460ff1681565b670c0bf3edba3178e381565b601e602052815f5260405f208181548110613c4a575f80fd5b905f5260205f20015f915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b613c8161427a565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613cf1575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401613ce89190614e97565b60405180910390fd5b613cfa81614877565b50565b613d0561427a565b5f4790505f8111613d4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d4290615a27565b60405180910390fd5b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015613daf573d5f803e3d5ffd5b5050565b600360215f9054906101000a900460ff1660ff1614613e07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dfe90615ab5565b60405180910390fd5b60195f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16613e87576040517f350ac7f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600e54600f5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613ed291906154d9565b421015613f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f0b90615b1d565b60405180910390fd5b5f60185f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f6001825f0154613f6591906154d9565b9050600a54811115613fa3576040517f632cf25e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60155f8381526020019081526020015f206040518060c00160405290815f82015481526020016001820154815260200160028201548152602001600382015f9054906101000a900460ff161515151581526020016004820154815260200160058201548152505090505f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd333085604001516040518463ffffffff1660e01b81526004016140709392919061566c565b6020604051808303815f875af115801561408c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906140b091906156b5565b9050806140f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140e99061572a565b60405180910390fd5b5f8260400151111561418a5760015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342966c6883604001516040518263ffffffff1660e01b815260040161415c9190614f00565b5f604051808303815f87803b158015614173575f80fd5b505af1158015614185573d5f803e3d5ffd5b505050505b82845f0181905550815f0151846001018190555081602001518460030181905550816080015184600501819055508160a00151846006018190555042600f5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503373ffffffffffffffffffffffffffffffffffffffff167f1957c3ddde972a0f75f4e54bddd65ada5f0810c35dee609b075fc2d92ec399a984845f015185602001516040516142589392919061503d565b60405180910390a250505050565b60208052805f5260405f205f915090505481565b614282614938565b73ffffffffffffffffffffffffffffffffffffffff166142a0613282565b73ffffffffffffffffffffffffffffffffffffffff16146142ff576142c3614938565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016142f69190614e97565b60405180910390fd5b565b61430961493f565b670de0b6b3a764000060135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054600d5461435d919061550c565b60115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546143a59190615414565b6143af9190615482565b60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546143fa91906154d9565b92505081905550600d5460135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555050565b5f60145f8681526020019081526020015f20604051806101000160405290815f8201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015f9054906101000a900460ff16151515158152505090505f60185f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20905061451c878686846005015485600601546149c5565b15614553576040517f3f35429e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060010154816002015410614594576040517fdad9fafa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600301548260a0015182600401546145ad91906154d9565b11156145e5576040517ff576a4f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160a00151816004015f8282546145fc91906154d9565b9250508190555060085f815480929190614615906152c2565b919050555084826040018181525050838260600181815250506008548260200181815250506001601b5f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8781526020019081526020015f205f8681526020019081526020015f205f6101000a81548160ff02191690831515021790555085601c5f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8781526020019081526020015f205f8681526020019081526020015f208190555061475e60085460165f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20614a5790919063ffffffff16565b508160175f60085481526020019081526020015f205f820151815f01556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e0820151816007015f6101000a81548160ff021916908315150217905550905050806002015f8154809291906147ed906152c2565b9190505550614800878360800151614a74565b858773ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fbb355279b9cc8558bd03d4b1dbb0007f6e6dc26a512f267d829ada5da913cee7866008548a8a6040516148669493929190615b3b565b60405180910390a450505050505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f33905090565b600b544311156149c3575f600c540361495e5743600b819055506149c3565b5f670c0bf3edba3178e3600b5443614976919061550c565b6149809190615414565b9050600c54670de0b6b3a7640000826149999190615414565b6149a39190615482565b600d5f8282546149b391906154d9565b9250508190555043600b81905550505b565b5f82851015806149d55750818410155b156149e35760019050614a4e565b601b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8681526020019081526020015f205f8581526020019081526020015f205f9054906101000a900460ff1690505b95945050505050565b5f614a6c614a6484614c2b565b835f1b614c34565b905092915050565b60075f9054906101000a900460ff16614ae957600160075f6101000a81548160ff0219169083151502179055504360068190555043600b819055507fdaae9aa758637a0d349f036f099afd70aa88d8ac63fce096321de512ffebc16c600654604051614ae09190614f00565b60405180910390a15b614af282614301565b80600c5f828254614b0391906154d9565b925050819055508060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254614b5691906154d9565b925050819055508173ffffffffffffffffffffffffffffffffffffffff167fa051d58ced8df58040b29d2c939da70a826ae40290f77c9a66b38b8b85315f6560115f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205460125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054604051614c1f9291906159b6565b60405180910390a25050565b5f819050919050565b5f80614c3f84614cad565b905068fbb67fda52d4bfb8bf8303614c5e5763f5a267f15f526004601cfd5b82614c705768fbb67fda52d4bfb8bf92505b80602052825f5260405f208054614ca557811954805f52848160011c8401558060011c60010182556002810183195560019350505b505092915050565b5f6318fb5864600452815f5260245f209050919050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f614cf582614ccc565b9050919050565b614d0581614ceb565b8114614d0f575f80fd5b50565b5f81359050614d2081614cfc565b92915050565b5f60208284031215614d3b57614d3a614cc4565b5b5f614d4884828501614d12565b91505092915050565b5f819050919050565b614d6381614d51565b8114614d6d575f80fd5b50565b5f81359050614d7e81614d5a565b92915050565b5f60208284031215614d9957614d98614cc4565b5b5f614da684828501614d70565b91505092915050565b614db881614d51565b82525050565b5f8115159050919050565b614dd281614dbe565b82525050565b5f61010082019050614dec5f83018b614daf565b614df9602083018a614daf565b614e066040830189614daf565b614e136060830188614daf565b614e206080830187614daf565b614e2d60a0830186614daf565b614e3a60c0830185614daf565b614e4760e0830184614dc9565b9998505050505050505050565b5f60ff82169050919050565b614e6981614e54565b82525050565b5f602082019050614e825f830184614e60565b92915050565b614e9181614ceb565b82525050565b5f602082019050614eaa5f830184614e88565b92915050565b5f805f60608486031215614ec757614ec6614cc4565b5b5f614ed486828701614d12565b9350506020614ee586828701614d70565b9250506040614ef686828701614d70565b9150509250925092565b5f602082019050614f135f830184614daf565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112614f3a57614f39614f19565b5b8235905067ffffffffffffffff811115614f5757614f56614f1d565b5b602083019150836020820283011115614f7357614f72614f21565b5b9250929050565b5f8060208385031215614f9057614f8f614cc4565b5b5f83013567ffffffffffffffff811115614fad57614fac614cc8565b5b614fb985828601614f25565b92509250509250929050565b5f602082019050614fd85f830184614dc9565b92915050565b5f60c082019050614ff15f830189614daf565b614ffe6020830188614daf565b61500b6040830187614daf565b6150186060830186614dc9565b6150256080830185614daf565b61503260a0830184614daf565b979650505050505050565b5f6060820190506150505f830186614daf565b61505d6020830185614daf565b61506a6040830184614daf565b949350505050565b61507b81614dbe565b8114615085575f80fd5b50565b5f8135905061509681615072565b92915050565b5f80604083850312156150b2576150b1614cc4565b5b5f6150bf85828601614d12565b92505060206150d085828601615088565b9150509250929050565b5f805f606084860312156150f1576150f0614cc4565b5b5f6150fe86828701614d70565b935050602061510f86828701614d70565b925050604061512086828701614d70565b9150509250925092565b5f80604083850312156151405761513f614cc4565b5b5f61514d85828601614d70565b925050602061515e85828601614d70565b9150509250929050565b5f60e08201905061517b5f83018a614daf565b6151886020830189614daf565b6151956040830188614daf565b6151a26060830187614daf565b6151af6080830186614daf565b6151bc60a0830185614daf565b6151c960c0830184614daf565b98975050505050505050565b6151de81614e54565b81146151e8575f80fd5b50565b5f813590506151f9816151d5565b92915050565b5f6020828403121561521457615213614cc4565b5b5f615221848285016151eb565b91505092915050565b5f80604083850312156152405761523f614cc4565b5b5f61524d85828601614d12565b925050602061525e85828601614d70565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6152cc82614d51565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036152fe576152fd615295565b5b600182019050919050565b5f6dffffffffffffffffffffffffffff82169050919050565b61532b81615309565b8114615335575f80fd5b50565b5f8151905061534681615322565b92915050565b5f63ffffffff82169050919050565b6153648161534c565b811461536e575f80fd5b50565b5f8151905061537f8161535b565b92915050565b5f805f6060848603121561539c5761539b614cc4565b5b5f6153a986828701615338565b93505060206153ba86828701615338565b92505060406153cb86828701615371565b9150509250925092565b5f815190506153e381614cfc565b92915050565b5f602082840312156153fe576153fd614cc4565b5b5f61540b848285016153d5565b91505092915050565b5f61541e82614d51565b915061542983614d51565b925082820261543781614d51565b9150828204841483151761544e5761544d615295565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61548c82614d51565b915061549783614d51565b9250826154a7576154a6615455565b5b828204905092915050565b5f6040820190506154c55f830185614e88565b6154d26020830184614dc9565b9392505050565b5f6154e382614d51565b91506154ee83614d51565b925082820190508082111561550657615505615295565b5b92915050565b5f61551682614d51565b915061552183614d51565b925082820390508181111561553957615538615295565b5b92915050565b5f82825260208201905092915050565b7f496e73756666696369656e74205061792d746f2d436c61696d204665650000005f82015250565b5f615583601d8361553f565b915061558e8261554f565b602082019050919050565b5f6020820190508181035f8301526155b081615577565b9050919050565b5f6040820190506155ca5f830185614e88565b6155d76020830184614daf565b9392505050565b7f47616d6520686173206e6f7420737461727465642079657420284472696c6c695f8201527f6e67204c6f636b65642900000000000000000000000000000000000000000000602082015250565b5f615638602a8361553f565b9150615643826155de565b604082019050919050565b5f6020820190508181035f8301526156658161562c565b9050919050565b5f60608201905061567f5f830186614e88565b61568c6020830185614e88565b6156996040830184614daf565b949350505050565b5f815190506156af81615072565b92915050565b5f602082840312156156ca576156c9614cc4565b5b5f6156d7848285016156a1565b91505092915050565b7f546f6b656e207472616e73666572206661696c656400000000000000000000005f82015250565b5f61571460158361553f565b915061571f826156e0565b602082019050919050565b5f6020820190508181035f83015261574181615708565b9050919050565b7f53616c6573206e6f7420737461727465640000000000000000000000000000005f82015250565b5f61577c60118361553f565b915061578782615748565b602082019050919050565b5f6020820190508181035f8301526157a981615770565b9050919050565b7f4e6f742057686974656c697374656420666f72205068617365203100000000005f82015250565b5f6157e4601b8361553f565b91506157ef826157b0565b602082019050919050565b5f6020820190508181035f830152615811816157d8565b9050919050565b7f4e6f742057686974656c697374656420666f72205068617365203200000000005f82015250565b5f61584c601b8361553f565b915061585782615818565b602082019050919050565b5f6020820190508181035f83015261587981615840565b9050919050565b5f8151905061588e81614d5a565b92915050565b5f602082840312156158a9576158a8614cc4565b5b5f6158b684828501615880565b91505092915050565b7f4e6f20504554524f0000000000000000000000000000000000000000000000005f82015250565b5f6158f360088361553f565b91506158fe826158bf565b602082019050919050565b5f6020820190508181035f830152615920816158e7565b9050919050565b7f4e6f20726566657272616c206561726e696e67730000000000000000000000005f82015250565b5f61595b60148361553f565b915061596682615927565b602082019050919050565b5f6020820190508181035f8301526159888161594f565b9050919050565b5f61599982614d51565b91505f82036159ab576159aa615295565b5b600182039050919050565b5f6040820190506159c95f830185614daf565b6159d66020830184614daf565b9392505050565b7f4e6f204d4f4e00000000000000000000000000000000000000000000000000005f82015250565b5f615a1160068361553f565b9150615a1c826159dd565b602082019050919050565b5f6020820190508181035f830152615a3e81615a05565b9050919050565b7f47616d6520686173206e6f7420737461727465642079657420285570677261645f8201527f6573204c6f636b65642900000000000000000000000000000000000000000000602082015250565b5f615a9f602a8361553f565b9150615aaa82615a45565b604082019050919050565b5f6020820190508181035f830152615acc81615a93565b9050919050565b7f436f6f6c646f776e206163746976653a20506c6561736520776169742e0000005f82015250565b5f615b07601d8361553f565b9150615b1282615ad3565b602082019050919050565b5f6020820190508181035f830152615b3481615afb565b9050919050565b5f608082019050615b4e5f830187614daf565b615b5b6020830186614daf565b615b686040830185614daf565b615b756060830184614daf565b9594505050505056fea2646970667358221220c3110159f05951fca01a9ad63bad1222e62378929256c038aecb0771ad1a99cd64736f6c63430008140033

Deployed Bytecode

0x6080604052600436106103cd575f3560e01c8063715018a6116101fc578063b3c0d5e411610117578063d013eb0a116100aa578063e92820e611610079578063e92820e614610ec2578063f2fde38b14610efe578063f322b65f14610f26578063f37785a214610f3c578063f6934a9f14610f52576103cd565b8063d013eb0a14610e0a578063d09d4abd14610e32578063e2b15d8c14610e5c578063e5b691d814610e98576103cd565b8063c03afb59116100e6578063c03afb5914610d27578063c2df398214610d4f578063c7fda10414610d8b578063cc53b27614610dce576103cd565b8063b3c0d5e414610c57578063b55de1a814610c7f578063b77cf9c614610cc1578063bb485bbd14610cfd576103cd565b806386b3cd261161018f5780639ca423b31161015e5780639ca423b314610b9f578063a269435d14610bdb578063a9f8d18114610c03578063ad154c6814610c2d576103cd565b806386b3cd2614610af75780638da5cb5b14610b215780638ea5220f14610b4b57806394fc19e414610b75576103cd565b8063808a5457116101cb578063808a545714610a6557806384ae48b514610a8f57806384caff8314610aa557806384db13d214610acf576103cd565b8063715018a6146109d157806375ddec4b146109e757806375f0a87414610a11578063787a08a614610a3b576103cd565b806333437f64116102ec5780634df9d6ba1161027f5780635d098b381161024e5780635d098b381461092d5780635ee36f74146109555780635f7f44e11461097f5780636a8fa041146109bb576103cd565b80634df9d6ba146108815780634fe6f7a9146108bd57806356fbab7a146108e75780635a5ccef014610903576103cd565b8063426222d5116102bb578063426222d5146107c95780634487872414610805578063476e2e661461082f57806348cd4cb114610857576103cd565b806333437f641461071d578063372500ab146107475780633d5e1f1e1461075157806340f5da9e1461078d576103cd565b80631913785611610364578063234f3f1b11610333578063234f3f1b1461063f578063238760641461067b5780632aabc69e146106a35780633041a520146106e1576103cd565b8063191378561461056c5780631c52ef27146105ad5780631dbd6bc8146105d757806321bade1314610601576103cd565b806307604998116103a0578063076049981461049057806312544abc146104cc578063136d5072146104f457806316ccbed214610530576103cd565b80630504023b146103d157806305244d77146103f9578063055ad42e1461043c57806306bbf22814610466575b5f80fd5b3480156103dc575f80fd5b506103f760048036038101906103f29190614d26565b610f8e565b005b348015610404575f80fd5b5061041f600480360381019061041a9190614d84565b610fd9565b604051610433989796959493929190614dd8565b60405180910390f35b348015610447575f80fd5b50610450611029565b60405161045d9190614e6f565b60405180910390f35b348015610471575f80fd5b5061047a61103b565b6040516104879190614e97565b60405180910390f35b34801561049b575f80fd5b506104b660048036038101906104b19190614eb0565b611060565b6040516104c39190614f00565b60405180910390f35b3480156104d7575f80fd5b506104f260048036038101906104ed9190614f7a565b61108b565b005b3480156104ff575f80fd5b5061051a60048036038101906105159190614d26565b611134565b6040516105279190614f00565b60405180910390f35b34801561053b575f80fd5b5061055660048036038101906105519190614d26565b61114e565b6040516105639190614fc5565b60405180910390f35b348015610577575f80fd5b50610592600480360381019061058d9190614d84565b61116b565b6040516105a496959493929190614fde565b60405180910390f35b3480156105b8575f80fd5b506105c16111af565b6040516105ce9190614f00565b60405180910390f35b3480156105e2575f80fd5b506105eb6111b5565b6040516105f89190614f00565b60405180910390f35b34801561060c575f80fd5b5061062760048036038101906106229190614d26565b611464565b6040516106369392919061503d565b60405180910390f35b34801561064a575f80fd5b5061066560048036038101906106609190614d26565b611531565b6040516106729190614f00565b60405180910390f35b348015610686575f80fd5b506106a1600480360381019061069c919061509c565b611546565b005b3480156106ae575f80fd5b506106c960048036038101906106c49190614d84565b6115e5565b6040516106d89392919061503d565b60405180910390f35b3480156106ec575f80fd5b5061070760048036038101906107029190614d26565b611692565b6040516107149190614f00565b60405180910390f35b348015610728575f80fd5b506107316116a7565b60405161073e9190614f00565b60405180910390f35b61074f6116ad565b005b34801561075c575f80fd5b5061077760048036038101906107729190614d26565b611d66565b6040516107849190614f00565b60405180910390f35b348015610798575f80fd5b506107b360048036038101906107ae9190614d26565b611d7b565b6040516107c09190614f00565b60405180910390f35b3480156107d4575f80fd5b506107ef60048036038101906107ea9190614d26565b611d90565b6040516107fc9190614f00565b60405180910390f35b348015610810575f80fd5b50610819611da5565b6040516108269190614fc5565b60405180910390f35b34801561083a575f80fd5b50610855600480360381019061085091906150da565b611db8565b005b348015610862575f80fd5b5061086b6120dc565b6040516108789190614f00565b60405180910390f35b34801561088c575f80fd5b506108a760048036038101906108a29190614d26565b6120e2565b6040516108b49190614f00565b60405180910390f35b3480156108c8575f80fd5b506108d1612249565b6040516108de9190614f00565b60405180910390f35b61090160048036038101906108fc9190614d26565b61226d565b005b34801561090e575f80fd5b50610917612e34565b6040516109249190614f00565b60405180910390f35b348015610938575f80fd5b50610953600480360381019061094e9190614d26565b612e3a565b005b348015610960575f80fd5b50610969612e85565b6040516109769190614f00565b60405180910390f35b34801561098a575f80fd5b506109a560048036038101906109a09190614d26565b612e92565b6040516109b29190614fc5565b60405180910390f35b3480156109c6575f80fd5b506109cf612eaf565b005b3480156109dc575f80fd5b506109e5613056565b005b3480156109f2575f80fd5b506109fb613069565b604051610a089190614f00565b60405180910390f35b348015610a1c575f80fd5b50610a2561306f565b604051610a329190614e97565b60405180910390f35b348015610a46575f80fd5b50610a4f613094565b604051610a5c9190614f00565b60405180910390f35b348015610a70575f80fd5b50610a7961309a565b604051610a869190614e97565b60405180910390f35b348015610a9a575f80fd5b50610aa36130bf565b005b348015610ab0575f80fd5b50610ab961325e565b604051610ac69190614f00565b60405180910390f35b348015610ada575f80fd5b50610af56004803603810190610af09190614d84565b613264565b005b348015610b02575f80fd5b50610b0b613276565b604051610b189190614f00565b60405180910390f35b348015610b2c575f80fd5b50610b35613282565b604051610b429190614e97565b60405180910390f35b348015610b56575f80fd5b50610b5f6132a9565b604051610b6c9190614e97565b60405180910390f35b348015610b80575f80fd5b50610b896132ce565b604051610b969190614fc5565b60405180910390f35b348015610baa575f80fd5b50610bc56004803603810190610bc09190614d26565b6132e0565b604051610bd29190614e97565b60405180910390f35b348015610be6575f80fd5b50610c016004803603810190610bfc919061512a565b613310565b005b348015610c0e575f80fd5b50610c176134eb565b604051610c249190614f00565b60405180910390f35b348015610c38575f80fd5b50610c416134f1565b604051610c4e9190614f00565b60405180910390f35b348015610c62575f80fd5b50610c7d6004803603810190610c789190614f7a565b613515565b005b348015610c8a575f80fd5b50610ca56004803603810190610ca09190614d26565b6135be565b604051610cb89796959493929190615168565b60405180910390f35b348015610ccc575f80fd5b50610ce76004803603810190610ce29190614d26565b6135fc565b604051610cf49190614f00565b60405180910390f35b348015610d08575f80fd5b50610d11613611565b604051610d1e9190614f00565b60405180910390f35b348015610d32575f80fd5b50610d4d6004803603810190610d4891906151ff565b613617565b005b348015610d5a575f80fd5b50610d756004803603810190610d709190614d26565b613673565b604051610d829190614fc5565b60405180910390f35b348015610d96575f80fd5b50610db16004803603810190610dac9190614d84565b613690565b604051610dc5989796959493929190614dd8565b60405180910390f35b348015610dd9575f80fd5b50610df46004803603810190610def9190614d26565b6136e0565b604051610e019190614fc5565b60405180910390f35b348015610e15575f80fd5b50610e306004803603810190610e2b919061512a565b6136fd565b005b348015610e3d575f80fd5b50610e46613be4565b604051610e539190614f00565b60405180910390f35b348015610e67575f80fd5b50610e826004803603810190610e7d9190614eb0565b613bf0565b604051610e8f9190614fc5565b60405180910390f35b348015610ea3575f80fd5b50610eac613c25565b604051610eb99190614f00565b60405180910390f35b348015610ecd575f80fd5b50610ee86004803603810190610ee3919061522a565b613c31565b604051610ef59190614e97565b60405180910390f35b348015610f09575f80fd5b50610f246004803603810190610f1f9190614d26565b613c79565b005b348015610f31575f80fd5b50610f3a613cfd565b005b348015610f47575f80fd5b50610f50613db3565b005b348015610f5d575f80fd5b50610f786004803603810190610f739190614d26565b614266565b604051610f859190614f00565b60405180910390f35b610f9661427a565b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6014602052805f5260405f205f91509050805f015490806001015490806002015490806003015490806004015490806005015490806006015490806007015f9054906101000a900460ff16905088565b60215f9054906101000a900460ff1681565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601c602052825f5260405f20602052815f5260405f20602052805f5260405f205f9250925050505481565b61109361427a565b5f5b8282905081101561112f57600160245f8585858181106110b8576110b7615268565b5b90506020020160208101906110cd9190614d26565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080611127906152c2565b915050611095565b505050565b6016602052805f5260405f205f91509050805f0154905081565b6019602052805f5260405f205f915054906101000a900460ff1681565b6015602052805f5260405f205f91509050805f015490806001015490806002015490806003015f9054906101000a900460ff16908060040154908060050154905086565b600d5481565b5f600460149054906101000a900460ff16158061121e57505f73ffffffffffffffffffffffffffffffffffffffff1660045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b1561122d576005549050611461565b5f8060045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611299573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112bd9190615385565b50915091505f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561132d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061135191906153e9565b90505f836dffffffffffffffffffffffffffff16148061138057505f826dffffffffffffffffffffffffffff16145b15611392576005549350505050611461565b5f8060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361141357846dffffffffffffffffffffffffffff169050836dffffffffffffffffffffffffffff16915061143a565b846dffffffffffffffffffffffffffff169150836dffffffffffffffffffffffffffff1690505b80670de0b6b3a76400008361144f9190615414565b6114599190615482565b955050505050505b90565b5f805f601e5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905060205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054601f5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549250925092509193909250565b6011602052805f5260405f205f915090505481565b61154e61427a565b8160045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600460146101000a81548160ff0219169083151502179055507f94c9cbe1d9aa7af08484f82ab0179d6db973a391236668c34192d954ff32c06c82826040516115d99291906154b2565b60405180910390a15050565b5f805f600a5484106115ff575f805f92509250925061168b565b5f60155f60018761161091906154d9565b81526020019081526020015f206040518060c00160405290815f82015481526020016001820154815260200160028201548152602001600382015f9054906101000a900460ff161515151581526020016004820154815260200160058201548152505090508060400151815f01518260200151935093509350505b9193909250565b601f602052805f5260405f205f915090505481565b60095481565b60075f9054906101000a900460ff166116f2576040517f602fe2ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116fb33614301565b5f60125f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f811115611d63575f60105f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20544261178e919061550c565b90505f610e108261179f9190615482565b90505f80601e90508083106117b6575f91506117c5565b82816117c2919061550c565b91505b5f6117ce6111b5565b90505f670de0b6b3a764000082886117e69190615414565b6117f09190615482565b90505f6064600a836118029190615414565b61180c9190615482565b905080341015611851576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184890615599565b60405180910390fd5b5f60028261185f9190615482565b90505f818361186e919061550c565b905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f193505050501580156118d4573d5f803e3d5ffd5b5060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611939573d5f803e3d5ffd5b503373ffffffffffffffffffffffffffffffffffffffff167fb3aa4172b89ad35b55207df3917001046668de5f42c54b312c9e0b02e2968c8b8484846040516119849392919061503d565b60405180910390a25f60125f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055504260105f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f6064888c611a1f9190615414565b611a299190615482565b90505f818c611a38919061550c565b90505f6103e8604b8e611a4b9190615414565b611a559190615482565b90505f6103e860198f611a689190615414565b611a729190615482565b905060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1933856040518363ffffffff1660e01b8152600401611ad09291906155b7565b5f604051808303815f87803b158015611ae7575f80fd5b505af1158015611af9573d5f803e3d5ffd5b505050505f601d5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611c715760015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1930856040518363ffffffff1660e01b8152600401611bec9291906155b7565b5f604051808303815f87803b158015611c03575f80fd5b505af1158015611c15573d5f803e3d5ffd5b5050505081601f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611c6591906154d9565b92505081905550611d06565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19308486611cbb91906154d9565b6040518363ffffffff1660e01b8152600401611cd89291906155b7565b5f604051808303815f87803b158015611cef575f80fd5b505af1158015611d01573d5f803e3d5ffd5b505050505b3373ffffffffffffffffffffffffffffffffffffffff167ffc30cddea38e2bf4d6ea7d3f9ed3b6ad7f176419f4963bd81318067a4aee73fe85604051611d4c9190614f00565b60405180910390a250505050505050505050505050505b50565b600f602052805f5260405f205f915090505481565b6012602052805f5260405f205f915090505481565b6013602052805f5260405f205f915090505481565b600460149054906101000a900460ff1681565b600360215f9054906101000a900460ff1660ff1614611e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e039061564e565b60405180910390fd5b60195f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611e8c576040517f350ac7f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60145f8581526020019081526020015f20604051806101000160405290815f8201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015f9054906101000a900460ff16151515158152505090505f815f015103611f47576040517f990e7a0b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33308560c001516040518463ffffffff1660e01b8152600401611faa9392919061566c565b6020604051808303815f875af1158015611fc6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fea91906156b5565b90508061202c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120239061572a565b60405180910390fd5b5f8260c0015111156120c45760015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342966c688360c001516040518263ffffffff1660e01b81526004016120969190614f00565b5f604051808303815f87803b1580156120ad575f80fd5b505af11580156120bf573d5f803e3d5ffd5b505050505b6120d5338686868660c00151614448565b5050505050565b60065481565b5f80600d549050600b54431180156120fc57505f600c5414155b15612155575f670c0bf3edba3178e3600b5443612119919061550c565b6121239190615414565b9050600c54670de0b6b3a76400008261213c9190615414565b6121469190615482565b8261215191906154d9565b9150505b670de0b6b3a764000060135f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054826121a7919061550c565b60115f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546121ef9190615414565b6121f99190615482565b60125f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461224191906154d9565b915050919050565b7f000000000000000000000000000000000000000000000000000000000000000181565b60195f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156122ee576040517f241b37b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60215f9054906101000a900460ff1660ff1611612341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233890615792565b60405180910390fd5b5f600160215f9054906101000a900460ff1660ff16036123f45760235f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166123e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123db906157fa565b60405180910390fd5b670de0b6b3a76400009050612539565b600260215f9054906101000a900460ff1660ff16036124a75760245f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248d90615862565b60405180910390fd5b681b1ae4d6e2ef5000009050612538565b60225490505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561251457503373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612537576064605a60225461252a9190615414565b6125349190615482565b90505b5b5b80341015612573576040517fd2ade55600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156125dc57503373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156125f95750600360215f9054906101000a900460ff1660ff16145b90508015612a03575f6064600a6022546126139190615414565b61261d9190615482565b90505f813461262c919061550c565b90508473ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f19350505050158015612671573d5f803e3d5ffd5b508160205f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546126be91906154d9565b9250508190555084601d5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601e5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2033908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f73ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141580156128a6575060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15612996575f6002826128b99190615482565b905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f1935050505015801561291f573d5f803e3d5ffd5b5060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8284612967919061550c565b90811502906040515f60405180830381858888f1935050505015801561298f573d5f803e3d5ffd5b50506129fc565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156129fa573d5f803e3d5ffd5b505b5050612c25565b5f73ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015612ace575060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15612bbe575f600234612ae19190615482565b905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015612b47573d5f803e3d5ffd5b5060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8234612b8f919061550c565b90811502906040515f60405180830381858888f19350505050158015612bb7573d5f803e3d5ffd5b5050612c24565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3490811502906040515f60405180830381858888f19350505050158015612c22573d5f803e3d5ffd5b505b5b600160195f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055504260105f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f60155f7f000000000000000000000000000000000000000000000000000000000000000181526020019081526020015f206040518060c00160405290815f82015481526020016001820154815260200160028201548152602001600382015f9054906101000a900460ff161515151581526020016004820154815260200160058201548152505090505f60185f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090507f0000000000000000000000000000000000000000000000000000000000000001815f0181905550815f01518160010181905550816020015181600301819055505f8160040181905550816080015181600501819055508160a0015181600601819055503373ffffffffffffffffffffffffffffffffffffffff167febe01df6d96920585e2744874d810e5560bc050e9ff947aa34f10422a33cbc2760405160405180910390a25050505050565b600c5481565b612e4261427a565b8060035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b681b1ae4d6e2ef50000081565b601a602052805f5260405f205f915054906101000a900460ff1681565b612eb761427a565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612f129190614e97565b602060405180830381865afa158015612f2d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f519190615894565b90505f8111612f95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f8c90615909565b60405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016130129291906155b7565b6020604051808303815f875af115801561302e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061305291906156b5565b5050565b61305e61427a565b6130675f614877565b565b60225481565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f601f5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f8111613142576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313990615971565b60405180910390fd5b5f601f5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1933836040518363ffffffff1660e01b81526004016131e09291906155b7565b5f604051808303815f87803b1580156131f7575f80fd5b505af1158015613209573d5f803e3d5ffd5b505050503373ffffffffffffffffffffffffffffffffffffffff167f5be4d22009fea85381595ed91090bc5c0bc92a93fe07ed7472c5888eb1993f83826040516132539190614f00565b60405180910390a250565b60055481565b61326c61427a565b8060058190555050565b670de0b6b3a764000081565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075f9054906101000a900460ff1681565b601d602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360215f9054906101000a900460ff1660ff1614613364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335b9061564e565b60405180910390fd5b601a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156133e5576040517f9d38dc2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60195f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16613465576040517f350ac7f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001601a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506134e7337f000000000000000000000000000000000000000000000000000000000000000184845f614448565b5050565b600b5481565b7f000000000000000000000000000000000000000000000000000000000000000181565b61351d61427a565b5f5b828290508110156135b957600160235f85858581811061354257613541615268565b5b90506020020160208101906135579190614d26565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555080806135b1906152c2565b91505061351f565b505050565b6018602052805f5260405f205f91509050805f0154908060010154908060020154908060030154908060040154908060050154908060060154905087565b6010602052805f5260405f205f915090505481565b600a5481565b61361f61427a565b8060215f6101000a81548160ff021916908360ff1602179055507fa6dcc92f45df25789d5639b7a0c97ba1edf3bb1c0b5dd3376fd96a0db87c4642816040516136689190614e6f565b60405180910390a150565b6023602052805f5260405f205f915054906101000a900460ff1681565b6017602052805f5260405f205f91509050805f015490806001015490806002015490806003015490806004015490806005015490806006015490806007015f9054906101000a900460ff16905088565b6024602052805f5260405f205f915054906101000a900460ff1681565b601b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f205f8281526020019081526020015f205f9054906101000a900460ff1661379b576040517f5522b5a300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60185f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f601c5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8581526020019081526020015f205f8481526020019081526020015f205490505f60145f8381526020019081526020015f20604051806101000160405290815f8201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015f9054906101000a900460ff16151515158152505090506138c233614301565b8060800151600c54106138f0578060800151600c5f8282546138e4919061550c565b925050819055506138f8565b5f600c819055505b806080015160115f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541061399c57806080015160115f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254613990919061550c565b925050819055506139df565b5f60115f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b8060a00151836004015410613a11578060a00151836004015f828254613a05919061550c565b92505081905550613a1b565b5f83600401819055505b5f601b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8781526020019081526020015f205f8681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f601c5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8781526020019081526020015f205f8681526020019081526020015f20819055505f83600201541115613b1357826002015f815480929190613b0d9061598f565b91905055505b3373ffffffffffffffffffffffffffffffffffffffff167fe331ada0d0e61e9a4196bf4994f2519193d70a601daff346c4276d591664da9a60115f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205460125f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054604051613bd59291906159b6565b60405180910390a25050505050565b670de0b6b3a764000081565b601b602052825f5260405f20602052815f5260405f20602052805f5260405f205f92509250509054906101000a900460ff1681565b670c0bf3edba3178e381565b601e602052815f5260405f208181548110613c4a575f80fd5b905f5260205f20015f915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b613c8161427a565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613cf1575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401613ce89190614e97565b60405180910390fd5b613cfa81614877565b50565b613d0561427a565b5f4790505f8111613d4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d4290615a27565b60405180910390fd5b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015613daf573d5f803e3d5ffd5b5050565b600360215f9054906101000a900460ff1660ff1614613e07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dfe90615ab5565b60405180910390fd5b60195f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16613e87576040517f350ac7f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600e54600f5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613ed291906154d9565b421015613f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f0b90615b1d565b60405180910390fd5b5f60185f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f6001825f0154613f6591906154d9565b9050600a54811115613fa3576040517f632cf25e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60155f8381526020019081526020015f206040518060c00160405290815f82015481526020016001820154815260200160028201548152602001600382015f9054906101000a900460ff161515151581526020016004820154815260200160058201548152505090505f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd333085604001516040518463ffffffff1660e01b81526004016140709392919061566c565b6020604051808303815f875af115801561408c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906140b091906156b5565b9050806140f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140e99061572a565b60405180910390fd5b5f8260400151111561418a5760015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342966c6883604001516040518263ffffffff1660e01b815260040161415c9190614f00565b5f604051808303815f87803b158015614173575f80fd5b505af1158015614185573d5f803e3d5ffd5b505050505b82845f0181905550815f0151846001018190555081602001518460030181905550816080015184600501819055508160a00151846006018190555042600f5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503373ffffffffffffffffffffffffffffffffffffffff167f1957c3ddde972a0f75f4e54bddd65ada5f0810c35dee609b075fc2d92ec399a984845f015185602001516040516142589392919061503d565b60405180910390a250505050565b60208052805f5260405f205f915090505481565b614282614938565b73ffffffffffffffffffffffffffffffffffffffff166142a0613282565b73ffffffffffffffffffffffffffffffffffffffff16146142ff576142c3614938565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016142f69190614e97565b60405180910390fd5b565b61430961493f565b670de0b6b3a764000060135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054600d5461435d919061550c565b60115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546143a59190615414565b6143af9190615482565b60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546143fa91906154d9565b92505081905550600d5460135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555050565b5f60145f8681526020019081526020015f20604051806101000160405290815f8201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015f9054906101000a900460ff16151515158152505090505f60185f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20905061451c878686846005015485600601546149c5565b15614553576040517f3f35429e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060010154816002015410614594576040517fdad9fafa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600301548260a0015182600401546145ad91906154d9565b11156145e5576040517ff576a4f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160a00151816004015f8282546145fc91906154d9565b9250508190555060085f815480929190614615906152c2565b919050555084826040018181525050838260600181815250506008548260200181815250506001601b5f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8781526020019081526020015f205f8681526020019081526020015f205f6101000a81548160ff02191690831515021790555085601c5f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8781526020019081526020015f205f8681526020019081526020015f208190555061475e60085460165f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20614a5790919063ffffffff16565b508160175f60085481526020019081526020015f205f820151815f01556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e0820151816007015f6101000a81548160ff021916908315150217905550905050806002015f8154809291906147ed906152c2565b9190505550614800878360800151614a74565b858773ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fbb355279b9cc8558bd03d4b1dbb0007f6e6dc26a512f267d829ada5da913cee7866008548a8a6040516148669493929190615b3b565b60405180910390a450505050505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f33905090565b600b544311156149c3575f600c540361495e5743600b819055506149c3565b5f670c0bf3edba3178e3600b5443614976919061550c565b6149809190615414565b9050600c54670de0b6b3a7640000826149999190615414565b6149a39190615482565b600d5f8282546149b391906154d9565b9250508190555043600b81905550505b565b5f82851015806149d55750818410155b156149e35760019050614a4e565b601b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8681526020019081526020015f205f8581526020019081526020015f205f9054906101000a900460ff1690505b95945050505050565b5f614a6c614a6484614c2b565b835f1b614c34565b905092915050565b60075f9054906101000a900460ff16614ae957600160075f6101000a81548160ff0219169083151502179055504360068190555043600b819055507fdaae9aa758637a0d349f036f099afd70aa88d8ac63fce096321de512ffebc16c600654604051614ae09190614f00565b60405180910390a15b614af282614301565b80600c5f828254614b0391906154d9565b925050819055508060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254614b5691906154d9565b925050819055508173ffffffffffffffffffffffffffffffffffffffff167fa051d58ced8df58040b29d2c939da70a826ae40290f77c9a66b38b8b85315f6560115f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205460125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054604051614c1f9291906159b6565b60405180910390a25050565b5f819050919050565b5f80614c3f84614cad565b905068fbb67fda52d4bfb8bf8303614c5e5763f5a267f15f526004601cfd5b82614c705768fbb67fda52d4bfb8bf92505b80602052825f5260405f208054614ca557811954805f52848160011c8401558060011c60010182556002810183195560019350505b505092915050565b5f6318fb5864600452815f5260245f209050919050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f614cf582614ccc565b9050919050565b614d0581614ceb565b8114614d0f575f80fd5b50565b5f81359050614d2081614cfc565b92915050565b5f60208284031215614d3b57614d3a614cc4565b5b5f614d4884828501614d12565b91505092915050565b5f819050919050565b614d6381614d51565b8114614d6d575f80fd5b50565b5f81359050614d7e81614d5a565b92915050565b5f60208284031215614d9957614d98614cc4565b5b5f614da684828501614d70565b91505092915050565b614db881614d51565b82525050565b5f8115159050919050565b614dd281614dbe565b82525050565b5f61010082019050614dec5f83018b614daf565b614df9602083018a614daf565b614e066040830189614daf565b614e136060830188614daf565b614e206080830187614daf565b614e2d60a0830186614daf565b614e3a60c0830185614daf565b614e4760e0830184614dc9565b9998505050505050505050565b5f60ff82169050919050565b614e6981614e54565b82525050565b5f602082019050614e825f830184614e60565b92915050565b614e9181614ceb565b82525050565b5f602082019050614eaa5f830184614e88565b92915050565b5f805f60608486031215614ec757614ec6614cc4565b5b5f614ed486828701614d12565b9350506020614ee586828701614d70565b9250506040614ef686828701614d70565b9150509250925092565b5f602082019050614f135f830184614daf565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112614f3a57614f39614f19565b5b8235905067ffffffffffffffff811115614f5757614f56614f1d565b5b602083019150836020820283011115614f7357614f72614f21565b5b9250929050565b5f8060208385031215614f9057614f8f614cc4565b5b5f83013567ffffffffffffffff811115614fad57614fac614cc8565b5b614fb985828601614f25565b92509250509250929050565b5f602082019050614fd85f830184614dc9565b92915050565b5f60c082019050614ff15f830189614daf565b614ffe6020830188614daf565b61500b6040830187614daf565b6150186060830186614dc9565b6150256080830185614daf565b61503260a0830184614daf565b979650505050505050565b5f6060820190506150505f830186614daf565b61505d6020830185614daf565b61506a6040830184614daf565b949350505050565b61507b81614dbe565b8114615085575f80fd5b50565b5f8135905061509681615072565b92915050565b5f80604083850312156150b2576150b1614cc4565b5b5f6150bf85828601614d12565b92505060206150d085828601615088565b9150509250929050565b5f805f606084860312156150f1576150f0614cc4565b5b5f6150fe86828701614d70565b935050602061510f86828701614d70565b925050604061512086828701614d70565b9150509250925092565b5f80604083850312156151405761513f614cc4565b5b5f61514d85828601614d70565b925050602061515e85828601614d70565b9150509250929050565b5f60e08201905061517b5f83018a614daf565b6151886020830189614daf565b6151956040830188614daf565b6151a26060830187614daf565b6151af6080830186614daf565b6151bc60a0830185614daf565b6151c960c0830184614daf565b98975050505050505050565b6151de81614e54565b81146151e8575f80fd5b50565b5f813590506151f9816151d5565b92915050565b5f6020828403121561521457615213614cc4565b5b5f615221848285016151eb565b91505092915050565b5f80604083850312156152405761523f614cc4565b5b5f61524d85828601614d12565b925050602061525e85828601614d70565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6152cc82614d51565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036152fe576152fd615295565b5b600182019050919050565b5f6dffffffffffffffffffffffffffff82169050919050565b61532b81615309565b8114615335575f80fd5b50565b5f8151905061534681615322565b92915050565b5f63ffffffff82169050919050565b6153648161534c565b811461536e575f80fd5b50565b5f8151905061537f8161535b565b92915050565b5f805f6060848603121561539c5761539b614cc4565b5b5f6153a986828701615338565b93505060206153ba86828701615338565b92505060406153cb86828701615371565b9150509250925092565b5f815190506153e381614cfc565b92915050565b5f602082840312156153fe576153fd614cc4565b5b5f61540b848285016153d5565b91505092915050565b5f61541e82614d51565b915061542983614d51565b925082820261543781614d51565b9150828204841483151761544e5761544d615295565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61548c82614d51565b915061549783614d51565b9250826154a7576154a6615455565b5b828204905092915050565b5f6040820190506154c55f830185614e88565b6154d26020830184614dc9565b9392505050565b5f6154e382614d51565b91506154ee83614d51565b925082820190508082111561550657615505615295565b5b92915050565b5f61551682614d51565b915061552183614d51565b925082820390508181111561553957615538615295565b5b92915050565b5f82825260208201905092915050565b7f496e73756666696369656e74205061792d746f2d436c61696d204665650000005f82015250565b5f615583601d8361553f565b915061558e8261554f565b602082019050919050565b5f6020820190508181035f8301526155b081615577565b9050919050565b5f6040820190506155ca5f830185614e88565b6155d76020830184614daf565b9392505050565b7f47616d6520686173206e6f7420737461727465642079657420284472696c6c695f8201527f6e67204c6f636b65642900000000000000000000000000000000000000000000602082015250565b5f615638602a8361553f565b9150615643826155de565b604082019050919050565b5f6020820190508181035f8301526156658161562c565b9050919050565b5f60608201905061567f5f830186614e88565b61568c6020830185614e88565b6156996040830184614daf565b949350505050565b5f815190506156af81615072565b92915050565b5f602082840312156156ca576156c9614cc4565b5b5f6156d7848285016156a1565b91505092915050565b7f546f6b656e207472616e73666572206661696c656400000000000000000000005f82015250565b5f61571460158361553f565b915061571f826156e0565b602082019050919050565b5f6020820190508181035f83015261574181615708565b9050919050565b7f53616c6573206e6f7420737461727465640000000000000000000000000000005f82015250565b5f61577c60118361553f565b915061578782615748565b602082019050919050565b5f6020820190508181035f8301526157a981615770565b9050919050565b7f4e6f742057686974656c697374656420666f72205068617365203100000000005f82015250565b5f6157e4601b8361553f565b91506157ef826157b0565b602082019050919050565b5f6020820190508181035f830152615811816157d8565b9050919050565b7f4e6f742057686974656c697374656420666f72205068617365203200000000005f82015250565b5f61584c601b8361553f565b915061585782615818565b602082019050919050565b5f6020820190508181035f83015261587981615840565b9050919050565b5f8151905061588e81614d5a565b92915050565b5f602082840312156158a9576158a8614cc4565b5b5f6158b684828501615880565b91505092915050565b7f4e6f20504554524f0000000000000000000000000000000000000000000000005f82015250565b5f6158f360088361553f565b91506158fe826158bf565b602082019050919050565b5f6020820190508181035f830152615920816158e7565b9050919050565b7f4e6f20726566657272616c206561726e696e67730000000000000000000000005f82015250565b5f61595b60148361553f565b915061596682615927565b602082019050919050565b5f6020820190508181035f8301526159888161594f565b9050919050565b5f61599982614d51565b91505f82036159ab576159aa615295565b5b600182039050919050565b5f6040820190506159c95f830185614daf565b6159d66020830184614daf565b9392505050565b7f4e6f204d4f4e00000000000000000000000000000000000000000000000000005f82015250565b5f615a1160068361553f565b9150615a1c826159dd565b602082019050919050565b5f6020820190508181035f830152615a3e81615a05565b9050919050565b7f47616d6520686173206e6f7420737461727465642079657420285570677261645f8201527f6573204c6f636b65642900000000000000000000000000000000000000000000602082015250565b5f615a9f602a8361553f565b9150615aaa82615a45565b604082019050919050565b5f6020820190508181035f830152615acc81615a93565b9050919050565b7f436f6f6c646f776e206163746976653a20506c6561736520776169742e0000005f82015250565b5f615b07601d8361553f565b9150615b1282615ad3565b602082019050919050565b5f6020820190508181035f830152615b3481615afb565b9050919050565b5f608082019050615b4e5f830187614daf565b615b5b6020830186614daf565b615b686040830185614daf565b615b756060830184614daf565b9594505050505056fea2646970667358221220c3110159f05951fca01a9ad63bad1222e62378929256c038aecb0771ad1a99cd64736f6c63430008140033

Deployed Bytecode Sourcemap

12204:19085:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30875:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13228:35;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;14081:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12304:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13734:87;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18079:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13325:70;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13510:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13270:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;12818:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16889:727;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25961:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;13047:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16563:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30974:312;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;13949:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12676:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18814:2116;;;:::i;:::-;;12931:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13103:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13165:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12481:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24996:626;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12574:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18275:527;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14462:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20944:2791;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12783:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17628:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14239:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13572:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26199:225;;;;;;;;;;;;;:::i;:::-;;1279:103;;;;;;;;;;;;;:::i;:::-;;14130:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12368:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12886:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12432:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25630:323;;;;;;;;;;;;;:::i;:::-;;12518:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16763:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14591:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1010:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12336:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12606:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13835:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26628:435;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12746:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14413:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17883:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13452:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;12989:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12712:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17748:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14303:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13402:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;14357:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27075:1185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14185:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13635:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14515:68;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13886:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1390:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26432:188;;;;;;;;;;;;;:::i;:::-;;23743:1245;;;;;;;;;;;;;:::i;:::-;;14012:53;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30875:91;969:13;:11;:13::i;:::-;30952:6:::1;30939:10;;:19;;;;;;;;;;;;;;;;;;30875:91:::0;:::o;13228:35::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14081:29::-;;;;;;;;;;;;;:::o;12304:25::-;;;;;;;;;;;;;:::o;13734:87::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18079:188::-;969:13;:11;:13::i;:::-;18168:6:::1;18164:96;18180:6;;:13;;18178:1;:15;18164:96;;;18244:4;18215:15;:26;18231:6;;18238:1;18231:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;18215:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;18195:3;;;;;:::i;:::-;;;;18164:96;;;;18079:188:::0;;:::o;13325:70::-;;;;;;;;;;;;;;;;;;;;;;:::o;13510:55::-;;;;;;;;;;;;;;;;;;;;;;:::o;13270:42::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;12818:37::-;;;;:::o;16889:727::-;16935:7;16960:9;;;;;;;;;;;16959:10;:41;;;;16998:1;16973:27;;:13;;;;;;;;;;;:27;;;16959:41;16955:97;;;17024:16;;17017:23;;;;16955:97;17063:16;17081;17118:13;;;;;;;;;;;17103:41;;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17062:84;;;;;17157:14;17189:13;;;;;;;;;;;17174:36;;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17157:55;;17239:1;17227:8;:13;;;:30;;;;17256:1;17244:8;:13;;;17227:30;17223:59;;;17266:16;;17259:23;;;;;;;17223:59;17293:18;17322:20;17367:10;;;;;;;;;;;17357:20;;:6;:20;;;17353:204;;17409:8;17394:23;;;;17445:8;17432:21;;;;17353:204;;;17499:8;17486:21;;;;17537:8;17522:23;;;;17353:204;17596:12;17588:4;17575:10;:17;;;;:::i;:::-;17574:34;;;;:::i;:::-;17567:41;;;;;;;16889:727;;:::o;25961:230::-;26024:17;26043:16;26061:20;26102:13;:19;26116:4;26102:19;;;;;;;;;;;;;;;:26;;;;26130:18;:24;26149:4;26130:24;;;;;;;;;;;;;;;;26156:20;:26;26177:4;26156:26;;;;;;;;;;;;;;;;26094:89;;;;;;25961:230;;;;;:::o;13047:49::-;;;;;;;;;;;;;;;;;:::o;16563:192::-;969:13;:11;:13::i;:::-;16665:5:::1;16649:13;;:21;;;;;;;;;;;;;;;;;;16693:8;16681:9;;:20;;;;;;;;;;;;;;;;;;16717:30;16731:5;16738:8;16717:30;;;;;;;:::i;:::-;;;;;;;;16563:192:::0;;:::o;30974:312::-;31045:12;31059:18;31079:16;31128:10;;31112:12;:26;31108:46;;31148:1;31150;31152;31140:14;;;;;;;;31108:46;31165:20;31188:6;:24;31210:1;31195:12;:16;;;;:::i;:::-;31188:24;;;;;;;;;;;31165:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31231:4;:9;;;31242:4;:12;;;31256:4;:21;;;31223:55;;;;;;;30974:312;;;;;;:::o;13949:55::-;;;;;;;;;;;;;;;;;:::o;12676:29::-;;;;:::o;18814:2116::-;18871:16;;;;;;;;;;;18866:57;;18896:27;;;;;;;;;;;;;;18866:57;18934:26;18949:10;18934:14;:26::i;:::-;18981:19;19003:20;:32;19024:10;19003:32;;;;;;;;;;;;;;;;18981:54;;19064:1;19050:11;:15;19046:1877;;;19082:16;19119:13;:25;19133:10;19119:25;;;;;;;;;;;;;;;;19101:15;:43;;;;:::i;:::-;19082:62;;19159:19;19192:4;19181:8;:15;;;;:::i;:::-;19159:37;;19226:19;19264:16;19283:2;19264:21;;19322:8;19307:11;:23;19303:158;;19365:1;19351:15;;19303:158;;;19433:11;19422:8;:22;;;;:::i;:::-;19408:36;;19303:158;19477:25;19505:15;:13;:15::i;:::-;19477:43;;19536:23;19598:4;19577:17;19563:11;:31;;;;:::i;:::-;19562:40;;;;:::i;:::-;19536:66;;19617:19;19664:3;19658:2;19640:15;:20;;;;:::i;:::-;19639:28;;;;:::i;:::-;19617:50;;19704:11;19691:9;:24;;19683:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;19766:16;19799:1;19785:11;:15;;;;:::i;:::-;19766:34;;19815:22;19854:8;19840:11;:22;;;;:::i;:::-;19815:47;;19885:9;;;;;;;;;;;19877:27;;:37;19905:8;19877:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19937:15;;;;;;;;;;;19929:33;;:49;19963:14;19929:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20011:10;19998:63;;;20023:11;20036:8;20046:14;19998:63;;;;;;;;:::i;:::-;;;;;;;;20113:1;20078:20;:32;20099:10;20078:32;;;;;;;;;;;;;;;:36;;;;20158:15;20130:13;:25;20144:10;20130:25;;;;;;;;;;;;;;;:43;;;;20191:18;20242:3;20227:11;20213;:25;;;;:::i;:::-;20212:33;;;;:::i;:::-;20191:54;;20260:17;20294:10;20280:11;:24;;;;:::i;:::-;20260:44;;20321:21;20366:4;20360:2;20346:11;:16;;;;:::i;:::-;20345:25;;;;:::i;:::-;20321:49;;20386:16;20426:4;20420:2;20406:11;:16;;;;:::i;:::-;20405:25;;;;:::i;:::-;20386:44;;20455:10;;;;;;;;;;;20448:23;;;20472:10;20484:9;20448:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20511:16;20530:9;:21;20540:10;20530:21;;;;;;;;;;;;;;;;;;;;;;;;;20511:40;;20590:1;20570:22;;:8;:22;;;20566:282;;20620:10;;;;;;;;;;;20613:23;;;20645:4;20652:13;20613:53;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20719:8;20685:20;:30;20706:8;20685:30;;;;;;;;;;;;;;;;:42;;;;;;;:::i;:::-;;;;;;;;20566:282;;;20775:10;;;;;;;;;;;20768:23;;;20800:4;20823:8;20807:13;:24;;;;:::i;:::-;20768:64;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20566:282;20889:10;20867:44;;;20901:9;20867:44;;;;;;:::i;:::-;;;;;;;;19067:1856;;;;;;;;;;;;;;19046:1877;18855:2075;18814:2116::o;12931:50::-;;;;;;;;;;;;;;;;;:::o;13103:55::-;;;;;;;;;;;;;;;;;:::o;13165:50::-;;;;;;;;;;;;;;;;;:::o;12481:29::-;;;;;;;;;;;;;:::o;24996:626::-;25100:1;25084:12;;;;;;;;;;;:17;;;25076:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;25164:23;:35;25188:10;25164:35;;;;;;;;;;;;;;;;;;;;;;;;;25159:79;;25208:30;;;;;;;;;;;;;;25159:79;25249:14;25266:4;:16;25271:10;25266:16;;;;;;;;;;;25249:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25313:1;25297:3;:12;;;:17;25293:53;;25323:23;;;;;;;;;;;;;;25293:53;25358:12;25380:10;;;;;;;;;;;25373:31;;;25405:10;25425:4;25432:3;:8;;;25373:68;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25358:83;;25460:7;25452:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;25519:1;25508:3;:8;;;:12;25504:51;;;25529:10;;;;;;;;;;;25522:23;;;25546:3;:8;;;25522:33;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25504:51;25566:48;25575:10;25587;25599:1;25602;25605:3;:8;;;25566;:48::i;:::-;25065:557;;24996:626;;;:::o;12574:25::-;;;;:::o;18275:527::-;18337:7;18357:24;18384:22;;18357:49;;18436:15;;18421:12;:30;:52;;;;;18472:1;18455:13;;:18;;18421:52;18417:241;;;18490:15;14565:18;18524:15;;18509:12;:30;;;;:::i;:::-;18508:58;;;;:::i;:::-;18490:76;;18633:13;;14635:4;18602:7;:27;;;;:::i;:::-;18601:45;;;;:::i;:::-;18581:65;;;;;:::i;:::-;;;18475:183;18417:241;14635:4;18750:15;:22;18766:5;18750:22;;;;;;;;;;;;;;;;18731:16;:41;;;;:::i;:::-;18706:14;:21;18721:5;18706:21;;;;;;;;;;;;;;;;:67;;;;:::i;:::-;18705:89;;;;:::i;:::-;18675:20;:27;18696:5;18675:27;;;;;;;;;;;;;;;;:119;;;;:::i;:::-;18668:126;;;18275:527;;;:::o;14462:44::-;;;:::o;20944:2791::-;21024:23;:35;21048:10;21024:35;;;;;;;;;;;;;;;;;;;;;;;;;21020:85;;;21068:37;;;;;;;;;;;;;;21020:85;21139:1;21124:12;;;;;;;;;;;:16;;;21116:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;21175:18;21244:1;21228:12;;;;;;;;;;;:17;;;21224:577;;21270:15;:27;21286:10;21270:27;;;;;;;;;;;;;;;;;;;;;;;;;21262:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14224:7;21344:25;;21224:577;;;21417:1;21401:12;;;;;;;;;;;:17;;;21397:404;;21443:15;:27;21459:10;21443:27;;;;;;;;;;;;;;;;;;;;;;;;;21435:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14278:9;21517:25;;21397:404;;;21612:17;;21599:30;;21681:1;21661:22;;:8;:22;;;;:48;;;;;21699:10;21687:22;;:8;:22;;;;21661:48;21657:133;;;21770:3;21764:2;21744:17;;:22;;;;:::i;:::-;21743:30;;;;:::i;:::-;21730:43;;21657:133;21397:404;21224:577;21829:10;21817:9;:22;21813:58;;;21848:23;;;;;;;;;;;;;;21813:58;21884:15;21923:1;21903:22;;:8;:22;;;;:48;;;;;21941:10;21929:22;;:8;:22;;;;21903:48;:69;;;;;21971:1;21955:12;;;;;;;;;;;:17;;;21903:69;21884:89;;21998:10;21994:1193;;;22039:16;22085:3;22079:2;22059:17;;:22;;;;:::i;:::-;22058:30;;;;:::i;:::-;22039:49;;22117:22;22154:8;22142:9;:20;;;;:::i;:::-;22117:45;;22187:8;22179:26;;:36;22206:8;22179:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22262:8;22230:18;:28;22249:8;22230:28;;;;;;;;;;;;;;;;:40;;;;;;;:::i;:::-;;;;;;;;22309:8;22285:9;:21;22295:10;22285:21;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;22332:13;:23;22346:8;22332:23;;;;;;;;;;;;;;;22361:10;22332:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22420:1;22393:29;;:15;;;;;;;;;;;:29;;;;:61;;;;;22445:9;;;;;;;;;;;22426:28;;:15;;;;;;;;;;;:28;;;;22393:61;22389:387;;;22475:19;22514:1;22497:14;:18;;;;:::i;:::-;22475:40;;22543:9;;;;;;;;;;;22535:27;;:40;22563:11;22535:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22602:15;;;;;;;;;;;22594:33;;:63;22645:11;22628:14;:28;;;;:::i;:::-;22594:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22456:217;22389:387;;;22724:9;;;;;;;;;;;22716:27;;:43;22744:14;22716:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22389:387;22010:779;;21994:1193;;;22855:1;22828:29;;:15;;;;;;;;;;;:29;;;;:61;;;;;22880:9;;;;;;;;;;;22861:28;;:15;;;;;;;;;;;:28;;;;22828:61;22824:352;;;22910:19;22944:1;22932:9;:13;;;;:::i;:::-;22910:35;;22972:9;;;;;;;;;;;22964:27;;:40;22992:11;22964:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23031:15;;;;;;;;;;;23023:33;;:58;23069:11;23057:9;:23;;;;:::i;:::-;23023:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22891:206;22824:352;;;23130:9;;;;;;;;;;;23122:27;;:38;23150:9;23122:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22824:352;21994:1193;23237:4;23199:23;:35;23223:10;23199:35;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;23280:15;23252:13;:25;23266:10;23252:25;;;;;;;;;;;;;;;:43;;;;23309:24;23336:6;:27;23343:19;23336:27;;;;;;;;;;;23309:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23374:19;23396:12;:24;23409:10;23396:24;;;;;;;;;;;;;;;23374:46;;23450:19;23431:5;:16;;:38;;;;23496:8;:16;;;23480:5;:13;;:32;;;;23548:8;:25;;;23523:5;:22;;:50;;;;23608:1;23584:5;:21;;:25;;;;23630:8;:10;;;23620:5;:7;;:20;;;;23661:8;:10;;;23651:5;:7;;:20;;;;23716:10;23687:40;;;;;;;;;;;;21009:2726;;;;20944:2791;:::o;12783:28::-;;;;:::o;17628:108::-;969:13;:11;:13::i;:::-;17721:7:::1;17703:15;;:25;;;;;;;;;;;;;;;;;;17628:108:::0;:::o;14239:48::-;14278:9;14239:48;:::o;13572:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;26199:225::-;969:13;:11;:13::i;:::-;26254:15:::1;26279:10;;;;;;;;;;;26272:28;;;26309:4;26272:43;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26254:61;;26344:1;26334:7;:11;26326:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;26376:10;;;;;;;;;;;26369:27;;;26397:9;;;;;;;;;;;26408:7;26369:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26243:181;26199:225::o:0;1279:103::-;969:13;:11;:13::i;:::-;1344:30:::1;1371:1;1344:18;:30::i;:::-;1279:103::o:0;14130:45::-;;;;:::o;12368:30::-;;;;;;;;;;;;;:::o;12886:31::-;;;;:::o;12432:28::-;;;;;;;;;;;;;:::o;25630:323::-;25683:14;25700:20;:32;25721:10;25700:32;;;;;;;;;;;;;;;;25683:49;;25760:1;25751:6;:10;25743:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;25832:1;25797:20;:32;25818:10;25797:32;;;;;;;;;;;;;;;:36;;;;25851:10;;;;;;;;;;;25844:23;;;25868:10;25880:6;25844:43;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25926:10;25904:41;;;25938:6;25904:41;;;;;;:::i;:::-;;;;;;;;25672:281;25630:323::o;12518:46::-;;;;:::o;16763:118::-;969:13;:11;:13::i;:::-;16862:11:::1;16843:16;:30;;;;16763:118:::0;:::o;14591:48::-;14635:4;14591:48;:::o;1010:87::-;1056:7;1083:6;;;;;;;;;;;1076:13;;1010:87;:::o;12336:24::-;;;;;;;;;;;;;:::o;12606:28::-;;;;;;;;;;;;;:::o;13835:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;26628:435::-;26721:1;26705:12;;;;;;;;;;;:17;;;26697:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;26784:18;:30;26803:10;26784:30;;;;;;;;;;;;;;;;;;;;;;;;;26780:77;;;26823:34;;;;;;;;;;;;;;26780:77;26873:23;:35;26897:10;26873:35;;;;;;;;;;;;;;;;;;;;;;;;;26868:79;;26917:30;;;;;;;;;;;;;;26868:79;26991:4;26958:18;:30;26977:10;26958:30;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;27006:48;27015:10;27027:17;27046:1;27049;27052;27006:8;:48::i;:::-;26628:435;;:::o;12746:30::-;;;;:::o;14413:42::-;;;:::o;17883:188::-;969:13;:11;:13::i;:::-;17972:6:::1;17968:96;17984:6;;:13;;17982:1;:15;17968:96;;;18048:4;18019:15;:26;18035:6;;18042:1;18035:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;18019:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;17999:3;;;;;:::i;:::-;;;;17968:96;;;;17883:188:::0;;:::o;13452:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;12989:48::-;;;;;;;;;;;;;;;;;:::o;12712:25::-;;;;:::o;17748:127::-;969:13;:11;:13::i;:::-;17825:6:::1;17810:12;;:21;;;;;;;;;;;;;;;;;;17847:20;17860:6;17847:20;;;;;;:::i;:::-;;;;;;;;17748:127:::0;:::o;14303:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;13402:43::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14357:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;27075:1185::-;27141:20;:32;27162:10;27141:32;;;;;;;;;;;;;;;:35;27174:1;27141:35;;;;;;;;;;;:38;27177:1;27141:38;;;;;;;;;;;;;;;;;;;;;27136:79;;27188:27;;;;;;;;;;;;;;27136:79;27226:19;27248:12;:24;27261:10;27248:24;;;;;;;;;;;;;;;27226:46;;27283:14;27300:12;:24;27313:10;27300:24;;;;;;;;;;;;;;;:27;27325:1;27300:27;;;;;;;;;;;:30;27328:1;27300:30;;;;;;;;;;;;27283:47;;27341:18;27362:4;:12;27367:6;27362:12;;;;;;;;;;;27341:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27385:26;27400:10;27385:14;:26::i;:::-;27453:7;:16;;;27436:13;;:33;27432:149;;27503:7;:16;;;27486:13;;:33;;;;;;;:::i;:::-;;;;;;;;27432:149;;;27568:1;27552:13;:17;;;;27432:149;27625:7;:16;;;27595:14;:26;27610:10;27595:26;;;;;;;;;;;;;;;;:46;27591:188;;27688:7;:16;;;27658:14;:26;27673:10;27658:26;;;;;;;;;;;;;;;;:46;;;;;;;:::i;:::-;;;;;;;;27591:188;;;27766:1;27737:14;:26;27752:10;27737:26;;;;;;;;;;;;;;;:30;;;;27591:188;27818:7;:24;;;27793:5;:21;;;:49;27789:189;;27884:7;:24;;;27859:5;:21;;;:49;;;;;;;:::i;:::-;;;;;;;;27789:189;;;27965:1;27941:5;:21;;:25;;;;27789:189;28031:5;27990:20;:32;28011:10;27990:32;;;;;;;;;;;;;;;:35;28023:1;27990:35;;;;;;;;;;;:38;28026:1;27990:38;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;28080:1;28047:12;:24;28060:10;28047:24;;;;;;;;;;;;;;;:27;28072:1;28047:27;;;;;;;;;;;:30;28075:1;28047:30;;;;;;;;;;;:34;;;;28113:1;28096:5;:14;;;:18;28092:40;;;28116:5;:14;;;:16;;;;;;;;;:::i;:::-;;;;;;28092:40;28179:10;28148:104;;;28191:14;:26;28206:10;28191:26;;;;;;;;;;;;;;;;28219:20;:32;28240:10;28219:32;;;;;;;;;;;;;;;;28148:104;;;;;;;:::i;:::-;;;;;;;;27125:1135;;;27075:1185;;:::o;14185:46::-;14224:7;14185:46;:::o;13635:92::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14515:68::-;14565:18;14515:68;:::o;13886:50::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1390:220::-;969:13;:11;:13::i;:::-;1495:1:::1;1475:22;;:8;:22;;::::0;1471:93:::1;;1549:1;1521:31;;;;;;;;;;;:::i;:::-;;;;;;;;1471:93;1574:28;1593:8;1574:18;:28::i;:::-;1390:220:::0;:::o;26432:188::-;969:13;:11;:13::i;:::-;26485:15:::1;26503:21;26485:39;;26553:1;26543:7;:11;26535:30;;;;;;;;;;;;:::i;:::-;;;;;;;;;26584:9;;;;;;;;;;;26576:27;;:36;26604:7;26576:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;26474:146;26432:188::o:0;23743:1245::-;23811:1;23795:12;;;;;;;;;;;:17;;;23787:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;23875:23;:35;23899:10;23875:35;;;;;;;;;;;;;;;;;;;;;;;;;23870:79;;23919:30;;;;;;;;;;;;;;23870:79;24017:8;;23987:15;:27;24003:10;23987:27;;;;;;;;;;;;;;;;:38;;;;:::i;:::-;23968:15;:57;;23960:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;24070:23;24096:12;:24;24109:10;24096:24;;;;;;;;;;;;;;;24070:50;;24131:22;24179:1;24156:9;:20;;;:24;;;;:::i;:::-;24131:49;;24212:10;;24195:14;:27;24191:66;;;24231:26;;;;;;;;;;;;;;24191:66;24268:29;24300:6;:22;24307:14;24300:22;;;;;;;;;;;24268:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24333:12;24355:10;;;;;;;;;;;24348:31;;;24380:10;24400:4;24407:13;:18;;;24348:78;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24333:93;;24445:7;24437:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;24514:1;24493:13;:18;;;:22;24489:71;;;24524:10;;;;;;;;;;;24517:23;;;24541:13;:18;;;24517:43;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24489:71;24594:14;24571:9;:20;;:37;;;;24639:13;:21;;;24619:9;:17;;:41;;;;24700:13;:30;;;24671:9;:26;;:59;;;;24755:13;:15;;;24741:9;:11;;:29;;;;24796:13;:15;;;24782:9;:11;;:29;;;;24853:15;24823;:27;24839:10;24823:27;;;;;;;;;;;;;;;:45;;;;24898:10;24884:96;;;24910:14;24926:13;:21;;;24949:13;:30;;;24884:96;;;;;;;;:::i;:::-;;;;;;;;23776:1212;;;;23743:1245::o;14012:53::-;;;;;;;;;;;;;;;;;:::o;1105:166::-;1176:12;:10;:12::i;:::-;1165:23;;:7;:5;:7::i;:::-;:23;;;1161:103;;1239:12;:10;:12::i;:::-;1212:40;;;;;;;;;;;:::i;:::-;;;;;;;;1161:103;1105:166::o;29842:293::-;29902:26;:24;:26::i;:::-;14635:4;30023:15;:23;30039:6;30023:23;;;;;;;;;;;;;;;;29998:22;;:48;;;;:::i;:::-;29972:14;:22;29987:6;29972:22;;;;;;;;;;;;;;;;:75;;;;:::i;:::-;29971:97;;;;:::i;:::-;29939:20;:28;29960:6;29939:28;;;;;;;;;;;;;;;;:129;;;;;;;:::i;:::-;;;;;;;;30105:22;;30079:15;:23;30095:6;30079:23;;;;;;;;;;;;;;;:48;;;;29842:293;:::o;28268:1038::-;28376:14;28393:4;:14;28398:8;28393:14;;;;;;;;;;;28376:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28418:19;28440:12;:20;28453:6;28440:20;;;;;;;;;;;;;;;28418:42;;28475:53;28497:6;28505:1;28508;28511:5;:7;;;28520:5;:7;;;28475:21;:53::i;:::-;28471:96;;;28537:30;;;;;;;;;;;;;;28471:96;28600:5;:13;;;28582:5;:14;;;:31;28578:71;;28622:27;;;;;;;;;;;;;;28578:71;28713:5;:22;;;28690:3;:20;;;28666:5;:21;;;:44;;;;:::i;:::-;:69;28662:117;;;28744:35;;;;;;;;;;;;;;28662:117;28815:3;:20;;;28790:5;:21;;;:45;;;;;;;:::i;:::-;;;;;;;;28846:14;;:16;;;;;;;;;:::i;:::-;;;;;;28881:1;28873:3;:5;;:9;;;;;28901:1;28893:3;:5;;:9;;;;;28922:14;;28913:3;:6;;:23;;;;;28984:4;28947:20;:28;28968:6;28947:28;;;;;;;;;;;;;;;:31;28976:1;28947:31;;;;;;;;;;;:34;28979:1;28947:34;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;29028:8;28999:12;:20;29012:6;28999:20;;;;;;;;;;;;;;;:23;29020:1;28999:23;;;;;;;;;;;:26;29023:1;28999:26;;;;;;;;;;;:37;;;;29047:43;29075:14;;29047:15;:23;29063:6;29047:23;;;;;;;;;;;;;;;:27;;:43;;;;:::i;:::-;;29132:3;29101:12;:28;29114:14;;29101:28;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29146:5;:14;;;:16;;;;;;;;;:::i;:::-;;;;;;29173:39;29191:6;29199:3;:12;;;29173:17;:39::i;:::-;29261:8;29253:6;29228:70;;29245:6;29228:70;;;29271:4;29277:14;;29293:1;29296;29228:70;;;;;;;;;:::i;:::-;;;;;;;;28365:941;;28268:1038;;;;;:::o;1618:191::-;1692:16;1711:6;;;;;;;;;;;1692:25;;1737:8;1728:6;;:17;;;;;;;;;;;;;;;;;;1792:8;1761:40;;1782:8;1761:40;;;;;;;;;;;;1681:128;1618:191;:::o;144:98::-;197:7;224:10;217:17;;144:98;:::o;30143:430::-;30219:15;;30203:12;:31;30199:44;30236:7;30199:44;30274:1;30257:13;;:18;30253:102;;30310:12;30292:15;:30;;;;30337:7;;30253:102;30365:15;14565:18;30399:15;;30384:12;:30;;;;:::i;:::-;30383:58;;;;:::i;:::-;30365:76;;30511:13;;14635:4;30480:7;:27;;;;:::i;:::-;30479:45;;;;:::i;:::-;30453:22;;:71;;;;;;;:::i;:::-;;;;;;;;30553:12;30535:15;:30;;;;30188:385;30143:430;:::o;30581:286::-;30719:4;30752:6;30740:8;:18;;:40;;;;30774:6;30762:8;:18;;30740:40;30736:57;;;30789:4;30782:11;;;;30736:57;30811:20;:28;30832:6;30811:28;;;;;;;;;;;;;;;:38;30840:8;30811:38;;;;;;;;;;;:48;30850:8;30811:48;;;;;;;;;;;;;;;;;;;;;30804:55;;30581:286;;;;;;;;:::o;2816:150::-;2886:11;2919:39;2923:18;2937:3;2923:13;:18::i;:::-;2951:5;2943:14;;2919:3;:39::i;:::-;2910:48;;2816:150;;;;:::o;29314:520::-;29400:16;;;;;;;;;;;29395:210;;29452:4;29433:16;;:23;;;;;;;;;;;;;;;;;;29484:12;29471:10;:25;;;;29529:12;29511:15;:30;;;;29561:32;29582:10;;29561:32;;;;;;:::i;:::-;;;;;;;;29395:210;29615:22;29630:6;29615:14;:22::i;:::-;29665:8;29648:13;;:25;;;;;;;:::i;:::-;;;;;;;;29710:8;29684:14;:22;29699:6;29684:22;;;;;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;29765:6;29734:92;;;29773:14;:22;29788:6;29773:22;;;;;;;;;;;;;;;;29797:20;:28;29818:6;29797:28;;;;;;;;;;;;;;;;29734:92;;;;;;;:::i;:::-;;;;;;;;29314:520;;:::o;6589:136::-;6656:20;6710:6;6700:16;;6589:136;;;:::o;4090:761::-;4160:11;4184:16;4203:14;4213:3;4203:9;:14::i;:::-;4184:33;;4265:14;4258:5;4255:25;4252:76;;4296:10;4290:4;4283:24;4321:4;4315;4308:18;4252:76;4352:5;4342:44;;4370:14;4361:23;;4342:44;4413:8;4407:4;4400:22;4449:5;4443:4;4436:19;4494:4;4488;4478:21;4529:1;4523:8;4513:320;;4571:8;4567:13;4561:20;4612:1;4606:4;4599:15;4686:5;4681:1;4678;4674:9;4664:8;4660:24;4653:39;4734:1;4731;4727:9;4724:1;4720:17;4717:1;4710:28;4785:1;4782;4778:9;4767:8;4763:13;4756:32;4817:1;4807:11;;4533:300;4513:320;4237:607;;4090:761;;;;:::o;6336:245::-;6399:9;6458:30;6452:4;6445:44;6516:6;6510:4;6503:20;6558:4;6552;6542:21;6537:26;;6336:245;;;:::o;88:117:1:-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:77::-;1213:7;1242:5;1231:16;;1176:77;;;:::o;1259:122::-;1332:24;1350:5;1332:24;:::i;:::-;1325:5;1322:35;1312:63;;1371:1;1368;1361:12;1312:63;1259:122;:::o;1387:139::-;1433:5;1471:6;1458:20;1449:29;;1487:33;1514:5;1487:33;:::i;:::-;1387:139;;;;:::o;1532:329::-;1591:6;1640:2;1628:9;1619:7;1615:23;1611:32;1608:119;;;1646:79;;:::i;:::-;1608:119;1766:1;1791:53;1836:7;1827:6;1816:9;1812:22;1791:53;:::i;:::-;1781:63;;1737:117;1532:329;;;;:::o;1867:118::-;1954:24;1972:5;1954:24;:::i;:::-;1949:3;1942:37;1867:118;;:::o;1991:90::-;2025:7;2068:5;2061:13;2054:21;2043:32;;1991:90;;;:::o;2087:109::-;2168:21;2183:5;2168:21;:::i;:::-;2163:3;2156:34;2087:109;;:::o;2202:985::-;2485:4;2523:3;2512:9;2508:19;2500:27;;2537:71;2605:1;2594:9;2590:17;2581:6;2537:71;:::i;:::-;2618:72;2686:2;2675:9;2671:18;2662:6;2618:72;:::i;:::-;2700;2768:2;2757:9;2753:18;2744:6;2700:72;:::i;:::-;2782;2850:2;2839:9;2835:18;2826:6;2782:72;:::i;:::-;2864:73;2932:3;2921:9;2917:19;2908:6;2864:73;:::i;:::-;2947;3015:3;3004:9;3000:19;2991:6;2947:73;:::i;:::-;3030;3098:3;3087:9;3083:19;3074:6;3030:73;:::i;:::-;3113:67;3175:3;3164:9;3160:19;3151:6;3113:67;:::i;:::-;2202:985;;;;;;;;;;;:::o;3193:86::-;3228:7;3268:4;3261:5;3257:16;3246:27;;3193:86;;;:::o;3285:112::-;3368:22;3384:5;3368:22;:::i;:::-;3363:3;3356:35;3285:112;;:::o;3403:214::-;3492:4;3530:2;3519:9;3515:18;3507:26;;3543:67;3607:1;3596:9;3592:17;3583:6;3543:67;:::i;:::-;3403:214;;;;:::o;3623:118::-;3710:24;3728:5;3710:24;:::i;:::-;3705:3;3698:37;3623:118;;:::o;3747:222::-;3840:4;3878:2;3867:9;3863:18;3855:26;;3891:71;3959:1;3948:9;3944:17;3935:6;3891:71;:::i;:::-;3747:222;;;;:::o;3975:619::-;4052:6;4060;4068;4117:2;4105:9;4096:7;4092:23;4088:32;4085:119;;;4123:79;;:::i;:::-;4085:119;4243:1;4268:53;4313:7;4304:6;4293:9;4289:22;4268:53;:::i;:::-;4258:63;;4214:117;4370:2;4396:53;4441:7;4432:6;4421:9;4417:22;4396:53;:::i;:::-;4386:63;;4341:118;4498:2;4524:53;4569:7;4560:6;4549:9;4545:22;4524:53;:::i;:::-;4514:63;;4469:118;3975:619;;;;;:::o;4600:222::-;4693:4;4731:2;4720:9;4716:18;4708:26;;4744:71;4812:1;4801:9;4797:17;4788:6;4744:71;:::i;:::-;4600:222;;;;:::o;4828:117::-;4937:1;4934;4927:12;4951:117;5060:1;5057;5050:12;5074:117;5183:1;5180;5173:12;5214:568;5287:8;5297:6;5347:3;5340:4;5332:6;5328:17;5324:27;5314:122;;5355:79;;:::i;:::-;5314:122;5468:6;5455:20;5445:30;;5498:18;5490:6;5487:30;5484:117;;;5520:79;;:::i;:::-;5484:117;5634:4;5626:6;5622:17;5610:29;;5688:3;5680:4;5672:6;5668:17;5658:8;5654:32;5651:41;5648:128;;;5695:79;;:::i;:::-;5648:128;5214:568;;;;;:::o;5788:559::-;5874:6;5882;5931:2;5919:9;5910:7;5906:23;5902:32;5899:119;;;5937:79;;:::i;:::-;5899:119;6085:1;6074:9;6070:17;6057:31;6115:18;6107:6;6104:30;6101:117;;;6137:79;;:::i;:::-;6101:117;6250:80;6322:7;6313:6;6302:9;6298:22;6250:80;:::i;:::-;6232:98;;;;6028:312;5788:559;;;;;:::o;6353:210::-;6440:4;6478:2;6467:9;6463:18;6455:26;;6491:65;6553:1;6542:9;6538:17;6529:6;6491:65;:::i;:::-;6353:210;;;;:::o;6569:763::-;6796:4;6834:3;6823:9;6819:19;6811:27;;6848:71;6916:1;6905:9;6901:17;6892:6;6848:71;:::i;:::-;6929:72;6997:2;6986:9;6982:18;6973:6;6929:72;:::i;:::-;7011;7079:2;7068:9;7064:18;7055:6;7011:72;:::i;:::-;7093:66;7155:2;7144:9;7140:18;7131:6;7093:66;:::i;:::-;7169:73;7237:3;7226:9;7222:19;7213:6;7169:73;:::i;:::-;7252;7320:3;7309:9;7305:19;7296:6;7252:73;:::i;:::-;6569:763;;;;;;;;;:::o;7338:442::-;7487:4;7525:2;7514:9;7510:18;7502:26;;7538:71;7606:1;7595:9;7591:17;7582:6;7538:71;:::i;:::-;7619:72;7687:2;7676:9;7672:18;7663:6;7619:72;:::i;:::-;7701;7769:2;7758:9;7754:18;7745:6;7701:72;:::i;:::-;7338:442;;;;;;:::o;7786:116::-;7856:21;7871:5;7856:21;:::i;:::-;7849:5;7846:32;7836:60;;7892:1;7889;7882:12;7836:60;7786:116;:::o;7908:133::-;7951:5;7989:6;7976:20;7967:29;;8005:30;8029:5;8005:30;:::i;:::-;7908:133;;;;:::o;8047:468::-;8112:6;8120;8169:2;8157:9;8148:7;8144:23;8140:32;8137:119;;;8175:79;;:::i;:::-;8137:119;8295:1;8320:53;8365:7;8356:6;8345:9;8341:22;8320:53;:::i;:::-;8310:63;;8266:117;8422:2;8448:50;8490:7;8481:6;8470:9;8466:22;8448:50;:::i;:::-;8438:60;;8393:115;8047:468;;;;;:::o;8521:619::-;8598:6;8606;8614;8663:2;8651:9;8642:7;8638:23;8634:32;8631:119;;;8669:79;;:::i;:::-;8631:119;8789:1;8814:53;8859:7;8850:6;8839:9;8835:22;8814:53;:::i;:::-;8804:63;;8760:117;8916:2;8942:53;8987:7;8978:6;8967:9;8963:22;8942:53;:::i;:::-;8932:63;;8887:118;9044:2;9070:53;9115:7;9106:6;9095:9;9091:22;9070:53;:::i;:::-;9060:63;;9015:118;8521:619;;;;;:::o;9146:474::-;9214:6;9222;9271:2;9259:9;9250:7;9246:23;9242:32;9239:119;;;9277:79;;:::i;:::-;9239:119;9397:1;9422:53;9467:7;9458:6;9447:9;9443:22;9422:53;:::i;:::-;9412:63;;9368:117;9524:2;9550:53;9595:7;9586:6;9575:9;9571:22;9550:53;:::i;:::-;9540:63;;9495:118;9146:474;;;;;:::o;9626:886::-;9887:4;9925:3;9914:9;9910:19;9902:27;;9939:71;10007:1;9996:9;9992:17;9983:6;9939:71;:::i;:::-;10020:72;10088:2;10077:9;10073:18;10064:6;10020:72;:::i;:::-;10102;10170:2;10159:9;10155:18;10146:6;10102:72;:::i;:::-;10184;10252:2;10241:9;10237:18;10228:6;10184:72;:::i;:::-;10266:73;10334:3;10323:9;10319:19;10310:6;10266:73;:::i;:::-;10349;10417:3;10406:9;10402:19;10393:6;10349:73;:::i;:::-;10432;10500:3;10489:9;10485:19;10476:6;10432:73;:::i;:::-;9626:886;;;;;;;;;;:::o;10518:118::-;10589:22;10605:5;10589:22;:::i;:::-;10582:5;10579:33;10569:61;;10626:1;10623;10616:12;10569:61;10518:118;:::o;10642:135::-;10686:5;10724:6;10711:20;10702:29;;10740:31;10765:5;10740:31;:::i;:::-;10642:135;;;;:::o;10783:325::-;10840:6;10889:2;10877:9;10868:7;10864:23;10860:32;10857:119;;;10895:79;;:::i;:::-;10857:119;11015:1;11040:51;11083:7;11074:6;11063:9;11059:22;11040:51;:::i;:::-;11030:61;;10986:115;10783:325;;;;:::o;11114:474::-;11182:6;11190;11239:2;11227:9;11218:7;11214:23;11210:32;11207:119;;;11245:79;;:::i;:::-;11207:119;11365:1;11390:53;11435:7;11426:6;11415:9;11411:22;11390:53;:::i;:::-;11380:63;;11336:117;11492:2;11518:53;11563:7;11554:6;11543:9;11539:22;11518:53;:::i;:::-;11508:63;;11463:118;11114:474;;;;;:::o;11594:180::-;11642:77;11639:1;11632:88;11739:4;11736:1;11729:15;11763:4;11760:1;11753:15;11780:180;11828:77;11825:1;11818:88;11925:4;11922:1;11915:15;11949:4;11946:1;11939:15;11966:233;12005:3;12028:24;12046:5;12028:24;:::i;:::-;12019:33;;12074:66;12067:5;12064:77;12061:103;;12144:18;;:::i;:::-;12061:103;12191:1;12184:5;12180:13;12173:20;;11966:233;;;:::o;12205:114::-;12242:7;12282:30;12275:5;12271:42;12260:53;;12205:114;;;:::o;12325:122::-;12398:24;12416:5;12398:24;:::i;:::-;12391:5;12388:35;12378:63;;12437:1;12434;12427:12;12378:63;12325:122;:::o;12453:143::-;12510:5;12541:6;12535:13;12526:22;;12557:33;12584:5;12557:33;:::i;:::-;12453:143;;;;:::o;12602:93::-;12638:7;12678:10;12671:5;12667:22;12656:33;;12602:93;;;:::o;12701:120::-;12773:23;12790:5;12773:23;:::i;:::-;12766:5;12763:34;12753:62;;12811:1;12808;12801:12;12753:62;12701:120;:::o;12827:141::-;12883:5;12914:6;12908:13;12899:22;;12930:32;12956:5;12930:32;:::i;:::-;12827:141;;;;:::o;12974:661::-;13061:6;13069;13077;13126:2;13114:9;13105:7;13101:23;13097:32;13094:119;;;13132:79;;:::i;:::-;13094:119;13252:1;13277:64;13333:7;13324:6;13313:9;13309:22;13277:64;:::i;:::-;13267:74;;13223:128;13390:2;13416:64;13472:7;13463:6;13452:9;13448:22;13416:64;:::i;:::-;13406:74;;13361:129;13529:2;13555:63;13610:7;13601:6;13590:9;13586:22;13555:63;:::i;:::-;13545:73;;13500:128;12974:661;;;;;:::o;13641:143::-;13698:5;13729:6;13723:13;13714:22;;13745:33;13772:5;13745:33;:::i;:::-;13641:143;;;;:::o;13790:351::-;13860:6;13909:2;13897:9;13888:7;13884:23;13880:32;13877:119;;;13915:79;;:::i;:::-;13877:119;14035:1;14060:64;14116:7;14107:6;14096:9;14092:22;14060:64;:::i;:::-;14050:74;;14006:128;13790:351;;;;:::o;14147:410::-;14187:7;14210:20;14228:1;14210:20;:::i;:::-;14205:25;;14244:20;14262:1;14244:20;:::i;:::-;14239:25;;14299:1;14296;14292:9;14321:30;14339:11;14321:30;:::i;:::-;14310:41;;14500:1;14491:7;14487:15;14484:1;14481:22;14461:1;14454:9;14434:83;14411:139;;14530:18;;:::i;:::-;14411:139;14195:362;14147:410;;;;:::o;14563:180::-;14611:77;14608:1;14601:88;14708:4;14705:1;14698:15;14732:4;14729:1;14722:15;14749:185;14789:1;14806:20;14824:1;14806:20;:::i;:::-;14801:25;;14840:20;14858:1;14840:20;:::i;:::-;14835:25;;14879:1;14869:35;;14884:18;;:::i;:::-;14869:35;14926:1;14923;14919:9;14914:14;;14749:185;;;;:::o;14940:320::-;15055:4;15093:2;15082:9;15078:18;15070:26;;15106:71;15174:1;15163:9;15159:17;15150:6;15106:71;:::i;:::-;15187:66;15249:2;15238:9;15234:18;15225:6;15187:66;:::i;:::-;14940:320;;;;;:::o;15266:191::-;15306:3;15325:20;15343:1;15325:20;:::i;:::-;15320:25;;15359:20;15377:1;15359:20;:::i;:::-;15354:25;;15402:1;15399;15395:9;15388:16;;15423:3;15420:1;15417:10;15414:36;;;15430:18;;:::i;:::-;15414:36;15266:191;;;;:::o;15463:194::-;15503:4;15523:20;15541:1;15523:20;:::i;:::-;15518:25;;15557:20;15575:1;15557:20;:::i;:::-;15552:25;;15601:1;15598;15594:9;15586:17;;15625:1;15619:4;15616:11;15613:37;;;15630:18;;:::i;:::-;15613:37;15463:194;;;;:::o;15663:169::-;15747:11;15781:6;15776:3;15769:19;15821:4;15816:3;15812:14;15797:29;;15663:169;;;;:::o;15838:179::-;15978:31;15974:1;15966:6;15962:14;15955:55;15838:179;:::o;16023:366::-;16165:3;16186:67;16250:2;16245:3;16186:67;:::i;:::-;16179:74;;16262:93;16351:3;16262:93;:::i;:::-;16380:2;16375:3;16371:12;16364:19;;16023:366;;;:::o;16395:419::-;16561:4;16599:2;16588:9;16584:18;16576:26;;16648:9;16642:4;16638:20;16634:1;16623:9;16619:17;16612:47;16676:131;16802:4;16676:131;:::i;:::-;16668:139;;16395:419;;;:::o;16820:332::-;16941:4;16979:2;16968:9;16964:18;16956:26;;16992:71;17060:1;17049:9;17045:17;17036:6;16992:71;:::i;:::-;17073:72;17141:2;17130:9;17126:18;17117:6;17073:72;:::i;:::-;16820:332;;;;;:::o;17158:229::-;17298:34;17294:1;17286:6;17282:14;17275:58;17367:12;17362:2;17354:6;17350:15;17343:37;17158:229;:::o;17393:366::-;17535:3;17556:67;17620:2;17615:3;17556:67;:::i;:::-;17549:74;;17632:93;17721:3;17632:93;:::i;:::-;17750:2;17745:3;17741:12;17734:19;;17393:366;;;:::o;17765:419::-;17931:4;17969:2;17958:9;17954:18;17946:26;;18018:9;18012:4;18008:20;18004:1;17993:9;17989:17;17982:47;18046:131;18172:4;18046:131;:::i;:::-;18038:139;;17765:419;;;:::o;18190:442::-;18339:4;18377:2;18366:9;18362:18;18354:26;;18390:71;18458:1;18447:9;18443:17;18434:6;18390:71;:::i;:::-;18471:72;18539:2;18528:9;18524:18;18515:6;18471:72;:::i;:::-;18553;18621:2;18610:9;18606:18;18597:6;18553:72;:::i;:::-;18190:442;;;;;;:::o;18638:137::-;18692:5;18723:6;18717:13;18708:22;;18739:30;18763:5;18739:30;:::i;:::-;18638:137;;;;:::o;18781:345::-;18848:6;18897:2;18885:9;18876:7;18872:23;18868:32;18865:119;;;18903:79;;:::i;:::-;18865:119;19023:1;19048:61;19101:7;19092:6;19081:9;19077:22;19048:61;:::i;:::-;19038:71;;18994:125;18781:345;;;;:::o;19132:171::-;19272:23;19268:1;19260:6;19256:14;19249:47;19132:171;:::o;19309:366::-;19451:3;19472:67;19536:2;19531:3;19472:67;:::i;:::-;19465:74;;19548:93;19637:3;19548:93;:::i;:::-;19666:2;19661:3;19657:12;19650:19;;19309:366;;;:::o;19681:419::-;19847:4;19885:2;19874:9;19870:18;19862:26;;19934:9;19928:4;19924:20;19920:1;19909:9;19905:17;19898:47;19962:131;20088:4;19962:131;:::i;:::-;19954:139;;19681:419;;;:::o;20106:167::-;20246:19;20242:1;20234:6;20230:14;20223:43;20106:167;:::o;20279:366::-;20421:3;20442:67;20506:2;20501:3;20442:67;:::i;:::-;20435:74;;20518:93;20607:3;20518:93;:::i;:::-;20636:2;20631:3;20627:12;20620:19;;20279:366;;;:::o;20651:419::-;20817:4;20855:2;20844:9;20840:18;20832:26;;20904:9;20898:4;20894:20;20890:1;20879:9;20875:17;20868:47;20932:131;21058:4;20932:131;:::i;:::-;20924:139;;20651:419;;;:::o;21076:177::-;21216:29;21212:1;21204:6;21200:14;21193:53;21076:177;:::o;21259:366::-;21401:3;21422:67;21486:2;21481:3;21422:67;:::i;:::-;21415:74;;21498:93;21587:3;21498:93;:::i;:::-;21616:2;21611:3;21607:12;21600:19;;21259:366;;;:::o;21631:419::-;21797:4;21835:2;21824:9;21820:18;21812:26;;21884:9;21878:4;21874:20;21870:1;21859:9;21855:17;21848:47;21912:131;22038:4;21912:131;:::i;:::-;21904:139;;21631:419;;;:::o;22056:177::-;22196:29;22192:1;22184:6;22180:14;22173:53;22056:177;:::o;22239:366::-;22381:3;22402:67;22466:2;22461:3;22402:67;:::i;:::-;22395:74;;22478:93;22567:3;22478:93;:::i;:::-;22596:2;22591:3;22587:12;22580:19;;22239:366;;;:::o;22611:419::-;22777:4;22815:2;22804:9;22800:18;22792:26;;22864:9;22858:4;22854:20;22850:1;22839:9;22835:17;22828:47;22892:131;23018:4;22892:131;:::i;:::-;22884:139;;22611:419;;;:::o;23036:143::-;23093:5;23124:6;23118:13;23109:22;;23140:33;23167:5;23140:33;:::i;:::-;23036:143;;;;:::o;23185:351::-;23255:6;23304:2;23292:9;23283:7;23279:23;23275:32;23272:119;;;23310:79;;:::i;:::-;23272:119;23430:1;23455:64;23511:7;23502:6;23491:9;23487:22;23455:64;:::i;:::-;23445:74;;23401:128;23185:351;;;;:::o;23542:158::-;23682:10;23678:1;23670:6;23666:14;23659:34;23542:158;:::o;23706:365::-;23848:3;23869:66;23933:1;23928:3;23869:66;:::i;:::-;23862:73;;23944:93;24033:3;23944:93;:::i;:::-;24062:2;24057:3;24053:12;24046:19;;23706:365;;;:::o;24077:419::-;24243:4;24281:2;24270:9;24266:18;24258:26;;24330:9;24324:4;24320:20;24316:1;24305:9;24301:17;24294:47;24358:131;24484:4;24358:131;:::i;:::-;24350:139;;24077:419;;;:::o;24502:170::-;24642:22;24638:1;24630:6;24626:14;24619:46;24502:170;:::o;24678:366::-;24820:3;24841:67;24905:2;24900:3;24841:67;:::i;:::-;24834:74;;24917:93;25006:3;24917:93;:::i;:::-;25035:2;25030:3;25026:12;25019:19;;24678:366;;;:::o;25050:419::-;25216:4;25254:2;25243:9;25239:18;25231:26;;25303:9;25297:4;25293:20;25289:1;25278:9;25274:17;25267:47;25331:131;25457:4;25331:131;:::i;:::-;25323:139;;25050:419;;;:::o;25475:171::-;25514:3;25537:24;25555:5;25537:24;:::i;:::-;25528:33;;25583:4;25576:5;25573:15;25570:41;;25591:18;;:::i;:::-;25570:41;25638:1;25631:5;25627:13;25620:20;;25475:171;;;:::o;25652:332::-;25773:4;25811:2;25800:9;25796:18;25788:26;;25824:71;25892:1;25881:9;25877:17;25868:6;25824:71;:::i;:::-;25905:72;25973:2;25962:9;25958:18;25949:6;25905:72;:::i;:::-;25652:332;;;;;:::o;25990:156::-;26130:8;26126:1;26118:6;26114:14;26107:32;25990:156;:::o;26152:365::-;26294:3;26315:66;26379:1;26374:3;26315:66;:::i;:::-;26308:73;;26390:93;26479:3;26390:93;:::i;:::-;26508:2;26503:3;26499:12;26492:19;;26152:365;;;:::o;26523:419::-;26689:4;26727:2;26716:9;26712:18;26704:26;;26776:9;26770:4;26766:20;26762:1;26751:9;26747:17;26740:47;26804:131;26930:4;26804:131;:::i;:::-;26796:139;;26523:419;;;:::o;26948:229::-;27088:34;27084:1;27076:6;27072:14;27065:58;27157:12;27152:2;27144:6;27140:15;27133:37;26948:229;:::o;27183:366::-;27325:3;27346:67;27410:2;27405:3;27346:67;:::i;:::-;27339:74;;27422:93;27511:3;27422:93;:::i;:::-;27540:2;27535:3;27531:12;27524:19;;27183:366;;;:::o;27555:419::-;27721:4;27759:2;27748:9;27744:18;27736:26;;27808:9;27802:4;27798:20;27794:1;27783:9;27779:17;27772:47;27836:131;27962:4;27836:131;:::i;:::-;27828:139;;27555:419;;;:::o;27980:179::-;28120:31;28116:1;28108:6;28104:14;28097:55;27980:179;:::o;28165:366::-;28307:3;28328:67;28392:2;28387:3;28328:67;:::i;:::-;28321:74;;28404:93;28493:3;28404:93;:::i;:::-;28522:2;28517:3;28513:12;28506:19;;28165:366;;;:::o;28537:419::-;28703:4;28741:2;28730:9;28726:18;28718:26;;28790:9;28784:4;28780:20;28776:1;28765:9;28761:17;28754:47;28818:131;28944:4;28818:131;:::i;:::-;28810:139;;28537:419;;;:::o;28962:553::-;29139:4;29177:3;29166:9;29162:19;29154:27;;29191:71;29259:1;29248:9;29244:17;29235:6;29191:71;:::i;:::-;29272:72;29340:2;29329:9;29325:18;29316:6;29272:72;:::i;:::-;29354;29422:2;29411:9;29407:18;29398:6;29354:72;:::i;:::-;29436;29504:2;29493:9;29489:18;29480:6;29436:72;:::i;:::-;28962:553;;;;;;;:::o

Swarm Source

ipfs://c3110159f05951fca01a9ad63bad1222e62378929256c038aecb0771ad1a99cd

Block Transaction Gas Used Reward
view all blocks produced

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.