S Price: $0.465549 (-8.47%)

Contract

0x8F429dD3DDDF838232f3F1160bfa41EF3fE10D3D

Overview

S Balance

Sonic LogoSonic LogoSonic Logo0 S

S Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

Please try again later

Parent Transaction Hash Block From To
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
OffchainOracle

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at SonicScan.org on 2025-03-06
*/

// SPDX-License-Identifier: No

pragma solidity 0.8.24;

library SafeMath {
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        uint256 c = a + b;
        if (c < a) return (false, 0);
        return (true, c);
    }
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b > a) return (false, 0);
        return (true, a - b);
    }
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (a == 0) return (true, 0);
        uint256 c = a * b;
        if (c / a != b) return (false, 0);
        return (true, c);
    }
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a / b);
    }
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a % b);
    }
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a, "SafeMath: subtraction overflow");
        return a - b;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) return 0;
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "SafeMath: division by zero");
        return a / b;
    }
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "SafeMath: modulo by zero");
        return a % b;
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        return a - b;
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        return a / b;
    }
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        return a % b;
    }
}

library Sqrt {
    function sqrt(uint y) internal pure returns (uint z) {
        if (y > 3) {
            z = y;
            uint x = y / 2 + 1;
            while (x < z) {
                z = x;
                x = (y / x + x) / 2;
            }
        } else if (y != 0) {
            z = 1;
        }
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}
// For Uniswap v1
interface IUniswapV1 {
    function getTokenToEthInputPrice(uint256 tokens_sold) external view returns (uint256 );
}
// For Uniswap v2, Quickswap v2, Sushiswap v2, pancakeswap v2
interface IUniswapV2Pair {
    function getReserves() external view returns (uint112 _reserve0, uint112 _reserve1, uint32 _blockTimestampLast);
    function token0() external view returns (address);
    function token1() external view returns (address);
}
// For Uniswap v3, Sushiswap v3, Pancakeswap v3, Solidly v3
interface IUniswapV3Pool {
    function slot0() external view returns (uint160 sqrtPriceX96);
    function token0() external view returns (address);
    function token1() external view returns (address);
}
// For Quickswap v3
interface IAlgebraPool {
    function globalState() external view returns (uint160 price);
    function token0() external view returns (address);
    function token1() external view returns (address);
}
// For Meshswap
interface IMeshswapPool {
    function token0() external view returns (address);
    function token1() external view returns (address);
    function reserve0() external view returns (uint112);
    function reserve1() external view returns (uint112);
}
// For Balancer v2
interface IStablePool {
    function getTokenRate(address) external view returns (uint256);
}
// For Balancer v2
interface IWeightedPool {
    function getPoolId() external view returns (bytes32);
    function getNormalizedWeights() external view returns (uint256[] memory);
}
// For Balancer v2
interface IVault {
    function getPoolTokens(bytes32 poolId) external view returns (address[] memory tokens, uint256[] memory balances, uint256 lastChangeBlock);
}
// For Kyber swap
interface IKyberDmmPool {
    function getTradeInfo() external view returns (uint112 reserve0, uint112 reserve1, uint112 _vReserve0, uint112 _vReserve1, uint256 feeInPrecision);
    function token0() external view returns (address);
    function token1() external view returns (address);
}
// For Curve
interface ICurveProvider {
    function get_address (uint256 _id) external view returns (address);
}
interface ICurveMetaregistry {
    //function find_pools_for_coins(address srcToken, address dstToken) external view returns (address[] memory);
    function get_coin_indices(address _pool, address _from, address _to) external view returns (int128, int128, bool);
    //function get_underlying_balances(address _pool) external view returns (uint256[8] memory);
}
interface ICurvePool {
    function allowed_extra_profit() external view returns (uint256);
    function get_rate_mul() external view returns (uint256);
}
interface ICurveStableSwapMeta {
    function get_dy_underlying(int128,int128,uint256) external view returns (uint256);
}
interface ICurveStableSwap {
    function get_dy(int128,int128,uint256) external view returns (uint256);
}
interface ICurveCryptoSwap {
    function get_dy(uint256,uint256,uint256) external view returns (uint256);
}
// For Dodoex V2 DVM & DSP
interface IDodoDVM {
    function _BASE_TOKEN_() external view returns (address);
    function _QUOTE_TOKEN_() external view returns (address);
    function querySellBase(address trader, uint256 payBaseAmount) external view returns (uint256 receiveQuoteAmount, uint256 mtFee);
    function querySellQuote(address trader, uint256 payQuoteAmount) external view returns (uint256 receiveBaseAmount, uint256 mtFee);
}

contract OffchainOracle {
    using SafeMath for uint256;
    using SafeMath for uint112;
    using Sqrt for uint256;
    address private constant _ETH                              = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;
    address private constant _vaultAddress                     = 0xBA12222222228d8Ba445958a75a0704d566BF2C8;
    address private constant _vaultAddressForPulse             = 0x7F51AC3df6A034273FB09BB29e383FCF655e473c;
    address private constant _curveAddressProvider             = 0x5ffe7FB82894076ECB99A30D6A32e969e6e35E98;
    address private constant _curveAddressProviderForZksync    = 0x54A5a69e17Aa6eB89d77aa3828E38C9Eb4fF263D;
    function _getCurvePoolType(address pool) private view returns (uint8) {
        // 0 for stableswap, 1 for cryptoswap, 2 for LLAMMA.

        // check if cryptoswap
        (bool success, bytes memory data) = pool.staticcall(abi.encodeWithSelector(ICurvePool.allowed_extra_profit.selector));
        if (success && data.length >= 32) { // vyper could return redundant bytes
            return 1;
        }

        // check if llamma
        (success, data) = pool.staticcall(abi.encodeWithSelector(ICurvePool.get_rate_mul.selector));
        if (success && data.length >= 32) { // vyper could return redundant bytes
            return 2;
        }

        return 0;
    }
    function _getAmountIn(uint32 _ver, uint8 _decimalsFrom) private pure returns (uint256) {
        uint8 num = 4;
        if(_ver == 8 || _ver == 9) {
            num = 4;
        }
        if(_ver == 81 || _ver == 91) {
            num = 0;
        }
        if(_ver == 82 || _ver == 92) {
            num = 2;
        }
        if(_ver == 83 || _ver == 93) {
            num = 6;
        }
        if(_ver == 84 || _ver == 94) {
            num = 8;
        }
        if(_ver == 85 || _ver == 95) {
            num = 10;
        }
        uint256 amountIn = 10**(_decimalsFrom + num - 4);
        return amountIn;
    }

    function getRate(address tokenFrom, address tokenTo, address poolAddress, uint32 ver) external view returns (uint256 rate, uint8 decimalsFrom, uint8 decimalsTo) {
        if(ver == 2 || ver == 5 || ver == 7) {
            address token0;
            address token1;
            uint256 reserve0;
            uint256 reserve1;
            // version = 2 : Uniswap V2 like
            if(ver == 2) {
                token0 = IUniswapV2Pair(poolAddress).token0();
                token1 = IUniswapV2Pair(poolAddress).token1();
                (reserve0, reserve1,) = IUniswapV2Pair(poolAddress).getReserves(); 
            } 
            // version = 5 : Meshswap
            else if(ver == 5) {
                token0 = IMeshswapPool(poolAddress).token0();
                token1 = IMeshswapPool(poolAddress).token1();
                reserve0 = IMeshswapPool(poolAddress).reserve0();
                reserve1 = IMeshswapPool(poolAddress).reserve1();
            }
            // version = 7 : Kyber swap
            else if(ver == 7) {
                token0 = IKyberDmmPool(poolAddress).token0();
                token1 = IKyberDmmPool(poolAddress).token1();
                (,, reserve0, reserve1,) = IKyberDmmPool(poolAddress).getTradeInfo();
            }
            if(token0 == tokenFrom) {
                decimalsFrom = IERC20Metadata(token0).decimals();
                decimalsTo = IERC20Metadata(token1).decimals();
                rate = reserve1.mul(1e18).div(reserve0);
            } else {
                decimalsFrom = IERC20Metadata(token1).decimals();
                decimalsTo = IERC20Metadata(token0).decimals();
                rate = reserve0.mul(1e18).div(reserve1);
            }
        }
        // version = 1 : Uniswap V1
        else if(ver == 1) {
            decimalsFrom = IERC20Metadata(tokenFrom).decimals();
            decimalsTo = 18;
            rate = IUniswapV1(poolAddress).getTokenToEthInputPrice(10**decimalsFrom);
        }
        // version = 3 : Uniswap V3
        else if(ver == 3) {
            address token0 = IUniswapV3Pool(poolAddress).token0();
            address token1 = IUniswapV3Pool(poolAddress).token1();
            (uint256 sqrtPriceX96) = IUniswapV3Pool(poolAddress).slot0();
            if(token0 == tokenFrom) {
                decimalsFrom = IERC20Metadata(token0).decimals();
                decimalsTo = IERC20Metadata(token1).decimals();
                rate = (((1e18 * sqrtPriceX96) >> 96) * sqrtPriceX96) >> 96;
            } else {
                decimalsFrom = IERC20Metadata(token1).decimals();
                decimalsTo = IERC20Metadata(token0).decimals();
                rate = (1e18 << 192) / sqrtPriceX96 / sqrtPriceX96;
            }
        } 
        // version = 4 : QuickSwap V3
        else if(ver == 4) {
            address token0 = IAlgebraPool(poolAddress).token0();
            address token1 = IAlgebraPool(poolAddress).token1();
            (uint256 sqrtPriceX96) = IAlgebraPool(poolAddress).globalState();
            if(token0 == tokenFrom) {
                decimalsFrom = IERC20Metadata(token0).decimals();
                decimalsTo = IERC20Metadata(token1).decimals();
                rate = (((1e18 * sqrtPriceX96) >> 96) * sqrtPriceX96) >> 96;
            } else {
                decimalsFrom = IERC20Metadata(token1).decimals();
                decimalsTo = IERC20Metadata(token0).decimals();
                rate = (1e18 << 192) / sqrtPriceX96 / sqrtPriceX96;
            }
        }
        // version = 6 : balancer v2
        else if(ver == 6) {
            address vaultAddress;
            if(block.chainid == 369) {
                vaultAddress = _vaultAddressForPulse;
            } else {
                vaultAddress = _vaultAddress;
            }
            bytes32 poolId = IWeightedPool(poolAddress).getPoolId();
            (uint256[] memory weights) = IWeightedPool(poolAddress).getNormalizedWeights();
            (address[] memory tokens, uint256[] memory balances,) = IVault(vaultAddress).getPoolTokens(poolId);
            uint256 balanceOfTokenFrom = 0;
            uint256 balanceOfTokenTo = 0;
            for(uint8 i = 0; i < tokens.length; i++ ){
                if(tokens[i] == tokenFrom) {
                    balanceOfTokenFrom = balances[i].mul(1e18).div(weights[i]);
                }
                if(tokens[i] == tokenTo) {
                    balanceOfTokenTo = balances[i].mul(1e18).div(weights[i]);
                }
            }
            decimalsFrom = IERC20Metadata(tokenFrom).decimals();
            decimalsTo = IERC20Metadata(tokenTo).decimals();
            rate = balanceOfTokenTo.mul(1e18).div(balanceOfTokenFrom);
        }
        // version = 8 : Curve CryptoSwap, StableSwap, StableSwapMeta sell = 1 
        // (ver=81 : sell=10^(-4)) 
        // (ver=82 : sell=10^(-2)) 
        // (ver=83 : sell=10^(2)) 
        // (ver=84 : sell=10^(4)) 
        // (ver=85 : sell=10^(6)) 
        else if(ver == 8 || ver == 81 || ver == 82 || ver == 83 || ver == 84 || ver == 85) {
            ICurveProvider curveProvider;
            if(block.chainid == 324) {
                curveProvider = ICurveProvider(_curveAddressProviderForZksync);
            } else {
                curveProvider = ICurveProvider(_curveAddressProvider);
            }
            ICurveMetaregistry curveMetaregistry = ICurveMetaregistry(curveProvider.get_address(7));
            int128 i;
            int128 j;
            bool isUnderlying = false;
            (i, j, isUnderlying) = curveMetaregistry.get_coin_indices(poolAddress, tokenFrom, tokenTo);
            uint8 poolType = _getCurvePoolType(poolAddress);
            bytes4 selector;
            if (poolType == 0 && isUnderlying) {
                selector = ICurveStableSwapMeta.get_dy_underlying.selector;
            } else if (poolType == 0 && !isUnderlying) {
                selector = ICurveStableSwap.get_dy.selector;
            } else {
                selector = ICurveCryptoSwap.get_dy.selector;
            }
            
            if(tokenFrom == _ETH) {
                decimalsFrom = 18;
            } else {
                decimalsFrom = IERC20Metadata(tokenFrom).decimals();
            }
            if(tokenTo == _ETH) {
                decimalsTo = 18;
            } else {
                decimalsTo = IERC20Metadata(tokenTo).decimals();
            }
            uint256 amountIn = _getAmountIn(ver, decimalsFrom);
            
            (bool success, bytes memory data) = poolAddress.staticcall(abi.encodeWithSelector(selector, uint128(i), uint128(j), amountIn));
            if (success && data.length >= 32) { // vyper could return redundant bytes
                uint256 amountOut = abi.decode(data, (uint256));
                if (amountOut > 0) {
                    //rate = amountOut * 1e18 / amountIn;
                    rate = amountOut.mul(1e18).div(amountIn);
                }
            }
        }
        // version = 9 : Dodoex v2 DVM & DSP with sell = 1 
        // (ver=91 : sell=10^(-4)) 
        // (ver=92 : sell=10^(-2)) 
        // (ver=93 : sell=10^(2)) 
        // (ver=94 : sell=10^(4)) 
        // (ver=95 : sell=10^(6)) 
        else if(ver == 9 || ver == 91 || ver == 92 || ver == 93 || ver == 94 || ver == 95) {
            address token0 = IDodoDVM(poolAddress)._BASE_TOKEN_();
            address token1 = IDodoDVM(poolAddress)._QUOTE_TOKEN_();

            if(tokenFrom == token0) {
                decimalsFrom = IERC20Metadata(token0).decimals();
                decimalsTo = IERC20Metadata(token1).decimals();
                uint256 amountIn = _getAmountIn(ver, decimalsFrom);
                (uint256 receiveQuoteAmount, ) = IDodoDVM(poolAddress).querySellBase(0xD692C31E5ec0d87D032ABC243c1eb2C9Ae204FeA, amountIn);
                rate = receiveQuoteAmount.mul(1e18).div(amountIn);
            } else {
                decimalsFrom = IERC20Metadata(token1).decimals();
                decimalsTo = IERC20Metadata(token0).decimals();
                uint256 amountIn = _getAmountIn(ver, decimalsFrom);
                (uint256 receiveBaseAmount, ) = IDodoDVM(poolAddress).querySellQuote(0xD692C31E5ec0d87D032ABC243c1eb2C9Ae204FeA, amountIn);
                rate = receiveBaseAmount.mul(1e18).div(amountIn);
            }
        }
        // version = 10: Balancer stable pool
        else if(ver == 10) {
            uint256 rateFrom = IStablePool(poolAddress).getTokenRate(tokenFrom);
            uint256 rateTo = IStablePool(poolAddress).getTokenRate(tokenTo);
            rate = rateFrom.mul(1e18).div(rateTo);
            decimalsFrom = 18;
            decimalsTo = 18;
        }
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"tokenFrom","type":"address"},{"internalType":"address","name":"tokenTo","type":"address"},{"internalType":"address","name":"poolAddress","type":"address"},{"internalType":"uint32","name":"ver","type":"uint32"}],"name":"getRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"},{"internalType":"uint8","name":"decimalsFrom","type":"uint8"},{"internalType":"uint8","name":"decimalsTo","type":"uint8"}],"stateMutability":"view","type":"function"}]

