ETH Price: $3,290.52 (+1.86%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Execute130285792021-08-15 8:09:431265 days ago1629014983IN
0xBCc4b939...0570C5124
0 ETH0.0567484557
Execute130221752021-08-14 8:26:511266 days ago1628929611IN
0xBCc4b939...0570C5124
0 ETH0.0480744448
Execute128045132021-07-11 6:52:051300 days ago1625986325IN
0xBCc4b939...0570C5124
0 ETH0.0004477913.32
Execute127809462021-07-07 14:55:271304 days ago1625669727IN
0xBCc4b939...0570C5124
0 ETH0.0016741749.8
Execute127533082021-07-03 7:36:351308 days ago1625297795IN
0xBCc4b939...0570C5124
0 ETH0.0005580516.6
Execute127469102021-07-02 7:40:131309 days ago1625211613IN
0xBCc4b939...0570C5124
0 ETH0.0003361810
Execute127405042021-07-01 7:46:181310 days ago1625125578IN
0xBCc4b939...0570C5124
0 ETH0.0237883228
Execute127340972021-06-30 7:51:401311 days ago1625039500IN
0xBCc4b939...0570C5124
0 ETH0.0273300831.889
Execute127276962021-06-29 7:37:201312 days ago1624952240IN
0xBCc4b939...0570C5124
0 ETH0.01284415
Execute127212882021-06-28 7:49:081313 days ago1624866548IN
0xBCc4b939...0570C5124
0 ETH0.0007734923
Execute127212882021-06-28 7:49:081313 days ago1624866548IN
0xBCc4b939...0570C5124
0 ETH0.019540423
Execute127020712021-06-25 7:54:491316 days ago1624607689IN
0xBCc4b939...0570C5124
0 ETH0.0003699311
Execute127020702021-06-25 7:54:121316 days ago1624607652IN
0xBCc4b939...0570C5124
0 ETH0.0093128411
Execute126956432021-06-24 7:52:161317 days ago1624521136IN
0xBCc4b939...0570C5124
0 ETH0.0003697911
Execute126892002021-06-23 8:00:001318 days ago1624435200IN
0xBCc4b939...0570C5124
0 ETH0.0373816544
Execute126827892021-06-22 7:47:021319 days ago1624348022IN
0xBCc4b939...0570C5124
0 ETH0.0245520329
Execute126763782021-06-21 7:44:191320 days ago1624261459IN
0xBCc4b939...0570C5124
0 ETH0.061803473
Execute126699492021-06-20 7:37:271321 days ago1624174647IN
0xBCc4b939...0570C5124
0 ETH0.0102844512
Execute126635082021-06-19 7:33:591322 days ago1624088039IN
0xBCc4b939...0570C5124
0 ETH0.0004370313
Execute126571022021-06-18 7:19:251323 days ago1624000765IN
0xBCc4b939...0570C5124
0 ETH0.0101949912
Execute126506712021-06-17 7:40:071324 days ago1623915607IN
0xBCc4b939...0570C5124
0 ETH0.0110445713
Execute126442272021-06-16 7:44:511325 days ago1623829491IN
0xBCc4b939...0570C5124
0 ETH0.0004034112
Execute126377982021-06-15 7:49:311326 days ago1623743371IN
0xBCc4b939...0570C5124
0 ETH0.0111414913
Execute126313942021-06-14 8:05:501327 days ago1623657950IN
0xBCc4b939...0570C5124
0 ETH0.0101949912
Execute126249892021-06-13 8:22:381328 days ago1623572558IN
0xBCc4b939...0570C5124
0 ETH0.0084958310
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
130413812021-08-17 7:28:241263 days ago1629185304
0xBCc4b939...0570C5124
0.80233907 ETH
130413812021-08-17 7:28:241263 days ago1629185304
0xBCc4b939...0570C5124
0.05495473 ETH
130413812021-08-17 7:28:241263 days ago1629185304
0xBCc4b939...0570C5124
0.24180081 ETH
130413812021-08-17 7:28:241263 days ago1629185304
0xBCc4b939...0570C5124
1.09909462 ETH
130349812021-08-16 7:43:521264 days ago1629099832
0xBCc4b939...0570C5124
0.84418224 ETH
130349812021-08-16 7:43:521264 days ago1629099832
0xBCc4b939...0570C5124
0.0578207 ETH
130349812021-08-16 7:43:521264 days ago1629099832
0xBCc4b939...0570C5124
0.25441108 ETH
130349812021-08-16 7:43:521264 days ago1629099832
0xBCc4b939...0570C5124
1.15641403 ETH
130285792021-08-15 8:09:431265 days ago1629014983
0xBCc4b939...0570C5124
0.82116471 ETH
130285792021-08-15 8:09:431265 days ago1629014983
0xBCc4b939...0570C5124
0.05624415 ETH
130285792021-08-15 8:09:431265 days ago1629014983
0xBCc4b939...0570C5124
0.24747429 ETH
130285792021-08-15 8:09:431265 days ago1629014983
0xBCc4b939...0570C5124
1.12488317 ETH
130221752021-08-14 8:26:511266 days ago1628929611
0xBCc4b939...0570C5124
0.84764356 ETH
130221752021-08-14 8:26:511266 days ago1628929611
0xBCc4b939...0570C5124
0.05805777 ETH
130221752021-08-14 8:26:511266 days ago1628929611
0xBCc4b939...0570C5124
0.25545422 ETH
130221752021-08-14 8:26:511266 days ago1628929611
0xBCc4b939...0570C5124
0.02369705 ETH
130221752021-08-14 8:26:511266 days ago1628929611
0xBCc4b939...0570C5124
1.18485262 ETH
130221682021-08-14 8:24:591266 days ago1628929499
0xBCc4b939...0570C5124
0.84879519 ETH
130221682021-08-14 8:24:591266 days ago1628929499
0xBCc4b939...0570C5124
0.05813665 ETH
130221682021-08-14 8:24:591266 days ago1628929499
0xBCc4b939...0570C5124
0.25580129 ETH
130221682021-08-14 8:24:591266 days ago1628929499
0xBCc4b939...0570C5124
1.16273313 ETH
130157682021-08-13 8:34:011267 days ago1628843641
0xBCc4b939...0570C5124
0.92003036 ETH
130157682021-08-13 8:34:011267 days ago1628843641
0xBCc4b939...0570C5124
0.06301577 ETH
130157682021-08-13 8:34:011267 days ago1628843641
0xBCc4b939...0570C5124
0.27726942 ETH
130157682021-08-13 8:34:011267 days ago1628843641
0xBCc4b939...0570C5124
1.26031556 ETH
View All Internal Transactions
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x0da367ac...7De9Bf2cf
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
FixedInflation

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-02-22
*/

// File: contracts\fixed-inflation\FixedInflationData.sol

//SPDX-License-Identifier: MIT
pragma solidity ^0.7.6;

struct FixedInflationEntry {
    string name;
    uint256 blockInterval;
    uint256 lastBlock;
    uint256 callerRewardPercentage;
}

struct FixedInflationOperation {

    address inputTokenAddress;
    uint256 inputTokenAmount;
    bool inputTokenAmountIsPercentage;
    bool inputTokenAmountIsByMint;

    address ammPlugin;
    address[] liquidityPoolAddresses;
    address[] swapPath;
    bool enterInETH;
    bool exitInETH;

    address[] receivers;
    uint256[] receiversPercentages;
}

// File: contracts\fixed-inflation\IFixedInflationExtension.sol

//SPDX_License_Identifier: MIT
pragma solidity ^0.7.6;
pragma abicoder v2;


interface IFixedInflationExtension {

    function init(address host) external;

    function setHost(address host) external;

    function data() external view returns(address fixedInflationContract, address host);

    function receiveTokens(address[] memory tokenAddresses, uint256[] memory transferAmounts, uint256[] memory amountsToMint) external;

    function flushBack(address[] memory tokenAddresses) external;

    function deactivationByFailure() external;

    function setEntry(FixedInflationEntry memory entryData, FixedInflationOperation[] memory operations) external;

    function active() external view returns(bool);

    function setActive(bool _active) external;
}

// File: contracts\fixed-inflation\util\IERC20.sol

//SPDX_License_Identifier: MIT
pragma solidity ^0.7.6;

interface IERC20 {
    function totalSupply() external view returns(uint256);
    function balanceOf(address account) external view returns (uint256);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    function decimals() external view returns (uint8);
}

// File: contracts\amm-aggregator\common\AMMData.sol

//SPDX_License_Identifier: MIT
pragma solidity ^0.7.6;

struct LiquidityPoolData {
    address liquidityPoolAddress;
    uint256 amount;
    address tokenAddress;
    bool amountIsLiquidityPool;
    bool involvingETH;
    address receiver;
}

struct SwapData {
    bool enterInETH;
    bool exitInETH;
    address[] liquidityPoolAddresses;
    address[] path;
    address inputToken;
    uint256 amount;
    address receiver;
}

// File: contracts\amm-aggregator\common\IAMM.sol

//SPDX_License_Identifier: MIT
pragma solidity ^0.7.6;
//pragma abicoder v2;


interface IAMM {

    event NewLiquidityPoolAddress(address indexed);

    function info() external view returns(string memory name, uint256 version);

    function data() external view returns(address ethereumAddress, uint256 maxTokensPerLiquidityPool, bool hasUniqueLiquidityPools);

    function balanceOf(address liquidityPoolAddress, address owner) external view returns(uint256, uint256[] memory, address[] memory);

    function byLiquidityPool(address liquidityPoolAddress) external view returns(uint256, uint256[] memory, address[] memory);

    function byTokens(address[] calldata liquidityPoolTokens) external view returns(uint256, uint256[] memory, address, address[] memory);

    function byPercentage(address liquidityPoolAddress, uint256 numerator, uint256 denominator) external view returns (uint256, uint256[] memory, address[] memory);

    function byLiquidityPoolAmount(address liquidityPoolAddress, uint256 liquidityPoolAmount) external view returns(uint256[] memory, address[] memory);

    function byTokenAmount(address liquidityPoolAddress, address tokenAddress, uint256 tokenAmount) external view returns(uint256, uint256[] memory, address[] memory);

    function createLiquidityPoolAndAddLiquidity(address[] calldata tokenAddresses, uint256[] calldata amounts, bool involvingETH, address receiver) external payable returns(uint256, uint256[] memory, address, address[] memory);

    function addLiquidity(LiquidityPoolData calldata data) external payable returns(uint256, uint256[] memory, address[] memory);
    function addLiquidityBatch(LiquidityPoolData[] calldata data) external payable returns(uint256[] memory, uint256[][] memory, address[][] memory);

    function removeLiquidity(LiquidityPoolData calldata data) external returns(uint256, uint256[] memory, address[] memory);
    function removeLiquidityBatch(LiquidityPoolData[] calldata data) external returns(uint256[] memory, uint256[][] memory, address[][] memory);

    function getSwapOutput(address tokenAddress, uint256 tokenAmount, address[] calldata, address[] calldata path) view external returns(uint256[] memory);

    function swapLiquidity(SwapData calldata data) external payable returns(uint256);
    function swapLiquidityBatch(SwapData[] calldata data) external payable returns(uint256[] memory);
}

// File: contracts\fixed-inflation\IFixedInflationFactory.sol

//SPDX_License_Identifier: MIT
pragma solidity ^0.7.6;

interface IFixedInflationFactory {

    event ExtensionCloned(address indexed);

    function fixedInflationDefaultExtension() external view returns (address);

    function feePercentageInfo() external view returns (uint256, address);

    function cloneFixedInflationDefaultExtension() external returns(address clonedExtension);
}

// File: contracts\fixed-inflation\IFixedInflation.sol

//SPDX_License_Identifier: MIT
pragma solidity ^0.7.6;
//pragma abicoder v2;


interface IFixedInflation {

    function setEntry(FixedInflationEntry memory entryData, FixedInflationOperation[] memory operations) external;

    function flushBack(address[] memory tokenAddresses) external;
}

// File: contracts\fixed-inflation\FixedInflation.sol

//SPDX_License_Identifier: MIT
pragma solidity ^0.7.6;
//pragma abicoder v2;







contract FixedInflation is IFixedInflation {

    event Executed(bool);

    uint256 public constant ONE_HUNDRED = 1e18;

    address public _factory;

    mapping(address => uint256) private _tokenIndex;
    address[] private _tokensToTransfer;
    uint256[] private _tokenTotalSupply;
    uint256[] private _tokenAmounts;
    uint256[] private _tokenMintAmounts;
    uint256[] private _tokenBalanceOfBefore;

    address public extension;

    FixedInflationEntry private _entry;
    FixedInflationOperation[] private _operations;

    function init(address _extension, bytes memory extensionPayload, FixedInflationEntry memory newEntry, FixedInflationOperation[] memory newOperations) public returns(bytes memory extensionInitResult) {
        require(_factory == address(0), "Already init");
        require(_extension != address(0), "Blank extension");
        _factory = msg.sender;
        extension = _extension;
        if(_extension == address(0)) {
            _extension = _clone(IFixedInflationFactory(_factory).fixedInflationDefaultExtension());
        }
        if(keccak256(extensionPayload) != keccak256("")) {
            extensionInitResult = _call(_extension, extensionPayload);
        }
        _set(newEntry, newOperations);
    }

    receive() external payable {
    }

    modifier extensionOnly() {
        require(msg.sender == extension, "Unauthorized");
        _;
    }

    modifier activeExtensionOnly() {
        require(IFixedInflationExtension(extension).active(), "not active extension");
        _;
    }

    function entry() public view returns(FixedInflationEntry memory, FixedInflationOperation[] memory) {
        return (_entry, _operations);
    }

    function setEntry(FixedInflationEntry memory newEntry, FixedInflationOperation[] memory newOperations) public override extensionOnly {
        _set(newEntry, newOperations);
    }

    function nextBlock() public view returns(uint256) {
        return _entry.lastBlock == 0 ? block.number : (_entry.lastBlock + _entry.blockInterval);
    }

    function flushBack(address[] memory tokenAddresses) public override extensionOnly {
        for(uint256 i = 0; i < tokenAddresses.length; i++) {
            _transferTo(tokenAddresses[i], extension, _balanceOf(tokenAddresses[i]));
        }
    }

    function execute(bool earnByAmounts) public activeExtensionOnly returns(bool executed) {
        require(block.number >= nextBlock(), "Too early to execute");
        require(_operations.length > 0, "No operations");
        emit Executed(executed = _ensureExecute());
        if(executed) {
            _entry.lastBlock = block.number;
            _execute(earnByAmounts, msg.sender);
        } else {
            try IFixedInflationExtension(extension).deactivationByFailure() {
            } catch {
            }
        }
        _clearVars();
    }

    function _ensureExecute() private returns(bool) {
        _collectFixedInflationOperationsTokens();
        try IFixedInflationExtension(extension).receiveTokens(_tokensToTransfer, _tokenAmounts, _tokenMintAmounts) {
        } catch {
            return false;
        }
        for(uint256 i = 0; i < _tokensToTransfer.length; i++) {
            if(_balanceOf(_tokensToTransfer[i]) != (_tokenBalanceOfBefore[i] + _tokenAmounts[i] + _tokenMintAmounts[i])) {
                return false;
            }
        }
        return true;
    }

    function _collectFixedInflationOperationsTokens() private {
        for(uint256 i = 0; i < _operations.length; i++) {
            FixedInflationOperation memory operation = _operations[i];
            _collectTokenData(operation.ammPlugin != address(0) && operation.enterInETH ? address(0) : operation.inputTokenAddress, operation.inputTokenAmount, operation.inputTokenAmountIsPercentage, operation.inputTokenAmountIsByMint);
        }
    }

    function _collectTokenData(address inputTokenAddress, uint256 inputTokenAmount, bool inputTokenAmountIsPercentage, bool inputTokenAmountIsByMint) private {
        if(inputTokenAmount == 0) {
            return;
        }

        uint256 position = _tokenIndex[inputTokenAddress];

        if(_tokensToTransfer.length == 0 || _tokensToTransfer[position] != inputTokenAddress) {
            _tokenIndex[inputTokenAddress] = (position = _tokensToTransfer.length);
            _tokensToTransfer.push(inputTokenAddress);
            _tokenAmounts.push(0);
            _tokenMintAmounts.push(0);
            _tokenBalanceOfBefore.push(_balanceOf(inputTokenAddress));
            _tokenTotalSupply.push(0);
        }
        uint256 amount = _calculateTokenAmount(inputTokenAddress, inputTokenAmount, inputTokenAmountIsPercentage);
        if(inputTokenAmountIsByMint) {
            _tokenMintAmounts[position] = _tokenMintAmounts[position] + amount;
        } else {
            _tokenAmounts[position] = _tokenAmounts[position] + amount;
        }
    }

    function _balanceOf(address tokenAddress) private view returns (uint256) {
        if(tokenAddress == address(0)) {
            return address(this).balance;
        }
        return IERC20(tokenAddress).balanceOf(address(this));
    }

    function _calculateTokenAmount(address tokenAddress, uint256 tokenAmount, bool tokenAmountIsPercentage) private returns(uint256) {
        if(!tokenAmountIsPercentage) {
            return tokenAmount;
        }
        uint256 tokenIndex = _tokenIndex[tokenAddress];
        _tokenTotalSupply[tokenIndex] = _tokenTotalSupply[tokenIndex] != 0 ? _tokenTotalSupply[tokenIndex] : IERC20(tokenAddress).totalSupply();
        return (_tokenTotalSupply[tokenIndex] * ((tokenAmount * 1e18) / ONE_HUNDRED)) / 1e18;
    }

    function _clearVars() private {
        for(uint256 i = 0; i < _tokensToTransfer.length; i++) {
            delete _tokenIndex[_tokensToTransfer[i]];
        }
        delete _tokensToTransfer;
        delete _tokenTotalSupply;
        delete _tokenAmounts;
        delete _tokenMintAmounts;
        delete _tokenBalanceOfBefore;
    }

    function _execute(bool earnByInput, address rewardReceiver) private {
        for(uint256 i = 0 ; i < _operations.length; i++) {
            FixedInflationOperation memory operation = _operations[i];
            uint256 amountIn = _calculateTokenAmount(operation.inputTokenAddress, operation.inputTokenAmount, operation.inputTokenAmountIsPercentage);
            if(operation.ammPlugin == address(0)) {
                _transferTo(operation.inputTokenAddress, amountIn, rewardReceiver, _entry.callerRewardPercentage, operation.receivers, operation.receiversPercentages);
            } else {
                _swap(operation, amountIn, rewardReceiver, _entry.callerRewardPercentage, earnByInput);
            }
        }
    }

    function _swap(FixedInflationOperation memory operation, uint256 amountIn, address rewardReceiver, uint256 callerRewardPercentage, bool earnByInput) private {

        uint256 inputReward = earnByInput ? _calculateRewardPercentage(amountIn, callerRewardPercentage) : 0;

        (address ethereumAddress,,) = IAMM(operation.ammPlugin).data();

        if(operation.exitInETH) {
            operation.swapPath[operation.swapPath.length - 1] = ethereumAddress;
        }

        address outputToken = operation.swapPath[operation.swapPath.length - 1];

        SwapData memory swapData = SwapData(
            operation.enterInETH,
            operation.exitInETH,
            operation.liquidityPoolAddresses,
            operation.swapPath,
            operation.enterInETH ? ethereumAddress : operation.inputTokenAddress,
            amountIn - inputReward,
            address(this)
        );

        if(swapData.inputToken != address(0) && !swapData.enterInETH) {
            _safeApprove(swapData.inputToken, operation.ammPlugin, swapData.amount);
        }

        uint256 amountOut;
        if(swapData.enterInETH) {
            amountOut = IAMM(operation.ammPlugin).swapLiquidity{value : amountIn}(swapData);
        } else {
            amountOut = IAMM(operation.ammPlugin).swapLiquidity(swapData);
        }

        if(earnByInput) {
            _transferTo(operation.enterInETH ? address(0) : operation.inputTokenAddress, rewardReceiver, inputReward);
        }
        _transferTo(operation.exitInETH ? address(0) : outputToken, amountOut, earnByInput ? address(0) : rewardReceiver, earnByInput ? 0 : callerRewardPercentage, operation.receivers, operation.receiversPercentages);
    }

    function _calculateRewardPercentage(uint256 totalAmount, uint256 rewardPercentage) private pure returns (uint256) {
        return (totalAmount * ((rewardPercentage * 1e18) / ONE_HUNDRED)) / 1e18;
    }

    function _transferTo(address erc20TokenAddress, uint256 totalAmount, address rewardReceiver, uint256 callerRewardPercentage, address[] memory receivers, uint256[] memory receiversPercentages) private {
        uint256 availableAmount = totalAmount;

        uint256 currentPartialAmount = rewardReceiver == address(0) ? 0 : _calculateRewardPercentage(availableAmount, callerRewardPercentage);
        _transferTo(erc20TokenAddress, rewardReceiver, currentPartialAmount);
        availableAmount -= currentPartialAmount;

        (uint256 dfoFeePercentage, address dfoWallet) = IFixedInflationFactory(_factory).feePercentageInfo();
        currentPartialAmount = dfoFeePercentage == 0 || dfoWallet == address(0) ? 0 : _calculateRewardPercentage(availableAmount, dfoFeePercentage);
        _transferTo(erc20TokenAddress, dfoWallet, currentPartialAmount);
        availableAmount -= currentPartialAmount;

        uint256 stillAvailableAmount = availableAmount;

        for(uint256 i = 0; i < receivers.length - 1; i++) {
            _transferTo(erc20TokenAddress, receivers[i], currentPartialAmount = _calculateRewardPercentage(stillAvailableAmount, receiversPercentages[i]));
            availableAmount -= currentPartialAmount;
        }

        _transferTo(erc20TokenAddress, receivers[receivers.length - 1], availableAmount);
    }

    function _transferTo(address erc20TokenAddress, address to, uint256 value) private {
        if(value == 0) {
            return;
        }
        if(erc20TokenAddress == address(0)) {
            (bool result,) = to.call{value:value}("");
            require(result, "ETH transfer failed");
            return;
        }
        _safeTransfer(erc20TokenAddress, to, value);
    }

    function _safeApprove(address erc20TokenAddress, address to, uint256 value) internal {
        bytes memory returnData = _call(erc20TokenAddress, abi.encodeWithSelector(IERC20(erc20TokenAddress).approve.selector, to, value));
        require(returnData.length == 0 || abi.decode(returnData, (bool)), 'APPROVE_FAILED');
    }

    function _safeTransfer(address erc20TokenAddress, address to, uint256 value) private {
        bytes memory returnData = _call(erc20TokenAddress, abi.encodeWithSelector(IERC20(erc20TokenAddress).transfer.selector, to, value));
        require(returnData.length == 0 || abi.decode(returnData, (bool)), 'TRANSFER_FAILED');
    }

    function _call(address location, bytes memory payload) private returns(bytes memory returnData) {
        assembly {
            let result := call(gas(), location, 0, add(payload, 0x20), mload(payload), 0, 0)
            let size := returndatasize()
            returnData := mload(0x40)
            mstore(returnData, size)
            let returnDataPayloadStart := add(returnData, 0x20)
            returndatacopy(returnDataPayloadStart, 0, size)
            mstore(0x40, add(returnDataPayloadStart, size))
            switch result case 0 {revert(returnDataPayloadStart, size)}
        }
    }

    function _set(FixedInflationEntry memory fixedInflationEntry, FixedInflationOperation[] memory operations) private {
        require(keccak256(bytes(fixedInflationEntry.name)) != keccak256(""), "Name");
        require(fixedInflationEntry.blockInterval > 0, "Interval");
        require(fixedInflationEntry.callerRewardPercentage < ONE_HUNDRED, "Percentage");
        _entry = fixedInflationEntry;
        _setOperations(operations);
    }

    function _setOperations(FixedInflationOperation[] memory operations) private {
        delete _operations;
        for(uint256 i = 0; i < operations.length; i++) {
            FixedInflationOperation memory operation = operations[i];
            require(operation.receivers.length > 0, "No receivers");
            require(operation.receiversPercentages.length == (operation.receivers.length - 1), "Last receiver percentage is calculated automatically");
            uint256 percentage = 0;
            for(uint256 j = 0; j < operation.receivers.length - 1; j++) {
                percentage += operation.receiversPercentages[j];
                require(operation.receivers[j] != address(0), "Void receiver");
            }
            require(operation.receivers[operation.receivers.length - 1] != address(0), "Void receiver");
            require(percentage < ONE_HUNDRED, "More than one hundred");
            _operations.push(operation);
        }
    }

    /** @dev clones the input contract address and returns the copied contract address.
     * @param original address of the original contract.
     * @return copy copied contract address.
     */
    function _clone(address original) private returns (address copy) {
        assembly {
            mstore(
                0,
                or(
                    0x5880730000000000000000000000000000000000000000803b80938091923cF3,
                    mul(original, 0x1000000000000000000)
                )
            )
            copy := create(0, 0, 32)
            switch extcodesize(copy)
                case 0 {
                    invalid()
                }
        }
    }
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"","type":"bool"}],"name":"Executed","type":"event"},{"inputs":[],"name":"ONE_HUNDRED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"entry","outputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"blockInterval","type":"uint256"},{"internalType":"uint256","name":"lastBlock","type":"uint256"},{"internalType":"uint256","name":"callerRewardPercentage","type":"uint256"}],"internalType":"struct FixedInflationEntry","name":"","type":"tuple"},{"components":[{"internalType":"address","name":"inputTokenAddress","type":"address"},{"internalType":"uint256","name":"inputTokenAmount","type":"uint256"},{"internalType":"bool","name":"inputTokenAmountIsPercentage","type":"bool"},{"internalType":"bool","name":"inputTokenAmountIsByMint","type":"bool"},{"internalType":"address","name":"ammPlugin","type":"address"},{"internalType":"address[]","name":"liquidityPoolAddresses","type":"address[]"},{"internalType":"address[]","name":"swapPath","type":"address[]"},{"internalType":"bool","name":"enterInETH","type":"bool"},{"internalType":"bool","name":"exitInETH","type":"bool"},{"internalType":"address[]","name":"receivers","type":"address[]"},{"internalType":"uint256[]","name":"receiversPercentages","type":"uint256[]"}],"internalType":"struct FixedInflationOperation[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"earnByAmounts","type":"bool"}],"name":"execute","outputs":[{"internalType":"bool","name":"executed","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"extension","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"tokenAddresses","type":"address[]"}],"name":"flushBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_extension","type":"address"},{"internalType":"bytes","name":"extensionPayload","type":"bytes"},{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"blockInterval","type":"uint256"},{"internalType":"uint256","name":"lastBlock","type":"uint256"},{"internalType":"uint256","name":"callerRewardPercentage","type":"uint256"}],"internalType":"struct FixedInflationEntry","name":"newEntry","type":"tuple"},{"components":[{"internalType":"address","name":"inputTokenAddress","type":"address"},{"internalType":"uint256","name":"inputTokenAmount","type":"uint256"},{"internalType":"bool","name":"inputTokenAmountIsPercentage","type":"bool"},{"internalType":"bool","name":"inputTokenAmountIsByMint","type":"bool"},{"internalType":"address","name":"ammPlugin","type":"address"},{"internalType":"address[]","name":"liquidityPoolAddresses","type":"address[]"},{"internalType":"address[]","name":"swapPath","type":"address[]"},{"internalType":"bool","name":"enterInETH","type":"bool"},{"internalType":"bool","name":"exitInETH","type":"bool"},{"internalType":"address[]","name":"receivers","type":"address[]"},{"internalType":"uint256[]","name":"receiversPercentages","type":"uint256[]"}],"internalType":"struct FixedInflationOperation[]","name":"newOperations","type":"tuple[]"}],"name":"init","outputs":[{"internalType":"bytes","name":"extensionInitResult","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"nextBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"blockInterval","type":"uint256"},{"internalType":"uint256","name":"lastBlock","type":"uint256"},{"internalType":"uint256","name":"callerRewardPercentage","type":"uint256"}],"internalType":"struct FixedInflationEntry","name":"newEntry","type":"tuple"},{"components":[{"internalType":"address","name":"inputTokenAddress","type":"address"},{"internalType":"uint256","name":"inputTokenAmount","type":"uint256"},{"internalType":"bool","name":"inputTokenAmountIsPercentage","type":"bool"},{"internalType":"bool","name":"inputTokenAmountIsByMint","type":"bool"},{"internalType":"address","name":"ammPlugin","type":"address"},{"internalType":"address[]","name":"liquidityPoolAddresses","type":"address[]"},{"internalType":"address[]","name":"swapPath","type":"address[]"},{"internalType":"bool","name":"enterInETH","type":"bool"},{"internalType":"bool","name":"exitInETH","type":"bool"},{"internalType":"address[]","name":"receivers","type":"address[]"},{"internalType":"uint256[]","name":"receiversPercentages","type":"uint256[]"}],"internalType":"struct FixedInflationOperation[]","name":"newOperations","type":"tuple[]"}],"name":"setEntry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

Deployed Bytecode

0x60806040526004361061008a5760003560e01c80639b8c7c22116100595780639b8c7c2214610133578063bfaa8cca14610155578063c5cc6b6a1461016a578063c854862b1461017f578063f811a30b1461019f57610091565b80632d5537b01461009657806367f239dd146100c157806383788fce146100e4578063972213ad1461010657610091565b3661009157005b600080fd5b3480156100a257600080fd5b506100ab6101cc565b6040516100b891906126e0565b60405180910390f35b3480156100cd57600080fd5b506100d66101db565b6040516100b8929190612a4f565b3480156100f057600080fd5b506100f96104ef565b6040516100b89190612c50565b34801561011257600080fd5b506101266101213660046124fe565b61050e565b6040516100b89190612787565b34801561013f57600080fd5b5061015361014e366004612536565b6106c0565b005b34801561016157600080fd5b506100f96106f8565b34801561017657600080fd5b506100ab610704565b34801561018b57600080fd5b5061015361019a3660046124cb565b610713565b3480156101ab57600080fd5b506101bf6101ba3660046123dc565b61079f565b6040516100b89190612792565b6007546001600160a01b031681565b6101e3611e6b565b604080516008805460a06020601f600260001961010060018716150201909416939093049283018190040284018101909452608083018181526060949293600c939092859284929091849184018282801561027f5780601f106102545761010080835404028352916020019161027f565b820191906000526020600020905b81548152906001019060200180831161026257829003601f168201915b505050505081526020016001820154815260200160028201548152602001600382015481525050915080805480602002602001604051908101604052809291908181526020016000905b828210156104e157600084815260209081902060408051610160810182526008860290920180546001600160a01b039081168452600182015484860152600282015460ff808216151586860152610100820416151560608601526201000090041660808401526003810180548351818702810187019094528084529394919360a08601939283018282801561038757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610369575b50505050508152602001600482018054806020026020016040519081016040528092919081815260200182805480156103e957602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116103cb575b5050509183525050600582015460ff8082161515602080850191909152610100909204161515604080840191909152600684018054825181850281018501909352808352606090940193919290919083018282801561047157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610453575b50505050508152602001600782018054806020026020016040519081016040528092919081815260200182805480156104c957602002820191906000526020600020905b8154815260200190600101908083116104b5575b505050505081525050815260200190600101906102c9565b505050509050915091509091565b600a546000901561050657600954600a5401610508565b435b90505b90565b6007546040805163017d862f60e11b815290516000926001600160a01b0316916302fb0c5e916004808301926020929190829003018186803b15801561055357600080fd5b505afa158015610567573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058b919061251a565b6105b05760405162461bcd60e51b81526004016105a7906127a5565b60405180910390fd5b6105b86104ef565b4310156105d75760405162461bcd60e51b81526004016105a790612a21565b600c546105f65760405162461bcd60e51b81526004016105a7906128f0565b7f80e57eda879f13a99b66f28d0393488a683e123e369db82e85ccc3dcb2fd6cb261061f6108f0565b91508160405161062f9190612787565b60405180910390a180156106505743600a5561064b8233610a07565b6106b3565b600760009054906101000a90046001600160a01b03166001600160a01b031663a65b99086040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156106a057600080fd5b505af19250505080156106b1575060015b505b6106bb610c9c565b919050565b6007546001600160a01b031633146106ea5760405162461bcd60e51b81526004016105a7906127d3565b6106f48282610d26565b5050565b670de0b6b3a764000081565b6000546001600160a01b031681565b6007546001600160a01b0316331461073d5760405162461bcd60e51b81526004016105a7906127d3565b60005b81518110156106f45761079782828151811061075857fe5b6020026020010151600760009054906101000a90046001600160a01b031661079285858151811061078557fe5b6020026020010151610e02565b610e9b565b600101610740565b6000546060906001600160a01b0316156107cb5760405162461bcd60e51b81526004016105a7906129a6565b6001600160a01b0385166107f15760405162461bcd60e51b81526004016105a7906128a3565b600080546001600160a01b03199081163317909155600780546001600160a01b0388169216821790556108a457600054604080516354c05cef60e11b815290516108a1926001600160a01b03169163a980b9de916004808301926020929190829003018186803b15801561086457600080fd5b505afa158015610878573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089c91906123c0565b610f40565b94505b835160208501207fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470146108de576108db8585610f82565b90505b6108e88383610d26565b949350505050565b60006108fa610fc4565b60075460405163eb26061960e01b81526001600160a01b039091169063eb2606199061093090600290600490600590820161270d565b600060405180830381600087803b15801561094a57600080fd5b505af192505050801561095b575060015b6109675750600061050b565b60005b6002548110156109ff576005818154811061098157fe5b90600052602060002001546004828154811061099957fe5b9060005260206000200154600683815481106109b157fe5b906000526020600020015401016109e8600283815481106109ce57fe5b6000918252602090912001546001600160a01b0316610e02565b146109f757600091505061050b565b60010161096a565b506001905090565b60005b600c54811015610c97576000600c8281548110610a2357fe5b60009182526020918290206040805161016081018252600890930290910180546001600160a01b039081168452600182015484860152600282015460ff808216151586860152610100820416151560608601526201000090041660808401526003810180548351818702810187019094528084529394919360a086019392830182828015610ada57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610abc575b5050505050815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b3c57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610b1e575b5050509183525050600582015460ff80821615156020808501919091526101009092041615156040808401919091526006840180548251818502810185019093528083526060909401939192909190830182828015610bc457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610ba6575b5050505050815260200160078201805480602002602001604051908101604052809291908181526020018280548015610c1c57602002820191906000526020600020905b815481526020019060010190808311610c08575b50505050508152505090506000610c4082600001518360200151846040015161123d565b60808301519091506001600160a01b0316610c7b57610c7682600001518286600860030154866101200151876101400151611367565b610c8d565b610c8d828286600860030154896114e2565b5050600101610a0a565b505050565b60005b600254811015610ce7576001600060028381548110610cba57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001812055600101610c9f565b50610cf460026000611e93565b610d0060036000611e93565b610d0c60046000611e93565b610d1860056000611e93565b610d2460066000611e93565b565b815180516020909101207fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4701415610d6f5760405162461bcd60e51b81526004016105a790612917565b6000826020015111610d935760405162461bcd60e51b81526004016105a790612984565b670de0b6b3a7640000826060015110610dbe5760405162461bcd60e51b81526004016105a7906128cc565b815180518391600891610dd8918391602090910190611eb1565b5060208201516001820155604082015160028201556060909101516003909101556106f48161181d565b60006001600160a01b038216610e195750476106bb565b6040516370a0823160e01b81526001600160a01b038316906370a0823190610e459030906004016126e0565b60206040518083038186803b158015610e5d57600080fd5b505afa158015610e71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e959190612597565b92915050565b80610ea557610c97565b6001600160a01b038316610f35576000826001600160a01b031682604051610ecc9061050b565b60006040518083038185875af1925050503d8060008114610f09576040519150601f19603f3d011682016040523d82523d6000602084013e610f0e565b606091505b5050905080610f2f5760405162461bcd60e51b81526004016105a7906129cc565b50610c97565b610c97838383611b55565b60006901000000000000000000820268803b80938091923cf36258807360e81b01176000526020600080f09050803b8015610f7a57610f7c565bfe5b50919050565b60606000808351602085016000875af13d604051925080835260208301816000823e808201604052828015610fb657610fba565b8282fd5b5050505092915050565b60005b600c5481101561123a576000600c8281548110610fe057fe5b60009182526020918290206040805161016081018252600890930290910180546001600160a01b039081168452600182015484860152600282015460ff808216151586860152610100820416151560608601526201000090041660808401526003810180548351818702810187019094528084529394919360a08601939283018282801561109757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611079575b50505050508152602001600482018054806020026020016040519081016040528092919081815260200182805480156110f957602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116110db575b5050509183525050600582015460ff8082161515602080850191909152610100909204161515604080840191909152600684018054825181850281018501909352808352606090940193919290919083018282801561118157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611163575b50505050508152602001600782018054806020026020016040519081016040528092919081815260200182805480156111d957602002820191906000526020600020905b8154815260200190600101908083116111c5575b505050505081525050905061123160006001600160a01b031682608001516001600160a01b03161415801561120f57508160e001515b61121a57815161121d565b60005b826020015183604001518460600151611bf0565b50600101610fc7565b50565b60008161124b575081611360565b6001600160a01b038416600090815260016020526040902054600380548290811061127257fe5b9060005260206000200154600014156112fb57846001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156112be57600080fd5b505afa1580156112d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f69190612597565b611314565b6003818154811061130857fe5b90600052602060002001545b6003828154811061132157fe5b600091825260209091200155670de0b6b3a764000080858102046003838154811061134857fe5b9060005260206000200154028161135b57fe5b049150505b9392505050565b8460006001600160a01b03861615611388576113838286611dec565b61138b565b60005b9050611398888783610e9b565b6000805460408051631f9de8b560e21b81528151958590039584936001600160a01b031692637e77a2d49260048082019391829003018186803b1580156113de57600080fd5b505afa1580156113f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141691906125af565b91509150816000148061143057506001600160a01b038116155b6114435761143e8483611dec565b611446565b60005b92506114538a8285610e9b565b92829003928360005b60018851038110156114b2576114a58c89838151811061147857fe5b602002602001015161149d858b868151811061149057fe5b6020026020010151611dec565b975087610e9b565b948490039460010161145c565b506114d58b8860018a5103815181106114c757fe5b602002602001015187610e9b565b5050505050505050505050565b6000816114f05760006114fa565b6114fa8584611dec565b9050600086608001516001600160a01b03166373d4a13a6040518163ffffffff1660e01b815260040160606040518083038186803b15801561153b57600080fd5b505afa15801561154f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115739190612489565b50509050866101000151156115bb5760c08701518051829190600019810190811061159a57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250505b60c087015180516000919060001981019081106115d457fe5b6020026020010151905060006040518060e001604052808a60e00151151581526020018a6101000151151581526020018a60a0015181526020018a60c0015181526020018a60e00151611628578a5161162a565b845b6001600160a01b03168152602001858a038152602001306001600160a01b0316815250905060006001600160a01b031681608001516001600160a01b03161415801561167557508051155b156116915761169181608001518a608001518360a00151611e0d565b8051600090156117255789608001516001600160a01b0316635ff94cbf8a846040518363ffffffff1660e01b81526004016116cc9190612bc5565b6020604051808303818588803b1580156116e557600080fd5b505af11580156116f9573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061171e9190612597565b90506117aa565b89608001516001600160a01b0316635ff94cbf836040518263ffffffff1660e01b81526004016117559190612bc5565b602060405180830381600087803b15801561176f57600080fd5b505af1158015611783573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a79190612597565b90505b85156117cd576117cd8a60e001516117c3578a516117c6565b60005b8987610e9b565b6118118a61010001516117e057836117e3565b60005b82886117ef578a6117f2565b60005b896117fd578a611800565b60005b8e61012001518f6101400151611367565b50505050505050505050565b611829600c6000611f3d565b60005b81518110156106f457600082828151811061184357fe5b60200260200101519050600081610120015151116118735760405162461bcd60e51b81526004016105a79061295e565b6001816101200151510381610140015151146118a15760405162461bcd60e51b81526004016105a79061284f565b6000805b600183610120015151038110156119265782610140015181815181106118c757fe5b60200260200101518201915060006001600160a01b031683610120015182815181106118ef57fe5b60200260200101516001600160a01b0316141561191e5760405162461bcd60e51b81526004016105a7906127f9565b6001016118a5565b50610120820151805160009190600019810190811061194157fe5b60200260200101516001600160a01b031614156119705760405162461bcd60e51b81526004016105a7906127f9565b670de0b6b3a764000081106119975760405162461bcd60e51b81526004016105a790612820565b600c8054600181018255600091909152825160089091027fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7810180546001600160a01b039384166001600160a01b03199091161781556020808601517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c884015560408601517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c984018054606089015160808a0151909716620100000262010000600160b01b03199715156101000261ff001994151560ff19909316929092179390931617959095161790935560a0850151805186949293611abe937fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8ca909101920190611f5e565b5060c08201518051611ada916004840191602090910190611f5e565b5060e08201516005820180546101008086015115150261ff001993151560ff1990921691909117929092169190911790556101208201518051611b27916006840191602090910190611f5e565b506101408201518051611b44916007840191602090910190611fb3565b50506001909301925061182c915050565b6000611bad8463a9059cbb60e01b8585604051602401611b769291906126f4565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610f82565b9050805160001480611bce575080806020019051810190611bce919061251a565b611bea5760405162461bcd60e51b81526004016105a790612935565b50505050565b82611bfa57611bea565b6001600160a01b0384166000908152600160205260409020546002541580611c4c5750846001600160a01b031660028281548110611c3457fe5b6000918252602090912001546001600160a01b031614155b15611d635750600280546001600160a01b038616600081815260016020819052604082208490558084019094557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace830180546001600160a01b031916909217909155600480548085019091557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0181905560058054938401815581527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0909201919091556006611d1b86610e02565b8154600181810184556000938452602084209091019190915560038054918201815582527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b01555b6000611d7086868661123d565b90508215611db0578060058381548110611d8657fe5b90600052602060002001540160058381548110611d9f57fe5b600091825260209091200155611de4565b8060048381548110611dbe57fe5b90600052602060002001540160048381548110611dd757fe5b6000918252602090912001555b505050505050565b6000670de0b6b3a76400008083810204840281611e0557fe5b049392505050565b6000611e2e8463095ea7b360e01b8585604051602401611b769291906126f4565b9050805160001480611e4f575080806020019051810190611e4f919061251a565b611bea5760405162461bcd60e51b81526004016105a7906129f9565b6040518060800160405280606081526020016000815260200160008152602001600081525090565b508054600082559060005260206000209081019061123a9190611fed565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282611ee75760008555611f2d565b82601f10611f0057805160ff1916838001178555611f2d565b82800160010185558215611f2d579182015b82811115611f2d578251825591602001919060010190611f12565b50611f39929150611fed565b5090565b508054600082556008029060005260206000209081019061123a9190612002565b828054828255906000526020600020908101928215611f2d579160200282015b82811115611f2d57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611f7e565b828054828255906000526020600020908101928215611f2d5791602002820182811115611f2d578251825591602001919060010190611f12565b5b80821115611f395760008155600101611fee565b80821115611f395780546001600160a01b03191681556000600182018190556002820180546001600160b01b03191690556120406003830182611e93565b61204e600483016000611e93565b60058201805461ffff19169055612069600683016000611e93565b612077600783016000611e93565b50600801612002565b600067ffffffffffffffff83111561209457fe5b6120a7601f8401601f1916602001612c59565b90508281528383830111156120bb57600080fd5b828260208301376000602084830101529392505050565b80356106bb81612c9b565b600082601f8301126120ed578081fd5b813560206121026120fd83612c7d565b612c59565b828152818101908583018385028701840188101561211e578586fd5b855b8581101561214557813561213381612c9b565b84529284019290840190600101612120565b5090979650505050505050565b600082601f830112612162578081fd5b813560206121726120fd83612c7d565b82815281810190858301855b85811015612145578135880161016080601f19838d0301121561219f578889fd5b6121a881612c59565b6121b38884016120d2565b81526040830135888201526121ca60608401612325565b60408201526121db60808401612325565b60608201526121ec60a084016120d2565b608082015260c083013567ffffffffffffffff8082111561220b578b8cfd5b6122198e8b848801016120dd565b60a084015260e0850135915080821115612231578b8cfd5b61223f8e8b848801016120dd565b60c08401526122516101008601612325565b60e08401526122636101208601612325565b6101008401526101409150818501358181111561227e578c8dfd5b61228c8f8c838901016120dd565b610120850152509284013592808411156122a4578b8cfd5b506122b38d8a858701016122cb565b9082015286525050928401929084019060010161217e565b600082601f8301126122db578081fd5b813560206122eb6120fd83612c7d565b8281528181019085830183850287018401881015612307578586fd5b855b8581101561214557813584529284019290840190600101612309565b80356106bb81612cb0565b600060808284031215612341578081fd5b6040516080810167ffffffffffffffff828210818311171561235f57fe5b81604052829350843591508082111561237757600080fd5b508301601f8101851361238957600080fd5b61239885823560208401612080565b8252506020830135602082015260408301356040820152606083013560608201525092915050565b6000602082840312156123d1578081fd5b815161136081612c9b565b600080600080608085870312156123f1578283fd5b84356123fc81612c9b565b9350602085013567ffffffffffffffff80821115612418578485fd5b818701915087601f83011261242b578485fd5b61243a88833560208501612080565b9450604087013591508082111561244f578384fd5b61245b88838901612330565b93506060870135915080821115612470578283fd5b5061247d87828801612152565b91505092959194509250565b60008060006060848603121561249d578283fd5b83516124a881612c9b565b6020850151604086015191945092506124c081612cb0565b809150509250925092565b6000602082840312156124dc578081fd5b813567ffffffffffffffff8111156124f2578182fd5b6108e8848285016120dd565b60006020828403121561250f578081fd5b813561136081612cb0565b60006020828403121561252b578081fd5b815161136081612cb0565b60008060408385031215612548578182fd5b823567ffffffffffffffff8082111561255f578384fd5b61256b86838701612330565b93506020850135915080821115612580578283fd5b5061258d85828601612152565b9150509250929050565b6000602082840312156125a8578081fd5b5051919050565b600080604083850312156125c1578182fd5b8251915060208301516125d381612c9b565b809150509250929050565b6001600160a01b03169052565b6000815180845260208085019450808401835b838110156126235781516001600160a01b0316875295820195908201906001016125fe565b509495945050505050565b6000815180845260208085019450808401835b8381101561262357815187529582019590820190600101612641565b6000815480845260208085019450838352808320835b8381101561262357815487529582019560019182019101612673565b15159052565b60008151808452815b818110156126ba5760208185018101518683018201520161269e565b818111156126cb5782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6000606082016060835280865480835260808501915087845260209250828420845b828110156127545781546001600160a01b03168452928401926001918201910161272f565b50505083810382850152612768818761265d565b915050828103604084015261277d818561265d565b9695505050505050565b901515815260200190565b6000602082526113606020830184612695565b6020808252601490820152733737ba1030b1ba34bb329032bc3a32b739b4b7b760611b604082015260600190565b6020808252600c908201526b155b985d5d1a1bdc9a5e995960a21b604082015260600190565b6020808252600d908201526c2b37b4b2103932b1b2b4bb32b960991b604082015260600190565b602080825260159082015274135bdc99481d1a185b881bdb99481a1d5b991c9959605a1b604082015260600190565b60208082526034908201527f4c6173742072656365697665722070657263656e746167652069732063616c63604082015273756c61746564206175746f6d61746963616c6c7960601b606082015260800190565b6020808252600f908201526e213630b7359032bc3a32b739b4b7b760891b604082015260600190565b6020808252600a908201526950657263656e7461676560b01b604082015260600190565b6020808252600d908201526c4e6f206f7065726174696f6e7360981b604082015260600190565b6020808252600490820152634e616d6560e01b604082015260600190565b6020808252600f908201526e1514905394d1915497d19052531151608a1b604082015260600190565b6020808252600c908201526b4e6f2072656365697665727360a01b604082015260600190565b602080825260089082015267125b9d195c9d985b60c21b604082015260600190565b6020808252600c908201526b105b1c9958591e481a5b9a5d60a21b604082015260600190565b602080825260139082015272115512081d1c985b9cd9995c8819985a5b1959606a1b604082015260600190565b6020808252600e908201526d1054141493d59157d1905253115160921b604082015260600190565b602080825260149082015273546f6f206561726c7920746f206578656375746560601b604082015260600190565b6000604080835260c0855160808084870152612a6d83870183612695565b9150602080890151606081818a0152868b0151848a0152808b0151915060a082818b0152898603848b01528592508a51808752848701935084858202880101858d018b5b83811015612bb157601f198a84030187528151610160612ad28583516125de565b898201518a8601528d820151612aea8f87018261268f565b5087820151612afb8987018261268f565b508a820151612b0c8c8701826125de565b50868201518188870152612b22828701826125eb565b9150508c8201518582038e870152612b3a82826125eb565b91505060e080830151612b4f8288018261268f565b505061010080830151612b648288018261268f565b50506101208083015186830382880152612b7e83826125eb565b925050506101408083015192508582038187015250612b9d818361262e565b988a01989450505090870190600101612ab1565b50909e9d5050505050505050505050505050565b600060208252825115156020830152602083015115156040830152604083015160e06060840152612bfa6101008401826125eb565b90506060840151601f19848303016080850152612c1782826125eb565b91505060018060a01b0360808501511660a084015260a084015160c084015260c0840151612c4860e08501826125de565b509392505050565b90815260200190565b60405181810167ffffffffffffffff81118282101715612c7557fe5b604052919050565b600067ffffffffffffffff821115612c9157fe5b5060209081020190565b6001600160a01b038116811461123a57600080fd5b801515811461123a57600080fdfea2646970667358221220be5f2d438a85e1c4931bd09dace6f37e3da1cdcbbed2808ff1ac0b6fe72e25cf64736f6c63430007060033

Deployed Bytecode Sourcemap

6152:14042:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6582:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7748:146;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;8091:156::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;8513:567::-;;;;;;;;;;-1:-1:-1;8513:567:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;7902:181::-;;;;;;;;;;-1:-1:-1;7902:181:0;;;;;:::i;:::-;;:::i;:::-;;6233:42;;;;;;;;;;;;;:::i;6284:23::-;;;;;;;;;;;;;:::i;8255:250::-;;;;;;;;;;-1:-1:-1;8255:250:0;;;;;:::i;:::-;;:::i;6710:728::-;;;;;;;;;;-1:-1:-1;6710:728:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;6582:24::-;;;-1:-1:-1;;;;;6582:24:0;;:::o;7748:146::-;7785:26;;:::i;:::-;7858:28;;;7866:6;7858:28;;;;;;-1:-1:-1;;7858:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7813:32;;7866:6;;7874:11;;7858:28;;7866:6;;7858:28;;;;7866:6;;7858:28;;7866:6;7858:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7858:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7858:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7858:28:0;;;;;;;;;;;;;;;;-1:-1:-1;;;7858:28:0;;;-1:-1:-1;;7858:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7858:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7748:146;;:::o;8091:156::-;8159:16;;8132:7;;8159:21;:80;;8218:20;;8199:16;;:39;8159:80;;;8183:12;8159:80;8152:87;;8091:156;;:::o;8513:567::-;7676:9;;7651:44;;;-1:-1:-1;;;7651:44:0;;;;8585:13;;-1:-1:-1;;;;;7676:9:0;;7651:42;;:44;;;;;;;;;;;;;;7676:9;7651:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7643:77;;;;-1:-1:-1;;;7643:77:0;;;;;;;:::i;:::-;;;;;;;;;8635:11:::1;:9;:11::i;:::-;8619:12;:27;;8611:60;;;;-1:-1:-1::0;;;8611:60:0::1;;;;;;;:::i;:::-;8690:11;:18:::0;8682:48:::1;;;;-1:-1:-1::0;;;8682:48:0::1;;;;;;;:::i;:::-;8746:37;8766:16;:14;:16::i;:::-;8755:27;;;8746:37;;;;;;:::i;:::-;;;;;;;;8797:8;8794:256;;;8841:12;8822:16:::0;:31;8868:35:::1;8877:13:::0;8892:10:::1;8868:8;:35::i;:::-;8794:256;;;8965:9;;;;;;;;;-1:-1:-1::0;;;;;8965:9:0::1;-1:-1:-1::0;;;;;8940:57:0::1;;:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;8936:103:::0;::::1;9060:12;:10;:12::i;:::-;8513:567:::0;;;:::o;7902:181::-;7547:9;;-1:-1:-1;;;;;7547:9:0;7533:10;:23;7525:48;;;;-1:-1:-1;;;7525:48:0;;;;;;;:::i;:::-;8046:29:::1;8051:8;8061:13;8046:4;:29::i;:::-;7902:181:::0;;:::o;6233:42::-;6271:4;6233:42;:::o;6284:23::-;;;-1:-1:-1;;;;;6284:23:0;;:::o;8255:250::-;7547:9;;-1:-1:-1;;;;;7547:9:0;7533:10;:23;7525:48;;;;-1:-1:-1;;;7525:48:0;;;;;;;:::i;:::-;8352:9:::1;8348:150;8371:14;:21;8367:1;:25;8348:150;;;8414:72;8426:14;8441:1;8426:17;;;;;;;;;;;;;;8445:9;;;;;;;;;-1:-1:-1::0;;;;;8445:9:0::1;8456:29;8467:14;8482:1;8467:17;;;;;;;;;;;;;;8456:10;:29::i;:::-;8414:11;:72::i;:::-;8394:3;;8348:150;;6710:728:::0;6948:1;6928:8;6875:32;;-1:-1:-1;;;;;6928:8:0;:22;6920:47;;;;-1:-1:-1;;;6920:47:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6986:24:0;;6978:52;;;;-1:-1:-1;;;6978:52:0;;;;;;;:::i;:::-;7041:8;:21;;-1:-1:-1;;;;;;7041:21:0;;;7052:10;7041:21;;;;7073:9;:22;;-1:-1:-1;;;;;7073:22:0;;;;;;;;7106:142;;7193:8;;7170:65;;;-1:-1:-1;;;7170:65:0;;;;7163:73;;-1:-1:-1;;;;;7193:8:0;;7170:63;;:65;;;;;;;;;;;;;;7193:8;7170:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7163:6;:73::i;:::-;7150:86;;7106:142;7261:27;;;;;;7292:13;7261:44;7258:133;;7344:35;7350:10;7362:16;7344:5;:35::i;:::-;7322:57;;7258:133;7401:29;7406:8;7416:13;7401:4;:29::i;:::-;6710:728;;;;;;:::o;9088:550::-;9130:4;9147:40;:38;:40::i;:::-;9227:9;;9202:102;;-1:-1:-1;;;9202:102:0;;-1:-1:-1;;;;;9227:9:0;;;;9202:49;;:102;;9252:17;;9271:13;;9286:17;;9202:102;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9198:165;;-1:-1:-1;9346:5:0;9339:12;;9198:165;9377:9;9373:236;9396:17;:24;9392:28;;9373:236;;;9528:17;9546:1;9528:20;;;;;;;;;;;;;;;;9509:13;9523:1;9509:16;;;;;;;;;;;;;;;;9482:21;9504:1;9482:24;;;;;;;;;;;;;;;;:43;:66;9445:32;9456:17;9474:1;9456:20;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9456:20:0;9445:10;:32::i;:::-;:104;9442:156;;9577:5;9570:12;;;;;9442:156;9422:3;;9373:236;;;;9626:4;9619:11;;9088:550;:::o;12306:735::-;12389:9;12385:649;12409:11;:18;12405:22;;12385:649;;;12449:40;12492:11;12504:1;12492:14;;;;;;;;;;;;;;;;;12449:57;;;;;;;;12492:14;;;;;;;12449:57;;-1:-1:-1;;;;;12449:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12492:14;;12449:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12449:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12449:57:0;;;;;;;;;;;;;;;;-1:-1:-1;;;12449:57:0;;;-1:-1:-1;;12449:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12449:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12521:16;12540:118;12562:9;:27;;;12591:9;:26;;;12619:9;:38;;;12540:21;:118::i;:::-;12676:19;;;;12521:137;;-1:-1:-1;;;;;;12676:33:0;12673:350;;12730:150;12742:9;:27;;;12771:8;12781:14;12797:6;:29;;;12828:9;:19;;;12849:9;:30;;;12730:11;:150::i;:::-;12673:350;;;12921:86;12927:9;12938:8;12948:14;12964:6;:29;;;12995:11;12921:5;:86::i;:::-;-1:-1:-1;;12429:3:0;;12385:649;;;;12306:735;;:::o;11954:344::-;11999:9;11995:121;12018:17;:24;12014:28;;11995:121;;;12071:11;:33;12083:17;12101:1;12083:20;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12083:20:0;12071:33;;;;;;;;;;;;12064:40;12083:20;12044:3;11995:121;;;-1:-1:-1;12126:24:0;12133:17;;12126:24;:::i;:::-;12161;12168:17;;12161:24;:::i;:::-;12196:20;12203:13;;12196:20;:::i;:::-;12227:24;12234:17;;12227:24;:::i;:::-;12262:28;12269:21;;12262:28;:::i;:::-;11954:344::o;18057:445::-;18207:24;;18191:42;;;;;;;18237:13;18191:59;;18183:76;;;;-1:-1:-1;;;18183:76:0;;;;;;;:::i;:::-;18314:1;18278:19;:33;;;:37;18270:58;;;;-1:-1:-1;;;18270:58:0;;;;;;;:::i;:::-;6271:4;18347:19;:42;;;:56;18339:79;;;;-1:-1:-1;;;18339:79:0;;;;;;;:::i;:::-;18429:28;;;;18438:19;;18429:6;;:28;;:6;;:28;;;;;;:::i;:::-;-1:-1:-1;18429:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;18468:26;18483:10;18468:14;:26::i;11179:240::-;11243:7;-1:-1:-1;;;;;11266:26:0;;11263:86;;-1:-1:-1;11316:21:0;11309:28;;11263:86;11366:45;;-1:-1:-1;;;11366:45:0;;-1:-1:-1;;;;;11366:30:0;;;;;:45;;11405:4;;11366:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11359:52;11179:240;-1:-1:-1;;11179:240:0:o;16370:391::-;16467:10;16464:48;;16494:7;;16464:48;-1:-1:-1;;;;;16525:31:0;;16522:178;;16574:11;16590:2;-1:-1:-1;;;;;16590:7:0;16604:5;16590:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16573:41;;;16637:6;16629:38;;;;-1:-1:-1;;;16629:38:0;;;;;;;:::i;:::-;16682:7;;;16522:178;16710:43;16724:17;16743:2;16747:5;16710:13;:43::i;19692:499::-;19743:12;19965:21;19955:8;19951:36;-1:-1:-1;;;;;19837:169:0;19817:1;19792:229;20056:2;20053:1;20050;20043:16;20035:24;-1:-1:-1;20080:17:0;;20115:58;;;;20073:100;;20115:58;20145:9;20073:100;;19777:407;;;:::o;17441:608::-;17512:23;17650:1;17647;17637:7;17631:14;17624:4;17615:7;17611:18;17608:1;17598:8;17591:5;17586:66;17678:16;17728:4;17722:11;17708:25;;17766:4;17754:10;17747:24;17831:4;17819:10;17815:21;17892:4;17889:1;17865:22;17850:47;17924:33;;;17918:4;17911:47;17979:6;17986:45;;;;17972:59;;17986:45;18025:4;18001:22;17994:36;17972:59;;;;;17557:485;;;;:::o;9646:446::-;9719:9;9715:370;9738:11;:18;9734:22;;9715:370;;;9778:40;9821:11;9833:1;9821:14;;;;;;;;;;;;;;;;;9778:57;;;;;;;;9821:14;;;;;;;9778:57;;-1:-1:-1;;;;;9778:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9821:14;;9778:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9778:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9778:57:0;;;;;;;;;;;;;;;;-1:-1:-1;;;9778:57:0;;;-1:-1:-1;;9778:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9778:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9850:223;9899:1;-1:-1:-1;;;;;9868:33:0;:9;:19;;;-1:-1:-1;;;;;9868:33:0;;;:57;;;;;9905:9;:20;;;9868:57;:100;;9941:27;;9868:100;;;9936:1;9868:100;9970:9;:26;;;9998:9;:38;;;10038:9;:34;;;9850:17;:223::i;:::-;-1:-1:-1;9758:3:0;;9715:370;;;;9646:446::o;11427:519::-;11547:7;11571:23;11567:74;;-1:-1:-1;11618:11:0;11611:18;;11567:74;-1:-1:-1;;;;;11672:25:0;;11651:18;11672:25;;;:11;:25;;;;;;11740:17;:29;;11672:25;;11740:29;;;;;;;;;;;;;;11773:1;11740:34;;:103;;11816:12;-1:-1:-1;;;;;11809:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11740:103;;;11777:17;11795:10;11777:29;;;;;;;;;;;;;;;;11740:103;11708:17;11726:10;11708:29;;;;;;;;;;;;;;;;;:135;11934:4;;11896:18;;;11895:34;11862:17;11880:10;11862:29;;;;;;;;;;;;;;;;:68;11861:77;;;;;;11854:84;;;11427:519;;;;;;:::o;15007:1355::-;15244:11;15218:23;-1:-1:-1;;;;;15299:28:0;;;:102;;15334:67;15361:15;15378:22;15334:26;:67::i;:::-;15299:102;;;15330:1;15299:102;15268:133;;15412:68;15424:17;15443:14;15459:20;15412:11;:68::i;:::-;15544:24;15614:8;;15591:52;;;-1:-1:-1;;;15591:52:0;;;;15491:39;;;;;15544:24;;-1:-1:-1;;;;;15614:8:0;;15591:50;;:52;;;;;;;;;;;15614:8;15591:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15543:100;;;;15677:16;15697:1;15677:21;:48;;;-1:-1:-1;;;;;;15702:23:0;;;15677:48;:116;;15732:61;15759:15;15776:16;15732:26;:61::i;:::-;15677:116;;;15728:1;15677:116;15654:139;;15804:63;15816:17;15835:9;15846:20;15804:11;:63::i;:::-;15878:39;;;;;;15930:28;15989:273;16031:1;16012:9;:16;:20;16008:1;:24;15989:273;;;16054:142;16066:17;16085:9;16095:1;16085:12;;;;;;;;;;;;;;16122:73;16149:20;16171;16192:1;16171:23;;;;;;;;;;;;;;16122:26;:73::i;:::-;16099:96;;;16054:11;:142::i;:::-;16211:39;;;;;16034:3;;15989:273;;;;16274:80;16286:17;16305:9;16334:1;16315:9;:16;:20;16305:31;;;;;;;;;;;;;;16338:15;16274:11;:80::i;:::-;15007:1355;;;;;;;;;;;:::o;13049:1738::-;13219:19;13241:11;:78;;13318:1;13241:78;;;13255:60;13282:8;13292:22;13255:26;:60::i;:::-;13219:100;;13333:23;13367:9;:19;;;-1:-1:-1;;;;;13362:30:0;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13332:62;;;;13410:9;:19;;;13407:118;;;13446:18;;;;13465:25;;13498:15;;13446:18;-1:-1:-1;;13465:29:0;;;13446:49;;;;;;;;;;;:67;-1:-1:-1;;;;;13446:67:0;;;-1:-1:-1;;;;;13446:67:0;;;;;13407:118;13559:18;;;;13578:25;;13537:19;;13559:18;-1:-1:-1;;13578:29:0;;;13559:49;;;;;;;;;;;;13537:71;;13621:24;13648:316;;;;;;;;13671:9;:20;;;13648:316;;;;;;13706:9;:19;;;13648:316;;;;;;13740:9;:32;;;13648:316;;;;13787:9;:18;;;13648:316;;;;13820:9;:20;;;:68;;13861:27;;13820:68;;;13843:15;13820:68;-1:-1:-1;;;;;13648:316:0;;;;;13914:11;13903:8;:22;13648:316;;;;13948:4;-1:-1:-1;;;;;13648:316:0;;;;13621:343;;14011:1;-1:-1:-1;;;;;13980:33:0;:8;:19;;;-1:-1:-1;;;;;13980:33:0;;;:57;;;;-1:-1:-1;14018:19:0;;14017:20;13980:57;13977:160;;;14054:71;14067:8;:19;;;14088:9;:19;;;14109:8;:15;;;14054:12;:71::i;:::-;14180:19;;14149:17;;14177:224;;;14233:9;:19;;;-1:-1:-1;;;;;14228:39:0;;14276:8;14286;14228:67;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14216:79;;14177:224;;;14345:9;:19;;;-1:-1:-1;;;;;14340:39:0;;14380:8;14340:49;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14328:61;;14177:224;14416:11;14413:148;;;14444:105;14456:9;:20;;;:63;;14492:27;;14456:63;;;14487:1;14456:63;14521:14;14537:11;14444;:105::i;:::-;14571:208;14583:9;:19;;;:46;;14618:11;14583:46;;;14613:1;14583:46;14631:9;14642:11;:41;;14669:14;14642:41;;;14664:1;14642:41;14685:11;:40;;14703:22;14685:40;;;14699:1;14685:40;14727:9;:19;;;14748:9;:30;;;14571:11;:208::i;:::-;13049:1738;;;;;;;;;;:::o;18510:972::-;18598:18;18605:11;;18598:18;:::i;:::-;18631:9;18627:848;18650:10;:17;18646:1;:21;18627:848;;;18689:40;18732:10;18743:1;18732:13;;;;;;;;;;;;;;18689:56;;18797:1;18768:9;:19;;;:26;:30;18760:55;;;;-1:-1:-1;;;18760:55:0;;;;;;;:::i;:::-;18909:1;18880:9;:19;;;:26;:30;18838:9;:30;;;:37;:73;18830:138;;;;-1:-1:-1;;;18830:138:0;;;;;;;:::i;:::-;18983:18;19024:9;19020:223;19072:1;19043:9;:19;;;:26;:30;19039:1;:34;19020:223;;;19113:9;:30;;;19144:1;19113:33;;;;;;;;;;;;;;19099:47;;;;19207:1;-1:-1:-1;;;;;19173:36:0;:9;:19;;;19193:1;19173:22;;;;;;;;;;;;;;-1:-1:-1;;;;;19173:36:0;;;19165:62;;;;-1:-1:-1;;;19165:62:0;;;;;;;:::i;:::-;19075:3;;19020:223;;;-1:-1:-1;19265:19:0;;;;19285:26;;19328:1;;19265:19;-1:-1:-1;;19285:30:0;;;19265:51;;;;;;;;;;;;-1:-1:-1;;;;;19265:65:0;;;19257:91;;;;-1:-1:-1;;;19257:91:0;;;;;;;:::i;:::-;6271:4;19371:10;:24;19363:58;;;;-1:-1:-1;;;19363:58:0;;;;;;;:::i;:::-;19436:11;:27;;;;;;;-1:-1:-1;19436:27:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;19436:27:0;;;-1:-1:-1;;;;;;19436:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19436:27:0;;;;;-1:-1:-1;;19436:27:0;;;-1:-1:-1;;19436:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;19453:9;;19436:27;;;;;;;;;;;;:::i;:::-;-1:-1:-1;19436:27:0;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;19436:27:0;;;;;;;;;;;;;;;;;-1:-1:-1;;19436:27:0;;;-1:-1:-1;;19436:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;19436:27:0;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;18669:3:0;;;;;-1:-1:-1;18627:848:0;;-1:-1:-1;;18627:848:0;17104:329;17200:23;17226:104;17232:17;17274:43;;;17319:2;17323:5;17251:78;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;17251:78:0;;;;;;;;;;;;;;-1:-1:-1;;;;;17251:78:0;-1:-1:-1;;;;;;17251:78:0;;;;;;;;;;17226:5;:104::i;:::-;17200:130;;17349:10;:17;17370:1;17349:22;:56;;;;17386:10;17375:30;;;;;;;;;;;;:::i;:::-;17341:84;;;;-1:-1:-1;;;17341:84:0;;;;;;;:::i;:::-;17104:329;;;;:::o;10100:1071::-;10268:21;10265:59;;10306:7;;10265:59;-1:-1:-1;;;;;10355:30:0;;10336:16;10355:30;;;:11;:30;;;;;;10401:17;:24;:29;;:81;;;10465:17;-1:-1:-1;;;;;10434:48:0;:17;10452:8;10434:27;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10434:27:0;:48;;10401:81;10398:427;;;-1:-1:-1;10544:17:0;:24;;-1:-1:-1;;;;;10499:30:0;;;;;;:11;:30;;;;;;;:70;;;10584:41;;;;;;;;;;;-1:-1:-1;;;;;;10584:41:0;;;;;;;10640:13;:21;;;;;;;;;;;;;10676:17;:25;;;;;;;;;;;;;;;;;10716:21;10743:29;10511:17;10743:10;:29::i;:::-;10716:57;;;;;;;;-1:-1:-1;10716:57:0;;;;;;;;;;;;;10788:17;:25;;;;;;;;;;;;10398:427;10835:14;10852:88;10874:17;10893:16;10911:28;10852:21;:88::i;:::-;10835:105;;10954:24;10951:213;;;11055:6;11025:17;11043:8;11025:27;;;;;;;;;;;;;;;;:36;10995:17;11013:8;10995:27;;;;;;;;;;;;;;;;;:66;10951:213;;;11146:6;11120:13;11134:8;11120:23;;;;;;;;;;;;;;;;:32;11094:13;11108:8;11094:23;;;;;;;;;;;;;;;;;:58;10951:213;10100:1071;;;;;;:::o;14795:204::-;14900:7;14987:4;;14944:23;;;14943:39;14928:11;:55;14927:64;;;;;;;14795:204;-1:-1:-1;;;14795:204:0:o;16769:327::-;16865:23;16891:103;16897:17;16939:42;;;16983:2;16987:5;16916:77;;;;;;;;;:::i;16891:103::-;16865:129;;17013:10;:17;17034:1;17013:22;:56;;;;17050:10;17039:30;;;;;;;;;;;;:::i;:::-;17005:83;;;;-1:-1:-1;;;17005:83:0;;;;;;;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;14:400:1;;114:18;106:6;103:30;100:2;;;136:9;100:2;165:58;211:2;188:17;;-1:-1:-1;;184:31:1;217:4;180:42;165:58;:::i;:::-;156:67;;246:6;239:5;232:21;286:3;277:6;272:3;268:16;265:25;262:2;;;303:1;300;293:12;262:2;352:6;347:3;340:4;333:5;329:16;316:43;406:1;399:4;390:6;383:5;379:18;375:29;368:40;90:324;;;;;:::o;419:138::-;489:20;;518:33;489:20;518:33;:::i;562:782::-;;675:3;668:4;660:6;656:17;652:27;642:2;;697:5;690;683:20;642:2;737:6;724:20;763:4;787:65;802:49;848:2;802:49;:::i;:::-;787:65;:::i;:::-;886:15;;;917:12;;;;949:15;;;995:11;;;983:24;;979:33;;976:42;-1:-1:-1;973:2:1;;;1035:5;1028;1021:20;973:2;1061:5;1075:240;1089:2;1086:1;1083:9;1075:240;;;1160:3;1147:17;1177:33;1204:5;1177:33;:::i;:::-;1223:18;;1261:12;;;;1293;;;;1107:1;1100:9;1075:240;;;-1:-1:-1;1333:5:1;;632:712;-1:-1:-1;;;;;;;632:712:1:o;1349:2240::-;;1486:3;1479:4;1471:6;1467:17;1463:27;1453:2;;1508:5;1501;1494:20;1453:2;1548:6;1535:20;1574:4;1598:65;1613:49;1659:2;1613:49;:::i;1598:65::-;1697:15;;;1728:12;;;;1760:15;;;1793:5;1807:1753;1821:2;1818:1;1815:9;1807:1753;;;1901:3;1888:17;1880:6;1876:30;1929:6;1983:2;1977;1973:7;1968:2;1963:3;1959:12;1955:26;1951:35;1948:2;;;2003:5;1996;1989:20;1948:2;2037:18;2052:2;2037:18;:::i;:::-;2082:33;2111:2;2107;2103:11;2082:33;:::i;:::-;2075:5;2068:48;2173:2;2169;2165:11;2152:25;2147:2;2140:5;2136:14;2129:49;2214:30;2240:2;2236;2232:11;2214:30;:::i;:::-;2209:2;2202:5;2198:14;2191:54;2281:31;2307:3;2303:2;2299:12;2281:31;:::i;:::-;2276:2;2269:5;2265:14;2258:55;2350:34;2379:3;2375:2;2371:12;2350:34;:::i;:::-;2344:3;2337:5;2333:15;2326:59;2435:3;2431:2;2427:12;2414:26;2463:18;2510:2;2500:8;2497:16;2494:2;;;2530:5;2523;2516:20;2494:2;2575:67;2638:3;2633:2;2622:8;2618:2;2614:17;2610:26;2575:67;:::i;:::-;2569:3;2562:5;2558:15;2551:92;2693:3;2689:2;2685:12;2672:26;2656:42;;2727:2;2717:8;2714:16;2711:2;;;2747:5;2740;2733:20;2711:2;2792:67;2855:3;2850:2;2839:8;2835:2;2831:17;2827:26;2792:67;:::i;:::-;2786:3;2779:5;2775:15;2768:92;2897:31;2923:3;2919:2;2915:12;2897:31;:::i;:::-;2891:3;2884:5;2880:15;2873:56;2966:31;2992:3;2988:2;2984:12;2966:31;:::i;:::-;2960:3;2953:5;2949:15;2942:56;3021:3;3011:13;;3074:2;3070;3066:11;3053:25;3107:2;3097:8;3094:16;3091:2;;;3127:5;3120;3113:20;3091:2;3172:67;3235:3;3230:2;3219:8;3215:2;3211:17;3207:26;3172:67;:::i;:::-;3166:3;3155:15;;3148:92;-1:-1:-1;3282:11:1;;;3269:25;;3310:16;;;3307:2;;;3343:5;3336;3329:20;3307:2;;3387:67;3450:3;3445:2;3434:8;3430:2;3426:17;3422:26;3387:67;:::i;:::-;3371:14;;;3364:91;3468:18;;-1:-1:-1;;3506:12:1;;;;3538;;;;1839:1;1832:9;1807:1753;;3594:705;;3707:3;3700:4;3692:6;3688:17;3684:27;3674:2;;3729:5;3722;3715:20;3674:2;3769:6;3756:20;3795:4;3819:65;3834:49;3880:2;3834:49;:::i;3819:65::-;3918:15;;;3949:12;;;;3981:15;;;4027:11;;;4015:24;;4011:33;;4008:42;-1:-1:-1;4005:2:1;;;4067:5;4060;4053:20;4005:2;4093:5;4107:163;4121:2;4118:1;4115:9;4107:163;;;4178:17;;4166:30;;4216:12;;;;4248;;;;4139:1;4132:9;4107:163;;4304:132;4371:20;;4400:30;4371:20;4400:30;:::i;4441:883::-;;4558:4;4546:9;4541:3;4537:19;4533:30;4530:2;;;4580:5;4573;4566:20;4530:2;4617;4611:9;4659:4;4651:6;4647:17;4683:18;4751:6;4739:10;4736:22;4731:2;4719:10;4716:18;4713:46;4710:2;;;4762:9;4710:2;4793:10;4789:2;4782:22;4822:6;4813:15;;4864:9;4851:23;4837:37;;4897:2;4889:6;4886:14;4883:2;;;4913:1;4910;4903:12;4883:2;-1:-1:-1;4936:22:1;;4989:4;4981:13;;4977:23;-1:-1:-1;4967:2:1;;5014:1;5011;5004:12;4967:2;5042:73;5111:3;5106:2;5093:16;5086:4;5082:2;5078:13;5042:73;:::i;:::-;5034:6;5027:89;;5179:4;5168:9;5164:20;5151:34;5144:4;5136:6;5132:17;5125:61;5247:2;5236:9;5232:18;5219:32;5214:2;5206:6;5202:15;5195:57;5313:2;5302:9;5298:18;5285:32;5280:2;5272:6;5268:15;5261:57;;4520:804;;;;:::o;5329:263::-;;5452:2;5440:9;5431:7;5427:23;5423:32;5420:2;;;5473:6;5465;5458:22;5420:2;5510:9;5504:16;5529:33;5556:5;5529:33;:::i;5597:1203::-;;;;;5868:3;5856:9;5847:7;5843:23;5839:33;5836:2;;;5890:6;5882;5875:22;5836:2;5934:9;5921:23;5953:33;5980:5;5953:33;:::i;:::-;6005:5;-1:-1:-1;6061:2:1;6046:18;;6033:32;6084:18;6114:14;;;6111:2;;;6146:6;6138;6131:22;6111:2;6189:6;6178:9;6174:22;6164:32;;6234:7;6227:4;6223:2;6219:13;6215:27;6205:2;;6261:6;6253;6246:22;6205:2;6289:75;6356:7;6351:2;6338:16;6333:2;6329;6325:11;6289:75;:::i;:::-;6279:85;;6417:2;6406:9;6402:18;6389:32;6373:48;;6446:2;6436:8;6433:16;6430:2;;;6467:6;6459;6452:22;6430:2;6495:75;6562:7;6551:8;6540:9;6536:24;6495:75;:::i;:::-;6485:85;;6623:2;6612:9;6608:18;6595:32;6579:48;;6652:2;6642:8;6639:16;6636:2;;;6673:6;6665;6658:22;6636:2;;6701:93;6786:7;6775:8;6764:9;6760:24;6701:93;:::i;:::-;6691:103;;;5826:974;;;;;;;:::o;6805:454::-;;;;6959:2;6947:9;6938:7;6934:23;6930:32;6927:2;;;6980:6;6972;6965:22;6927:2;7017:9;7011:16;7036:33;7063:5;7036:33;:::i;:::-;7133:2;7118:18;;7112:25;7182:2;7167:18;;7161:25;7088:5;;-1:-1:-1;7112:25:1;-1:-1:-1;7195:32:1;7161:25;7195:32;:::i;:::-;7246:7;7236:17;;;6917:342;;;;;:::o;7264:374::-;;7401:2;7389:9;7380:7;7376:23;7372:32;7369:2;;;7422:6;7414;7407:22;7369:2;7467:9;7454:23;7500:18;7492:6;7489:30;7486:2;;;7537:6;7529;7522:22;7486:2;7565:67;7624:7;7615:6;7604:9;7600:22;7565:67;:::i;7643:253::-;;7752:2;7740:9;7731:7;7727:23;7723:32;7720:2;;;7773:6;7765;7758:22;7720:2;7817:9;7804:23;7836:30;7860:5;7836:30;:::i;7901:257::-;;8021:2;8009:9;8000:7;7996:23;7992:32;7989:2;;;8042:6;8034;8027:22;7989:2;8079:9;8073:16;8098:30;8122:5;8098:30;:::i;8163:716::-;;;8391:2;8379:9;8370:7;8366:23;8362:32;8359:2;;;8412:6;8404;8397:22;8359:2;8457:9;8444:23;8486:18;8527:2;8519:6;8516:14;8513:2;;;8548:6;8540;8533:22;8513:2;8576:73;8641:7;8632:6;8621:9;8617:22;8576:73;:::i;:::-;8566:83;;8702:2;8691:9;8687:18;8674:32;8658:48;;8731:2;8721:8;8718:16;8715:2;;;8752:6;8744;8737:22;8715:2;;8780:93;8865:7;8854:8;8843:9;8839:24;8780:93;:::i;:::-;8770:103;;;8349:530;;;;;:::o;8884:194::-;;9007:2;8995:9;8986:7;8982:23;8978:32;8975:2;;;9028:6;9020;9013:22;8975:2;-1:-1:-1;9056:16:1;;8965:113;-1:-1:-1;8965:113:1:o;9083:324::-;;;9223:2;9211:9;9202:7;9198:23;9194:32;9191:2;;;9244:6;9236;9229:22;9191:2;9278:9;9272:16;9262:26;;9331:2;9320:9;9316:18;9310:25;9344:33;9371:5;9344:33;:::i;:::-;9396:5;9386:15;;;9181:226;;;;;:::o;9412:106::-;-1:-1:-1;;;;;9480:31:1;9468:44;;9458:60::o;9523:469::-;;9620:5;9614:12;9647:6;9642:3;9635:19;9673:4;9702:2;9697:3;9693:12;9686:19;;9739:2;9732:5;9728:14;9760:3;9772:195;9786:6;9783:1;9780:13;9772:195;;;9851:13;;-1:-1:-1;;;;;9847:39:1;9835:52;;9907:12;;;;9942:15;;;;9883:1;9801:9;9772:195;;;-1:-1:-1;9983:3:1;;9590:402;-1:-1:-1;;;;;9590:402:1:o;9997:443::-;;10094:5;10088:12;10121:6;10116:3;10109:19;10147:4;10176:2;10171:3;10167:12;10160:19;;10213:2;10206:5;10202:14;10234:3;10246:169;10260:6;10257:1;10254:13;10246:169;;;10321:13;;10309:26;;10355:12;;;;10390:15;;;;10282:1;10275:9;10246:169;;10445:481;;10550:5;10544:12;10577:6;10572:3;10565:19;10603:4;10632:2;10627:3;10623:12;10616:19;;10656:5;10651:3;10644:18;10700:2;10695:3;10685:18;10721:3;10733:168;10747:6;10744:1;10741:13;10733:168;;;10808:13;;10796:26;;10842:12;;;;10889:1;10877:14;;;;10762:9;10733:168;;10931:93;11003:13;10996:21;10984:34;;10974:50::o;11029:477::-;;11110:5;11104:12;11137:6;11132:3;11125:19;11162:3;11174:162;11188:6;11185:1;11182:13;11174:162;;;11250:4;11306:13;;;11302:22;;11296:29;11278:11;;;11274:20;;11267:59;11203:12;11174:162;;;11354:6;11351:1;11348:13;11345:2;;;11420:3;11413:4;11404:6;11399:3;11395:16;11391:27;11384:40;11345:2;-1:-1:-1;11488:2:1;11467:15;-1:-1:-1;;11463:29:1;11454:39;;;;11495:4;11450:50;;11080:426;-1:-1:-1;;11080:426:1:o;11721:203::-;-1:-1:-1;;;;;11885:32:1;;;;11867:51;;11855:2;11840:18;;11822:102::o;12145:274::-;-1:-1:-1;;;;;12337:32:1;;;;12319:51;;12401:2;12386:18;;12379:34;12307:2;12292:18;;12274:145::o;12424:1091::-;;12761:2;12750:9;12746:18;12791:2;12780:9;12773:21;12814:6;12849;12843:13;12880:6;12872;12865:22;12918:3;12907:9;12903:19;12896:26;;12944:6;12938:4;12931:20;12970:4;12960:14;;13013:2;13007:4;12997:19;13034:4;13047:194;13061:6;13058:1;13055:13;13047:194;;;13126:13;;-1:-1:-1;;;;;13122:39:1;13110:52;;13182:12;;;;13158:1;13217:14;;;;13076:9;13047:194;;;13051:3;;;13286:9;13281:3;13277:19;13272:2;13261:9;13257:18;13250:47;13320:55;13371:3;13363:6;13320:55;:::i;:::-;13306:69;;;13423:9;13415:6;13411:22;13406:2;13395:9;13391:18;13384:50;13451:58;13502:6;13494;13451:58;:::i;:::-;13443:66;12722:793;-1:-1:-1;;;;;;12722:793:1:o;13520:187::-;13685:14;;13678:22;13660:41;;13648:2;13633:18;;13615:92::o;13712:219::-;;13859:2;13848:9;13841:21;13879:46;13921:2;13910:9;13906:18;13898:6;13879:46;:::i;13936:344::-;14138:2;14120:21;;;14177:2;14157:18;;;14150:30;-1:-1:-1;;;14211:2:1;14196:18;;14189:50;14271:2;14256:18;;14110:170::o;14285:336::-;14487:2;14469:21;;;14526:2;14506:18;;;14499:30;-1:-1:-1;;;14560:2:1;14545:18;;14538:42;14612:2;14597:18;;14459:162::o;14626:337::-;14828:2;14810:21;;;14867:2;14847:18;;;14840:30;-1:-1:-1;;;14901:2:1;14886:18;;14879:43;14954:2;14939:18;;14800:163::o;14968:345::-;15170:2;15152:21;;;15209:2;15189:18;;;15182:30;-1:-1:-1;;;15243:2:1;15228:18;;15221:51;15304:2;15289:18;;15142:171::o;15318:416::-;15520:2;15502:21;;;15559:2;15539:18;;;15532:30;15598:34;15593:2;15578:18;;15571:62;-1:-1:-1;;;15664:2:1;15649:18;;15642:50;15724:3;15709:19;;15492:242::o;15739:339::-;15941:2;15923:21;;;15980:2;15960:18;;;15953:30;-1:-1:-1;;;16014:2:1;15999:18;;15992:45;16069:2;16054:18;;15913:165::o;16083:334::-;16285:2;16267:21;;;16324:2;16304:18;;;16297:30;-1:-1:-1;;;16358:2:1;16343:18;;16336:40;16408:2;16393:18;;16257:160::o;16422:337::-;16624:2;16606:21;;;16663:2;16643:18;;;16636:30;-1:-1:-1;;;16697:2:1;16682:18;;16675:43;16750:2;16735:18;;16596:163::o;16764:327::-;16966:2;16948:21;;;17005:1;16985:18;;;16978:29;-1:-1:-1;;;17038:2:1;17023:18;;17016:34;17082:2;17067:18;;16938:153::o;17096:339::-;17298:2;17280:21;;;17337:2;17317:18;;;17310:30;-1:-1:-1;;;17371:2:1;17356:18;;17349:45;17426:2;17411:18;;17270:165::o;17440:336::-;17642:2;17624:21;;;17681:2;17661:18;;;17654:30;-1:-1:-1;;;17715:2:1;17700:18;;17693:42;17767:2;17752:18;;17614:162::o;17781:331::-;17983:2;17965:21;;;18022:1;18002:18;;;17995:29;-1:-1:-1;;;18055:2:1;18040:18;;18033:38;18103:2;18088:18;;17955:157::o;18117:336::-;18319:2;18301:21;;;18358:2;18338:18;;;18331:30;-1:-1:-1;;;18392:2:1;18377:18;;18370:42;18444:2;18429:18;;18291:162::o;18458:343::-;18660:2;18642:21;;;18699:2;18679:18;;;18672:30;-1:-1:-1;;;18733:2:1;18718:18;;18711:49;18792:2;18777:18;;18632:169::o;18806:338::-;19008:2;18990:21;;;19047:2;19027:18;;;19020:30;-1:-1:-1;;;19081:2:1;19066:18;;19059:44;19135:2;19120:18;;18980:164::o;19149:344::-;19351:2;19333:21;;;19390:2;19370:18;;;19363:30;-1:-1:-1;;;19424:2:1;19409:18;;19402:50;19484:2;19469:18;;19323:170::o;19498:3048::-;;19845:2;19874;19863:9;19856:21;19896:3;19934:6;19928:13;19960:4;20000:2;19995;19984:9;19980:18;19973:30;20026:52;20074:2;20063:9;20059:18;20045:12;20026:52;:::i;:::-;20012:66;;20097:4;20138:2;20130:6;20126:15;20120:22;20161:2;20199;20194;20183:9;20179:18;20172:30;20256:2;20248:6;20244:15;20238:22;20233:2;20222:9;20218:18;20211:50;20298:2;20290:6;20286:15;20280:22;20270:32;;20321:3;20360:2;20355;20344:9;20340:18;20333:30;20411:9;20403:6;20399:22;20394:2;20383:9;20379:18;20372:50;20442:6;20431:17;;20477:6;20471:13;20508:6;20500;20493:22;20543:2;20535:6;20531:15;20524:22;;20603:2;20597;20589:6;20585:15;20577:6;20573:28;20569:37;20641:2;20633:6;20629:15;20662:4;20675:1842;20689:6;20686:1;20683:13;20675:1842;;;20779:2;20775:7;20766:6;20758;20754:19;20750:33;20745:3;20738:46;20813:6;20807:13;20844:6;20863:39;20895:6;20890:2;20884:9;20863:39;:::i;:::-;20953:2;20949;20945:11;20939:18;20934:2;20926:6;20922:15;20915:43;21007:2;21003;20999:11;20993:18;21024:50;21070:2;21062:6;21058:15;21042:14;21024:50;:::i;:::-;;21123:2;21119;21115:11;21109:18;21140:50;21186:2;21178:6;21174:15;21158:14;21140:50;:::i;:::-;;21239:2;21235;21231:11;21225:18;21256:53;21305:2;21297:6;21293:15;21277:14;21256:53;:::i;:::-;;21358:2;21354;21350:11;21344:18;21399:3;21394:2;21386:6;21382:15;21375:28;21430:68;21493:3;21485:6;21481:16;21465:14;21430:68;:::i;:::-;21416:82;;;21547:2;21543;21539:11;21533:18;21600:6;21592;21588:19;21583:2;21575:6;21571:15;21564:44;21635:58;21686:6;21670:14;21635:58;:::i;:::-;21621:72;;;21717:4;21770:3;21766:2;21762:12;21756:19;21788:51;21834:3;21826:6;21822:16;21806:14;21788:51;:::i;:::-;;;21863:6;21918:3;21914:2;21910:12;21904:19;21936:51;21982:3;21974:6;21970:16;21954:14;21936:51;:::i;:::-;;;22011:6;22066:3;22062:2;22058:12;22052:19;22121:6;22113;22109:19;22103:3;22095:6;22091:16;22084:45;22156:58;22207:6;22191:14;22156:58;:::i;:::-;22142:72;;;;22238:6;22293:3;22289:2;22285:12;22279:19;22257:41;;22348:6;22340;22336:19;22330:3;22322:6;22318:16;22311:45;;22379:58;22430:6;22414:14;22379:58;:::i;:::-;22495:12;;;;22369:68;-1:-1:-1;;;22460:15:1;;;;20711:1;20704:9;20675:1842;;;-1:-1:-1;22534:6:1;;19825:2721;-1:-1:-1;;;;;;;;;;;;;;19825:2721:1:o;22551:1013::-;;22730:2;22719:9;22712:21;22789:6;22783:13;22776:21;22769:29;22764:2;22753:9;22749:18;22742:57;22867:2;22859:6;22855:15;22849:22;22842:30;22835:38;22830:2;22819:9;22815:18;22808:66;22921:2;22913:6;22909:15;22903:22;22961:4;22956:2;22945:9;22941:18;22934:32;22989:69;23053:3;23042:9;23038:19;23024:12;22989:69;:::i;:::-;22975:83;;23107:2;23099:6;23095:15;23089:22;23180:2;23176:7;23164:9;23156:6;23152:22;23148:36;23142:3;23131:9;23127:19;23120:65;23208:58;23259:6;23243:14;23208:58;:::i;:::-;23194:72;;;23349:1;23345;23340:3;23336:11;23332:19;23325:3;23317:6;23313:16;23307:23;23303:49;23297:3;23286:9;23282:19;23275:78;23408:3;23400:6;23396:16;23390:23;23384:3;23373:9;23369:19;23362:52;23463:3;23455:6;23451:16;23445:23;23477:58;23529:4;23518:9;23514:20;23498:14;23477:58;:::i;:::-;-1:-1:-1;23552:6:1;22702:862;-1:-1:-1;;;22702:862:1:o;23569:177::-;23715:25;;;23703:2;23688:18;;23670:76::o;23751:242::-;23821:2;23815:9;23851:17;;;23898:18;23883:34;;23919:22;;;23880:62;23877:2;;;23945:9;23877:2;23972;23965:22;23795:198;;-1:-1:-1;23795:198:1:o;23998:183::-;;24097:18;24089:6;24086:30;24083:2;;;24119:9;24083:2;-1:-1:-1;24170:4:1;24151:17;;;24147:28;;24073:108::o;24186:133::-;-1:-1:-1;;;;;24263:31:1;;24253:42;;24243:2;;24309:1;24306;24299:12;24324:120;24412:5;24405:13;24398:21;24391:5;24388:32;24378:2;;24434:1;24431;24424:12

Swarm Source

ipfs://be5f2d438a85e1c4931bd09dace6f37e3da1cdcbbed2808ff1ac0b6fe72e25cf

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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