608060405234801561000f575f80fd5b506132698061001d5f395ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c8063348967ff1461002d575b5f80fd5b610047600480360381019061004291906124a2565b61005f565b60405161005693929190612539565b60405180910390f35b5f805f60028463ffffffff16148061007d575060058463ffffffff16145b8061008e575060078463ffffffff16145b15610803575f805f8060028863ffffffff1603610224578873ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100ee573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101129190612582565b93508873ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561015d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101819190612582565b92508873ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156101cc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101f09190612604565b826dffffffffffffffffffffffffffff169250816dffffffffffffffffffffffffffff1691505080925081935050506105a7565b60058863ffffffff1603610413578873ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561027b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061029f9190612582565b93508873ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061030e9190612582565b92508873ffffffffffffffffffffffffffffffffffffffff1663443cb4bc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610359573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061037d9190612654565b6dffffffffffffffffffffffffffff1691508873ffffffffffffffffffffffffffffffffffffffff16635a76f25e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103d8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103fc9190612654565b6dffffffffffffffffffffffffffff1690506105a6565b60078863ffffffff16036105a5578873ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561046a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061048e9190612582565b93508873ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104d9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104fd9190612582565b92508873ffffffffffffffffffffffffffffffffffffffff1663d66940276040518163ffffffff1660e01b815260040160a060405180830381865afa158015610548573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061056c91906126a9565b909192935090919250826dffffffffffffffffffffffffffff169250816dffffffffffffffffffffffffffff1691505080925081935050505b5b5b8a73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036106ec578373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610623573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610647919061274a565b95508273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610692573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106b6919061274a565b94506106e5826106d7670de0b6b3a76400008461202990919063ffffffff16565b6120a090919063ffffffff16565b96506107fa565b8273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610735573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610759919061274a565b95508373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107a4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107c8919061274a565b94506107f7816107e9670de0b6b3a76400008561202990919063ffffffff16565b6120a090919063ffffffff16565b96505b5050505061201f565b60018463ffffffff160361090f578673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561085a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087e919061274a565b9150601290508473ffffffffffffffffffffffffffffffffffffffff166395b68fe783600a6108ad91906128d1565b6040518263ffffffff1660e01b81526004016108c9919061291b565b602060405180830381865afa1580156108e4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109089190612934565b925061201e565b60038463ffffffff1603610ce2575f8573ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610967573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061098b9190612582565b90505f8673ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109d7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109fb9190612582565b90505f8773ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a47573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a6b9190612989565b73ffffffffffffffffffffffffffffffffffffffff1690508973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610bc2578273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aff573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b23919061274a565b94508173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b6e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b92919061274a565b9350606081606083670de0b6b3a7640000610bad91906129b4565b901c610bb991906129b4565b901c9550610cda565b8173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c0b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c2f919061274a565b94508273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c7a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c9e919061274a565b935080817f0de0b6b3a7640000000000000000000000000000000000000000000000000000610ccd9190612a22565b610cd79190612a22565b95505b50505061201d565b60048463ffffffff16036110b5575f8573ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d3a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d5e9190612582565b90505f8673ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610daa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dce9190612582565b90505f8773ffffffffffffffffffffffffffffffffffffffff1663e76c01e46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e1a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e3e9190612989565b73ffffffffffffffffffffffffffffffffffffffff1690508973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f95578273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ed2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ef6919061274a565b94508173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f41573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f65919061274a565b9350606081606083670de0b6b3a7640000610f8091906129b4565b901c610f8c91906129b4565b901c95506110ad565b8173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fde573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611002919061274a565b94508273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561104d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611071919061274a565b935080817f0de0b6b3a76400000000000000000000000000000000000000000000000000006110a09190612a22565b6110aa9190612a22565b95505b50505061201c565b60068463ffffffff1603611517575f61017146036110e957737f51ac3df6a034273fb09bb29e383fcf655e473c9050611101565b73ba12222222228d8ba445958a75a0704d566bf2c890505b5f8673ffffffffffffffffffffffffffffffffffffffff166338fff2d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561114b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061116f9190612a85565b90505f8773ffffffffffffffffffffffffffffffffffffffff1663f89f27ed6040518163ffffffff1660e01b81526004015f60405180830381865afa1580156111ba573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906111e29190612c00565b90505f808473ffffffffffffffffffffffffffffffffffffffff1663f94d4668856040518263ffffffff1660e01b815260040161121f9190612c56565b5f60405180830381865afa158015611239573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906112619190612d2f565b50915091505f805f5b84518160ff1610156113fd578e73ffffffffffffffffffffffffffffffffffffffff16858260ff16815181106112a3576112a2612db7565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16036113305761132d868260ff16815181106112df576112de612db7565b5b602002602001015161131f670de0b6b3a7640000878560ff168151811061130957611308612db7565b5b602002602001015161202990919063ffffffff16565b6120a090919063ffffffff16565b92505b8d73ffffffffffffffffffffffffffffffffffffffff16858260ff168151811061135d5761135c612db7565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16036113ea576113e7868260ff168151811061139957611398612db7565b5b60200260200101516113d9670de0b6b3a7640000878560ff16815181106113c3576113c2612db7565b5b602002602001015161202990919063ffffffff16565b6120a090919063ffffffff16565b91505b80806113f590612de4565b91505061126a565b508d73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611447573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061146b919061274a565b98508c73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114da919061274a565b9750611509826114fb670de0b6b3a76400008461202990919063ffffffff16565b6120a090919063ffffffff16565b99505050505050505061201b565b60088463ffffffff161480611532575060518463ffffffff16145b80611543575060528463ffffffff16145b80611554575060538463ffffffff16145b80611565575060548463ffffffff16145b80611576575060558463ffffffff16145b156119fc575f61014446036115a1577354a5a69e17aa6eb89d77aa3828e38c9eb4ff263d90506115b9565b735ffe7fb82894076ecb99a30d6a32e969e6e35e9890505b5f8173ffffffffffffffffffffffffffffffffffffffff1663493f4f7460076040518263ffffffff1660e01b81526004016115f49190612e4e565b602060405180830381865afa15801561160f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116339190612582565b90505f805f8373ffffffffffffffffffffffffffffffffffffffff1663eb85226d8b8e8e6040518463ffffffff1660e01b815260040161167593929190612e76565b606060405180830381865afa158015611690573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116b49190612f16565b8093508194508295505050505f6116ca8b6120f7565b90505f808260ff161480156116dc5750825b156116f0576307211ef760e01b9050611720565b5f8260ff16148015611700575082155b1561171457635e0d443f60e01b905061171f565b63556d6e9f60e01b90505b5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff160361177057601298506117e0565b8d73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117b9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117dd919061274a565b98505b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff160361183057601297506118a0565b8c73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611879573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061189d919061274a565b97505b5f6118ab8c8b6122e9565b90505f808e73ffffffffffffffffffffffffffffffffffffffff16848989866040516024016118dc93929190612f90565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516119469190613031565b5f60405180830381855afa9150503d805f811461197e576040519150601f19603f3d011682016040523d82523d5f602084013e611983565b606091505b509150915081801561199757506020815110155b156119ed575f818060200190518101906119b19190612934565b90505f8111156119eb576119e8846119da670de0b6b3a76400008461202990919063ffffffff16565b6120a090919063ffffffff16565b9d505b505b5050505050505050505061201a565b60098463ffffffff161480611a175750605b8463ffffffff16145b80611a285750605c8463ffffffff16145b80611a395750605d8463ffffffff16145b80611a4a5750605e8463ffffffff16145b80611a5b5750605f8463ffffffff16145b15611eda575f8573ffffffffffffffffffffffffffffffffffffffff16634a248d2a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611aaa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ace9190612582565b90505f8673ffffffffffffffffffffffffffffffffffffffff1663d4b970466040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b1a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b3e9190612582565b90508173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1603611d25578173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bbc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611be0919061274a565b93508073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c2b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c4f919061274a565b92505f611c5c87866122e9565b90505f8873ffffffffffffffffffffffffffffffffffffffff166379a0487673d692c31e5ec0d87d032abc243c1eb2c9ae204fea846040518363ffffffff1660e01b8152600401611cae929190613047565b6040805180830381865afa158015611cc8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cec919061306e565b509050611d1c82611d0e670de0b6b3a76400008461202990919063ffffffff16565b6120a090919063ffffffff16565b96505050611ed3565b8073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d6e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d92919061274a565b93508173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ddd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e01919061274a565b92505f611e0e87866122e9565b90505f8873ffffffffffffffffffffffffffffffffffffffff166366410a2173d692c31e5ec0d87d032abc243c1eb2c9ae204fea846040518363ffffffff1660e01b8152600401611e60929190613047565b6040805180830381865afa158015611e7a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e9e919061306e565b509050611ece82611ec0670de0b6b3a76400008461202990919063ffffffff16565b6120a090919063ffffffff16565b965050505b5050612019565b600a8463ffffffff1603612018575f8573ffffffffffffffffffffffffffffffffffffffff166354dea00a896040518263ffffffff1660e01b8152600401611f2291906130ac565b602060405180830381865afa158015611f3d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f619190612934565b90505f8673ffffffffffffffffffffffffffffffffffffffff166354dea00a896040518263ffffffff1660e01b8152600401611f9d91906130ac565b602060405180830381865afa158015611fb8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fdc9190612934565b905061200b81611ffd670de0b6b3a76400008561202990919063ffffffff16565b6120a090919063ffffffff16565b9450601293506012925050505b5b5b5b5b5b5b5b9450945094915050565b5f808303612039575f905061209a565b5f828461204691906129b4565b90508284826120559190612a22565b14612095576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208c90613145565b60405180910390fd5b809150505b92915050565b5f8082116120e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120da906131ad565b60405180910390fd5b81836120ef9190612a22565b905092915050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff166349fe9e7760e01b604051602401604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516121899190613031565b5f60405180830381855afa9150503d805f81146121c1576040519150601f19603f3d011682016040523d82523d5f602084013e6121c6565b606091505b50915091508180156121da57506020815110155b156121ea576001925050506122e4565b8373ffffffffffffffffffffffffffffffffffffffff1663095a0fc660e01b604051602401604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516122799190613031565b5f60405180830381855afa9150503d805f81146122b1576040519150601f19603f3d011682016040523d82523d5f602084013e6122b6565b606091505b5080925081935050508180156122ce57506020815110155b156122de576002925050506122e4565b5f925050505b919050565b5f806004905060088463ffffffff16148061230a575060098463ffffffff16145b1561231457600490505b60518463ffffffff16148061232f5750605b8463ffffffff16145b15612338575f90505b60528463ffffffff1614806123535750605c8463ffffffff16145b1561235d57600290505b60538463ffffffff1614806123785750605d8463ffffffff16145b1561238257600690505b60548463ffffffff16148061239d5750605e8463ffffffff16145b156123a757600890505b60558463ffffffff1614806123c25750605f8463ffffffff16145b156123cc57600a90505b5f600482856123db91906131cb565b6123e591906131ff565b600a6123f191906128d1565b9050809250505092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6124388261240f565b9050919050565b6124488161242e565b8114612452575f80fd5b50565b5f813590506124638161243f565b92915050565b5f63ffffffff82169050919050565b61248181612469565b811461248b575f80fd5b50565b5f8135905061249c81612478565b92915050565b5f805f80608085870312156124ba576124b9612407565b5b5f6124c787828801612455565b94505060206124d887828801612455565b93505060406124e987828801612455565b92505060606124fa8782880161248e565b91505092959194509250565b5f819050919050565b61251881612506565b82525050565b5f60ff82169050919050565b6125338161251e565b82525050565b5f60608201905061254c5f83018661250f565b612559602083018561252a565b612566604083018461252a565b949350505050565b5f8151905061257c8161243f565b92915050565b5f6020828403121561259757612596612407565b5b5f6125a48482850161256e565b91505092915050565b5f6dffffffffffffffffffffffffffff82169050919050565b6125cf816125ad565b81146125d9575f80fd5b50565b5f815190506125ea816125c6565b92915050565b5f815190506125fe81612478565b92915050565b5f805f6060848603121561261b5761261a612407565b5b5f612628868287016125dc565b9350506020612639868287016125dc565b925050604061264a868287016125f0565b9150509250925092565b5f6020828403121561266957612668612407565b5b5f612676848285016125dc565b91505092915050565b61268881612506565b8114612692575f80fd5b50565b5f815190506126a38161267f565b92915050565b5f805f805f60a086880312156126c2576126c1612407565b5b5f6126cf888289016125dc565b95505060206126e0888289016125dc565b94505060406126f1888289016125dc565b9350506060612702888289016125dc565b925050608061271388828901612695565b9150509295509295909350565b6127298161251e565b8114612733575f80fd5b50565b5f8151905061274481612720565b92915050565b5f6020828403121561275f5761275e612407565b5b5f61276c84828501612736565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156127f7578086048111156127d3576127d2612775565b5b60018516156127e25780820291505b80810290506127f0856127a2565b94506127b7565b94509492505050565b5f8261280f57600190506128ca565b8161281c575f90506128ca565b8160018114612832576002811461283c5761286b565b60019150506128ca565b60ff84111561284e5761284d612775565b5b8360020a91508482111561286557612864612775565b5b506128ca565b5060208310610133831016604e8410600b84101617156128a05782820a90508381111561289b5761289a612775565b5b6128ca565b6128ad84848460016127ae565b925090508184048111156128c4576128c3612775565b5b81810290505b9392505050565b5f6128db82612506565b91506128e68361251e565b92506129137fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612800565b905092915050565b5f60208201905061292e5f83018461250f565b92915050565b5f6020828403121561294957612948612407565b5b5f61295684828501612695565b91505092915050565b6129688161240f565b8114612972575f80fd5b50565b5f815190506129838161295f565b92915050565b5f6020828403121561299e5761299d612407565b5b5f6129ab84828501612975565b91505092915050565b5f6129be82612506565b91506129c983612506565b92508282026129d781612506565b915082820484148315176129ee576129ed612775565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612a2c82612506565b9150612a3783612506565b925082612a4757612a466129f5565b5b828204905092915050565b5f819050919050565b612a6481612a52565b8114612a6e575f80fd5b50565b5f81519050612a7f81612a5b565b92915050565b5f60208284031215612a9a57612a99612407565b5b5f612aa784828501612a71565b91505092915050565b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b612afa82612ab4565b810181811067ffffffffffffffff82111715612b1957612b18612ac4565b5b80604052505050565b5f612b2b6123fe565b9050612b378282612af1565b919050565b5f67ffffffffffffffff821115612b5657612b55612ac4565b5b602082029050602081019050919050565b5f80fd5b5f612b7d612b7884612b3c565b612b22565b90508083825260208201905060208402830185811115612ba057612b9f612b67565b5b835b81811015612bc95780612bb58882612695565b845260208401935050602081019050612ba2565b5050509392505050565b5f82601f830112612be757612be6612ab0565b5b8151612bf7848260208601612b6b565b91505092915050565b5f60208284031215612c1557612c14612407565b5b5f82015167ffffffffffffffff811115612c3257612c3161240b565b5b612c3e84828501612bd3565b91505092915050565b612c5081612a52565b82525050565b5f602082019050612c695f830184612c47565b92915050565b5f67ffffffffffffffff821115612c8957612c88612ac4565b5b602082029050602081019050919050565b5f612cac612ca784612c6f565b612b22565b90508083825260208201905060208402830185811115612ccf57612cce612b67565b5b835b81811015612cf85780612ce4888261256e565b845260208401935050602081019050612cd1565b5050509392505050565b5f82601f830112612d1657612d15612ab0565b5b8151612d26848260208601612c9a565b91505092915050565b5f805f60608486031215612d4657612d45612407565b5b5f84015167ffffffffffffffff811115612d6357612d6261240b565b5b612d6f86828701612d02565b935050602084015167ffffffffffffffff811115612d9057612d8f61240b565b5b612d9c86828701612bd3565b9250506040612dad86828701612695565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f612dee8261251e565b915060ff8203612e0157612e00612775565b5b600182019050919050565b5f819050919050565b5f819050919050565b5f612e38612e33612e2e84612e0c565b612e15565b612506565b9050919050565b612e4881612e1e565b82525050565b5f602082019050612e615f830184612e3f565b92915050565b612e708161242e565b82525050565b5f606082019050612e895f830186612e67565b612e966020830185612e67565b612ea36040830184612e67565b949350505050565b5f81600f0b9050919050565b612ec081612eab565b8114612eca575f80fd5b50565b5f81519050612edb81612eb7565b92915050565b5f8115159050919050565b612ef581612ee1565b8114612eff575f80fd5b50565b5f81519050612f1081612eec565b92915050565b5f805f60608486031215612f2d57612f2c612407565b5b5f612f3a86828701612ecd565b9350506020612f4b86828701612ecd565b9250506040612f5c86828701612f02565b9150509250925092565b5f6fffffffffffffffffffffffffffffffff82169050919050565b612f8a81612f66565b82525050565b5f606082019050612fa35f830186612f81565b612fb06020830185612f81565b612fbd604083018461250f565b949350505050565b5f81519050919050565b5f81905092915050565b5f5b83811015612ff6578082015181840152602081019050612fdb565b5f8484015250505050565b5f61300b82612fc5565b6130158185612fcf565b9350613025818560208601612fd9565b80840191505092915050565b5f61303c8284613001565b915081905092915050565b5f60408201905061305a5f830185612e67565b613067602083018461250f565b9392505050565b5f806040838503121561308457613083612407565b5b5f61309185828601612695565b92505060206130a285828601612695565b9150509250929050565b5f6020820190506130bf5f830184612e67565b92915050565b5f82825260208201905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f61312f6021836130c5565b915061313a826130d5565b604082019050919050565b5f6020820190508181035f83015261315c81613123565b9050919050565b7f536166654d6174683a206469766973696f6e206279207a65726f0000000000005f82015250565b5f613197601a836130c5565b91506131a282613163565b602082019050919050565b5f6020820190508181035f8301526131c48161318b565b9050919050565b5f6131d58261251e565b91506131e08361251e565b9250828201905060ff8111156131f9576131f8612775565b5b92915050565b5f6132098261251e565b91506132148361251e565b9250828203905060ff81111561322d5761322c612775565b5b9291505056fea2646970667358221220549381f6a36f9c0020a08cf76d94e5b0b84864076fedb449b5738f2c8acbb94864736f6c63430008180033

Deployed Bytecode

0x608060405234801561000f575f80fd5b5060043610610029575f3560e01c8063348967ff1461002d575b5f80fd5b610047600480360381019061004291906124a2565b61005f565b60405161005693929190612539565b60405180910390f35b5f805f60028463ffffffff16148061007d575060058463ffffffff16145b8061008e575060078463ffffffff16145b15610803575f805f8060028863ffffffff1603610224578873ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100ee573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101129190612582565b93508873ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561015d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101819190612582565b92508873ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156101cc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101f09190612604565b826dffffffffffffffffffffffffffff169250816dffffffffffffffffffffffffffff1691505080925081935050506105a7565b60058863ffffffff1603610413578873ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561027b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061029f9190612582565b93508873ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061030e9190612582565b92508873ffffffffffffffffffffffffffffffffffffffff1663443cb4bc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610359573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061037d9190612654565b6dffffffffffffffffffffffffffff1691508873ffffffffffffffffffffffffffffffffffffffff16635a76f25e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103d8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103fc9190612654565b6dffffffffffffffffffffffffffff1690506105a6565b60078863ffffffff16036105a5578873ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561046a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061048e9190612582565b93508873ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104d9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104fd9190612582565b92508873ffffffffffffffffffffffffffffffffffffffff1663d66940276040518163ffffffff1660e01b815260040160a060405180830381865afa158015610548573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061056c91906126a9565b909192935090919250826dffffffffffffffffffffffffffff169250816dffffffffffffffffffffffffffff1691505080925081935050505b5b5b8a73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036106ec578373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610623573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610647919061274a565b95508273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610692573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106b6919061274a565b94506106e5826106d7670de0b6b3a76400008461202990919063ffffffff16565b6120a090919063ffffffff16565b96506107fa565b8273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610735573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610759919061274a565b95508373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107a4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107c8919061274a565b94506107f7816107e9670de0b6b3a76400008561202990919063ffffffff16565b6120a090919063ffffffff16565b96505b5050505061201f565b60018463ffffffff160361090f578673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561085a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087e919061274a565b9150601290508473ffffffffffffffffffffffffffffffffffffffff166395b68fe783600a6108ad91906128d1565b6040518263ffffffff1660e01b81526004016108c9919061291b565b602060405180830381865afa1580156108e4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109089190612934565b925061201e565b60038463ffffffff1603610ce2575f8573ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610967573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061098b9190612582565b90505f8673ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109d7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109fb9190612582565b90505f8773ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a47573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a6b9190612989565b73ffffffffffffffffffffffffffffffffffffffff1690508973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610bc2578273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aff573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b23919061274a565b94508173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b6e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b92919061274a565b9350606081606083670de0b6b3a7640000610bad91906129b4565b901c610bb991906129b4565b901c9550610cda565b8173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c0b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c2f919061274a565b94508273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c7a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c9e919061274a565b935080817f0de0b6b3a7640000000000000000000000000000000000000000000000000000610ccd9190612a22565b610cd79190612a22565b95505b50505061201d565b60048463ffffffff16036110b5575f8573ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d3a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d5e9190612582565b90505f8673ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610daa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dce9190612582565b90505f8773ffffffffffffffffffffffffffffffffffffffff1663e76c01e46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e1a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e3e9190612989565b73ffffffffffffffffffffffffffffffffffffffff1690508973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f95578273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ed2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ef6919061274a565b94508173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f41573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f65919061274a565b9350606081606083670de0b6b3a7640000610f8091906129b4565b901c610f8c91906129b4565b901c95506110ad565b8173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fde573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611002919061274a565b94508273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561104d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611071919061274a565b935080817f0de0b6b3a76400000000000000000000000000000000000000000000000000006110a09190612a22565b6110aa9190612a22565b95505b50505061201c565b60068463ffffffff1603611517575f61017146036110e957737f51ac3df6a034273fb09bb29e383fcf655e473c9050611101565b73ba12222222228d8ba445958a75a0704d566bf2c890505b5f8673ffffffffffffffffffffffffffffffffffffffff166338fff2d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561114b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061116f9190612a85565b90505f8773ffffffffffffffffffffffffffffffffffffffff1663f89f27ed6040518163ffffffff1660e01b81526004015f60405180830381865afa1580156111ba573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906111e29190612c00565b90505f808473ffffffffffffffffffffffffffffffffffffffff1663f94d4668856040518263ffffffff1660e01b815260040161121f9190612c56565b5f60405180830381865afa158015611239573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906112619190612d2f565b50915091505f805f5b84518160ff1610156113fd578e73ffffffffffffffffffffffffffffffffffffffff16858260ff16815181106112a3576112a2612db7565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16036113305761132d868260ff16815181106112df576112de612db7565b5b602002602001015161131f670de0b6b3a7640000878560ff168151811061130957611308612db7565b5b602002602001015161202990919063ffffffff16565b6120a090919063ffffffff16565b92505b8d73ffffffffffffffffffffffffffffffffffffffff16858260ff168151811061135d5761135c612db7565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16036113ea576113e7868260ff168151811061139957611398612db7565b5b60200260200101516113d9670de0b6b3a7640000878560ff16815181106113c3576113c2612db7565b5b602002602001015161202990919063ffffffff16565b6120a090919063ffffffff16565b91505b80806113f590612de4565b91505061126a565b508d73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611447573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061146b919061274a565b98508c73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114da919061274a565b9750611509826114fb670de0b6b3a76400008461202990919063ffffffff16565b6120a090919063ffffffff16565b99505050505050505061201b565b60088463ffffffff161480611532575060518463ffffffff16145b80611543575060528463ffffffff16145b80611554575060538463ffffffff16145b80611565575060548463ffffffff16145b80611576575060558463ffffffff16145b156119fc575f61014446036115a1577354a5a69e17aa6eb89d77aa3828e38c9eb4ff263d90506115b9565b735ffe7fb82894076ecb99a30d6a32e969e6e35e9890505b5f8173ffffffffffffffffffffffffffffffffffffffff1663493f4f7460076040518263ffffffff1660e01b81526004016115f49190612e4e565b602060405180830381865afa15801561160f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116339190612582565b90505f805f8373ffffffffffffffffffffffffffffffffffffffff1663eb85226d8b8e8e6040518463ffffffff1660e01b815260040161167593929190612e76565b606060405180830381865afa158015611690573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116b49190612f16565b8093508194508295505050505f6116ca8b6120f7565b90505f808260ff161480156116dc5750825b156116f0576307211ef760e01b9050611720565b5f8260ff16148015611700575082155b1561171457635e0d443f60e01b905061171f565b63556d6e9f60e01b90505b5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff160361177057601298506117e0565b8d73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117b9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117dd919061274a565b98505b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff160361183057601297506118a0565b8c73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611879573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061189d919061274a565b97505b5f6118ab8c8b6122e9565b90505f808e73ffffffffffffffffffffffffffffffffffffffff16848989866040516024016118dc93929190612f90565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516119469190613031565b5f60405180830381855afa9150503d805f811461197e576040519150601f19603f3d011682016040523d82523d5f602084013e611983565b606091505b509150915081801561199757506020815110155b156119ed575f818060200190518101906119b19190612934565b90505f8111156119eb576119e8846119da670de0b6b3a76400008461202990919063ffffffff16565b6120a090919063ffffffff16565b9d505b505b5050505050505050505061201a565b60098463ffffffff161480611a175750605b8463ffffffff16145b80611a285750605c8463ffffffff16145b80611a395750605d8463ffffffff16145b80611a4a5750605e8463ffffffff16145b80611a5b5750605f8463ffffffff16145b15611eda575f8573ffffffffffffffffffffffffffffffffffffffff16634a248d2a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611aaa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ace9190612582565b90505f8673ffffffffffffffffffffffffffffffffffffffff1663d4b970466040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b1a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b3e9190612582565b90508173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1603611d25578173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bbc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611be0919061274a565b93508073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c2b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c4f919061274a565b92505f611c5c87866122e9565b90505f8873ffffffffffffffffffffffffffffffffffffffff166379a0487673d692c31e5ec0d87d032abc243c1eb2c9ae204fea846040518363ffffffff1660e01b8152600401611cae929190613047565b6040805180830381865afa158015611cc8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cec919061306e565b509050611d1c82611d0e670de0b6b3a76400008461202990919063ffffffff16565b6120a090919063ffffffff16565b96505050611ed3565b8073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d6e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d92919061274a565b93508173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ddd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e01919061274a565b92505f611e0e87866122e9565b90505f8873ffffffffffffffffffffffffffffffffffffffff166366410a2173d692c31e5ec0d87d032abc243c1eb2c9ae204fea846040518363ffffffff1660e01b8152600401611e60929190613047565b6040805180830381865afa158015611e7a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e9e919061306e565b509050611ece82611ec0670de0b6b3a76400008461202990919063ffffffff16565b6120a090919063ffffffff16565b965050505b5050612019565b600a8463ffffffff1603612018575f8573ffffffffffffffffffffffffffffffffffffffff166354dea00a896040518263ffffffff1660e01b8152600401611f2291906130ac565b602060405180830381865afa158015611f3d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f619190612934565b90505f8673ffffffffffffffffffffffffffffffffffffffff166354dea00a896040518263ffffffff1660e01b8152600401611f9d91906130ac565b602060405180830381865afa158015611fb8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fdc9190612934565b905061200b81611ffd670de0b6b3a76400008561202990919063ffffffff16565b6120a090919063ffffffff16565b9450601293506012925050505b5b5b5b5b5b5b5b9450945094915050565b5f808303612039575f905061209a565b5f828461204691906129b4565b90508284826120559190612a22565b14612095576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208c90613145565b60405180910390fd5b809150505b92915050565b5f8082116120e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120da906131ad565b60405180910390fd5b81836120ef9190612a22565b905092915050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff166349fe9e7760e01b604051602401604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516121899190613031565b5f60405180830381855afa9150503d805f81146121c1576040519150601f19603f3d011682016040523d82523d5f602084013e6121c6565b606091505b50915091508180156121da57506020815110155b156121ea576001925050506122e4565b8373ffffffffffffffffffffffffffffffffffffffff1663095a0fc660e01b604051602401604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516122799190613031565b5f60405180830381855afa9150503d805f81146122b1576040519150601f19603f3d011682016040523d82523d5f602084013e6122b6565b606091505b5080925081935050508180156122ce57506020815110155b156122de576002925050506122e4565b5f925050505b919050565b5f806004905060088463ffffffff16148061230a575060098463ffffffff16145b1561231457600490505b60518463ffffffff16148061232f5750605b8463ffffffff16145b15612338575f90505b60528463ffffffff1614806123535750605c8463ffffffff16145b1561235d57600290505b60538463ffffffff1614806123785750605d8463ffffffff16145b1561238257600690505b60548463ffffffff16148061239d5750605e8463ffffffff16145b156123a757600890505b60558463ffffffff1614806123c25750605f8463ffffffff16145b156123cc57600a90505b5f600482856123db91906131cb565b6123e591906131ff565b600a6123f191906128d1565b9050809250505092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6124388261240f565b9050919050565b6124488161242e565b8114612452575f80fd5b50565b5f813590506124638161243f565b92915050565b5f63ffffffff82169050919050565b61248181612469565b811461248b575f80fd5b50565b5f8135905061249c81612478565b92915050565b5f805f80608085870312156124ba576124b9612407565b5b5f6124c787828801612455565b94505060206124d887828801612455565b93505060406124e987828801612455565b92505060606124fa8782880161248e565b91505092959194509250565b5f819050919050565b61251881612506565b82525050565b5f60ff82169050919050565b6125338161251e565b82525050565b5f60608201905061254c5f83018661250f565b612559602083018561252a565b612566604083018461252a565b949350505050565b5f8151905061257c8161243f565b92915050565b5f6020828403121561259757612596612407565b5b5f6125a48482850161256e565b91505092915050565b5f6dffffffffffffffffffffffffffff82169050919050565b6125cf816125ad565b81146125d9575f80fd5b50565b5f815190506125ea816125c6565b92915050565b5f815190506125fe81612478565b92915050565b5f805f6060848603121561261b5761261a612407565b5b5f612628868287016125dc565b9350506020612639868287016125dc565b925050604061264a868287016125f0565b9150509250925092565b5f6020828403121561266957612668612407565b5b5f612676848285016125dc565b91505092915050565b61268881612506565b8114612692575f80fd5b50565b5f815190506126a38161267f565b92915050565b5f805f805f60a086880312156126c2576126c1612407565b5b5f6126cf888289016125dc565b95505060206126e0888289016125dc565b94505060406126f1888289016125dc565b9350506060612702888289016125dc565b925050608061271388828901612695565b9150509295509295909350565b6127298161251e565b8114612733575f80fd5b50565b5f8151905061274481612720565b92915050565b5f6020828403121561275f5761275e612407565b5b5f61276c84828501612736565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156127f7578086048111156127d3576127d2612775565b5b60018516156127e25780820291505b80810290506127f0856127a2565b94506127b7565b94509492505050565b5f8261280f57600190506128ca565b8161281c575f90506128ca565b8160018114612832576002811461283c5761286b565b60019150506128ca565b60ff84111561284e5761284d612775565b5b8360020a91508482111561286557612864612775565b5b506128ca565b5060208310610133831016604e8410600b84101617156128a05782820a90508381111561289b5761289a612775565b5b6128ca565b6128ad84848460016127ae565b925090508184048111156128c4576128c3612775565b5b81810290505b9392505050565b5f6128db82612506565b91506128e68361251e565b92506129137fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612800565b905092915050565b5f60208201905061292e5f83018461250f565b92915050565b5f6020828403121561294957612948612407565b5b5f61295684828501612695565b91505092915050565b6129688161240f565b8114612972575f80fd5b50565b5f815190506129838161295f565b92915050565b5f6020828403121561299e5761299d612407565b5b5f6129ab84828501612975565b91505092915050565b5f6129be82612506565b91506129c983612506565b92508282026129d781612506565b915082820484148315176129ee576129ed612775565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612a2c82612506565b9150612a3783612506565b925082612a4757612a466129f5565b5b828204905092915050565b5f819050919050565b612a6481612a52565b8114612a6e575f80fd5b50565b5f81519050612a7f81612a5b565b92915050565b5f60208284031215612a9a57612a99612407565b5b5f612aa784828501612a71565b91505092915050565b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b612afa82612ab4565b810181811067ffffffffffffffff82111715612b1957612b18612ac4565b5b80604052505050565b5f612b2b6123fe565b9050612b378282612af1565b919050565b5f67ffffffffffffffff821115612b5657612b55612ac4565b5b602082029050602081019050919050565b5f80fd5b5f612b7d612b7884612b3c565b612b22565b90508083825260208201905060208402830185811115612ba057612b9f612b67565b5b835b81811015612bc95780612bb58882612695565b845260208401935050602081019050612ba2565b5050509392505050565b5f82601f830112612be757612be6612ab0565b5b8151612bf7848260208601612b6b565b91505092915050565b5f60208284031215612c1557612c14612407565b5b5f82015167ffffffffffffffff811115612c3257612c3161240b565b5b612c3e84828501612bd3565b91505092915050565b612c5081612a52565b82525050565b5f602082019050612c695f830184612c47565b92915050565b5f67ffffffffffffffff821115612c8957612c88612ac4565b5b602082029050602081019050919050565b5f612cac612ca784612c6f565b612b22565b90508083825260208201905060208402830185811115612ccf57612cce612b67565b5b835b81811015612cf85780612ce4888261256e565b845260208401935050602081019050612cd1565b5050509392505050565b5f82601f830112612d1657612d15612ab0565b5b8151612d26848260208601612c9a565b91505092915050565b5f805f60608486031215612d4657612d45612407565b5b5f84015167ffffffffffffffff811115612d6357612d6261240b565b5b612d6f86828701612d02565b935050602084015167ffffffffffffffff811115612d9057612d8f61240b565b5b612d9c86828701612bd3565b9250506040612dad86828701612695565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f612dee8261251e565b915060ff8203612e0157612e00612775565b5b600182019050919050565b5f819050919050565b5f819050919050565b5f612e38612e33612e2e84612e0c565b612e15565b612506565b9050919050565b612e4881612e1e565b82525050565b5f602082019050612e615f830184612e3f565b92915050565b612e708161242e565b82525050565b5f606082019050612e895f830186612e67565b612e966020830185612e67565b612ea36040830184612e67565b949350505050565b5f81600f0b9050919050565b612ec081612eab565b8114612eca575f80fd5b50565b5f81519050612edb81612eb7565b92915050565b5f8115159050919050565b612ef581612ee1565b8114612eff575f80fd5b50565b5f81519050612f1081612eec565b92915050565b5f805f60608486031215612f2d57612f2c612407565b5b5f612f3a86828701612ecd565b9350506020612f4b86828701612ecd565b9250506040612f5c86828701612f02565b9150509250925092565b5f6fffffffffffffffffffffffffffffffff82169050919050565b612f8a81612f66565b82525050565b5f606082019050612fa35f830186612f81565b612fb06020830185612f81565b612fbd604083018461250f565b949350505050565b5f81519050919050565b5f81905092915050565b5f5b83811015612ff6578082015181840152602081019050612fdb565b5f8484015250505050565b5f61300b82612fc5565b6130158185612fcf565b9350613025818560208601612fd9565b80840191505092915050565b5f61303c8284613001565b915081905092915050565b5f60408201905061305a5f830185612e67565b613067602083018461250f565b9392505050565b5f806040838503121561308457613083612407565b5b5f61309185828601612695565b92505060206130a285828601612695565b9150509250929050565b5f6020820190506130bf5f830184612e67565b92915050565b5f82825260208201905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f61312f6021836130c5565b915061313a826130d5565b604082019050919050565b5f6020820190508181035f83015261315c81613123565b9050919050565b7f536166654d6174683a206469766973696f6e206279207a65726f0000000000005f82015250565b5f613197601a836130c5565b91506131a282613163565b602082019050919050565b5f6020820190508181035f8301526131c48161318b565b9050919050565b5f6131d58261251e565b91506131e08361251e565b9250828201905060ff8111156131f9576131f8612775565b5b92915050565b5f6132098261251e565b91506132148361251e565b9250828203905060ff81111561322d5761322c612775565b5b9291505056fea2646970667358221220549381f6a36f9c0020a08cf76d94e5b0b84864076fedb449b5738f2c8acbb94864736f6c63430008180033

Deployed Bytecode Sourcemap

7098:10856:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9118:8833;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;9227:12;9241:18;9261:16;9300:1;9293:3;:8;;;:20;;;;9312:1;9305:3;:8;;;9293:20;:32;;;;9324:1;9317:3;:8;;;9293:32;9290:8654;;;9342:14;9371;9400:16;9431;9518:1;9511:3;:8;;;9508:892;;9564:11;9549:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9540:45;;9628:11;9613:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9604:45;;9707:11;9692:39;;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9668:65;;;;;;;;;;;;;;;;;;;9508:892;;;9819:1;9812:3;:8;;;9809:591;;9864:11;9850:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9841:44;;9927:11;9913:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9904:44;;9992:11;9978:35;;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9967:48;;;;10059:11;10045:35;;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10034:48;;;;9809:591;;;10168:1;10161:3;:8;;;10158:242;;10213:11;10199:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10190:44;;10276:11;10262:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10253:44;;10357:11;10343:39;;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10316:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;10158:242;9809:591;9508:892;10427:9;10417:19;;:6;:19;;;10414:442;;10487:6;10472:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10457:48;;10552:6;10537:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10524:46;;10596:32;10619:8;10596:18;10609:4;10596:8;:12;;:18;;;;:::i;:::-;:22;;:32;;;;:::i;:::-;10589:39;;10414:442;;;10699:6;10684:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10669:48;;10764:6;10749:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10736:46;;10808:32;10831:8;10808:18;10821:4;10808:8;:12;;:18;;;;:::i;:::-;:22;;:32;;;;:::i;:::-;10801:39;;10414:442;9327:1540;;;;9290:8654;;;10929:1;10922:3;:8;;;10919:7025;;10977:9;10962:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10947:51;;11026:2;11013:15;;11061:11;11050:47;;;11102:12;11098:2;:16;;;;:::i;:::-;11050:65;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11043:72;;10919:7025;;;11189:1;11182:3;:8;;;11179:6765;;11207:14;11239:11;11224:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11207:53;;11275:14;11307:11;11292:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11275:53;;11344:20;11383:11;11368:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11343:60;;;;11431:9;11421:19;;:6;:19;;;11418:473;;11491:6;11476:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11461:48;;11556:6;11541:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11528:46;;11650:2;11633:12;11627:2;11610:12;11603:4;:19;;;;:::i;:::-;11602:27;;11601:44;;;;:::i;:::-;11600:52;;11593:59;;11418:473;;;11723:6;11708:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11693:48;;11788:6;11773:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11760:46;;11863:12;11848;11833:11;11832:28;;;;:::i;:::-;:43;;;;:::i;:::-;11825:50;;11418:473;11192:710;;;11179:6765;;;11967:1;11960:3;:8;;;11957:5987;;11985:14;12015:11;12002:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11985:51;;12051:14;12081:11;12068:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12051:51;;12118:20;12155:11;12142:37;;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12117:64;;;;12209:9;12199:19;;:6;:19;;;12196:473;;12269:6;12254:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12239:48;;12334:6;12319:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12306:46;;12428:2;12411:12;12405:2;12388:12;12381:4;:19;;;;:::i;:::-;12380:27;;12379:44;;;;:::i;:::-;12378:52;;12371:59;;12196:473;;;12501:6;12486:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12471:48;;12566:6;12551:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12538:46;;12641:12;12626;12611:11;12610:28;;;;:::i;:::-;:43;;;;:::i;:::-;12603:50;;12196:473;11970:710;;;11957:5987;;;12743:1;12736:3;:8;;;12733:5211;;12761:20;12816:3;12799:13;:20;12796:165;;7505:42;12840:36;;12796:165;;;7395:42;12917:28;;12796:165;12975:14;13006:11;12992:36;;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12975:55;;13046:24;13088:11;13074:47;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13045:78;;13139:23;13164:25;13201:12;13194:34;;;13229:6;13194:42;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13138:98;;;;;13251:26;13296:24;13343:7;13339:345;13360:6;:13;13356:1;:17;;;13339:345;;;13415:9;13402:22;;:6;13409:1;13402:9;;;;;;;;;;:::i;:::-;;;;;;;;:22;;;13399:128;;13470:37;13496:7;13504:1;13496:10;;;;;;;;;;:::i;:::-;;;;;;;;13470:21;13486:4;13470:8;13479:1;13470:11;;;;;;;;;;:::i;:::-;;;;;;;;:15;;:21;;;;:::i;:::-;:25;;:37;;;;:::i;:::-;13449:58;;13399:128;13561:7;13548:20;;:6;13555:1;13548:9;;;;;;;;;;:::i;:::-;;;;;;;;:20;;;13545:124;;13612:37;13638:7;13646:1;13638:10;;;;;;;;;;:::i;:::-;;;;;;;;13612:21;13628:4;13612:8;13621:1;13612:11;;;;;;;;;;:::i;:::-;;;;;;;;:15;;:21;;;;:::i;:::-;:25;;:37;;;;:::i;:::-;13593:56;;13545:124;13375:3;;;;;:::i;:::-;;;;13339:345;;;;13728:9;13713:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13698:51;;13792:7;13777:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13764:47;;13833:50;13864:18;13833:26;13854:4;13833:16;:20;;:26;;;;:::i;:::-;:30;;:50;;;;:::i;:::-;13826:57;;12746:1149;;;;;;;12733:5211;;;14183:1;14176:3;:8;;;:21;;;;14195:2;14188:3;:9;;;14176:21;:34;;;;14208:2;14201:3;:9;;;14176:34;:47;;;;14221:2;14214:3;:9;;;14176:47;:60;;;;14234:2;14227:3;:9;;;14176:60;:73;;;;14247:2;14240:3;:9;;;14176:73;14173:3771;;;14266:28;14329:3;14312:13;:20;14309:216;;7725:42;14353:62;;14309:216;;;7615:42;14456:53;;14309:216;14539:36;14597:13;:25;;;14623:1;14597:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14539:87;;14641:8;14664;14687:17;14750;:34;;;14785:11;14798:9;14809:7;14750:67;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14727:90;;;;;;;;;;;;14832:14;14849:30;14867:11;14849:17;:30::i;:::-;14832:47;;14894:15;14940:1;14928:8;:13;;;:29;;;;;14945:12;14928:29;14924:332;;;14989:47;;;14978:58;;14924:332;;;15074:1;15062:8;:13;;;:30;;;;;15080:12;15079:13;15062:30;15058:198;;;15124:32;;;15113:43;;15058:198;;;15208:32;;;15197:43;;15058:198;14924:332;7285:42;15287:17;;:9;:17;;;15284:166;;15340:2;15325:17;;15284:166;;;15413:9;15398:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15383:51;;15284:166;7285:42;15467:15;;:7;:15;;;15464:158;;15516:2;15503:15;;15464:158;;;15587:7;15572:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15559:47;;15464:158;15636:16;15655:31;15668:3;15673:12;15655;:31::i;:::-;15636:50;;15716:12;15730:17;15751:11;:22;;15797:8;15815:1;15827;15831:8;15774:66;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15751:90;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15715:126;;;;15860:7;:28;;;;;15886:2;15871:4;:11;:17;;15860:28;15856:333;;;15947:17;15978:4;15967:27;;;;;;;;;;;;:::i;:::-;15947:47;;16029:1;16017:9;:13;16013:161;;;16121:33;16145:8;16121:19;16135:4;16121:9;:13;;:19;;;;:::i;:::-;:23;;:33;;;;:::i;:::-;16114:40;;16013:161;15890:299;15856:333;14251:1949;;;;;;;;;;14173:3771;;;16468:1;16461:3;:8;;;:21;;;;16480:2;16473:3;:9;;;16461:21;:34;;;;16493:2;16486:3;:9;;;16461:34;:47;;;;16506:2;16499:3;:9;;;16461:47;:60;;;;16519:2;16512:3;:9;;;16461:60;:73;;;;16532:2;16525:3;:9;;;16461:73;16458:1486;;;16551:14;16577:11;16568:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16551:53;;16619:14;16645:11;16636:35;;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16619:54;;16706:6;16693:19;;:9;:19;;;16690:881;;16763:6;16748:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16733:48;;16828:6;16813:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16800:46;;16865:16;16884:31;16897:3;16902:12;16884;:31::i;:::-;16865:50;;16935:26;16976:11;16967:35;;;17003:42;17047:8;16967:89;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16934:122;;;17082:42;17115:8;17082:28;17105:4;17082:18;:22;;:28;;;;:::i;:::-;:32;;:42;;;;:::i;:::-;17075:49;;16714:426;;16690:881;;;17195:6;17180:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17165:48;;17260:6;17245:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17232:46;;17297:16;17316:31;17329:3;17334:12;17316;:31::i;:::-;17297:50;;17367:25;17407:11;17398:36;;;17435:42;17479:8;17398:90;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17366:122;;;17514:41;17546:8;17514:27;17536:4;17514:17;:21;;:27;;;;:::i;:::-;:31;;:41;;;;:::i;:::-;17507:48;;17146:425;;16690:881;16536:1046;;16458:1486;;;17654:2;17647:3;:9;;;17644:300;;17673:16;17704:11;17692:37;;;17730:9;17692:48;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17673:67;;17755:14;17784:11;17772:37;;;17810:7;17772:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17755:63;;17840:30;17863:6;17840:18;17853:4;17840:8;:12;;:18;;;;:::i;:::-;:22;;:30;;;;:::i;:::-;17833:37;;17900:2;17885:17;;17930:2;17917:15;;17658:286;;17644:300;16458:1486;14173:3771;12733:5211;11957:5987;11179:6765;10919:7025;9290:8654;9118:8833;;;;;;;;:::o;1328:220::-;1386:7;1415:1;1410;:6;1406:20;;1425:1;1418:8;;;;1406:20;1437:9;1453:1;1449;:5;;;;:::i;:::-;1437:17;;1482:1;1477;1473;:5;;;;:::i;:::-;:10;1465:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1539:1;1532:8;;;1328:220;;;;;:::o;1554:153::-;1612:7;1644:1;1640;:5;1632:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;1698:1;1694;:5;;;;:::i;:::-;1687:12;;1554:153;;;;:::o;7774:689::-;7837:5;7952:12;7966:17;7987:4;:15;;8026:40;;;8003:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7987:81;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7951:117;;;;8083:7;:28;;;;;8109:2;8094:4;:11;:17;;8083:28;8079:107;;;8173:1;8166:8;;;;;;8079:107;8244:4;:15;;8283:32;;;8260:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8244:73;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8226:91;;;;;;;;8332:7;:28;;;;;8358:2;8343:4;:11;:17;;8332:28;8328:107;;;8422:1;8415:8;;;;;;8328:107;8454:1;8447:8;;;;7774:689;;;;:::o;8469:641::-;8547:7;8567:9;8579:1;8567:13;;8602:1;8594:4;:9;;;:22;;;;8615:1;8607:4;:9;;;8594:22;8591:61;;;8639:1;8633:7;;8591:61;8673:2;8665:4;:10;;;:24;;;;8687:2;8679:4;:10;;;8665:24;8662:63;;;8712:1;8706:7;;8662:63;8746:2;8738:4;:10;;;:24;;;;8760:2;8752:4;:10;;;8738:24;8735:63;;;8785:1;8779:7;;8735:63;8819:2;8811:4;:10;;;:24;;;;8833:2;8825:4;:10;;;8811:24;8808:63;;;8858:1;8852:7;;8808:63;8892:2;8884:4;:10;;;:24;;;;8906:2;8898:4;:10;;;8884:24;8881:63;;;8931:1;8925:7;;8881:63;8965:2;8957:4;:10;;;:24;;;;8979:2;8971:4;:10;;;8957:24;8954:64;;;9004:2;8998:8;;8954:64;9028:16;9074:1;9068:3;9052:13;:19;;;;:::i;:::-;:23;;;;:::i;:::-;9047:2;:29;;;;:::i;:::-;9028:48;;9094:8;9087:15;;;;8469:641;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;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:93::-;877:7;917:10;910:5;906:22;895:33;;841:93;;;:::o;940:120::-;1012:23;1029:5;1012:23;:::i;:::-;1005:5;1002:34;992:62;;1050:1;1047;1040:12;992:62;940:120;:::o;1066:137::-;1111:5;1149:6;1136:20;1127:29;;1165:32;1191:5;1165:32;:::i;:::-;1066:137;;;;:::o;1209:763::-;1294:6;1302;1310;1318;1367:3;1355:9;1346:7;1342:23;1338:33;1335:120;;;1374:79;;:::i;:::-;1335:120;1494:1;1519:53;1564:7;1555:6;1544:9;1540:22;1519:53;:::i;:::-;1509:63;;1465:117;1621:2;1647:53;1692:7;1683:6;1672:9;1668:22;1647:53;:::i;:::-;1637:63;;1592:118;1749:2;1775:53;1820:7;1811:6;1800:9;1796:22;1775:53;:::i;:::-;1765:63;;1720:118;1877:2;1903:52;1947:7;1938:6;1927:9;1923:22;1903:52;:::i;:::-;1893:62;;1848:117;1209:763;;;;;;;:::o;1978:77::-;2015:7;2044:5;2033:16;;1978:77;;;:::o;2061:118::-;2148:24;2166:5;2148:24;:::i;:::-;2143:3;2136:37;2061:118;;:::o;2185:86::-;2220:7;2260:4;2253:5;2249:16;2238:27;;2185:86;;;:::o;2277:112::-;2360:22;2376:5;2360:22;:::i;:::-;2355:3;2348:35;2277:112;;:::o;2395:426::-;2536:4;2574:2;2563:9;2559:18;2551:26;;2587:71;2655:1;2644:9;2640:17;2631:6;2587:71;:::i;:::-;2668:68;2732:2;2721:9;2717:18;2708:6;2668:68;:::i;:::-;2746;2810:2;2799:9;2795:18;2786:6;2746:68;:::i;:::-;2395:426;;;;;;:::o;2827:143::-;2884:5;2915:6;2909:13;2900:22;;2931:33;2958:5;2931:33;:::i;:::-;2827:143;;;;:::o;2976:351::-;3046:6;3095:2;3083:9;3074:7;3070:23;3066:32;3063:119;;;3101:79;;:::i;:::-;3063:119;3221:1;3246:64;3302:7;3293:6;3282:9;3278:22;3246:64;:::i;:::-;3236:74;;3192:128;2976:351;;;;:::o;3333:114::-;3370:7;3410:30;3403:5;3399:42;3388:53;;3333:114;;;:::o;3453:122::-;3526:24;3544:5;3526:24;:::i;:::-;3519:5;3516:35;3506:63;;3565:1;3562;3555:12;3506:63;3453:122;:::o;3581:143::-;3638:5;3669:6;3663:13;3654:22;;3685:33;3712:5;3685:33;:::i;:::-;3581:143;;;;:::o;3730:141::-;3786:5;3817:6;3811:13;3802:22;;3833:32;3859:5;3833:32;:::i;:::-;3730:141;;;;:::o;3877:661::-;3964:6;3972;3980;4029:2;4017:9;4008:7;4004:23;4000:32;3997:119;;;4035:79;;:::i;:::-;3997:119;4155:1;4180:64;4236:7;4227:6;4216:9;4212:22;4180:64;:::i;:::-;4170:74;;4126:128;4293:2;4319:64;4375:7;4366:6;4355:9;4351:22;4319:64;:::i;:::-;4309:74;;4264:129;4432:2;4458:63;4513:7;4504:6;4493:9;4489:22;4458:63;:::i;:::-;4448:73;;4403:128;3877:661;;;;;:::o;4544:351::-;4614:6;4663:2;4651:9;4642:7;4638:23;4634:32;4631:119;;;4669:79;;:::i;:::-;4631:119;4789:1;4814:64;4870:7;4861:6;4850:9;4846:22;4814:64;:::i;:::-;4804:74;;4760:128;4544:351;;;;:::o;4901:122::-;4974:24;4992:5;4974:24;:::i;:::-;4967:5;4964:35;4954:63;;5013:1;5010;5003:12;4954:63;4901:122;:::o;5029:143::-;5086:5;5117:6;5111:13;5102:22;;5133:33;5160:5;5133:33;:::i;:::-;5029:143;;;;:::o;5178:977::-;5284:6;5292;5300;5308;5316;5365:3;5353:9;5344:7;5340:23;5336:33;5333:120;;;5372:79;;:::i;:::-;5333:120;5492:1;5517:64;5573:7;5564:6;5553:9;5549:22;5517:64;:::i;:::-;5507:74;;5463:128;5630:2;5656:64;5712:7;5703:6;5692:9;5688:22;5656:64;:::i;:::-;5646:74;;5601:129;5769:2;5795:64;5851:7;5842:6;5831:9;5827:22;5795:64;:::i;:::-;5785:74;;5740:129;5908:2;5934:64;5990:7;5981:6;5970:9;5966:22;5934:64;:::i;:::-;5924:74;;5879:129;6047:3;6074:64;6130:7;6121:6;6110:9;6106:22;6074:64;:::i;:::-;6064:74;;6018:130;5178:977;;;;;;;;:::o;6161:118::-;6232:22;6248:5;6232:22;:::i;:::-;6225:5;6222:33;6212:61;;6269:1;6266;6259:12;6212:61;6161:118;:::o;6285:139::-;6340:5;6371:6;6365:13;6356:22;;6387:31;6412:5;6387:31;:::i;:::-;6285:139;;;;:::o;6430:347::-;6498:6;6547:2;6535:9;6526:7;6522:23;6518:32;6515:119;;;6553:79;;:::i;:::-;6515:119;6673:1;6698:62;6752:7;6743:6;6732:9;6728:22;6698:62;:::i;:::-;6688:72;;6644:126;6430:347;;;;:::o;6783:180::-;6831:77;6828:1;6821:88;6928:4;6925:1;6918:15;6952:4;6949:1;6942:15;6969:102;7011:8;7058:5;7055:1;7051:13;7030:34;;6969:102;;;:::o;7077:848::-;7138:5;7145:4;7169:6;7160:15;;7193:5;7184:14;;7207:712;7228:1;7218:8;7215:15;7207:712;;;7323:4;7318:3;7314:14;7308:4;7305:24;7302:50;;;7332:18;;:::i;:::-;7302:50;7382:1;7372:8;7368:16;7365:451;;;7797:4;7790:5;7786:16;7777:25;;7365:451;7847:4;7841;7837:15;7829:23;;7877:32;7900:8;7877:32;:::i;:::-;7865:44;;7207:712;;;7077:848;;;;;;;:::o;7931:1073::-;7985:5;8176:8;8166:40;;8197:1;8188:10;;8199:5;;8166:40;8225:4;8215:36;;8242:1;8233:10;;8244:5;;8215:36;8311:4;8359:1;8354:27;;;;8395:1;8390:191;;;;8304:277;;8354:27;8372:1;8363:10;;8374:5;;;8390:191;8435:3;8425:8;8422:17;8419:43;;;8442:18;;:::i;:::-;8419:43;8491:8;8488:1;8484:16;8475:25;;8526:3;8519:5;8516:14;8513:40;;;8533:18;;:::i;:::-;8513:40;8566:5;;;8304:277;;8690:2;8680:8;8677:16;8671:3;8665:4;8662:13;8658:36;8640:2;8630:8;8627:16;8622:2;8616:4;8613:12;8609:35;8593:111;8590:246;;;8746:8;8740:4;8736:19;8727:28;;8781:3;8774:5;8771:14;8768:40;;;8788:18;;:::i;:::-;8768:40;8821:5;;8590:246;8861:42;8899:3;8889:8;8883:4;8880:1;8861:42;:::i;:::-;8846:57;;;;8935:4;8930:3;8926:14;8919:5;8916:25;8913:51;;;8944:18;;:::i;:::-;8913:51;8993:4;8986:5;8982:16;8973:25;;7931:1073;;;;;;:::o;9010:281::-;9068:5;9092:23;9110:4;9092:23;:::i;:::-;9084:31;;9136:25;9152:8;9136:25;:::i;:::-;9124:37;;9180:104;9217:66;9207:8;9201:4;9180:104;:::i;:::-;9171:113;;9010:281;;;;:::o;9297:222::-;9390:4;9428:2;9417:9;9413:18;9405:26;;9441:71;9509:1;9498:9;9494:17;9485:6;9441:71;:::i;:::-;9297:222;;;;:::o;9525:351::-;9595:6;9644:2;9632:9;9623:7;9619:23;9615:32;9612:119;;;9650:79;;:::i;:::-;9612:119;9770:1;9795:64;9851:7;9842:6;9831:9;9827:22;9795:64;:::i;:::-;9785:74;;9741:128;9525:351;;;;:::o;9882:122::-;9955:24;9973:5;9955:24;:::i;:::-;9948:5;9945:35;9935:63;;9994:1;9991;9984:12;9935:63;9882:122;:::o;10010:143::-;10067:5;10098:6;10092:13;10083:22;;10114:33;10141:5;10114:33;:::i;:::-;10010:143;;;;:::o;10159:351::-;10229:6;10278:2;10266:9;10257:7;10253:23;10249:32;10246:119;;;10284:79;;:::i;:::-;10246:119;10404:1;10429:64;10485:7;10476:6;10465:9;10461:22;10429:64;:::i;:::-;10419:74;;10375:128;10159:351;;;;:::o;10516:410::-;10556:7;10579:20;10597:1;10579:20;:::i;:::-;10574:25;;10613:20;10631:1;10613:20;:::i;:::-;10608:25;;10668:1;10665;10661:9;10690:30;10708:11;10690:30;:::i;:::-;10679:41;;10869:1;10860:7;10856:15;10853:1;10850:22;10830:1;10823:9;10803:83;10780:139;;10899:18;;:::i;:::-;10780:139;10564:362;10516:410;;;;:::o;10932:180::-;10980:77;10977:1;10970:88;11077:4;11074:1;11067:15;11101:4;11098:1;11091:15;11118:185;11158:1;11175:20;11193:1;11175:20;:::i;:::-;11170:25;;11209:20;11227:1;11209:20;:::i;:::-;11204:25;;11248:1;11238:35;;11253:18;;:::i;:::-;11238:35;11295:1;11292;11288:9;11283:14;;11118:185;;;;:::o;11309:77::-;11346:7;11375:5;11364:16;;11309:77;;;:::o;11392:122::-;11465:24;11483:5;11465:24;:::i;:::-;11458:5;11455:35;11445:63;;11504:1;11501;11494:12;11445:63;11392:122;:::o;11520:143::-;11577:5;11608:6;11602:13;11593:22;;11624:33;11651:5;11624:33;:::i;:::-;11520:143;;;;:::o;11669:351::-;11739:6;11788:2;11776:9;11767:7;11763:23;11759:32;11756:119;;;11794:79;;:::i;:::-;11756:119;11914:1;11939:64;11995:7;11986:6;11975:9;11971:22;11939:64;:::i;:::-;11929:74;;11885:128;11669:351;;;;:::o;12026:117::-;12135:1;12132;12125:12;12149:102;12190:6;12241:2;12237:7;12232:2;12225:5;12221:14;12217:28;12207:38;;12149:102;;;:::o;12257:180::-;12305:77;12302:1;12295:88;12402:4;12399:1;12392:15;12426:4;12423:1;12416:15;12443:281;12526:27;12548:4;12526:27;:::i;:::-;12518:6;12514:40;12656:6;12644:10;12641:22;12620:18;12608:10;12605:34;12602:62;12599:88;;;12667:18;;:::i;:::-;12599:88;12707:10;12703:2;12696:22;12486:238;12443:281;;:::o;12730:129::-;12764:6;12791:20;;:::i;:::-;12781:30;;12820:33;12848:4;12840:6;12820:33;:::i;:::-;12730:129;;;:::o;12865:311::-;12942:4;13032:18;13024:6;13021:30;13018:56;;;13054:18;;:::i;:::-;13018:56;13104:4;13096:6;13092:17;13084:25;;13164:4;13158;13154:15;13146:23;;12865:311;;;:::o;13182:117::-;13291:1;13288;13281:12;13322:732;13429:5;13454:81;13470:64;13527:6;13470:64;:::i;:::-;13454:81;:::i;:::-;13445:90;;13555:5;13584:6;13577:5;13570:21;13618:4;13611:5;13607:16;13600:23;;13671:4;13663:6;13659:17;13651:6;13647:30;13700:3;13692:6;13689:15;13686:122;;;13719:79;;:::i;:::-;13686:122;13834:6;13817:231;13851:6;13846:3;13843:15;13817:231;;;13926:3;13955:48;13999:3;13987:10;13955:48;:::i;:::-;13950:3;13943:61;14033:4;14028:3;14024:14;14017:21;;13893:155;13877:4;13872:3;13868:14;13861:21;;13817:231;;;13821:21;13435:619;;13322:732;;;;;:::o;14077:385::-;14159:5;14208:3;14201:4;14193:6;14189:17;14185:27;14175:122;;14216:79;;:::i;:::-;14175:122;14326:6;14320:13;14351:105;14452:3;14444:6;14437:4;14429:6;14425:17;14351:105;:::i;:::-;14342:114;;14165:297;14077:385;;;;:::o;14468:554::-;14563:6;14612:2;14600:9;14591:7;14587:23;14583:32;14580:119;;;14618:79;;:::i;:::-;14580:119;14759:1;14748:9;14744:17;14738:24;14789:18;14781:6;14778:30;14775:117;;;14811:79;;:::i;:::-;14775:117;14916:89;14997:7;14988:6;14977:9;14973:22;14916:89;:::i;:::-;14906:99;;14709:306;14468:554;;;;:::o;15028:118::-;15115:24;15133:5;15115:24;:::i;:::-;15110:3;15103:37;15028:118;;:::o;15152:222::-;15245:4;15283:2;15272:9;15268:18;15260:26;;15296:71;15364:1;15353:9;15349:17;15340:6;15296:71;:::i;:::-;15152:222;;;;:::o;15380:311::-;15457:4;15547:18;15539:6;15536:30;15533:56;;;15569:18;;:::i;:::-;15533:56;15619:4;15611:6;15607:17;15599:25;;15679:4;15673;15669:15;15661:23;;15380:311;;;:::o;15714:732::-;15821:5;15846:81;15862:64;15919:6;15862:64;:::i;:::-;15846:81;:::i;:::-;15837:90;;15947:5;15976:6;15969:5;15962:21;16010:4;16003:5;15999:16;15992:23;;16063:4;16055:6;16051:17;16043:6;16039:30;16092:3;16084:6;16081:15;16078:122;;;16111:79;;:::i;:::-;16078:122;16226:6;16209:231;16243:6;16238:3;16235:15;16209:231;;;16318:3;16347:48;16391:3;16379:10;16347:48;:::i;:::-;16342:3;16335:61;16425:4;16420:3;16416:14;16409:21;;16285:155;16269:4;16264:3;16260:14;16253:21;;16209:231;;;16213:21;15827:619;;15714:732;;;;;:::o;16469:385::-;16551:5;16600:3;16593:4;16585:6;16581:17;16577:27;16567:122;;16608:79;;:::i;:::-;16567:122;16718:6;16712:13;16743:105;16844:3;16836:6;16829:4;16821:6;16817:17;16743:105;:::i;:::-;16734:114;;16557:297;16469:385;;;;:::o;16860:1069::-;16998:6;17006;17014;17063:2;17051:9;17042:7;17038:23;17034:32;17031:119;;;17069:79;;:::i;:::-;17031:119;17210:1;17199:9;17195:17;17189:24;17240:18;17232:6;17229:30;17226:117;;;17262:79;;:::i;:::-;17226:117;17367:89;17448:7;17439:6;17428:9;17424:22;17367:89;:::i;:::-;17357:99;;17160:306;17526:2;17515:9;17511:18;17505:25;17557:18;17549:6;17546:30;17543:117;;;17579:79;;:::i;:::-;17543:117;17684:89;17765:7;17756:6;17745:9;17741:22;17684:89;:::i;:::-;17674:99;;17476:307;17822:2;17848:64;17904:7;17895:6;17884:9;17880:22;17848:64;:::i;:::-;17838:74;;17793:129;16860:1069;;;;;:::o;17935:180::-;17983:77;17980:1;17973:88;18080:4;18077:1;18070:15;18104:4;18101:1;18094:15;18121:167;18158:3;18181:22;18197:5;18181:22;:::i;:::-;18172:31;;18225:4;18218:5;18215:15;18212:41;;18233:18;;:::i;:::-;18212:41;18280:1;18273:5;18269:13;18262:20;;18121:167;;;:::o;18294:85::-;18339:7;18368:5;18357:16;;18294:85;;;:::o;18385:60::-;18413:3;18434:5;18427:12;;18385:60;;;:::o;18451:158::-;18509:9;18542:61;18560:42;18569:32;18595:5;18569:32;:::i;:::-;18560:42;:::i;:::-;18542:61;:::i;:::-;18529:74;;18451:158;;;:::o;18615:147::-;18710:45;18749:5;18710:45;:::i;:::-;18705:3;18698:58;18615:147;;:::o;18768:238::-;18869:4;18907:2;18896:9;18892:18;18884:26;;18920:79;18996:1;18985:9;18981:17;18972:6;18920:79;:::i;:::-;18768:238;;;;:::o;19012:118::-;19099:24;19117:5;19099:24;:::i;:::-;19094:3;19087:37;19012:118;;:::o;19136:442::-;19285:4;19323:2;19312:9;19308:18;19300:26;;19336:71;19404:1;19393:9;19389:17;19380:6;19336:71;:::i;:::-;19417:72;19485:2;19474:9;19470:18;19461:6;19417:72;:::i;:::-;19499;19567:2;19556:9;19552:18;19543:6;19499:72;:::i;:::-;19136:442;;;;;;:::o;19584:92::-;19620:7;19664:5;19660:2;19649:21;19638:32;;19584:92;;;:::o;19682:120::-;19754:23;19771:5;19754:23;:::i;:::-;19747:5;19744:34;19734:62;;19792:1;19789;19782:12;19734:62;19682:120;:::o;19808:141::-;19864:5;19895:6;19889:13;19880:22;;19911:32;19937:5;19911:32;:::i;:::-;19808:141;;;;:::o;19955:90::-;19989:7;20032:5;20025:13;20018:21;20007:32;;19955:90;;;:::o;20051:116::-;20121:21;20136:5;20121:21;:::i;:::-;20114:5;20111:32;20101:60;;20157:1;20154;20147:12;20101:60;20051:116;:::o;20173:137::-;20227:5;20258:6;20252:13;20243:22;;20274:30;20298:5;20274:30;:::i;:::-;20173:137;;;;:::o;20316:653::-;20399:6;20407;20415;20464:2;20452:9;20443:7;20439:23;20435:32;20432:119;;;20470:79;;:::i;:::-;20432:119;20590:1;20615:63;20670:7;20661:6;20650:9;20646:22;20615:63;:::i;:::-;20605:73;;20561:127;20727:2;20753:63;20808:7;20799:6;20788:9;20784:22;20753:63;:::i;:::-;20743:73;;20698:128;20865:2;20891:61;20944:7;20935:6;20924:9;20920:22;20891:61;:::i;:::-;20881:71;;20836:126;20316:653;;;;;:::o;20975:118::-;21012:7;21052:34;21045:5;21041:46;21030:57;;20975:118;;;:::o;21099:::-;21186:24;21204:5;21186:24;:::i;:::-;21181:3;21174:37;21099:118;;:::o;21223:442::-;21372:4;21410:2;21399:9;21395:18;21387:26;;21423:71;21491:1;21480:9;21476:17;21467:6;21423:71;:::i;:::-;21504:72;21572:2;21561:9;21557:18;21548:6;21504:72;:::i;:::-;21586;21654:2;21643:9;21639:18;21630:6;21586:72;:::i;:::-;21223:442;;;;;;:::o;21671:98::-;21722:6;21756:5;21750:12;21740:22;;21671:98;;;:::o;21775:147::-;21876:11;21913:3;21898:18;;21775:147;;;;:::o;21928:246::-;22009:1;22019:113;22033:6;22030:1;22027:13;22019:113;;;22118:1;22113:3;22109:11;22103:18;22099:1;22094:3;22090:11;22083:39;22055:2;22052:1;22048:10;22043:15;;22019:113;;;22166:1;22157:6;22152:3;22148:16;22141:27;21990:184;21928:246;;;:::o;22180:386::-;22284:3;22312:38;22344:5;22312:38;:::i;:::-;22366:88;22447:6;22442:3;22366:88;:::i;:::-;22359:95;;22463:65;22521:6;22516:3;22509:4;22502:5;22498:16;22463:65;:::i;:::-;22553:6;22548:3;22544:16;22537:23;;22288:278;22180:386;;;;:::o;22572:271::-;22702:3;22724:93;22813:3;22804:6;22724:93;:::i;:::-;22717:100;;22834:3;22827:10;;22572:271;;;;:::o;22849:332::-;22970:4;23008:2;22997:9;22993:18;22985:26;;23021:71;23089:1;23078:9;23074:17;23065:6;23021:71;:::i;:::-;23102:72;23170:2;23159:9;23155:18;23146:6;23102:72;:::i;:::-;22849:332;;;;;:::o;23187:507::-;23266:6;23274;23323:2;23311:9;23302:7;23298:23;23294:32;23291:119;;;23329:79;;:::i;:::-;23291:119;23449:1;23474:64;23530:7;23521:6;23510:9;23506:22;23474:64;:::i;:::-;23464:74;;23420:128;23587:2;23613:64;23669:7;23660:6;23649:9;23645:22;23613:64;:::i;:::-;23603:74;;23558:129;23187:507;;;;;:::o;23700:222::-;23793:4;23831:2;23820:9;23816:18;23808:26;;23844:71;23912:1;23901:9;23897:17;23888:6;23844:71;:::i;:::-;23700:222;;;;:::o;23928:169::-;24012:11;24046:6;24041:3;24034:19;24086:4;24081:3;24077:14;24062:29;;23928:169;;;;:::o;24103:220::-;24243:34;24239:1;24231:6;24227:14;24220:58;24312:3;24307:2;24299:6;24295:15;24288:28;24103:220;:::o;24329:366::-;24471:3;24492:67;24556:2;24551:3;24492:67;:::i;:::-;24485:74;;24568:93;24657:3;24568:93;:::i;:::-;24686:2;24681:3;24677:12;24670:19;;24329:366;;;:::o;24701:419::-;24867:4;24905:2;24894:9;24890:18;24882:26;;24954:9;24948:4;24944:20;24940:1;24929:9;24925:17;24918:47;24982:131;25108:4;24982:131;:::i;:::-;24974:139;;24701:419;;;:::o;25126:176::-;25266:28;25262:1;25254:6;25250:14;25243:52;25126:176;:::o;25308:366::-;25450:3;25471:67;25535:2;25530:3;25471:67;:::i;:::-;25464:74;;25547:93;25636:3;25547:93;:::i;:::-;25665:2;25660:3;25656:12;25649:19;;25308:366;;;:::o;25680:419::-;25846:4;25884:2;25873:9;25869:18;25861:26;;25933:9;25927:4;25923:20;25919:1;25908:9;25904:17;25897:47;25961:131;26087:4;25961:131;:::i;:::-;25953:139;;25680:419;;;:::o;26105:188::-;26143:3;26162:18;26178:1;26162:18;:::i;:::-;26157:23;;26194:18;26210:1;26194:18;:::i;:::-;26189:23;;26235:1;26232;26228:9;26221:16;;26258:4;26253:3;26250:13;26247:39;;;26266:18;;:::i;:::-;26247:39;26105:188;;;;:::o;26299:191::-;26337:4;26357:18;26373:1;26357:18;:::i;:::-;26352:23;;26389:18;26405:1;26389:18;:::i;:::-;26384:23;;26431:1;26428;26424:9;26416:17;;26455:4;26449;26446:14;26443:40;;;26463:18;;:::i;:::-;26443:40;26299:191;;;;:::o

Swarm Source

ipfs://549381f6a36f9c0020a08cf76d94e5b0b84864076fedb449b5738f2c8acbb948

Block Transaction 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

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.