ETH Price: $3,107.60 (-0.64%)
Gas: 3 Gwei

Contract

0x11Ca5375AdAfd6205E41131A4409f182677996E6
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
0x60a06040120941982021-03-23 9:03:491153 days ago1616490229IN
 Create: BoringHelperV1
0 ETH0.6998632136

Advanced mode:
Parent Transaction Hash Block From To Value
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BoringHelperV1

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 999999 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-03-23
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.6.12;
pragma experimental ABIEncoderV2;

// Copyright (c) 2021 BoringCrypto
// Twitter: @Boring_Crypto

// Version 22-Mar-2021

interface IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function owner() external view returns (address);

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

interface IMasterChef {
    function BONUS_MULTIPLIER() external view returns (uint256);

    function bonusEndBlock() external view returns (uint256);

    function devaddr() external view returns (address);

    function migrator() external view returns (address);

    function owner() external view returns (address);

    function startBlock() external view returns (uint256);

    function sushi() external view returns (address);

    function sushiPerBlock() external view returns (uint256);

    function totalAllocPoint() external view returns (uint256);

    function poolLength() external view returns (uint256);

    function poolInfo(uint256 nr)
        external
        view
        returns (
            address,
            uint256,
            uint256,
            uint256
        );

    function userInfo(uint256 nr, address who) external view returns (uint256, uint256);

    function pendingSushi(uint256 nr, address who) external view returns (uint256);
}

interface IPair is IERC20 {
    function token0() external view returns (IERC20);

    function token1() external view returns (IERC20);

    function getReserves()
        external
        view
        returns (
            uint112,
            uint112,
            uint32
        );
}

interface IFactory {
    function allPairsLength() external view returns (uint256);

    function allPairs(uint256 i) external view returns (IPair);

    function getPair(IERC20 token0, IERC20 token1) external view returns (IPair);

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);
}

library BoringMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
        require((c = a + b) >= b, "BoringMath: Add Overflow");
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256 c) {
        require((c = a - b) <= a, "BoringMath: Underflow");
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
        require(b == 0 || (c = a * b) / b == a, "BoringMath: Mul Overflow");
    }
}

contract Ownable {
    address public immutable owner;

    constructor() internal {
        owner = msg.sender;
    }

    modifier onlyOwner() {
        require(owner == msg.sender, "Ownable: caller is not the owner");
        _;
    }
}

library BoringERC20 {
    function returnDataToString(bytes memory data) internal pure returns (string memory) {
        if (data.length >= 64) {
            return abi.decode(data, (string));
        } else if (data.length == 32) {
            uint8 i = 0;
            while (i < 32 && data[i] != 0) {
                i++;
            }
            bytes memory bytesArray = new bytes(i);
            for (i = 0; i < 32 && data[i] != 0; i++) {
                bytesArray[i] = data[i];
            }
            return string(bytesArray);
        } else {
            return "???";
        }
    }

    function symbol(IERC20 token) internal view returns (string memory) {
        (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(0x95d89b41));
        return success ? returnDataToString(data) : "???";
    }

    function name(IERC20 token) internal view returns (string memory) {
        (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(0x06fdde03));
        return success ? returnDataToString(data) : "???";
    }

    function decimals(IERC20 token) internal view returns (uint8) {
        (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(0x313ce567));
        return success && data.length == 32 ? abi.decode(data, (uint8)) : 18;
    }

    function DOMAIN_SEPARATOR(IERC20 token) internal view returns (bytes32) {
        (bool success, bytes memory data) = address(token).staticcall{gas: 10000}(abi.encodeWithSelector(0x3644e515));
        return success && data.length == 32 ? abi.decode(data, (bytes32)) : bytes32(0);
    }

    function nonces(IERC20 token, address owner) internal view returns (uint256) {
        (bool success, bytes memory data) = address(token).staticcall{gas: 5000}(abi.encodeWithSelector(0x7ecebe00, owner));
        return success && data.length == 32 ? abi.decode(data, (uint256)) : uint256(-1); // Use max uint256 to signal failure to retrieve nonce (probably not supported)
    }
}

library BoringPair {
    function factory(IPair pair) internal view returns (IFactory) {
        (bool success, bytes memory data) = address(pair).staticcall(abi.encodeWithSelector(0xc45a0155));
        return success && data.length == 32 ? abi.decode(data, (IFactory)) : IFactory(0);
    }
}

interface IStrategy {
    function skim(uint256 amount) external;

    function harvest(uint256 balance, address sender) external returns (int256 amountAdded);

    function withdraw(uint256 amount) external returns (uint256 actualAmount);

    function exit(uint256 balance) external returns (int256 amountAdded);
}

interface IBentoBox {
    event LogDeploy(address indexed masterContract, bytes data, address indexed cloneAddress);
    event LogDeposit(address indexed token, address indexed from, address indexed to, uint256 amount, uint256 share);
    event LogFlashLoan(address indexed borrower, address indexed token, uint256 amount, uint256 feeAmount, address indexed receiver);
    event LogRegisterProtocol(address indexed protocol);
    event LogSetMasterContractApproval(address indexed masterContract, address indexed user, bool approved);
    event LogStrategyDivest(address indexed token, uint256 amount);
    event LogStrategyInvest(address indexed token, uint256 amount);
    event LogStrategyLoss(address indexed token, uint256 amount);
    event LogStrategyProfit(address indexed token, uint256 amount);
    event LogStrategyQueued(address indexed token, address indexed strategy);
    event LogStrategySet(address indexed token, address indexed strategy);
    event LogStrategyTargetPercentage(address indexed token, uint256 targetPercentage);
    event LogTransfer(address indexed token, address indexed from, address indexed to, uint256 share);
    event LogWhiteListMasterContract(address indexed masterContract, bool approved);
    event LogWithdraw(address indexed token, address indexed from, address indexed to, uint256 amount, uint256 share);
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    function balanceOf(IERC20, address) external view returns (uint256);

    function batch(bytes[] calldata calls, bool revertOnFail) external payable returns (bool[] memory successes, bytes[] memory results);

    function claimOwnership() external;

    function deploy(
        address masterContract,
        bytes calldata data,
        bool useCreate2
    ) external payable;

    function deposit(
        IERC20 token_,
        address from,
        address to,
        uint256 amount,
        uint256 share
    ) external payable returns (uint256 amountOut, uint256 shareOut);

    function harvest(
        IERC20 token,
        bool balance,
        uint256 maxChangeAmount
    ) external;

    function masterContractApproved(address, address) external view returns (bool);

    function masterContractOf(address) external view returns (address);

    function nonces(address) external view returns (uint256);

    function owner() external view returns (address);

    function pendingOwner() external view returns (address);

    function pendingStrategy(IERC20) external view returns (IStrategy);

    function permitToken(
        IERC20 token,
        address from,
        address to,
        uint256 amount,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    function registerProtocol() external;

    function setMasterContractApproval(
        address user,
        address masterContract,
        bool approved,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    function setStrategy(IERC20 token, IStrategy newStrategy) external;

    function setStrategyTargetPercentage(IERC20 token, uint64 targetPercentage_) external;

    function strategy(IERC20) external view returns (IStrategy);

    function strategyData(IERC20)
        external
        view
        returns (
            uint64 strategyStartDate,
            uint64 targetPercentage,
            uint128 balance
        );

    function toAmount(
        IERC20 token,
        uint256 share,
        bool roundUp
    ) external view returns (uint256 amount);

    function toShare(
        IERC20 token,
        uint256 amount,
        bool roundUp
    ) external view returns (uint256 share);

    function totals(IERC20) external view returns (uint128 elastic, uint128 base);

    function transfer(
        IERC20 token,
        address from,
        address to,
        uint256 share
    ) external;

    function transferMultiple(
        IERC20 token,
        address from,
        address[] calldata tos,
        uint256[] calldata shares
    ) external;

    function transferOwnership(
        address newOwner,
        bool direct,
        bool renounce
    ) external;

    function whitelistMasterContract(address masterContract, bool approved) external;

    function whitelistedMasterContracts(address) external view returns (bool);

    function withdraw(
        IERC20 token_,
        address from,
        address to,
        uint256 amount,
        uint256 share
    ) external returns (uint256 amountOut, uint256 shareOut);
}

struct Rebase {
    uint128 elastic;
    uint128 base;
}

struct AccrueInfo {
    uint64 interestPerSecond;
    uint64 lastAccrued;
    uint128 feesEarnedFraction;
}

interface IOracle {
    function get(bytes calldata data) external returns (bool success, uint256 rate);

    function peek(bytes calldata data) external view returns (bool success, uint256 rate);

    function peekSpot(bytes calldata data) external view returns (uint256 rate);

    function symbol(bytes calldata data) external view returns (string memory);

    function name(bytes calldata data) external view returns (string memory);
}

interface IKashiPair {
    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function accrue() external;

    function accrueInfo() external view returns (AccrueInfo memory info);

    function addAsset(
        address to,
        bool skim,
        uint256 share
    ) external returns (uint256 fraction);

    function addCollateral(
        address to,
        bool skim,
        uint256 share
    ) external;

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

    function approve(address spender, uint256 amount) external returns (bool);

    function asset() external view returns (IERC20);

    function balanceOf(address) external view returns (uint256);

    function bentoBox() external view returns (IBentoBox);

    function borrow(address to, uint256 amount) external returns (uint256 part, uint256 share);

    function claimOwnership() external;

    function collateral() external view returns (IERC20);

    function cook(
        uint8[] calldata actions,
        uint256[] calldata values,
        bytes[] calldata datas
    ) external payable returns (uint256 value1, uint256 value2);

    function decimals() external view returns (uint8);

    function exchangeRate() external view returns (uint256);

    function feeTo() external view returns (address);

    function getInitData(
        IERC20 collateral_,
        IERC20 asset_,
        address oracle_,
        bytes calldata oracleData_
    ) external pure returns (bytes memory data);

    function init(bytes calldata data) external payable;

    function isSolvent(address user, bool open) external view returns (bool);

    function liquidate(
        address[] calldata users,
        uint256[] calldata borrowParts,
        address to,
        address swapper,
        bool open
    ) external;

    function masterContract() external view returns (address);

    function name() external view returns (string memory);

    function nonces(address) external view returns (uint256);

    function oracle() external view returns (IOracle);

    function oracleData() external view returns (bytes memory);

    function owner() external view returns (address);

    function pendingOwner() external view returns (address);

    function permit(
        address owner_,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    function removeAsset(address to, uint256 fraction) external returns (uint256 share);

    function removeCollateral(address to, uint256 share) external;

    function repay(
        address to,
        bool skim,
        uint256 part
    ) external returns (uint256 amount);

    function setFeeTo(address newFeeTo) external;

    function setSwapper(address swapper, bool enable) external;

    function swappers(address) external view returns (bool);

    function symbol() external view returns (string memory);

    function totalAsset() external view returns (Rebase memory total);

    function totalBorrow() external view returns (Rebase memory total);

    function totalCollateralShare() external view returns (uint256);

    function totalSupply() external view returns (uint256);

    function transfer(address to, uint256 amount) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);

    function transferOwnership(
        address newOwner,
        bool direct,
        bool renounce
    ) external;

    function updateExchangeRate() external returns (bool updated, uint256 rate);

    function userBorrowPart(address) external view returns (uint256);

    function userCollateralShare(address) external view returns (uint256);

    function withdrawFees() external;
}

contract BoringHelperV1 is Ownable {
    using BoringMath for uint256;
    using BoringERC20 for IERC20;
    using BoringERC20 for IPair;
    using BoringPair for IPair;

    IMasterChef public chef; // IMasterChef(0xc2EdaD668740f1aA35E4D8f227fB8E17dcA888Cd);
    address public maker; // ISushiMaker(0xE11fc0B43ab98Eb91e9836129d1ee7c3Bc95df50);
    IERC20 public sushi; // ISushiToken(0x6B3595068778DD592e39A122f4f5a5cF09C90fE2);
    IERC20 public WETH; // 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    IERC20 public WBTC; // 0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599;
    IFactory public sushiFactory; // IFactory(0xC0AEe478e3658e2610c5F7A4A2E1777cE9e4f2Ac);
    IFactory public uniV2Factory; // IFactory(0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f);
    IERC20 public bar; // 0x8798249c2E607446EfB7Ad49eC89dD1865Ff4272;
    IBentoBox public bentoBox; // 0xB5891167796722331b7ea7824F036b3Bdcb4531C

    constructor(
        IMasterChef chef_,
        address maker_,
        IERC20 sushi_,
        IERC20 WETH_,
        IERC20 WBTC_,
        IFactory sushiFactory_,
        IFactory uniV2Factory_,
        IERC20 bar_,
        IBentoBox bentoBox_
    ) public {
        chef = chef_;
        maker = maker_;
        sushi = sushi_;
        WETH = WETH_;
        WBTC = WBTC_;
        sushiFactory = sushiFactory_;
        uniV2Factory = uniV2Factory_;
        bar = bar_;
        bentoBox = bentoBox_;
    }

    function setContracts(
        IMasterChef chef_,
        address maker_,
        IERC20 sushi_,
        IERC20 WETH_,
        IERC20 WBTC_,
        IFactory sushiFactory_,
        IFactory uniV2Factory_,
        IERC20 bar_,
        IBentoBox bentoBox_
    ) public onlyOwner {
        chef = chef_;
        maker = maker_;
        sushi = sushi_;
        WETH = WETH_;
        WBTC = WBTC_;
        sushiFactory = sushiFactory_;
        uniV2Factory = uniV2Factory_;
        bar = bar_;
        bentoBox = bentoBox_;
    }

    function getETHRate(IERC20 token) public view returns (uint256) {
        if (token == WETH) {
            return 1e18;
        }
        IPair pairUniV2;
        IPair pairSushi;
        if (uniV2Factory != IFactory(0)) {
            pairUniV2 = IPair(uniV2Factory.getPair(token, WETH));
        }
        if (sushiFactory != IFactory(0)) {
            pairSushi = IPair(sushiFactory.getPair(token, WETH));
        }
        if (address(pairUniV2) == address(0) && address(pairSushi) == address(0)) {
            return 0;
        }

        uint112 reserve0;
        uint112 reserve1;
        IERC20 token0;
        if (address(pairUniV2) != address(0)) {
            (uint112 reserve0UniV2, uint112 reserve1UniV2, ) = pairUniV2.getReserves();
            reserve0 += reserve0UniV2;
            reserve1 += reserve1UniV2;
            token0 = pairUniV2.token0();
        }

        if (address(pairSushi) != address(0)) {
            (uint112 reserve0Sushi, uint112 reserve1Sushi, ) = pairSushi.getReserves();
            reserve0 += reserve0Sushi;
            reserve1 += reserve1Sushi;
            if (token0 == IERC20(0)) {
                token0 = pairSushi.token0();
            }
        }

        if (token0 == WETH) {
            return (uint256(reserve1) * 1e18) / reserve0;
        } else {
            return (uint256(reserve0) * 1e18) / reserve1;
        }
    }

    struct Factory {
        IFactory factory;
        uint256 allPairsLength;
    }

    struct UIInfo {
        uint256 ethBalance;
        uint256 sushiBalance;
        uint256 sushiBarBalance;
        uint256 xsushiBalance;
        uint256 xsushiSupply;
        uint256 sushiBarAllowance;
        Factory[] factories;
        uint256 ethRate;
        uint256 sushiRate;
        uint256 btcRate;
        uint256 pendingSushi;
        uint256 blockTimeStamp;
        bool[] masterContractApproved;
    }

    function getUIInfo(
        address who,
        IFactory[] calldata factoryAddresses,
        IERC20 currency,
        address[] calldata masterContracts
    ) public view returns (UIInfo memory) {
        UIInfo memory info;
        info.ethBalance = who.balance;

        info.factories = new Factory[](factoryAddresses.length);
        for (uint256 i = 0; i < factoryAddresses.length; i++) {
            IFactory factory = factoryAddresses[i];
            info.factories[i].factory = factory;
            info.factories[i].allPairsLength = factory.allPairsLength();
        }

        info.masterContractApproved = new bool[](masterContracts.length);
        for (uint256 i = 0; i < masterContracts.length; i++) {
            info.masterContractApproved[i] = bentoBox.masterContractApproved(masterContracts[i], who);
        }

        if (currency != IERC20(0)) {
            info.ethRate = getETHRate(currency);
        }

        if (WBTC != IERC20(0)) {
            info.btcRate = getETHRate(WBTC);
        }

        if (sushi != IERC20(0)) {
            info.sushiRate = getETHRate(sushi);
            info.sushiBalance = sushi.balanceOf(who);
            info.sushiBarBalance = sushi.balanceOf(address(bar));
            info.sushiBarAllowance = sushi.allowance(who, address(bar));
        }

        if (bar != IERC20(0)) {
            info.xsushiBalance = bar.balanceOf(who);
            info.xsushiSupply = bar.totalSupply();
        }

        if (chef != IMasterChef(0)) {
            uint256 poolLength = chef.poolLength();
            uint256 pendingSushi;
            for (uint256 i = 0; i < poolLength; i++) {
                pendingSushi += chef.pendingSushi(i, who);
            }
            info.pendingSushi = pendingSushi;
        }
        info.blockTimeStamp = block.timestamp;

        return info;
    }

    struct Balance {
        IERC20 token;
        uint256 balance;
        uint256 bentoBalance;
    }

    struct BalanceFull {
        IERC20 token;
        uint256 totalSupply;
        uint256 balance;
        uint256 bentoBalance;
        uint256 bentoAllowance;
        uint256 nonce;
        uint128 bentoAmount;
        uint128 bentoShare;
        uint256 rate;
    }

    struct TokenInfo {
        IERC20 token;
        uint256 decimals;
        string name;
        string symbol;
        bytes32 DOMAIN_SEPARATOR;
    }

    function getTokenInfo(address[] calldata addresses) public view returns (TokenInfo[] memory) {
        TokenInfo[] memory infos = new TokenInfo[](addresses.length);

        for (uint256 i = 0; i < addresses.length; i++) {
            IERC20 token = IERC20(addresses[i]);
            infos[i].token = token;

            infos[i].name = token.name();
            infos[i].symbol = token.symbol();
            infos[i].decimals = token.decimals();
            infos[i].DOMAIN_SEPARATOR = token.DOMAIN_SEPARATOR();
        }

        return infos;
    }

    function findBalances(address who, address[] calldata addresses) public view returns (Balance[] memory) {
        Balance[] memory balances = new Balance[](addresses.length);

        uint256 len = addresses.length;
        for (uint256 i = 0; i < len; i++) {
            IERC20 token = IERC20(addresses[i]);
            balances[i].token = token;
            balances[i].balance = token.balanceOf(who);
            balances[i].bentoBalance = bentoBox.balanceOf(token, who);
        }

        return balances;
    }

    function getBalances(address who, IERC20[] calldata addresses) public view returns (BalanceFull[] memory) {
        BalanceFull[] memory balances = new BalanceFull[](addresses.length);

        for (uint256 i = 0; i < addresses.length; i++) {
            IERC20 token = addresses[i];
            balances[i].totalSupply = token.totalSupply();
            balances[i].token = token;
            balances[i].balance = token.balanceOf(who);
            balances[i].bentoAllowance = token.allowance(who, address(bentoBox));
            balances[i].nonce = token.nonces(who);
            balances[i].bentoBalance = bentoBox.balanceOf(token, who);
            (balances[i].bentoAmount, balances[i].bentoShare) = bentoBox.totals(token);
            balances[i].rate = getETHRate(token);
        }

        return balances;
    }

    struct PairBase {
        IPair token;
        IERC20 token0;
        IERC20 token1;
        uint256 totalSupply;
    }

    function getPairs(
        IFactory factory,
        uint256 fromID,
        uint256 toID
    ) public view returns (PairBase[] memory) {
        PairBase[] memory pairs = new PairBase[](toID - fromID);

        for (uint256 id = fromID; id < toID; id++) {
            IPair token = factory.allPairs(id);
            uint256 i = id - fromID;
            pairs[i].token = token;
            pairs[i].token0 = token.token0();
            pairs[i].token1 = token.token1();
            pairs[i].totalSupply = token.totalSupply();
        }
        return pairs;
    }

    struct PairPoll {
        IPair token;
        uint256 reserve0;
        uint256 reserve1;
        uint256 totalSupply;
        uint256 balance;
    }

    function pollPairs(address who, IPair[] calldata addresses) public view returns (PairPoll[] memory) {
        PairPoll[] memory pairs = new PairPoll[](addresses.length);
        for (uint256 i = 0; i < addresses.length; i++) {
            IPair token = addresses[i];
            pairs[i].token = token;
            (uint256 reserve0, uint256 reserve1, ) = token.getReserves();
            pairs[i].reserve0 = reserve0;
            pairs[i].reserve1 = reserve1;
            pairs[i].balance = token.balanceOf(who);
            pairs[i].totalSupply = token.totalSupply();
        }
        return pairs;
    }

    struct PoolsInfo {
        uint256 totalAllocPoint;
        uint256 poolLength;
    }

    struct PoolInfo {
        uint256 pid;
        IPair lpToken;
        uint256 allocPoint;
        bool isPair;
        IFactory factory;
        IERC20 token0;
        IERC20 token1;
        string name;
        string symbol;
        uint8 decimals;
    }

    function getPools(uint256[] calldata pids) public view returns (PoolsInfo memory, PoolInfo[] memory) {
        PoolsInfo memory info;
        info.totalAllocPoint = chef.totalAllocPoint();
        uint256 poolLength = chef.poolLength();
        info.poolLength = poolLength;

        PoolInfo[] memory pools = new PoolInfo[](pids.length);

        for (uint256 i = 0; i < pids.length; i++) {
            pools[i].pid = pids[i];
            (address lpToken, uint256 allocPoint, , ) = chef.poolInfo(pids[i]);
            IPair uniV2 = IPair(lpToken);
            pools[i].lpToken = uniV2;
            pools[i].allocPoint = allocPoint;

            pools[i].name = uniV2.name();
            pools[i].symbol = uniV2.symbol();
            pools[i].decimals = uniV2.decimals();

            pools[i].factory = uniV2.factory();
            if (pools[i].factory != IFactory(0)) {
                pools[i].isPair = true;
                pools[i].token0 = uniV2.token0();
                pools[i].token1 = uniV2.token1();
            }
        }
        return (info, pools);
    }

    struct PoolFound {
        uint256 pid;
        uint256 balance;
    }

    function findPools(address who, uint256[] calldata pids) public view returns (PoolFound[] memory) {
        PoolFound[] memory pools = new PoolFound[](pids.length);

        for (uint256 i = 0; i < pids.length; i++) {
            pools[i].pid = pids[i];
            (pools[i].balance, ) = chef.userInfo(pids[i], who);
        }

        return pools;
    }

    struct UserPoolInfo {
        uint256 pid;
        uint256 balance; // Balance of pool tokens
        uint256 totalSupply; // Token staked lp tokens
        uint256 lpBalance; // Balance of lp tokens not staked
        uint256 lpTotalSupply; // TotalSupply of lp tokens
        uint256 lpAllowance; // LP tokens approved for masterchef
        uint256 reserve0;
        uint256 reserve1;
        uint256 rewardDebt;
        uint256 pending; // Pending SUSHI
    }

    function pollPools(address who, uint256[] calldata pids) public view returns (UserPoolInfo[] memory) {
        UserPoolInfo[] memory pools = new UserPoolInfo[](pids.length);

        for (uint256 i = 0; i < pids.length; i++) {
            (uint256 amount, ) = chef.userInfo(pids[i], who);
            pools[i].balance = amount;
            pools[i].pending = chef.pendingSushi(pids[i], who);

            (address lpToken, , , ) = chef.poolInfo(pids[i]);
            pools[i].pid = pids[i];
            IPair uniV2 = IPair(lpToken);
            IFactory factory = uniV2.factory();
            if (factory != IFactory(0)) {
                pools[i].totalSupply = uniV2.balanceOf(address(chef));
                pools[i].lpAllowance = uniV2.allowance(who, address(chef));
                pools[i].lpBalance = uniV2.balanceOf(who);
                pools[i].lpTotalSupply = uniV2.totalSupply();

                (uint112 reserve0, uint112 reserve1, ) = uniV2.getReserves();
                pools[i].reserve0 = reserve0;
                pools[i].reserve1 = reserve1;
            }
        }
        return pools;
    }

    struct KashiPairPoll {
        IERC20 collateral;
        IERC20 asset;
        IOracle oracle;
        bytes oracleData;
        uint256 totalCollateralShare;
        uint256 userCollateralShare;
        Rebase totalAsset;
        uint256 userAssetFraction;
        Rebase totalBorrow;
        uint256 userBorrowPart;
        uint256 currentExchangeRate;
        uint256 spotExchangeRate;
        uint256 oracleExchangeRate;
        AccrueInfo accrueInfo;
    }

    function pollKashiPairs(address who, IKashiPair[] calldata pairsIn) public view returns (KashiPairPoll[] memory) {
        uint256 len = pairsIn.length;
        KashiPairPoll[] memory pairs = new KashiPairPoll[](len);

        for (uint256 i = 0; i < len; i++) {
            IKashiPair pair = pairsIn[i];
            pairs[i].collateral = pair.collateral();
            pairs[i].asset = pair.asset();
            pairs[i].oracle = pair.oracle();
            pairs[i].oracleData = pair.oracleData();
            pairs[i].totalCollateralShare = pair.totalCollateralShare();
            pairs[i].userCollateralShare = pair.userCollateralShare(who);
            pairs[i].totalAsset = pair.totalAsset();
            pairs[i].userAssetFraction = pair.balanceOf(who);
            pairs[i].totalBorrow = pair.totalBorrow();
            pairs[i].userBorrowPart = pair.userBorrowPart(who);

            pairs[i].currentExchangeRate = pair.exchangeRate();
            (, pairs[i].oracleExchangeRate) = pair.oracle().peek(pair.oracleData());
            pairs[i].spotExchangeRate = pair.oracle().peekSpot(pair.oracleData());
            pairs[i].accrueInfo = pair.accrueInfo();
        }

        return pairs;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"contract IMasterChef","name":"chef_","type":"address"},{"internalType":"address","name":"maker_","type":"address"},{"internalType":"contract IERC20","name":"sushi_","type":"address"},{"internalType":"contract IERC20","name":"WETH_","type":"address"},{"internalType":"contract IERC20","name":"WBTC_","type":"address"},{"internalType":"contract IFactory","name":"sushiFactory_","type":"address"},{"internalType":"contract IFactory","name":"uniV2Factory_","type":"address"},{"internalType":"contract IERC20","name":"bar_","type":"address"},{"internalType":"contract IBentoBox","name":"bentoBox_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WBTC","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bar","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bentoBox","outputs":[{"internalType":"contract IBentoBox","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"chef","outputs":[{"internalType":"contract IMasterChef","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"},{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"findBalances","outputs":[{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"bentoBalance","type":"uint256"}],"internalType":"struct BoringHelperV1.Balance[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"},{"internalType":"uint256[]","name":"pids","type":"uint256[]"}],"name":"findPools","outputs":[{"components":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"}],"internalType":"struct BoringHelperV1.PoolFound[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"},{"internalType":"contract IERC20[]","name":"addresses","type":"address[]"}],"name":"getBalances","outputs":[{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"bentoBalance","type":"uint256"},{"internalType":"uint256","name":"bentoAllowance","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint128","name":"bentoAmount","type":"uint128"},{"internalType":"uint128","name":"bentoShare","type":"uint128"},{"internalType":"uint256","name":"rate","type":"uint256"}],"internalType":"struct BoringHelperV1.BalanceFull[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getETHRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IFactory","name":"factory","type":"address"},{"internalType":"uint256","name":"fromID","type":"uint256"},{"internalType":"uint256","name":"toID","type":"uint256"}],"name":"getPairs","outputs":[{"components":[{"internalType":"contract IPair","name":"token","type":"address"},{"internalType":"contract IERC20","name":"token0","type":"address"},{"internalType":"contract IERC20","name":"token1","type":"address"},{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"internalType":"struct BoringHelperV1.PairBase[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"pids","type":"uint256[]"}],"name":"getPools","outputs":[{"components":[{"internalType":"uint256","name":"totalAllocPoint","type":"uint256"},{"internalType":"uint256","name":"poolLength","type":"uint256"}],"internalType":"struct BoringHelperV1.PoolsInfo","name":"","type":"tuple"},{"components":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"contract IPair","name":"lpToken","type":"address"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"bool","name":"isPair","type":"bool"},{"internalType":"contract IFactory","name":"factory","type":"address"},{"internalType":"contract IERC20","name":"token0","type":"address"},{"internalType":"contract IERC20","name":"token1","type":"address"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint8","name":"decimals","type":"uint8"}],"internalType":"struct BoringHelperV1.PoolInfo[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"getTokenInfo","outputs":[{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"decimals","type":"uint256"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"bytes32","name":"DOMAIN_SEPARATOR","type":"bytes32"}],"internalType":"struct BoringHelperV1.TokenInfo[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"},{"internalType":"contract IFactory[]","name":"factoryAddresses","type":"address[]"},{"internalType":"contract IERC20","name":"currency","type":"address"},{"internalType":"address[]","name":"masterContracts","type":"address[]"}],"name":"getUIInfo","outputs":[{"components":[{"internalType":"uint256","name":"ethBalance","type":"uint256"},{"internalType":"uint256","name":"sushiBalance","type":"uint256"},{"internalType":"uint256","name":"sushiBarBalance","type":"uint256"},{"internalType":"uint256","name":"xsushiBalance","type":"uint256"},{"internalType":"uint256","name":"xsushiSupply","type":"uint256"},{"internalType":"uint256","name":"sushiBarAllowance","type":"uint256"},{"components":[{"internalType":"contract IFactory","name":"factory","type":"address"},{"internalType":"uint256","name":"allPairsLength","type":"uint256"}],"internalType":"struct BoringHelperV1.Factory[]","name":"factories","type":"tuple[]"},{"internalType":"uint256","name":"ethRate","type":"uint256"},{"internalType":"uint256","name":"sushiRate","type":"uint256"},{"internalType":"uint256","name":"btcRate","type":"uint256"},{"internalType":"uint256","name":"pendingSushi","type":"uint256"},{"internalType":"uint256","name":"blockTimeStamp","type":"uint256"},{"internalType":"bool[]","name":"masterContractApproved","type":"bool[]"}],"internalType":"struct BoringHelperV1.UIInfo","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"},{"internalType":"contract IKashiPair[]","name":"pairsIn","type":"address[]"}],"name":"pollKashiPairs","outputs":[{"components":[{"internalType":"contract IERC20","name":"collateral","type":"address"},{"internalType":"contract IERC20","name":"asset","type":"address"},{"internalType":"contract IOracle","name":"oracle","type":"address"},{"internalType":"bytes","name":"oracleData","type":"bytes"},{"internalType":"uint256","name":"totalCollateralShare","type":"uint256"},{"internalType":"uint256","name":"userCollateralShare","type":"uint256"},{"components":[{"internalType":"uint128","name":"elastic","type":"uint128"},{"internalType":"uint128","name":"base","type":"uint128"}],"internalType":"struct Rebase","name":"totalAsset","type":"tuple"},{"internalType":"uint256","name":"userAssetFraction","type":"uint256"},{"components":[{"internalType":"uint128","name":"elastic","type":"uint128"},{"internalType":"uint128","name":"base","type":"uint128"}],"internalType":"struct Rebase","name":"totalBorrow","type":"tuple"},{"internalType":"uint256","name":"userBorrowPart","type":"uint256"},{"internalType":"uint256","name":"currentExchangeRate","type":"uint256"},{"internalType":"uint256","name":"spotExchangeRate","type":"uint256"},{"internalType":"uint256","name":"oracleExchangeRate","type":"uint256"},{"components":[{"internalType":"uint64","name":"interestPerSecond","type":"uint64"},{"internalType":"uint64","name":"lastAccrued","type":"uint64"},{"internalType":"uint128","name":"feesEarnedFraction","type":"uint128"}],"internalType":"struct AccrueInfo","name":"accrueInfo","type":"tuple"}],"internalType":"struct BoringHelperV1.KashiPairPoll[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"},{"internalType":"contract IPair[]","name":"addresses","type":"address[]"}],"name":"pollPairs","outputs":[{"components":[{"internalType":"contract IPair","name":"token","type":"address"},{"internalType":"uint256","name":"reserve0","type":"uint256"},{"internalType":"uint256","name":"reserve1","type":"uint256"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"}],"internalType":"struct BoringHelperV1.PairPoll[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"},{"internalType":"uint256[]","name":"pids","type":"uint256[]"}],"name":"pollPools","outputs":[{"components":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"lpBalance","type":"uint256"},{"internalType":"uint256","name":"lpTotalSupply","type":"uint256"},{"internalType":"uint256","name":"lpAllowance","type":"uint256"},{"internalType":"uint256","name":"reserve0","type":"uint256"},{"internalType":"uint256","name":"reserve1","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"},{"internalType":"uint256","name":"pending","type":"uint256"}],"internalType":"struct BoringHelperV1.UserPoolInfo[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IMasterChef","name":"chef_","type":"address"},{"internalType":"address","name":"maker_","type":"address"},{"internalType":"contract IERC20","name":"sushi_","type":"address"},{"internalType":"contract IERC20","name":"WETH_","type":"address"},{"internalType":"contract IERC20","name":"WBTC_","type":"address"},{"internalType":"contract IFactory","name":"sushiFactory_","type":"address"},{"internalType":"contract IFactory","name":"uniV2Factory_","type":"address"},{"internalType":"contract IERC20","name":"bar_","type":"address"},{"internalType":"contract IBentoBox","name":"bentoBox_","type":"address"}],"name":"setContracts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sushi","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sushiFactory","outputs":[{"internalType":"contract IFactory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniV2Factory","outputs":[{"internalType":"contract IFactory","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60a06040523480156200001157600080fd5b5060405162005aa438038062005aa48339810160408190526200003491620000dc565b3360601b608052600080546001600160a01b03199081166001600160a01b039b8c1617909155600180548216998b1699909917909855600280548916978a16979097179096556003805488169589169590951790945560048054871693881693909317909255600580548616918716919091179055600680548516918616919091179055600780548416918516919091179055600880549092169216919091179055620001cb565b60008060008060008060008060006101208a8c031215620000fb578485fd5b89516200010881620001b2565b60208b01519099506200011b81620001b2565b60408b01519098506200012e81620001b2565b60608b01519097506200014181620001b2565b60808b01519096506200015481620001b2565b60a08b01519095506200016781620001b2565b60c08b01519094506200017a81620001b2565b60e08b01519093506200018d81620001b2565b6101008b0151909250620001a181620001b2565b809150509295985092959850929598565b6001600160a01b0381168114620001c857600080fd5b50565b60805160601c6158b6620001ee6000398061358652806135aa52506158b66000f3fe608060405234801561001057600080fd5b50600436106101825760003560e01c80635ec54659116100d8578063a88830601161008c578063ad5c464811610066578063ad5c464814610333578063ca0f937c1461033b578063febb0f7e1461035b57610182565b8063a8883060146102de578063a959dd80146102f3578063ac6091f81461031357610182565b80636b2ace87116100bd5780636b2ace87146102ae5780637e3e2596146102b65780638da5cb5b146102d657610182565b80635ec546591461026e5780636a385ae91461028e57610182565b806329a4a88e1161013a5780634a69ac50116101145780634a69ac501461023e5780634dede3de1461025e57806350655d8c1461026657610182565b806329a4a88e146101f65780633009f414146102165780633da04b871461023657610182565b80631fc8bc5d1161016b5780631fc8bc5d146101c557806322984b24146101cd5780632952dde8146101d557610182565b80630a0879031461018757806315243475146101a5575b600080fd5b61018f610363565b60405161019c9190614fe3565b60405180910390f35b6101b86101b3366004614a26565b61037f565b60405161019c91906156a6565b61018f610c25565b61018f610c41565b6101e86101e3366004614af8565b610c5d565b60405161019c929190615566565b6102096102043660046149ec565b611298565b60405161019c9190615140565b6102296102243660046149ec565b611f05565b60405161019c9190615488565b61018f6125cb565b61025161024c366004614af8565b6125e7565b60405161019c91906153be565b61018f61278b565b61018f6127a7565b61028161027c366004614976565b6127c3565b60405161019c9190615787565b6102a161029c3660046149ec565b612cf9565b60405161019c919061502b565b61018f6131d9565b6102c96102c4366004614bf0565b6131f5565b60405161019c9190615295565b61018f613584565b6102f16102ec366004614c24565b6135a8565b005b6103066103013660046149ec565b6136e2565b60405161019c9190615307565b6103266103213660046149ec565b6139dd565b60405161019c919061537e565b61018f613b2b565b61034e610349366004614999565b613b47565b60405161019c91906150de565b61018f613d80565b60025473ffffffffffffffffffffffffffffffffffffffff1681565b6103876144fc565b61038f6144fc565b73ffffffffffffffffffffffffffffffffffffffff88163181528567ffffffffffffffff811180156103c057600080fd5b506040519080825280602002602001820160405280156103fa57816020015b6103e7614564565b8152602001906001900390816103df5790505b5060c082015260005b8681101561052457600088888381811061041957fe5b905060200201602081019061042e9190614976565b9050808360c00151838151811061044157fe5b60200260200101516000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663574f2ba36040518163ffffffff1660e01b815260040160206040518083038186803b1580156104c557600080fd5b505afa1580156104d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104fd9190614b89565b8360c00151838151811061050d57fe5b602090810291909101810151015250600101610403565b508267ffffffffffffffff8111801561053c57600080fd5b50604051908082528060200260200182016040528015610566578160200160208202803683370190505b5061018082015260005b8381101561064e5760085473ffffffffffffffffffffffffffffffffffffffff166391e0eab58686848181106105a257fe5b90506020020160208101906105b79190614976565b8b6040518363ffffffff1660e01b81526004016105d5929190615004565b60206040518083038186803b1580156105ed57600080fd5b505afa158015610601573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106259190614b38565b826101800151828151811061063657fe5b91151560209283029190910190910152600101610570565b5073ffffffffffffffffffffffffffffffffffffffff85161561067a57610674856127c3565b60e08201525b60045473ffffffffffffffffffffffffffffffffffffffff16156106c1576004546106ba9073ffffffffffffffffffffffffffffffffffffffff166127c3565b6101208201525b60025473ffffffffffffffffffffffffffffffffffffffff1615610917576002546107019073ffffffffffffffffffffffffffffffffffffffff166127c3565b6101008201526002546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906370a082319061075d908b90600401614fe3565b60206040518083038186803b15801561077557600080fd5b505afa158015610789573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ad9190614b89565b60208201526002546007546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316926370a082319261080c92911690600401614fe3565b60206040518083038186803b15801561082457600080fd5b505afa158015610838573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085c9190614b89565b60408083019190915260025460075491517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182169263dd62ed3e926108c1928d9290911690600401615004565b60206040518083038186803b1580156108d957600080fd5b505afa1580156108ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109119190614b89565b60a08201525b60075473ffffffffffffffffffffffffffffffffffffffff1615610a89576007546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906370a082319061098b908b90600401614fe3565b60206040518083038186803b1580156109a357600080fd5b505afa1580156109b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109db9190614b89565b6060820152600754604080517f18160ddd000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff909216916318160ddd91600480820192602092909190829003018186803b158015610a4b57600080fd5b505afa158015610a5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a839190614b89565b60808201525b60005473ffffffffffffffffffffffffffffffffffffffff1615610c135760008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663081e3eda6040518163ffffffff1660e01b815260040160206040518083038186803b158015610b1057600080fd5b505afa158015610b24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b489190614b89565b90506000805b82811015610c0a576000546040517f195426ec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063195426ec90610bae9084908f90600401615790565b60206040518083038186803b158015610bc657600080fd5b505afa158015610bda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bfe9190614b89565b90910190600101610b4e565b50610140830152505b42610160820152979650505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60055473ffffffffffffffffffffffffffffffffffffffff1681565b610c6561457b565b6060610c6f61457b565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166317caf6f16040518163ffffffff1660e01b815260040160206040518083038186803b158015610cd557600080fd5b505afa158015610ce9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0d9190614b89565b815260008054604080517f081e3eda000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9092169163081e3eda91600480820192602092909190829003018186803b158015610d7b57600080fd5b505afa158015610d8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db39190614b89565b60208301819052905060608567ffffffffffffffff81118015610dd557600080fd5b50604051908082528060200260200182016040528015610e0f57816020015b610dfc614595565b815260200190600190039081610df45790505b50905060005b8681101561128857878782818110610e2957fe5b90506020020135828281518110610e3c57fe5b60209081029190910101515260008054819073ffffffffffffffffffffffffffffffffffffffff16631526fe278b8b86818110610e7557fe5b905060200201356040518263ffffffff1660e01b8152600401610e989190615787565b60806040518083038186803b158015610eb057600080fd5b505afa158015610ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee89190614aba565b505091509150600082905080858581518110610f0057fe5b60200260200101516020019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505081858581518110610f4b57fe5b60200260200101516040018181525050610f7a8173ffffffffffffffffffffffffffffffffffffffff16613d9c565b858581518110610f8657fe5b602002602001015160e00181905250610fb48173ffffffffffffffffffffffffffffffffffffffff16613eb4565b858581518110610fc057fe5b60200260200101516101000181905250610fef8173ffffffffffffffffffffffffffffffffffffffff16613f36565b858581518110610ffb57fe5b6020026020010151610120019060ff16908160ff16815250506110338173ffffffffffffffffffffffffffffffffffffffff1661402a565b85858151811061103f57fe5b60200260200101516080019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600073ffffffffffffffffffffffffffffffffffffffff168585815181106110a157fe5b60200260200101516080015173ffffffffffffffffffffffffffffffffffffffff161461127d5760018585815181106110d657fe5b602002602001015160600190151590811515815250508073ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561113257600080fd5b505afa158015611146573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116a9190614bd4565b85858151811061117657fe5b602002602001015160a0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156111fa57600080fd5b505afa15801561120e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112329190614bd4565b85858151811061123e57fe5b602002602001015160c0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b505050600101610e15565b50919350909150505b9250929050565b606081818167ffffffffffffffff811180156112b357600080fd5b506040519080825280602002602001820160405280156112ed57816020015b6112da6145e8565b8152602001906001900390816112d25790505b50905060005b82811015611efb57600086868381811061130957fe5b905060200201602081019061131e9190614976565b90508073ffffffffffffffffffffffffffffffffffffffff1663d8dfeb456040518163ffffffff1660e01b815260040160206040518083038186803b15801561136657600080fd5b505afa15801561137a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139e9190614bd4565b8383815181106113aa57fe5b60200260200101516000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff166338d52e0f6040518163ffffffff1660e01b815260040160206040518083038186803b15801561142e57600080fd5b505afa158015611442573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114669190614bd4565b83838151811061147257fe5b60200260200101516020019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b815260040160206040518083038186803b1580156114f657600080fd5b505afa15801561150a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152e9190614bd4565b83838151811061153a57fe5b60200260200101516040019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff166374645ff36040518163ffffffff1660e01b815260040160006040518083038186803b1580156115be57600080fd5b505afa1580156115d2573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526116189190810190614ba1565b83838151811061162457fe5b6020026020010151606001819052508073ffffffffffffffffffffffffffffffffffffffff1663473e3ce76040518163ffffffff1660e01b815260040160206040518083038186803b15801561167957600080fd5b505afa15801561168d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b19190614b89565b8383815181106116bd57fe5b6020908102919091010151608001526040517f1c9e379b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690631c9e379b9061171e908b90600401614fe3565b60206040518083038186803b15801561173657600080fd5b505afa15801561174a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176e9190614b89565b83838151811061177a57fe5b602002602001015160a00181815250508073ffffffffffffffffffffffffffffffffffffffff1663f9557ccb6040518163ffffffff1660e01b8152600401604080518083038186803b1580156117cf57600080fd5b505afa1580156117e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118079190614d34565b83838151811061181357fe5b602090810291909101015160c001526040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216906370a0823190611874908b90600401614fe3565b60206040518083038186803b15801561188c57600080fd5b505afa1580156118a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c49190614b89565b8383815181106118d057fe5b602002602001015160e00181815250508073ffffffffffffffffffffffffffffffffffffffff16638285ef406040518163ffffffff1660e01b8152600401604080518083038186803b15801561192557600080fd5b505afa158015611939573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195d9190614d34565b83838151811061196957fe5b602090810291909101015161010001526040517f48e4163e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216906348e4163e906119cb908b90600401614fe3565b60206040518083038186803b1580156119e357600080fd5b505afa1580156119f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1b9190614b89565b838381518110611a2757fe5b60200260200101516101200181815250508073ffffffffffffffffffffffffffffffffffffffff16633ba0b9a96040518163ffffffff1660e01b815260040160206040518083038186803b158015611a7e57600080fd5b505afa158015611a92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab69190614b89565b838381518110611ac257fe5b60200260200101516101400181815250508073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b815260040160206040518083038186803b158015611b1957600080fd5b505afa158015611b2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b519190614bd4565b73ffffffffffffffffffffffffffffffffffffffff1663eeb8a8d38273ffffffffffffffffffffffffffffffffffffffff166374645ff36040518163ffffffff1660e01b815260040160006040518083038186803b158015611bb257600080fd5b505afa158015611bc6573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611c0c9190810190614ba1565b6040518263ffffffff1660e01b8152600401611c28919061551e565b604080518083038186803b158015611c3f57600080fd5b505afa158015611c53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c779190614b58565b9050838381518110611c8557fe5b60200260200101516101800181815250508073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b815260040160206040518083038186803b158015611cdc57600080fd5b505afa158015611cf0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d149190614bd4565b73ffffffffffffffffffffffffffffffffffffffff1663d39bbef08273ffffffffffffffffffffffffffffffffffffffff166374645ff36040518163ffffffff1660e01b815260040160006040518083038186803b158015611d7557600080fd5b505afa158015611d89573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611dcf9190810190614ba1565b6040518263ffffffff1660e01b8152600401611deb919061551e565b60206040518083038186803b158015611e0357600080fd5b505afa158015611e17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e3b9190614b89565b838381518110611e4757fe5b60200260200101516101600181815250508073ffffffffffffffffffffffffffffffffffffffff1663b27c0e746040518163ffffffff1660e01b815260040160606040518083038186803b158015611e9e57600080fd5b505afa158015611eb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ed69190614cdf565b838381518110611ee257fe5b60209081029190910101516101a00152506001016112f3565b5095945050505050565b6060808267ffffffffffffffff81118015611f1f57600080fd5b50604051908082528060200260200182016040528015611f5957816020015b611f466146aa565b815260200190600190039081611f3e5790505b50905060005b838110156125c2576000805473ffffffffffffffffffffffffffffffffffffffff166393f1a40b878785818110611f9257fe5b90506020020135896040518363ffffffff1660e01b8152600401611fb7929190615790565b604080518083038186803b158015611fce57600080fd5b505afa158015611fe2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120069190614e01565b5090508083838151811061201657fe5b602090810291909101810151015260005473ffffffffffffffffffffffffffffffffffffffff1663195426ec87878581811061204e57fe5b90506020020135896040518363ffffffff1660e01b8152600401612073929190615790565b60206040518083038186803b15801561208b57600080fd5b505afa15801561209f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c39190614b89565b8383815181106120cf57fe5b602090810291909101015161012001526000805473ffffffffffffffffffffffffffffffffffffffff16631526fe2788888681811061210a57fe5b905060200201356040518263ffffffff1660e01b815260040161212d9190615787565b60806040518083038186803b15801561214557600080fd5b505afa158015612159573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061217d9190614aba565b505050905086868481811061218e57fe5b905060200201358484815181106121a157fe5b6020908102919091010151528060006121cf73ffffffffffffffffffffffffffffffffffffffff831661402a565b905073ffffffffffffffffffffffffffffffffffffffff8116156125b2576000546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116926370a08231926122459290911690600401614fe3565b60206040518083038186803b15801561225d57600080fd5b505afa158015612271573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122959190614b89565b8686815181106122a157fe5b602090810291909101015160409081019190915260005490517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8085169263dd62ed3e9261230c928f921690600401615004565b60206040518083038186803b15801561232457600080fd5b505afa158015612338573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061235c9190614b89565b86868151811061236857fe5b602090810291909101015160a001526040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316906370a08231906123c9908d90600401614fe3565b60206040518083038186803b1580156123e157600080fd5b505afa1580156123f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124199190614b89565b86868151811061242557fe5b602002602001015160600181815250508173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561247b57600080fd5b505afa15801561248f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b39190614b89565b8686815181106124bf57fe5b602002602001015160800181815250506000808373ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561251857600080fd5b505afa15801561252c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125509190614d74565b5091509150816dffffffffffffffffffffffffffff1688888151811061257257fe5b602002602001015160c0018181525050806dffffffffffffffffffffffffffff1688888151811061259f57fe5b602002602001015160e001818152505050505b505060019092019150611f5f9050565b50949350505050565b60065473ffffffffffffffffffffffffffffffffffffffff1681565b6060808267ffffffffffffffff8111801561260157600080fd5b5060405190808252806020026020018201604052801561263b57816020015b6126286146fd565b8152602001906001900390816126205790505b50905060005b8381101561278157600085858381811061265757fe5b905060200201602081019061266c9190614976565b90508083838151811061267b57fe5b602090810291909101015173ffffffffffffffffffffffffffffffffffffffff91821690526126ab908216613d9c565b8383815181106126b757fe5b6020026020010151604001819052506126e58173ffffffffffffffffffffffffffffffffffffffff16613eb4565b8383815181106126f157fe5b60200260200101516060018190525061271f8173ffffffffffffffffffffffffffffffffffffffff16613f36565b60ff1683838151811061272e57fe5b6020026020010151602001818152505061275d8173ffffffffffffffffffffffffffffffffffffffff1661411e565b83838151811061276957fe5b60209081029190910101516080015250600101612641565b5090505b92915050565b60045473ffffffffffffffffffffffffffffffffffffffff1681565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b60035460009073ffffffffffffffffffffffffffffffffffffffff838116911614156127f85750670de0b6b3a7640000612cf4565b600654600090819073ffffffffffffffffffffffffffffffffffffffff16156128cb576006546003546040517fe6a4390500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169263e6a439059261287892899290911690600401615004565b60206040518083038186803b15801561289057600080fd5b505afa1580156128a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c89190614bd4565b91505b60055473ffffffffffffffffffffffffffffffffffffffff1615612999576005546003546040517fe6a4390500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169263e6a439059261294692899290911690600401615004565b60206040518083038186803b15801561295e57600080fd5b505afa158015612972573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129969190614bd4565b90505b73ffffffffffffffffffffffffffffffffffffffff82161580156129d1575073ffffffffffffffffffffffffffffffffffffffff8116155b156129e157600092505050612cf4565b6000808073ffffffffffffffffffffffffffffffffffffffff851615612b14576000808673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015612a4a57600080fd5b505afa158015612a5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a829190614d74565b5091509150818501945080840193508673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015612ad757600080fd5b505afa158015612aeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b0f9190614bd4565b925050505b73ffffffffffffffffffffffffffffffffffffffff841615612c5e576000808573ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015612b7957600080fd5b505afa158015612b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bb19190614d74565b509581019594850194909250905073ffffffffffffffffffffffffffffffffffffffff8316612c5b578573ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015612c2057600080fd5b505afa158015612c34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c589190614bd4565b92505b50505b60035473ffffffffffffffffffffffffffffffffffffffff82811691161415612cc157826dffffffffffffffffffffffffffff16826dffffffffffffffffffffffffffff16670de0b6b3a76400000281612cb457fe5b0495505050505050612cf4565b816dffffffffffffffffffffffffffff16836dffffffffffffffffffffffffffff16670de0b6b3a76400000281612cb457fe5b919050565b6060808267ffffffffffffffff81118015612d1357600080fd5b50604051908082528060200260200182016040528015612d4d57816020015b612d3a614745565b815260200190600190039081612d325790505b50905060005b838110156125c2576000858583818110612d6957fe5b9050602002016020810190612d7e9190614976565b90508073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015612dc657600080fd5b505afa158015612dda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dfe9190614b89565b838381518110612e0a57fe5b6020026020010151602001818152505080838381518110612e2757fe5b602090810291909101015173ffffffffffffffffffffffffffffffffffffffff91821690526040517f70a08231000000000000000000000000000000000000000000000000000000008152908216906370a0823190612e8a908a90600401614fe3565b60206040518083038186803b158015612ea257600080fd5b505afa158015612eb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eda9190614b89565b838381518110612ee657fe5b602090810291909101015160409081019190915260085490517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8084169263dd62ed3e92612f51928c921690600401615004565b60206040518083038186803b158015612f6957600080fd5b505afa158015612f7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fa19190614b89565b838381518110612fad57fe5b602090810291909101015160800152612fdc73ffffffffffffffffffffffffffffffffffffffff821688614216565b838381518110612fe857fe5b602090810291909101015160a001526008546040517ff7888aec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063f7888aec9061304f9084908b90600401615004565b60206040518083038186803b15801561306757600080fd5b505afa15801561307b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061309f9190614b89565b8383815181106130ab57fe5b6020908102919091010151606001526008546040517f4ffe34db00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690634ffe34db90613110908490600401614fe3565b604080518083038186803b15801561312757600080fd5b505afa15801561313b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061315f9190614dc8565b84848151811061316b57fe5b602002602001015160c00185858151811061318257fe5b60209081029190910101516fffffffffffffffffffffffffffffffff92831660e090910152911690526131b4816127c3565b8383815181106131c057fe5b6020908102919091010151610100015250600101612d53565b60085473ffffffffffffffffffffffffffffffffffffffff1681565b60608083830367ffffffffffffffff8111801561321157600080fd5b5060405190808252806020026020018201604052801561324b57816020015b6132386147cb565b8152602001906001900390816132305790505b509050835b838110156125c2576040517f1e3dd18b00000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff881690631e3dd18b906132ad908590600401615787565b60206040518083038186803b1580156132c557600080fd5b505afa1580156132d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132fd9190614bd4565b9050600086830390508184828151811061331357fe5b60200260200101516000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508173ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561339757600080fd5b505afa1580156133ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133cf9190614bd4565b8482815181106133db57fe5b60200260200101516020019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508173ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561345f57600080fd5b505afa158015613473573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134979190614bd4565b8482815181106134a357fe5b60200260200101516040019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561352757600080fd5b505afa15801561353b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061355f9190614b89565b84828151811061356b57fe5b6020908102919091010151606001525050600101613250565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314613620576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161361790615531565b60405180910390fd5b600080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff9b8c1617909155600180548216998b1699909917909855600280548916978a16979097179096556003805488169589169590951790945560048054871693881693909317909255600580548616918716919091179055600680548516918616919091179055600780548416918516919091179055600880549092169216919091179055565b6060808267ffffffffffffffff811180156136fc57600080fd5b5060405190808252806020026020018201604052801561373657816020015b6137236147f2565b81526020019060019003908161371b5790505b50905060005b838110156125c257600085858381811061375257fe5b90506020020160208101906137679190614976565b90508083838151811061377657fe5b60200260200101516000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000808273ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156137fd57600080fd5b505afa158015613811573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138359190614d74565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691508185858151811061386757fe5b602002602001015160200181815250508085858151811061388457fe5b602002602001015160400181815250508273ffffffffffffffffffffffffffffffffffffffff166370a082318a6040518263ffffffff1660e01b81526004016138cd9190614fe3565b60206040518083038186803b1580156138e557600080fd5b505afa1580156138f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061391d9190614b89565b85858151811061392957fe5b602002602001015160800181815250508273ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561397f57600080fd5b505afa158015613993573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b79190614b89565b8585815181106139c357fe5b60209081029190910101516060015250505060010161373c565b6060808267ffffffffffffffff811180156139f757600080fd5b50604051908082528060200260200182016040528015613a3157816020015b613a1e61457b565b815260200190600190039081613a165790505b50905060005b838110156125c257848482818110613a4b57fe5b90506020020135828281518110613a5e57fe5b60209081029190910101515260005473ffffffffffffffffffffffffffffffffffffffff166393f1a40b868684818110613a9457fe5b90506020020135886040518363ffffffff1660e01b8152600401613ab9929190615790565b604080518083038186803b158015613ad057600080fd5b505afa158015613ae4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b089190614e01565b50828281518110613b1557fe5b6020908102919091018101510152600101613a37565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b6060808267ffffffffffffffff81118015613b6157600080fd5b50604051908082528060200260200182016040528015613b9b57816020015b613b88614837565b815260200190600190039081613b805790505b5090508260005b81811015613d75576000868683818110613bb857fe5b9050602002016020810190613bcd9190614976565b905080848381518110613bdc57fe5b602090810291909101015173ffffffffffffffffffffffffffffffffffffffff91821690526040517f70a08231000000000000000000000000000000000000000000000000000000008152908216906370a0823190613c3f908b90600401614fe3565b60206040518083038186803b158015613c5757600080fd5b505afa158015613c6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c8f9190614b89565b848381518110613c9b57fe5b60209081029190910181015101526008546040517ff7888aec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063f7888aec90613d019084908c90600401615004565b60206040518083038186803b158015613d1957600080fd5b505afa158015613d2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d519190614b89565b848381518110613d5d57fe5b60209081029190910101516040015250600101613ba2565b509095945050505050565b60075473ffffffffffffffffffffffffffffffffffffffff1681565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f06fdde03000000000000000000000000000000000000000000000000000000001790529051606091600091839173ffffffffffffffffffffffffffffffffffffffff861691613e1e9190614fc7565b600060405180830381855afa9150503d8060008114613e59576040519150601f19603f3d011682016040523d82523d6000602084013e613e5e565b606091505b509150915081613ea3576040518060400160405280600381526020017f3f3f3f0000000000000000000000000000000000000000000000000000000000815250613eac565b613eac81614334565b949350505050565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f95d89b41000000000000000000000000000000000000000000000000000000001790529051606091600091839173ffffffffffffffffffffffffffffffffffffffff861691613e1e9190614fc7565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f313ce567000000000000000000000000000000000000000000000000000000001790529051600091829160609173ffffffffffffffffffffffffffffffffffffffff861691613fb89190614fc7565b600060405180830381855afa9150503d8060008114613ff3576040519150601f19603f3d011682016040523d82523d6000602084013e613ff8565b606091505b509150915081801561400b575080516020145b614016576012613eac565b80806020019051810190613eac9190614e24565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc45a0155000000000000000000000000000000000000000000000000000000001790529051600091829160609173ffffffffffffffffffffffffffffffffffffffff8616916140ac9190614fc7565b600060405180830381855afa9150503d80600081146140e7576040519150601f19603f3d011682016040523d82523d6000602084013e6140ec565b606091505b50915091508180156140ff575080516020145b61410a576000613eac565b80806020019051810190613eac9190614bd4565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f3644e515000000000000000000000000000000000000000000000000000000001790529051600091829160609173ffffffffffffffffffffffffffffffffffffffff861691612710916141a391614fc7565b6000604051808303818686fa925050503d80600081146141df576040519150601f19603f3d011682016040523d82523d6000602084013e6141e4565b606091505b50915091508180156141f7575080516020145b614202576000613eac565b80806020019051810190613eac9190614b89565b60008060608473ffffffffffffffffffffffffffffffffffffffff16611388637ecebe008660405160240161424b9190614fe3565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516142999190614fc7565b6000604051808303818686fa925050503d80600081146142d5576040519150601f19603f3d011682016040523d82523d6000602084013e6142da565b606091505b50915091508180156142ed575080516020145b614317577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61432b565b8080602001905181019061432b9190614b89565b95945050505050565b6060604082511061435a57818060200190518101906143539190614ba1565b9050612cf4565b8151602014156144c25760005b60208160ff161080156143ae5750828160ff168151811061438457fe5b01602001517fff000000000000000000000000000000000000000000000000000000000000001615155b156143bb57600101614367565b60608160ff1667ffffffffffffffff811180156143d757600080fd5b506040519080825280601f01601f191660200182016040528015614402576020820181803683370190505b509050600091505b60208260ff161080156144515750838260ff168151811061442757fe5b01602001517fff000000000000000000000000000000000000000000000000000000000000001615155b156144b957838260ff168151811061446557fe5b602001015160f81c60f81b818360ff168151811061447f57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060019091019061440a565b9150612cf49050565b5060408051808201909152600381527f3f3f3f00000000000000000000000000000000000000000000000000000000006020820152612cf4565b604051806101a00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600081526020016000815260200160008152602001606081525090565b604080518082019091526000808252602082015290565b604051806040016040528060008152602001600081525090565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820181905261010082015261012081019190915290565b604051806101c00160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001606081526020016000815260200160008152602001614668614564565b81526020016000815260200161467c614564565b8152602001600081526020016000815260200160008152602001600081526020016146a561486e565b905290565b604051806101400160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040518060a00160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016060815260200160608152602001600080191681525090565b604051806101200160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000815260200160008152602001600081526020016000815260200160006fffffffffffffffffffffffffffffffff16815260200160006fffffffffffffffffffffffffffffffff168152602001600081525090565b60408051608081018252600080825260208201819052918101829052606081019190915290565b6040518060a00160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000815260200160008152602001600081525090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081525090565b604080516060810182526000808252602082018190529181019190915290565b60008083601f84011261489f578182fd5b50813567ffffffffffffffff8111156148b6578182fd5b602083019150836020808302850101111561129157600080fd5b600082601f8301126148e0578081fd5b815167ffffffffffffffff8111156148f6578182fd5b61492760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016157b4565b915080825283602082850101111561493e57600080fd5b61494f8160208401602086016157db565b5092915050565b80516fffffffffffffffffffffffffffffffff8116811461278557600080fd5b600060208284031215614987578081fd5b81356149928161580b565b9392505050565b6000806000604084860312156149ad578182fd5b83356149b88161580b565b9250602084013567ffffffffffffffff8111156149d3578283fd5b6149df8682870161488e565b9497909650939450505050565b600080600060408486031215614a00578081fd5b8335614a0b8161580b565b9250602084013567ffffffffffffffff8111156149d3578182fd5b60008060008060008060808789031215614a3e578384fd5b8635614a498161580b565b9550602087013567ffffffffffffffff80821115614a65578586fd5b614a718a838b0161488e565b909750955060408901359150614a868261580b565b90935060608801359080821115614a9b578384fd5b50614aa889828a0161488e565b979a9699509497509295939492505050565b60008060008060808587031215614acf578182fd5b8451614ada8161580b565b60208601516040870151606090970151919890975090945092505050565b60008060208385031215614b0a578182fd5b823567ffffffffffffffff811115614b20578283fd5b614b2c8582860161488e565b90969095509350505050565b600060208284031215614b49578081fd5b81518015158114614992578182fd5b60008060408385031215614b6a578182fd5b82518015158114614b79578283fd5b6020939093015192949293505050565b600060208284031215614b9a578081fd5b5051919050565b600060208284031215614bb2578081fd5b815167ffffffffffffffff811115614bc8578182fd5b613eac848285016148d0565b600060208284031215614be5578081fd5b81516149928161580b565b600080600060608486031215614c04578081fd5b8335614c0f8161580b565b95602085013595506040909401359392505050565b60008060008060008060008060006101208a8c031215614c42578687fd5b8935614c4d8161580b565b985060208a0135614c5d8161580b565b975060408a0135614c6d8161580b565b965060608a0135614c7d8161580b565b955060808a0135614c8d8161580b565b945060a08a0135614c9d8161580b565b935060c08a0135614cad8161580b565b925060e08a0135614cbd8161580b565b91506101008a0135614cce8161580b565b809150509295985092959850929598565b600060608284031215614cf0578081fd5b614cfa60606157b4565b8251614d058161586a565b81526020830151614d158161586a565b60208201526040830151614d288161584c565b60408201529392505050565b600060408284031215614d45578081fd5b614d4f60406157b4565b614d598484614956565b8152614d688460208501614956565b60208201529392505050565b600080600060608486031215614d88578081fd5b8351614d9381615830565b6020850151909350614da481615830565b604085015190925063ffffffff81168114614dbd578182fd5b809150509250925092565b60008060408385031215614dda578182fd5b8251614de58161584c565b6020840151909250614df68161584c565b809150509250929050565b60008060408385031215614e13578182fd5b505080516020909101519092909150565b600060208284031215614e35578081fd5b815160ff81168114614992578182fd5b6000815180845260208085019450808401835b83811015614e76578151151587529582019590820190600101614e58565b509495945050505050565b6000815180845260208085019450808401835b83811015614e76578151805173ffffffffffffffffffffffffffffffffffffffff1688528301518388015260409096019590820190600101614e94565b15159052565b60008151808452614eef8160208601602086016157db565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff169052565b67ffffffffffffffff808251168352806020830151166020840152506fffffffffffffffffffffffffffffffff60408201511660408301525050565b80518252602090810151910152565b80516fffffffffffffffffffffffffffffffff908116835260209182015116910152565b6fffffffffffffffffffffffffffffffff169052565b60ff169052565b60008251614fd98184602087016157db565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b602080825282518282018190526000919060409081850190868401855b828110156150d157815161505d858251614f21565b80870151858801528581015186860152606080820151908601526080808201519086015260a0808201519086015260c08082015161509d82880182614faa565b505060e0808201516150b182880182614faa565b505061010090810151908501526101209093019290850190600101615048565b5091979650505050505050565b602080825282518282018190526000919060409081850190868401855b828110156150d1578151805173ffffffffffffffffffffffffffffffffffffffff168552868101518786015285015185850152606090930192908501906001016150fb565b60208082528251828201819052600091906040908185019080840286018301878501865b83811015615287577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc089840301855281516102406151a3858351614f21565b888201516151b38a870182614f21565b50878201516151c489870182614f21565b5060608083015182828801526151dc83880182614ed7565b92505050608080830151818701525060a080830151818701525060c08083015161520882880182614f86565b505060e08201516101008681019190915282015161012061522b81880183614f86565b8301516101608781019190915261014084015161018080890191909152908401516101a080890191909152908401516101c08801529092015191506152746101e0860183614f3b565b9588019593505090860190600101615164565b509098975050505050505050565b602080825282518282018190526000919060409081850190868401855b828110156150d1578151805173ffffffffffffffffffffffffffffffffffffffff90811686528782015181168887015286820151168686015260609081015190850152608090930192908501906001016152b2565b602080825282518282018190526000919060409081850190868401855b828110156150d1578151805173ffffffffffffffffffffffffffffffffffffffff16855286810151878601528581015186860152606080820151908601526080908101519085015260a09093019290850190600101615324565b602080825282518282018190526000919060409081850190868401855b828110156150d1576153ae848351614f77565b928401929085019060010161539b565b60208082528251828201819052600091906040908185019080840286018301878501865b83811015615287577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0898403018552815160a073ffffffffffffffffffffffffffffffffffffffff8251168552888201518986015287820151818987015261544c82870182614ed7565b915050606080830151868303828801526154668382614ed7565b60809485015197909401969096525050948701949250908601906001016153e2565b602080825282518282018190526000919060409081850190868401855b828110156150d15781518051855286810151878601528581015186860152606080820151908601526080808201519086015260a0808201519086015260c0808201519086015260e080820151908601526101008082015190860152610120908101519085015261014090930192908501906001016154a5565b6000602082526149926020830184614ed7565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060608083016155778487614f77565b604084810183905285519182905260809182860190602080820288018501818a01885b84811015615695577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808b8403018652815161014081518552858201516155e287870182614f21565b5088820151898601528a8201516155fb8c870182614ed1565b508982015161560c8b870182614f21565b5060a08083015161561f82880182614f21565b505060c08083015161563382880182614f21565b505060e080830151828288015261564c83880182614ed7565b9250505061010080830151868303828801526156688382614ed7565b9250505061012080830151925061568181870184614fc0565b50968501969350509083019060010161559a565b50909b9a5050505050505050505050565b60006020825282516020830152602083015160408301526040830151606083015260608301516080830152608083015160a083015260a083015160c083015260c08301516101a08060e08501526157016101c0850183614e81565b60e086015161010086810191909152860151610120808701919091528601516101408087019190915286015161016080870191909152860151610180808701919091528601518582037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018387015290925061577d8382614e45565b9695505050505050565b90815260200190565b91825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b60405181810167ffffffffffffffff811182821017156157d357600080fd5b604052919050565b60005b838110156157f65781810151838201526020016157de565b83811115615805576000848401525b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461582d57600080fd5b50565b6dffffffffffffffffffffffffffff8116811461582d57600080fd5b6fffffffffffffffffffffffffffffffff8116811461582d57600080fd5b67ffffffffffffffff8116811461582d57600080fdfea26469706673582212208d3a8fec06fc3ba3cafdcc69fc5fa84fc8d7f06a237e2a99f1af459d80427acc64736f6c634300060c0033000000000000000000000000c2edad668740f1aa35e4d8f227fb8e17dca888cd000000000000000000000000e11fc0b43ab98eb91e9836129d1ee7c3bc95df500000000000000000000000006b3595068778dd592e39a122f4f5a5cf09c90fe2000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599000000000000000000000000c0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f0000000000000000000000008798249c2e607446efb7ad49ec89dd1865ff4272000000000000000000000000f5bce5077908a1b7370b9ae04adc565ebd643966

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101825760003560e01c80635ec54659116100d8578063a88830601161008c578063ad5c464811610066578063ad5c464814610333578063ca0f937c1461033b578063febb0f7e1461035b57610182565b8063a8883060146102de578063a959dd80146102f3578063ac6091f81461031357610182565b80636b2ace87116100bd5780636b2ace87146102ae5780637e3e2596146102b65780638da5cb5b146102d657610182565b80635ec546591461026e5780636a385ae91461028e57610182565b806329a4a88e1161013a5780634a69ac50116101145780634a69ac501461023e5780634dede3de1461025e57806350655d8c1461026657610182565b806329a4a88e146101f65780633009f414146102165780633da04b871461023657610182565b80631fc8bc5d1161016b5780631fc8bc5d146101c557806322984b24146101cd5780632952dde8146101d557610182565b80630a0879031461018757806315243475146101a5575b600080fd5b61018f610363565b60405161019c9190614fe3565b60405180910390f35b6101b86101b3366004614a26565b61037f565b60405161019c91906156a6565b61018f610c25565b61018f610c41565b6101e86101e3366004614af8565b610c5d565b60405161019c929190615566565b6102096102043660046149ec565b611298565b60405161019c9190615140565b6102296102243660046149ec565b611f05565b60405161019c9190615488565b61018f6125cb565b61025161024c366004614af8565b6125e7565b60405161019c91906153be565b61018f61278b565b61018f6127a7565b61028161027c366004614976565b6127c3565b60405161019c9190615787565b6102a161029c3660046149ec565b612cf9565b60405161019c919061502b565b61018f6131d9565b6102c96102c4366004614bf0565b6131f5565b60405161019c9190615295565b61018f613584565b6102f16102ec366004614c24565b6135a8565b005b6103066103013660046149ec565b6136e2565b60405161019c9190615307565b6103266103213660046149ec565b6139dd565b60405161019c919061537e565b61018f613b2b565b61034e610349366004614999565b613b47565b60405161019c91906150de565b61018f613d80565b60025473ffffffffffffffffffffffffffffffffffffffff1681565b6103876144fc565b61038f6144fc565b73ffffffffffffffffffffffffffffffffffffffff88163181528567ffffffffffffffff811180156103c057600080fd5b506040519080825280602002602001820160405280156103fa57816020015b6103e7614564565b8152602001906001900390816103df5790505b5060c082015260005b8681101561052457600088888381811061041957fe5b905060200201602081019061042e9190614976565b9050808360c00151838151811061044157fe5b60200260200101516000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663574f2ba36040518163ffffffff1660e01b815260040160206040518083038186803b1580156104c557600080fd5b505afa1580156104d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104fd9190614b89565b8360c00151838151811061050d57fe5b602090810291909101810151015250600101610403565b508267ffffffffffffffff8111801561053c57600080fd5b50604051908082528060200260200182016040528015610566578160200160208202803683370190505b5061018082015260005b8381101561064e5760085473ffffffffffffffffffffffffffffffffffffffff166391e0eab58686848181106105a257fe5b90506020020160208101906105b79190614976565b8b6040518363ffffffff1660e01b81526004016105d5929190615004565b60206040518083038186803b1580156105ed57600080fd5b505afa158015610601573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106259190614b38565b826101800151828151811061063657fe5b91151560209283029190910190910152600101610570565b5073ffffffffffffffffffffffffffffffffffffffff85161561067a57610674856127c3565b60e08201525b60045473ffffffffffffffffffffffffffffffffffffffff16156106c1576004546106ba9073ffffffffffffffffffffffffffffffffffffffff166127c3565b6101208201525b60025473ffffffffffffffffffffffffffffffffffffffff1615610917576002546107019073ffffffffffffffffffffffffffffffffffffffff166127c3565b6101008201526002546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906370a082319061075d908b90600401614fe3565b60206040518083038186803b15801561077557600080fd5b505afa158015610789573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ad9190614b89565b60208201526002546007546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316926370a082319261080c92911690600401614fe3565b60206040518083038186803b15801561082457600080fd5b505afa158015610838573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085c9190614b89565b60408083019190915260025460075491517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182169263dd62ed3e926108c1928d9290911690600401615004565b60206040518083038186803b1580156108d957600080fd5b505afa1580156108ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109119190614b89565b60a08201525b60075473ffffffffffffffffffffffffffffffffffffffff1615610a89576007546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906370a082319061098b908b90600401614fe3565b60206040518083038186803b1580156109a357600080fd5b505afa1580156109b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109db9190614b89565b6060820152600754604080517f18160ddd000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff909216916318160ddd91600480820192602092909190829003018186803b158015610a4b57600080fd5b505afa158015610a5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a839190614b89565b60808201525b60005473ffffffffffffffffffffffffffffffffffffffff1615610c135760008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663081e3eda6040518163ffffffff1660e01b815260040160206040518083038186803b158015610b1057600080fd5b505afa158015610b24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b489190614b89565b90506000805b82811015610c0a576000546040517f195426ec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063195426ec90610bae9084908f90600401615790565b60206040518083038186803b158015610bc657600080fd5b505afa158015610bda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bfe9190614b89565b90910190600101610b4e565b50610140830152505b42610160820152979650505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60055473ffffffffffffffffffffffffffffffffffffffff1681565b610c6561457b565b6060610c6f61457b565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166317caf6f16040518163ffffffff1660e01b815260040160206040518083038186803b158015610cd557600080fd5b505afa158015610ce9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0d9190614b89565b815260008054604080517f081e3eda000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9092169163081e3eda91600480820192602092909190829003018186803b158015610d7b57600080fd5b505afa158015610d8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db39190614b89565b60208301819052905060608567ffffffffffffffff81118015610dd557600080fd5b50604051908082528060200260200182016040528015610e0f57816020015b610dfc614595565b815260200190600190039081610df45790505b50905060005b8681101561128857878782818110610e2957fe5b90506020020135828281518110610e3c57fe5b60209081029190910101515260008054819073ffffffffffffffffffffffffffffffffffffffff16631526fe278b8b86818110610e7557fe5b905060200201356040518263ffffffff1660e01b8152600401610e989190615787565b60806040518083038186803b158015610eb057600080fd5b505afa158015610ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee89190614aba565b505091509150600082905080858581518110610f0057fe5b60200260200101516020019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505081858581518110610f4b57fe5b60200260200101516040018181525050610f7a8173ffffffffffffffffffffffffffffffffffffffff16613d9c565b858581518110610f8657fe5b602002602001015160e00181905250610fb48173ffffffffffffffffffffffffffffffffffffffff16613eb4565b858581518110610fc057fe5b60200260200101516101000181905250610fef8173ffffffffffffffffffffffffffffffffffffffff16613f36565b858581518110610ffb57fe5b6020026020010151610120019060ff16908160ff16815250506110338173ffffffffffffffffffffffffffffffffffffffff1661402a565b85858151811061103f57fe5b60200260200101516080019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600073ffffffffffffffffffffffffffffffffffffffff168585815181106110a157fe5b60200260200101516080015173ffffffffffffffffffffffffffffffffffffffff161461127d5760018585815181106110d657fe5b602002602001015160600190151590811515815250508073ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561113257600080fd5b505afa158015611146573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116a9190614bd4565b85858151811061117657fe5b602002602001015160a0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156111fa57600080fd5b505afa15801561120e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112329190614bd4565b85858151811061123e57fe5b602002602001015160c0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b505050600101610e15565b50919350909150505b9250929050565b606081818167ffffffffffffffff811180156112b357600080fd5b506040519080825280602002602001820160405280156112ed57816020015b6112da6145e8565b8152602001906001900390816112d25790505b50905060005b82811015611efb57600086868381811061130957fe5b905060200201602081019061131e9190614976565b90508073ffffffffffffffffffffffffffffffffffffffff1663d8dfeb456040518163ffffffff1660e01b815260040160206040518083038186803b15801561136657600080fd5b505afa15801561137a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139e9190614bd4565b8383815181106113aa57fe5b60200260200101516000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff166338d52e0f6040518163ffffffff1660e01b815260040160206040518083038186803b15801561142e57600080fd5b505afa158015611442573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114669190614bd4565b83838151811061147257fe5b60200260200101516020019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b815260040160206040518083038186803b1580156114f657600080fd5b505afa15801561150a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152e9190614bd4565b83838151811061153a57fe5b60200260200101516040019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff166374645ff36040518163ffffffff1660e01b815260040160006040518083038186803b1580156115be57600080fd5b505afa1580156115d2573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526116189190810190614ba1565b83838151811061162457fe5b6020026020010151606001819052508073ffffffffffffffffffffffffffffffffffffffff1663473e3ce76040518163ffffffff1660e01b815260040160206040518083038186803b15801561167957600080fd5b505afa15801561168d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b19190614b89565b8383815181106116bd57fe5b6020908102919091010151608001526040517f1c9e379b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690631c9e379b9061171e908b90600401614fe3565b60206040518083038186803b15801561173657600080fd5b505afa15801561174a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176e9190614b89565b83838151811061177a57fe5b602002602001015160a00181815250508073ffffffffffffffffffffffffffffffffffffffff1663f9557ccb6040518163ffffffff1660e01b8152600401604080518083038186803b1580156117cf57600080fd5b505afa1580156117e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118079190614d34565b83838151811061181357fe5b602090810291909101015160c001526040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216906370a0823190611874908b90600401614fe3565b60206040518083038186803b15801561188c57600080fd5b505afa1580156118a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c49190614b89565b8383815181106118d057fe5b602002602001015160e00181815250508073ffffffffffffffffffffffffffffffffffffffff16638285ef406040518163ffffffff1660e01b8152600401604080518083038186803b15801561192557600080fd5b505afa158015611939573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195d9190614d34565b83838151811061196957fe5b602090810291909101015161010001526040517f48e4163e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216906348e4163e906119cb908b90600401614fe3565b60206040518083038186803b1580156119e357600080fd5b505afa1580156119f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1b9190614b89565b838381518110611a2757fe5b60200260200101516101200181815250508073ffffffffffffffffffffffffffffffffffffffff16633ba0b9a96040518163ffffffff1660e01b815260040160206040518083038186803b158015611a7e57600080fd5b505afa158015611a92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab69190614b89565b838381518110611ac257fe5b60200260200101516101400181815250508073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b815260040160206040518083038186803b158015611b1957600080fd5b505afa158015611b2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b519190614bd4565b73ffffffffffffffffffffffffffffffffffffffff1663eeb8a8d38273ffffffffffffffffffffffffffffffffffffffff166374645ff36040518163ffffffff1660e01b815260040160006040518083038186803b158015611bb257600080fd5b505afa158015611bc6573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611c0c9190810190614ba1565b6040518263ffffffff1660e01b8152600401611c28919061551e565b604080518083038186803b158015611c3f57600080fd5b505afa158015611c53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c779190614b58565b9050838381518110611c8557fe5b60200260200101516101800181815250508073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b815260040160206040518083038186803b158015611cdc57600080fd5b505afa158015611cf0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d149190614bd4565b73ffffffffffffffffffffffffffffffffffffffff1663d39bbef08273ffffffffffffffffffffffffffffffffffffffff166374645ff36040518163ffffffff1660e01b815260040160006040518083038186803b158015611d7557600080fd5b505afa158015611d89573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611dcf9190810190614ba1565b6040518263ffffffff1660e01b8152600401611deb919061551e565b60206040518083038186803b158015611e0357600080fd5b505afa158015611e17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e3b9190614b89565b838381518110611e4757fe5b60200260200101516101600181815250508073ffffffffffffffffffffffffffffffffffffffff1663b27c0e746040518163ffffffff1660e01b815260040160606040518083038186803b158015611e9e57600080fd5b505afa158015611eb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ed69190614cdf565b838381518110611ee257fe5b60209081029190910101516101a00152506001016112f3565b5095945050505050565b6060808267ffffffffffffffff81118015611f1f57600080fd5b50604051908082528060200260200182016040528015611f5957816020015b611f466146aa565b815260200190600190039081611f3e5790505b50905060005b838110156125c2576000805473ffffffffffffffffffffffffffffffffffffffff166393f1a40b878785818110611f9257fe5b90506020020135896040518363ffffffff1660e01b8152600401611fb7929190615790565b604080518083038186803b158015611fce57600080fd5b505afa158015611fe2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120069190614e01565b5090508083838151811061201657fe5b602090810291909101810151015260005473ffffffffffffffffffffffffffffffffffffffff1663195426ec87878581811061204e57fe5b90506020020135896040518363ffffffff1660e01b8152600401612073929190615790565b60206040518083038186803b15801561208b57600080fd5b505afa15801561209f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c39190614b89565b8383815181106120cf57fe5b602090810291909101015161012001526000805473ffffffffffffffffffffffffffffffffffffffff16631526fe2788888681811061210a57fe5b905060200201356040518263ffffffff1660e01b815260040161212d9190615787565b60806040518083038186803b15801561214557600080fd5b505afa158015612159573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061217d9190614aba565b505050905086868481811061218e57fe5b905060200201358484815181106121a157fe5b6020908102919091010151528060006121cf73ffffffffffffffffffffffffffffffffffffffff831661402a565b905073ffffffffffffffffffffffffffffffffffffffff8116156125b2576000546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116926370a08231926122459290911690600401614fe3565b60206040518083038186803b15801561225d57600080fd5b505afa158015612271573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122959190614b89565b8686815181106122a157fe5b602090810291909101015160409081019190915260005490517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8085169263dd62ed3e9261230c928f921690600401615004565b60206040518083038186803b15801561232457600080fd5b505afa158015612338573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061235c9190614b89565b86868151811061236857fe5b602090810291909101015160a001526040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316906370a08231906123c9908d90600401614fe3565b60206040518083038186803b1580156123e157600080fd5b505afa1580156123f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124199190614b89565b86868151811061242557fe5b602002602001015160600181815250508173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561247b57600080fd5b505afa15801561248f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b39190614b89565b8686815181106124bf57fe5b602002602001015160800181815250506000808373ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561251857600080fd5b505afa15801561252c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125509190614d74565b5091509150816dffffffffffffffffffffffffffff1688888151811061257257fe5b602002602001015160c0018181525050806dffffffffffffffffffffffffffff1688888151811061259f57fe5b602002602001015160e001818152505050505b505060019092019150611f5f9050565b50949350505050565b60065473ffffffffffffffffffffffffffffffffffffffff1681565b6060808267ffffffffffffffff8111801561260157600080fd5b5060405190808252806020026020018201604052801561263b57816020015b6126286146fd565b8152602001906001900390816126205790505b50905060005b8381101561278157600085858381811061265757fe5b905060200201602081019061266c9190614976565b90508083838151811061267b57fe5b602090810291909101015173ffffffffffffffffffffffffffffffffffffffff91821690526126ab908216613d9c565b8383815181106126b757fe5b6020026020010151604001819052506126e58173ffffffffffffffffffffffffffffffffffffffff16613eb4565b8383815181106126f157fe5b60200260200101516060018190525061271f8173ffffffffffffffffffffffffffffffffffffffff16613f36565b60ff1683838151811061272e57fe5b6020026020010151602001818152505061275d8173ffffffffffffffffffffffffffffffffffffffff1661411e565b83838151811061276957fe5b60209081029190910101516080015250600101612641565b5090505b92915050565b60045473ffffffffffffffffffffffffffffffffffffffff1681565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b60035460009073ffffffffffffffffffffffffffffffffffffffff838116911614156127f85750670de0b6b3a7640000612cf4565b600654600090819073ffffffffffffffffffffffffffffffffffffffff16156128cb576006546003546040517fe6a4390500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169263e6a439059261287892899290911690600401615004565b60206040518083038186803b15801561289057600080fd5b505afa1580156128a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c89190614bd4565b91505b60055473ffffffffffffffffffffffffffffffffffffffff1615612999576005546003546040517fe6a4390500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169263e6a439059261294692899290911690600401615004565b60206040518083038186803b15801561295e57600080fd5b505afa158015612972573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129969190614bd4565b90505b73ffffffffffffffffffffffffffffffffffffffff82161580156129d1575073ffffffffffffffffffffffffffffffffffffffff8116155b156129e157600092505050612cf4565b6000808073ffffffffffffffffffffffffffffffffffffffff851615612b14576000808673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015612a4a57600080fd5b505afa158015612a5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a829190614d74565b5091509150818501945080840193508673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015612ad757600080fd5b505afa158015612aeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b0f9190614bd4565b925050505b73ffffffffffffffffffffffffffffffffffffffff841615612c5e576000808573ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015612b7957600080fd5b505afa158015612b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bb19190614d74565b509581019594850194909250905073ffffffffffffffffffffffffffffffffffffffff8316612c5b578573ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015612c2057600080fd5b505afa158015612c34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c589190614bd4565b92505b50505b60035473ffffffffffffffffffffffffffffffffffffffff82811691161415612cc157826dffffffffffffffffffffffffffff16826dffffffffffffffffffffffffffff16670de0b6b3a76400000281612cb457fe5b0495505050505050612cf4565b816dffffffffffffffffffffffffffff16836dffffffffffffffffffffffffffff16670de0b6b3a76400000281612cb457fe5b919050565b6060808267ffffffffffffffff81118015612d1357600080fd5b50604051908082528060200260200182016040528015612d4d57816020015b612d3a614745565b815260200190600190039081612d325790505b50905060005b838110156125c2576000858583818110612d6957fe5b9050602002016020810190612d7e9190614976565b90508073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015612dc657600080fd5b505afa158015612dda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dfe9190614b89565b838381518110612e0a57fe5b6020026020010151602001818152505080838381518110612e2757fe5b602090810291909101015173ffffffffffffffffffffffffffffffffffffffff91821690526040517f70a08231000000000000000000000000000000000000000000000000000000008152908216906370a0823190612e8a908a90600401614fe3565b60206040518083038186803b158015612ea257600080fd5b505afa158015612eb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eda9190614b89565b838381518110612ee657fe5b602090810291909101015160409081019190915260085490517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8084169263dd62ed3e92612f51928c921690600401615004565b60206040518083038186803b158015612f6957600080fd5b505afa158015612f7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fa19190614b89565b838381518110612fad57fe5b602090810291909101015160800152612fdc73ffffffffffffffffffffffffffffffffffffffff821688614216565b838381518110612fe857fe5b602090810291909101015160a001526008546040517ff7888aec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063f7888aec9061304f9084908b90600401615004565b60206040518083038186803b15801561306757600080fd5b505afa15801561307b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061309f9190614b89565b8383815181106130ab57fe5b6020908102919091010151606001526008546040517f4ffe34db00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690634ffe34db90613110908490600401614fe3565b604080518083038186803b15801561312757600080fd5b505afa15801561313b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061315f9190614dc8565b84848151811061316b57fe5b602002602001015160c00185858151811061318257fe5b60209081029190910101516fffffffffffffffffffffffffffffffff92831660e090910152911690526131b4816127c3565b8383815181106131c057fe5b6020908102919091010151610100015250600101612d53565b60085473ffffffffffffffffffffffffffffffffffffffff1681565b60608083830367ffffffffffffffff8111801561321157600080fd5b5060405190808252806020026020018201604052801561324b57816020015b6132386147cb565b8152602001906001900390816132305790505b509050835b838110156125c2576040517f1e3dd18b00000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff881690631e3dd18b906132ad908590600401615787565b60206040518083038186803b1580156132c557600080fd5b505afa1580156132d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132fd9190614bd4565b9050600086830390508184828151811061331357fe5b60200260200101516000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508173ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561339757600080fd5b505afa1580156133ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133cf9190614bd4565b8482815181106133db57fe5b60200260200101516020019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508173ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561345f57600080fd5b505afa158015613473573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134979190614bd4565b8482815181106134a357fe5b60200260200101516040019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561352757600080fd5b505afa15801561353b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061355f9190614b89565b84828151811061356b57fe5b6020908102919091010151606001525050600101613250565b7f000000000000000000000000a507e5eb062e6b51d2cdfeab6173bd8fe162457781565b7f000000000000000000000000a507e5eb062e6b51d2cdfeab6173bd8fe162457773ffffffffffffffffffffffffffffffffffffffff163314613620576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161361790615531565b60405180910390fd5b600080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff9b8c1617909155600180548216998b1699909917909855600280548916978a16979097179096556003805488169589169590951790945560048054871693881693909317909255600580548616918716919091179055600680548516918616919091179055600780548416918516919091179055600880549092169216919091179055565b6060808267ffffffffffffffff811180156136fc57600080fd5b5060405190808252806020026020018201604052801561373657816020015b6137236147f2565b81526020019060019003908161371b5790505b50905060005b838110156125c257600085858381811061375257fe5b90506020020160208101906137679190614976565b90508083838151811061377657fe5b60200260200101516000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000808273ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156137fd57600080fd5b505afa158015613811573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138359190614d74565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691508185858151811061386757fe5b602002602001015160200181815250508085858151811061388457fe5b602002602001015160400181815250508273ffffffffffffffffffffffffffffffffffffffff166370a082318a6040518263ffffffff1660e01b81526004016138cd9190614fe3565b60206040518083038186803b1580156138e557600080fd5b505afa1580156138f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061391d9190614b89565b85858151811061392957fe5b602002602001015160800181815250508273ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561397f57600080fd5b505afa158015613993573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b79190614b89565b8585815181106139c357fe5b60209081029190910101516060015250505060010161373c565b6060808267ffffffffffffffff811180156139f757600080fd5b50604051908082528060200260200182016040528015613a3157816020015b613a1e61457b565b815260200190600190039081613a165790505b50905060005b838110156125c257848482818110613a4b57fe5b90506020020135828281518110613a5e57fe5b60209081029190910101515260005473ffffffffffffffffffffffffffffffffffffffff166393f1a40b868684818110613a9457fe5b90506020020135886040518363ffffffff1660e01b8152600401613ab9929190615790565b604080518083038186803b158015613ad057600080fd5b505afa158015613ae4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b089190614e01565b50828281518110613b1557fe5b6020908102919091018101510152600101613a37565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b6060808267ffffffffffffffff81118015613b6157600080fd5b50604051908082528060200260200182016040528015613b9b57816020015b613b88614837565b815260200190600190039081613b805790505b5090508260005b81811015613d75576000868683818110613bb857fe5b9050602002016020810190613bcd9190614976565b905080848381518110613bdc57fe5b602090810291909101015173ffffffffffffffffffffffffffffffffffffffff91821690526040517f70a08231000000000000000000000000000000000000000000000000000000008152908216906370a0823190613c3f908b90600401614fe3565b60206040518083038186803b158015613c5757600080fd5b505afa158015613c6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c8f9190614b89565b848381518110613c9b57fe5b60209081029190910181015101526008546040517ff7888aec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063f7888aec90613d019084908c90600401615004565b60206040518083038186803b158015613d1957600080fd5b505afa158015613d2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d519190614b89565b848381518110613d5d57fe5b60209081029190910101516040015250600101613ba2565b509095945050505050565b60075473ffffffffffffffffffffffffffffffffffffffff1681565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f06fdde03000000000000000000000000000000000000000000000000000000001790529051606091600091839173ffffffffffffffffffffffffffffffffffffffff861691613e1e9190614fc7565b600060405180830381855afa9150503d8060008114613e59576040519150601f19603f3d011682016040523d82523d6000602084013e613e5e565b606091505b509150915081613ea3576040518060400160405280600381526020017f3f3f3f0000000000000000000000000000000000000000000000000000000000815250613eac565b613eac81614334565b949350505050565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f95d89b41000000000000000000000000000000000000000000000000000000001790529051606091600091839173ffffffffffffffffffffffffffffffffffffffff861691613e1e9190614fc7565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f313ce567000000000000000000000000000000000000000000000000000000001790529051600091829160609173ffffffffffffffffffffffffffffffffffffffff861691613fb89190614fc7565b600060405180830381855afa9150503d8060008114613ff3576040519150601f19603f3d011682016040523d82523d6000602084013e613ff8565b606091505b509150915081801561400b575080516020145b614016576012613eac565b80806020019051810190613eac9190614e24565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc45a0155000000000000000000000000000000000000000000000000000000001790529051600091829160609173ffffffffffffffffffffffffffffffffffffffff8616916140ac9190614fc7565b600060405180830381855afa9150503d80600081146140e7576040519150601f19603f3d011682016040523d82523d6000602084013e6140ec565b606091505b50915091508180156140ff575080516020145b61410a576000613eac565b80806020019051810190613eac9190614bd4565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f3644e515000000000000000000000000000000000000000000000000000000001790529051600091829160609173ffffffffffffffffffffffffffffffffffffffff861691612710916141a391614fc7565b6000604051808303818686fa925050503d80600081146141df576040519150601f19603f3d011682016040523d82523d6000602084013e6141e4565b606091505b50915091508180156141f7575080516020145b614202576000613eac565b80806020019051810190613eac9190614b89565b60008060608473ffffffffffffffffffffffffffffffffffffffff16611388637ecebe008660405160240161424b9190614fe3565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516142999190614fc7565b6000604051808303818686fa925050503d80600081146142d5576040519150601f19603f3d011682016040523d82523d6000602084013e6142da565b606091505b50915091508180156142ed575080516020145b614317577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61432b565b8080602001905181019061432b9190614b89565b95945050505050565b6060604082511061435a57818060200190518101906143539190614ba1565b9050612cf4565b8151602014156144c25760005b60208160ff161080156143ae5750828160ff168151811061438457fe5b01602001517fff000000000000000000000000000000000000000000000000000000000000001615155b156143bb57600101614367565b60608160ff1667ffffffffffffffff811180156143d757600080fd5b506040519080825280601f01601f191660200182016040528015614402576020820181803683370190505b509050600091505b60208260ff161080156144515750838260ff168151811061442757fe5b01602001517fff000000000000000000000000000000000000000000000000000000000000001615155b156144b957838260ff168151811061446557fe5b602001015160f81c60f81b818360ff168151811061447f57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060019091019061440a565b9150612cf49050565b5060408051808201909152600381527f3f3f3f00000000000000000000000000000000000000000000000000000000006020820152612cf4565b604051806101a00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600081526020016000815260200160008152602001606081525090565b604080518082019091526000808252602082015290565b604051806040016040528060008152602001600081525090565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820181905261010082015261012081019190915290565b604051806101c00160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001606081526020016000815260200160008152602001614668614564565b81526020016000815260200161467c614564565b8152602001600081526020016000815260200160008152602001600081526020016146a561486e565b905290565b604051806101400160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040518060a00160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016060815260200160608152602001600080191681525090565b604051806101200160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000815260200160008152602001600081526020016000815260200160006fffffffffffffffffffffffffffffffff16815260200160006fffffffffffffffffffffffffffffffff168152602001600081525090565b60408051608081018252600080825260208201819052918101829052606081019190915290565b6040518060a00160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000815260200160008152602001600081525090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081525090565b604080516060810182526000808252602082018190529181019190915290565b60008083601f84011261489f578182fd5b50813567ffffffffffffffff8111156148b6578182fd5b602083019150836020808302850101111561129157600080fd5b600082601f8301126148e0578081fd5b815167ffffffffffffffff8111156148f6578182fd5b61492760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016157b4565b915080825283602082850101111561493e57600080fd5b61494f8160208401602086016157db565b5092915050565b80516fffffffffffffffffffffffffffffffff8116811461278557600080fd5b600060208284031215614987578081fd5b81356149928161580b565b9392505050565b6000806000604084860312156149ad578182fd5b83356149b88161580b565b9250602084013567ffffffffffffffff8111156149d3578283fd5b6149df8682870161488e565b9497909650939450505050565b600080600060408486031215614a00578081fd5b8335614a0b8161580b565b9250602084013567ffffffffffffffff8111156149d3578182fd5b60008060008060008060808789031215614a3e578384fd5b8635614a498161580b565b9550602087013567ffffffffffffffff80821115614a65578586fd5b614a718a838b0161488e565b909750955060408901359150614a868261580b565b90935060608801359080821115614a9b578384fd5b50614aa889828a0161488e565b979a9699509497509295939492505050565b60008060008060808587031215614acf578182fd5b8451614ada8161580b565b60208601516040870151606090970151919890975090945092505050565b60008060208385031215614b0a578182fd5b823567ffffffffffffffff811115614b20578283fd5b614b2c8582860161488e565b90969095509350505050565b600060208284031215614b49578081fd5b81518015158114614992578182fd5b60008060408385031215614b6a578182fd5b82518015158114614b79578283fd5b6020939093015192949293505050565b600060208284031215614b9a578081fd5b5051919050565b600060208284031215614bb2578081fd5b815167ffffffffffffffff811115614bc8578182fd5b613eac848285016148d0565b600060208284031215614be5578081fd5b81516149928161580b565b600080600060608486031215614c04578081fd5b8335614c0f8161580b565b95602085013595506040909401359392505050565b60008060008060008060008060006101208a8c031215614c42578687fd5b8935614c4d8161580b565b985060208a0135614c5d8161580b565b975060408a0135614c6d8161580b565b965060608a0135614c7d8161580b565b955060808a0135614c8d8161580b565b945060a08a0135614c9d8161580b565b935060c08a0135614cad8161580b565b925060e08a0135614cbd8161580b565b91506101008a0135614cce8161580b565b809150509295985092959850929598565b600060608284031215614cf0578081fd5b614cfa60606157b4565b8251614d058161586a565b81526020830151614d158161586a565b60208201526040830151614d288161584c565b60408201529392505050565b600060408284031215614d45578081fd5b614d4f60406157b4565b614d598484614956565b8152614d688460208501614956565b60208201529392505050565b600080600060608486031215614d88578081fd5b8351614d9381615830565b6020850151909350614da481615830565b604085015190925063ffffffff81168114614dbd578182fd5b809150509250925092565b60008060408385031215614dda578182fd5b8251614de58161584c565b6020840151909250614df68161584c565b809150509250929050565b60008060408385031215614e13578182fd5b505080516020909101519092909150565b600060208284031215614e35578081fd5b815160ff81168114614992578182fd5b6000815180845260208085019450808401835b83811015614e76578151151587529582019590820190600101614e58565b509495945050505050565b6000815180845260208085019450808401835b83811015614e76578151805173ffffffffffffffffffffffffffffffffffffffff1688528301518388015260409096019590820190600101614e94565b15159052565b60008151808452614eef8160208601602086016157db565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff169052565b67ffffffffffffffff808251168352806020830151166020840152506fffffffffffffffffffffffffffffffff60408201511660408301525050565b80518252602090810151910152565b80516fffffffffffffffffffffffffffffffff908116835260209182015116910152565b6fffffffffffffffffffffffffffffffff169052565b60ff169052565b60008251614fd98184602087016157db565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b602080825282518282018190526000919060409081850190868401855b828110156150d157815161505d858251614f21565b80870151858801528581015186860152606080820151908601526080808201519086015260a0808201519086015260c08082015161509d82880182614faa565b505060e0808201516150b182880182614faa565b505061010090810151908501526101209093019290850190600101615048565b5091979650505050505050565b602080825282518282018190526000919060409081850190868401855b828110156150d1578151805173ffffffffffffffffffffffffffffffffffffffff168552868101518786015285015185850152606090930192908501906001016150fb565b60208082528251828201819052600091906040908185019080840286018301878501865b83811015615287577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc089840301855281516102406151a3858351614f21565b888201516151b38a870182614f21565b50878201516151c489870182614f21565b5060608083015182828801526151dc83880182614ed7565b92505050608080830151818701525060a080830151818701525060c08083015161520882880182614f86565b505060e08201516101008681019190915282015161012061522b81880183614f86565b8301516101608781019190915261014084015161018080890191909152908401516101a080890191909152908401516101c08801529092015191506152746101e0860183614f3b565b9588019593505090860190600101615164565b509098975050505050505050565b602080825282518282018190526000919060409081850190868401855b828110156150d1578151805173ffffffffffffffffffffffffffffffffffffffff90811686528782015181168887015286820151168686015260609081015190850152608090930192908501906001016152b2565b602080825282518282018190526000919060409081850190868401855b828110156150d1578151805173ffffffffffffffffffffffffffffffffffffffff16855286810151878601528581015186860152606080820151908601526080908101519085015260a09093019290850190600101615324565b602080825282518282018190526000919060409081850190868401855b828110156150d1576153ae848351614f77565b928401929085019060010161539b565b60208082528251828201819052600091906040908185019080840286018301878501865b83811015615287577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0898403018552815160a073ffffffffffffffffffffffffffffffffffffffff8251168552888201518986015287820151818987015261544c82870182614ed7565b915050606080830151868303828801526154668382614ed7565b60809485015197909401969096525050948701949250908601906001016153e2565b602080825282518282018190526000919060409081850190868401855b828110156150d15781518051855286810151878601528581015186860152606080820151908601526080808201519086015260a0808201519086015260c0808201519086015260e080820151908601526101008082015190860152610120908101519085015261014090930192908501906001016154a5565b6000602082526149926020830184614ed7565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060608083016155778487614f77565b604084810183905285519182905260809182860190602080820288018501818a01885b84811015615695577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808b8403018652815161014081518552858201516155e287870182614f21565b5088820151898601528a8201516155fb8c870182614ed1565b508982015161560c8b870182614f21565b5060a08083015161561f82880182614f21565b505060c08083015161563382880182614f21565b505060e080830151828288015261564c83880182614ed7565b9250505061010080830151868303828801526156688382614ed7565b9250505061012080830151925061568181870184614fc0565b50968501969350509083019060010161559a565b50909b9a5050505050505050505050565b60006020825282516020830152602083015160408301526040830151606083015260608301516080830152608083015160a083015260a083015160c083015260c08301516101a08060e08501526157016101c0850183614e81565b60e086015161010086810191909152860151610120808701919091528601516101408087019190915286015161016080870191909152860151610180808701919091528601518582037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018387015290925061577d8382614e45565b9695505050505050565b90815260200190565b91825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b60405181810167ffffffffffffffff811182821017156157d357600080fd5b604052919050565b60005b838110156157f65781810151838201526020016157de565b83811115615805576000848401525b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461582d57600080fd5b50565b6dffffffffffffffffffffffffffff8116811461582d57600080fd5b6fffffffffffffffffffffffffffffffff8116811461582d57600080fd5b67ffffffffffffffff8116811461582d57600080fdfea26469706673582212208d3a8fec06fc3ba3cafdcc69fc5fa84fc8d7f06a237e2a99f1af459d80427acc64736f6c634300060c0033

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

000000000000000000000000c2edad668740f1aa35e4d8f227fb8e17dca888cd000000000000000000000000e11fc0b43ab98eb91e9836129d1ee7c3bc95df500000000000000000000000006b3595068778dd592e39a122f4f5a5cf09c90fe2000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599000000000000000000000000c0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f0000000000000000000000008798249c2e607446efb7ad49ec89dd1865ff4272000000000000000000000000f5bce5077908a1b7370b9ae04adc565ebd643966

-----Decoded View---------------
Arg [0] : chef_ (address): 0xc2EdaD668740f1aA35E4D8f227fB8E17dcA888Cd
Arg [1] : maker_ (address): 0xE11fc0B43ab98Eb91e9836129d1ee7c3Bc95df50
Arg [2] : sushi_ (address): 0x6B3595068778DD592e39A122f4f5a5cF09C90fE2
Arg [3] : WETH_ (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
Arg [4] : WBTC_ (address): 0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599
Arg [5] : sushiFactory_ (address): 0xC0AEe478e3658e2610c5F7A4A2E1777cE9e4f2Ac
Arg [6] : uniV2Factory_ (address): 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f
Arg [7] : bar_ (address): 0x8798249c2E607446EfB7Ad49eC89dD1865Ff4272
Arg [8] : bentoBox_ (address): 0xF5BCE5077908a1b7370B9ae04AdC565EBd643966

-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 000000000000000000000000c2edad668740f1aa35e4d8f227fb8e17dca888cd
Arg [1] : 000000000000000000000000e11fc0b43ab98eb91e9836129d1ee7c3bc95df50
Arg [2] : 0000000000000000000000006b3595068778dd592e39a122f4f5a5cf09c90fe2
Arg [3] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [4] : 0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599
Arg [5] : 000000000000000000000000c0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac
Arg [6] : 0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f
Arg [7] : 0000000000000000000000008798249c2e607446efb7ad49ec89dd1865ff4272
Arg [8] : 000000000000000000000000f5bce5077908a1b7370b9ae04adc565ebd643966


Deployed Bytecode Sourcemap

15149:15151:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15507:19;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19109:1885;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;15330:23::-;;;:::i;15737:28::-;;;:::i;25396:1099::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;29069:1228::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;27439:1137::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;15829:28::-;;;:::i;21561:565::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;15665:18::-;;;:::i;15420:20::-;;;:::i;17156:1417::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;22670:837::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;15992:25::-;;;:::i;23647:579::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2932:30::-;;;:::i;16604:544::-;;;;;;:::i;:::-;;:::i;:::-;;24398:619;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;26584:365::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;15593:18::-;;;:::i;22134:528::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;15921:17::-;;;:::i;15507:19::-;;;;;;:::o;19109:1885::-;19296:13;;:::i;:::-;19322:18;;:::i;:::-;19369:11;;;;19351:29;;19424:16;19410:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;19393:14:0;;;:55;19464:9;19459:243;19479:27;;;19459:243;;;19528:16;19547;;19564:1;19547:19;;;;;;;;;;;;;;;;;;;;:::i;:::-;19528:38;;19609:7;19581:4;:14;;;19596:1;19581:17;;;;;;;;;;;;;;:25;;:35;;;;;;;;;;;19666:7;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19631:4;:14;;;19646:1;19631:17;;;;;;;;;;;;;;;;;;;:32;:59;-1:-1:-1;19508:3:0;;19459:243;;;-1:-1:-1;19755:15:0;19744:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19744:34:0;-1:-1:-1;19714:27:0;;;:64;19794:9;19789:169;19809:26;;;19789:169;;;19890:8;;;;:31;19922:15;;19938:1;19922:18;;;;;;;;;;;;;;;;;;;;:::i;:::-;19942:3;19890:56;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19857:4;:27;;;19885:1;19857:30;;;;;;;;:89;;;:30;;;;;;;;;;;:89;19837:3;;19789:169;;;-1:-1:-1;19974:21:0;;;;19970:89;;20027:20;20038:8;20027:10;:20::i;:::-;20012:12;;;:35;19970:89;20075:4;;:17;:4;:17;20071:81;;20135:4;;20124:16;;20135:4;;20124:10;:16::i;:::-;20109:12;;;:31;20071:81;20168:5;;:18;:5;:18;20164:281;;20231:5;;20220:17;;20231:5;;20220:10;:17::i;:::-;20203:14;;;:34;20272:5;;:20;;;;;:5;;;;;:15;;:20;;20288:3;;20272:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20252:17;;;:40;20330:5;;20354:3;;20330:29;;;;;:5;;;;;:15;;:29;;20354:3;;;20330:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20307:20;;;;:52;;;;20399:5;;20428:3;;20399:34;;;;;:5;;;;;:15;;:34;;20415:3;;20428;;;;20399:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20374:22;;;:59;20164:281;20461:3;;:16;:3;:16;20457:140;;20515:3;;:18;;;;;:3;;;;;:13;;:18;;20529:3;;20515:18;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20494;;;:39;20568:3;;:17;;;;;;;;:3;;;;;:15;;:17;;;;;;;;;;;;;;;:3;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20548;;;:37;20457:140;20633:1;20613:4;:22;:4;:22;20609:306;;20652:18;20673:4;;;;;;;;;;;:15;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20652:38;-1:-1:-1;20705:20:0;;20740:117;20764:10;20760:1;:14;20740:117;;;20816:4;;:25;;;;;:4;;;;;:17;;:25;;20834:1;;20837:3;;20816:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20800:41;;;;20776:3;;20740:117;;;-1:-1:-1;20871:17:0;;;:32;-1:-1:-1;20609:306:0;20947:15;20925:19;;;:37;:19;19109:1885;-1:-1:-1;;;;;;;19109:1885:0:o;15330:23::-;;;;;;:::o;15737:28::-;;;;;;:::o;25396:1099::-;25460:16;;:::i;:::-;25478:17;25508:21;;:::i;:::-;25563:4;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25540:45;;:20;25617:4;;:17;;;;;;;;:4;;;;;:15;;:17;;;;;;;;;;;;;;;:4;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25645:15;;;:28;;;25596:38;-1:-1:-1;25686:23:0;25727:4;25712:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;25686:53;;25757:9;25752:705;25772:15;;;25752:705;;;25824:4;;25829:1;25824:7;;;;;;;;;;;;;25809:5;25815:1;25809:8;;;;;;;;;;;;;;;;;;:22;:12;25890:4;;25809:12;;25890:4;;:13;25904:4;;25909:1;25904:7;;;;;;;;;;;;;25890:22;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25846:66;;;;;;25927:11;25947:7;25927:28;;25989:5;25970;25976:1;25970:8;;;;;;;;;;;;;;:16;;:24;;;;;;;;;;;26031:10;26009:5;26015:1;26009:8;;;;;;;;;;;;;;:19;;:32;;;;;26074:12;:5;:10;;;:12::i;:::-;26058:5;26064:1;26058:8;;;;;;;;;;;;;;:13;;:28;;;;26119:14;:5;:12;;;:14::i;:::-;26101:5;26107:1;26101:8;;;;;;;;;;;;;;:15;;:32;;;;26168:16;:5;:14;;;:16::i;:::-;26148:5;26154:1;26148:8;;;;;;;;;;;;;;:17;;:36;;;;;;;;;;;26220:15;:5;:13;;;:15::i;:::-;26201:5;26207:1;26201:8;;;;;;;;;;;;;;:16;;:34;;;;;;;;;;;26283:1;26254:31;;:5;26260:1;26254:8;;;;;;;;;;;;;;:16;;;:31;;;26250:196;;26324:4;26306:5;26312:1;26306:8;;;;;;;;;;;;;;:15;;:22;;;;;;;;;;;26365:5;:12;;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26347:5;26353:1;26347:8;;;;;;;;;;;;;;:15;;:32;;;;;;;;;;;26416:5;:12;;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26398:5;26404:1;26398:8;;;;;;;;;;;;;;:15;;:32;;;;;;;;;;;26250:196;-1:-1:-1;;;25789:3:0;;25752:705;;;-1:-1:-1;26475:4:0;;-1:-1:-1;26481:5:0;;-1:-1:-1;;25396:1099:0;;;;;;:::o;29069:1228::-;29158:22;29207:7;29158:22;29207:7;29263:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;29232:55;;29305:9;29300:965;29324:3;29320:1;:7;29300:965;;;29349:15;29367:7;;29375:1;29367:10;;;;;;;;;;;;;;;;;;;;:::i;:::-;29349:28;;29414:4;:15;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29392:5;29398:1;29392:8;;;;;;;;;;;;;;:19;;:39;;;;;;;;;;;29463:4;:10;;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29446:5;29452:1;29446:8;;;;;;;;;;;;;;:14;;:29;;;;;;;;;;;29508:4;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29490:5;29496:1;29490:8;;;;;;;;;;;;;;:15;;:31;;;;;;;;;;;29558:4;:15;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29536:5;29542:1;29536:8;;;;;;;;;;;;;;:19;;:39;;;;29622:4;:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29590:5;29596:1;29590:8;;;;;;;;;;;;;;;;;;:29;;:59;29695:29;;;;;:24;;;;;;:29;;29720:3;;29695:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29664:5;29670:1;29664:8;;;;;;;;;;;;;;:28;;:60;;;;;29761:4;:15;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29739:5;29745:1;29739:8;;;;;;;;;;;;;;;;;;:19;;:39;29822:19;;;;;:14;;;;;;:19;;29837:3;;29822:19;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29793:5;29799:1;29793:8;;;;;;;;;;;;;;:26;;:48;;;;;29879:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29856:5;29862:1;29856:8;;;;;;;;;;;;;;;;;;:20;;:41;29938:24;;;;;:19;;;;;;:24;;29958:3;;29938:24;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29912:5;29918:1;29912:8;;;;;;;;;;;;;;:23;;:50;;;;;30010:4;:17;;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29979:5;29985:1;29979:8;;;;;;;;;;;;;;:28;;:50;;;;;30078:4;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:18;;;30097:4;:15;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30078:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30044:71;;30047:5;30053:1;30047:8;;;;;;;;;;;;;;:27;;30044:71;;;;;30158:4;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:22;;;30181:4;:15;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30158:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30130:5;30136:1;30130:8;;;;;;;;;;;;;;:25;;:69;;;;;30236:4;:15;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30214:5;30220:1;30214:8;;;;;;;;;;;;;;;;;;:19;;:39;-1:-1:-1;29329:3:0;;29300:965;;;-1:-1:-1;30284:5:0;29069:1228;-1:-1:-1;;;;;29069:1228:0:o;27439:1137::-;27517:21;;27600:4;27581:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;27551:61;;27630:9;27625:921;27645:15;;;27625:921;;;27683:14;27703:4;;;;:13;27717:4;;27722:1;27717:7;;;;;;;;;;;;;27726:3;27703:27;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27682:48;;;27764:6;27745:5;27751:1;27745:8;;;;;;;;;;;;;;;;;;;:16;:25;-1:-1:-1;27804:4:0;;;:17;27822:4;;27827:1;27822:7;;;;;;;;;;;;;27831:3;27804:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27785:5;27791:1;27785:8;;;;;;;;;;;;;;;;;;:16;;:50;27853:15;27878:4;;;;:13;27892:4;;27897:1;27892:7;;;;;;;;;;;;;27878:22;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27852:48;;;;;27930:4;;27935:1;27930:7;;;;;;;;;;;;;27915:5;27921:1;27915:8;;;;;;;;;;;;;;;;;;:22;27972:7;27915:12;28014:15;:13;;;;:15::i;:::-;27995:34;-1:-1:-1;28048:22:0;;;;28044:491;;28138:4;;28114:30;;;;;:15;;;;;;;:30;;28138:4;;;;28114:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28091:5;28097:1;28091:8;;;;;;;;;;;;;;;;;;:20;;;;:53;;;;28215:4;;28186:35;;;;;:15;;;;;;;:35;;28202:3;;28215:4;;28186:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28163:5;28169:1;28163:8;;;;;;;;;;;;;;;;;;:20;;:58;28261:20;;;;;:15;;;;;;:20;;28277:3;;28261:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28240:5;28246:1;28240:8;;;;;;;;;;;;;;:18;;:41;;;;;28325:5;:17;;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28300:5;28306:1;28300:8;;;;;;;;;;;;;;:22;;:44;;;;;28366:16;28384;28406:5;:17;;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28365:60;;;;;28464:8;28444:28;;:5;28450:1;28444:8;;;;;;;;;;;;;;:17;;:28;;;;;28511:8;28491:28;;:5;28497:1;28491:8;;;;;;;;;;;;;;:17;;:28;;;;;28044:491;;;-1:-1:-1;;27662:3:0;;;;;-1:-1:-1;27625:921:0;;-1:-1:-1;27625:921:0;;-1:-1:-1;28563:5:0;27439:1137;-1:-1:-1;;;;27439:1137:0:o;15829:28::-;;;;;;:::o;21561:565::-;21634:18;;21708:9;21692:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;21665:60;;21743:9;21738:356;21758:20;;;21738:356;;;21800:12;21822:9;;21832:1;21822:12;;;;;;;;;;;;;;;;;;;;:::i;:::-;21800:35;;21867:5;21850;21856:1;21850:8;;;;;;;;;;;;;;;;;;:22;;;;;;21905:12;;:10;;;:12::i;:::-;21889:5;21895:1;21889:8;;;;;;;;;;;;;;:13;;:28;;;;21950:14;:5;:12;;;:14::i;:::-;21932:5;21938:1;21932:8;;;;;;;;;;;;;;:15;;:32;;;;21999:16;:5;:14;;;:16::i;:::-;21979:36;;:5;21985:1;21979:8;;;;;;;;;;;;;;:17;;:36;;;;;22058:24;:5;:22;;;:24::i;:::-;22030:5;22036:1;22030:8;;;;;;;;;;;;;;;;;;:25;;:52;-1:-1:-1;21780:3:0;;21738:356;;;-1:-1:-1;22113:5:0;-1:-1:-1;21561:565:0;;;;;:::o;15665:18::-;;;;;;:::o;15420:20::-;;;;;;:::o;17156:1417::-;17244:4;;17211:7;;17244:4;17235:13;;;17244:4;;17235:13;17231:57;;;-1:-1:-1;17272:4:0;17265:11;;17231:57;17354:12;;17298:15;;;;17354:27;:12;:27;17350:112;;17416:12;;17444:4;;17416:33;;;;;:12;;;;;:20;;:33;;17437:5;;17444:4;;;;17416:33;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17398:52;;17350:112;17476:12;;:27;:12;:27;17472:112;;17538:12;;17566:4;;17538:33;;;;;:12;;;;;:20;;:33;;17559:5;;17566:4;;;;17538:33;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17520:52;;17472:112;17598:32;;;;:68;;;;-1:-1:-1;17634:32:0;;;;17598:68;17594:109;;;17690:1;17683:8;;;;;;17594:109;17715:16;;;17797:32;;;;17793:261;;17847:21;17870;17897:9;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17846:74;;;;;17947:13;17935:25;;;;17987:13;17975:25;;;;18024:9;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18015:27;;17793:261;;;18070:32;;;;18066:320;;18120:21;18143;18170:9;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;18208:25:0;;;;18248;;;;18119:74;;-1:-1:-1;18119:74:0;-1:-1:-1;18292:19:0;;;18288:87;;18341:9;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18332:27;;18288:87;18066:320;;;18412:4;;;18402:14;;;18412:4;;18402:14;18398:168;;;18469:8;18440:37;;18449:8;18441:17;;18461:4;18441:24;18440:37;;;;;;18433:44;;;;;;;;;18398:168;18546:8;18517:37;;18526:8;18518:17;;18538:4;18518:24;18517:37;;;;17156:1417;;;;:::o;22670:837::-;22754:20;;22837:9;22819:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;22787:67;;22872:9;22867:605;22887:20;;;22867:605;;;22929:12;22944:9;;22954:1;22944:12;;;;;;;;;;;;;;;;;;;;:::i;:::-;22929:27;;22997:5;:17;;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22971:8;22980:1;22971:11;;;;;;;;;;;;;;:23;;:45;;;;;23051:5;23031:8;23040:1;23031:11;;;;;;;;;;;;;;;;;;:25;;;;;;23093:20;;;;;:15;;;;;;:20;;23109:3;;23093:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23071:8;23080:1;23071:11;;;;;;;;;;;;;;;;;;:19;;;;:42;;;;23186:8;;23157:39;;;;;:15;;;;;;;:39;;23173:3;;23186:8;;23157:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23128:8;23137:1;23128:11;;;;;;;;;;;;;;;;;;:26;;:68;23231:17;:12;;;23244:3;23231:12;:17::i;:::-;23211:8;23220:1;23211:11;;;;;;;;;;;;;;;;;;:17;;:37;23290:8;;:30;;;;;:8;;;;;:18;;:30;;23309:5;;23316:3;;23290:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23263:8;23272:1;23263:11;;;;;;;;;;;;;;;;;;:24;;:57;23387:8;;:22;;;;;:8;;;;;:15;;:22;;23403:5;;23387:22;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23336:8;23345:1;23336:11;;;;;;;;;;;;;;:23;;23361:8;23370:1;23361:11;;;;;;;;;;;;;;;;;;23335:74;;;;23361:22;;;;23335:74;;;;;23443:17;23454:5;23443:10;:17::i;:::-;23424:8;23433:1;23424:11;;;;;;;;;;;;;;;;;;:16;;:36;-1:-1:-1;22909:3:0;;22867:605;;15992:25;;;;;;:::o;23647:579::-;23768:17;23798:23;23846:6;23839:4;:13;23824:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;23798:55:0;-1:-1:-1;23884:6:0;23866:330;23897:4;23892:2;:9;23866:330;;;23938:20;;;;;23924:11;;23938:16;;;;;;:20;;23955:2;;23938:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23924:34;;23973:9;23990:6;23985:2;:11;23973:23;;24028:5;24011;24017:1;24011:8;;;;;;;;;;;;;;:14;;:22;;;;;;;;;;;24066:5;:12;;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24048:5;24054:1;24048:8;;;;;;;;;;;;;;:15;;:32;;;;;;;;;;;24113:5;:12;;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24095:5;24101:1;24095:8;;;;;;;;;;;;;;:15;;:32;;;;;;;;;;;24165:5;:17;;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24142:5;24148:1;24142:8;;;;;;;;;;;;;;;;;;:20;;:42;-1:-1:-1;;23903:4:0;;23866:330;;2932:30;;;:::o;16604:544::-;3079:5;:19;;3088:10;3079:19;3071:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;16902:4:::1;:12:::0;;;;;::::1;;::::0;;::::1;;::::0;;;-1:-1:-1;16925:14:0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;16950:5:::1;:14:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;16975:4:::1;:12:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;16998:4:::1;:12:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;17021::::1;:28:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;17060:12:::1;:28:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;17099:3:::1;:10:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;17120:8:::1;:20:::0;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;16604:544::o;24398:619::-;24479:17;;24550:9;24535:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;24509:58;;24583:9;24578:409;24598:20;;;24578:409;;;24640:11;24654:9;;24664:1;24654:12;;;;;;;;;;;;;;;;;;;;:::i;:::-;24640:26;;24698:5;24681;24687:1;24681:8;;;;;;;;;;;;;;:14;;:22;;;;;;;;;;;24719:16;24737;24759:5;:17;;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24718:60;;;;;;;;;24813:8;24793:5;24799:1;24793:8;;;;;;;;;;;;;;:17;;:28;;;;;24856:8;24836:5;24842:1;24836:8;;;;;;;;;;;;;;:17;;:28;;;;;24898:5;:15;;;24914:3;24898:20;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24879:5;24885:1;24879:8;;;;;;;;;;;;;;:16;;:39;;;;;24956:5;:17;;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24933:5;24939:1;24933:8;;;;;;;;;;;;;;;;;;:20;;:42;-1:-1:-1;;;24620:3:0;;24578:409;;26584:365;26662:18;;26736:4;26720:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;26693:55;;26766:9;26761:156;26781:15;;;26761:156;;;26833:4;;26838:1;26833:7;;;;;;;;;;;;;26818:5;26824:1;26818:8;;;;;;;;;;;;;;;;;;:22;:12;26878:4;;;:13;26892:4;;26897:1;26892:7;;;;;;;;;;;;;26901:3;26878:27;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26855:50;26856:5;26862:1;26856:8;;;;;;;;;;;;;;;;;;;:16;26855:50;26798:3;;26761:156;;15593:18;;;;;;:::o;22134:528::-;22220:16;;22291:9;22277:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;22249:59:0;-1:-1:-1;22335:9:0;22321:11;22362:265;22386:3;22382:1;:7;22362:265;;;22411:12;22433:9;;22443:1;22433:12;;;;;;;;;;;;;;;;;;;;:::i;:::-;22411:35;;22481:5;22461:8;22470:1;22461:11;;;;;;;;;;;;;;;;;;:25;;;;;;22523:20;;;;;:15;;;;;;:20;;22539:3;;22523:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22501:8;22510:1;22501:11;;;;;;;;;;;;;;;;;;;:19;:42;22585:8;;:30;;;;;:8;;;;;:18;;:30;;22604:5;;22611:3;;22585:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22558:8;22567:1;22558:11;;;;;;;;;;;;;;;;;;:24;;:57;-1:-1:-1;22391:3:0;;22362:265;;;-1:-1:-1;22646:8:0;;22134:528;-1:-1:-1;;;;;22134:528:0:o;15921:17::-;;;;;;:::o;4036:242::-;4175:34;;;;;;;;;;;;;;;;;;;;;;4149:61;;4087:13;;4114:12;;4087:13;;4149:25;;;;:61;;4175:34;4149:61;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4113:97;;;;4228:7;:42;;;;;;;;;;;;;;;;;;;;;;4238:24;4257:4;4238:18;:24::i;:::-;4221:49;4036:242;-1:-1:-1;;;;4036:242:0:o;3784:244::-;3925:34;;;;;;;;;;;;;;;;;;;;;;3899:61;;3837:13;;3864:12;;3837:13;;3899:25;;;;:61;;3925:34;3899:61;:::i;4286:257::-;4421:34;;;;;;;;;;;;;;;;;;;;;;4395:61;;4341:5;;;;4374:17;;4395:25;;;;:61;;4421:34;4395:61;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4359:97;;;;4474:7;:28;;;;;4485:4;:11;4500:2;4485:17;4474:28;:61;;4533:2;4474:61;;;4516:4;4505:25;;;;;;;;;;;;:::i;5262:268::-;5396:34;;;;;;;;;;;;;;;;;;;;;;5371:60;;5314:8;;;;5350:17;;5371:24;;;;:60;;5396:34;5371:60;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5335:96;;;;5449:7;:28;;;;;5460:4;:11;5475:2;5460:17;5449:28;:73;;5520:1;5449:73;;;5491:4;5480:28;;;;;;;;;;;;:::i;4551:289::-;4708:34;;;;;;;;;;;;;;;;;;;;;;4670:73;;4614:7;;;;4649:17;;4670:25;;;;4701:5;;4670:73;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4634:109;;;;4761:7;:28;;;;;4772:4;:11;4787:2;4772:17;4761:28;:71;;4830:1;4761:71;;;4803:4;4792:27;;;;;;;;;;;;:::i;4848:381::-;4916:7;4937:12;4951:17;4980:5;4972:25;;5003:4;5032:10;5044:5;5009:41;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4972:79;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4936:115;;;;5069:7;:28;;;;;5080:4;:11;5095:2;5080:17;5069:28;:72;;5138:2;5069:72;;;5111:4;5100:27;;;;;;;;;;;;:::i;:::-;5062:79;4848:381;-1:-1:-1;;;;;4848:381:0:o;3189:587::-;3259:13;3304:2;3289:4;:11;:17;3285:484;;3341:4;3330:26;;;;;;;;;;;;:::i;:::-;3323:33;;;;3285:484;3378:4;:11;3393:2;3378:17;3374:395;;;3412:7;3438:69;3449:2;3445:1;:6;;;:22;;;;;3455:4;3460:1;3455:7;;;;;;;;;;;;;;;;:12;;3445:22;3438:69;;;3488:3;;3438:69;;;3521:23;3557:1;3547:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3547:12:0;;3521:38;;3583:1;3579:5;;3574:99;3590:2;3586:1;:6;;;:22;;;;;3596:4;3601:1;3596:7;;;;;;;;;;;;;;;;:12;;3586:22;3574:99;;;3650:4;3655:1;3650:7;;;;;;;;;;;;;;;;;;3634:10;3645:1;3634:13;;;;;;;;;;;;;:23;;;;;;;;;;-1:-1:-1;3610:3:0;;;;;3574:99;;;3701:10;-1:-1:-1;3687:25:0;;-1:-1:-1;3687:25:0;3374:395;-1:-1:-1;3745:12:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;301:352::-;;;431:3;424:4;416:6;412:17;408:27;398:2;;-1:-1;;439:12;398:2;-1:-1;469:20;;509:18;498:30;;495:2;;;-1:-1;;531:12;495:2;575:4;567:6;563:17;551:29;;626:3;575:4;;610:6;606:17;567:6;592:32;;589:41;586:2;;;643:1;;633:12;2926:442;;3038:3;3031:4;3023:6;3019:17;3015:27;3005:2;;-1:-1;;3046:12;3005:2;3086:6;3080:13;66948:18;66940:6;66937:30;66934:2;;;-1:-1;;66970:12;66934:2;3108:64;67111:4;67043:9;3031:4;67028:6;67024:17;67020:33;67101:15;3108:64;:::i;:::-;3099:73;;3192:6;3185:5;3178:21;3296:3;67111:4;3287:6;3220;3278:16;;3275:25;3272:2;;;3313:1;;3303:12;3272:2;3323:39;3355:6;67111:4;3254:5;3250:16;67111:4;3220:6;3216:17;3323:39;:::i;:::-;;2998:370;;;;:::o;6918:134::-;6996:13;;77496:34;77485:46;;81806:35;;81796:2;;81855:1;;81845:12;7752:241;;7856:2;7844:9;7835:7;7831:23;7827:32;7824:2;;;-1:-1;;7862:12;7824:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;7914:63;7818:175;-1:-1;;;7818:175::o;8000:522::-;;;;8156:2;8144:9;8135:7;8131:23;8127:32;8124:2;;;-1:-1;;8162:12;8124:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;8214:63;-1:-1;8342:2;8327:18;;8314:32;8366:18;8355:30;;8352:2;;;-1:-1;;8388:12;8352:2;8426:80;8498:7;8489:6;8478:9;8474:22;8426:80;:::i;:::-;8118:404;;8408:98;;-1:-1;8408:98;;-1:-1;;;;8118:404::o;8529:548::-;;;;8698:2;8686:9;8677:7;8673:23;8669:32;8666:2;;;-1:-1;;8704:12;8666:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;8756:63;-1:-1;8884:2;8869:18;;8856:32;8908:18;8897:30;;8894:2;;;-1:-1;;8930:12;9084:987;;;;;;;9338:3;9326:9;9317:7;9313:23;9309:33;9306:2;;;-1:-1;;9345:12;9306:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;9397:63;-1:-1;9525:2;9510:18;;9497:32;9549:18;9538:30;;;9535:2;;;-1:-1;;9571:12;9535:2;9609:96;9697:7;9688:6;9677:9;9673:22;9609:96;:::i;:::-;9591:114;;-1:-1;9591:114;-1:-1;9742:2;9794:22;;3629:20;;-1:-1;3654:46;3629:20;3654:46;:::i;:::-;9750:76;;-1:-1;9891:2;9876:18;;9863:32;;9904:30;;;9901:2;;;-1:-1;;9937:12;9901:2;;9975:80;10047:7;10038:6;10027:9;10023:22;9975:80;:::i;:::-;9300:771;;;;-1:-1;9300:771;;-1:-1;9300:771;;9957:98;;9300:771;-1:-1;;;9300:771::o;11729:672::-;;;;;11895:3;11883:9;11874:7;11870:23;11866:33;11863:2;;;-1:-1;;11902:12;11863:2;226:6;220:13;238:33;265:5;238:33;:::i;:::-;12065:2;12115:22;;7274:13;12184:2;12234:22;;7274:13;12303:2;12353:22;;;7274:13;11954:74;;7274:13;;-1:-1;7274:13;;-1:-1;11857:544;-1:-1;;;11857:544::o;12408:397::-;;;12547:2;12535:9;12526:7;12522:23;12518:32;12515:2;;;-1:-1;;12553:12;12515:2;12611:17;12598:31;12649:18;12641:6;12638:30;12635:2;;;-1:-1;;12671:12;12635:2;12709:80;12781:7;12772:6;12761:9;12757:22;12709:80;:::i;:::-;12691:98;;;;-1:-1;12509:296;-1:-1;;;;12509:296::o;13216:257::-;;13328:2;13316:9;13307:7;13303:23;13299:32;13296:2;;;-1:-1;;13334:12;13296:2;2730:6;2724:13;80366:5;76402:13;76395:21;80344:5;80341:32;80331:2;;-1:-1;;80377:12;13480:393;;;13609:2;13597:9;13588:7;13584:23;13580:32;13577:2;;;-1:-1;;13615:12;13577:2;2730:6;2724:13;80366:5;76402:13;76395:21;80344:5;80341:32;80331:2;;-1:-1;;80377:12;80331:2;13775;13825:22;;;;7274:13;13667:71;;7274:13;;-1:-1;;;13571:302::o;13880:263::-;;13995:2;13983:9;13974:7;13970:23;13966:32;13963:2;;;-1:-1;;14001:12;13963:2;-1:-1;2862:13;;13957:186;-1:-1;13957:186::o;14150:360::-;;14274:2;14262:9;14253:7;14249:23;14245:32;14242:2;;;-1:-1;;14280:12;14242:2;14331:17;14325:24;14369:18;14361:6;14358:30;14355:2;;;-1:-1;;14391:12;14355:2;14421:73;14486:7;14477:6;14466:9;14462:22;14421:73;:::i;14791:289::-;;14919:2;14907:9;14898:7;14894:23;14890:32;14887:2;;;-1:-1;;14925:12;14887:2;3809:6;3803:13;3821:46;3861:5;3821:46;:::i;15669:523::-;;;;15823:2;15811:9;15802:7;15798:23;15794:32;15791:2;;;-1:-1;;15829:12;15791:2;3975:6;3962:20;3987:49;4030:5;3987:49;:::i;:::-;15881:79;15997:2;16036:22;;7126:20;;-1:-1;16105:2;16144:22;;;7126:20;;15785:407;-1:-1;;;15785:407::o;16485:1489::-;;;;;;;;;;16846:3;16834:9;16825:7;16821:23;16817:33;16814:2;;;-1:-1;;16853:12;16814:2;4495:6;4482:20;4507:52;4553:5;4507:52;:::i;:::-;16905:82;-1:-1;17024:2;17063:22;;72:20;97:33;72:20;97:33;:::i;:::-;17032:63;-1:-1;17132:2;17184:22;;3629:20;3654:46;3629:20;3654:46;:::i;:::-;17140:76;-1:-1;17253:2;17305:22;;3629:20;3654:46;3629:20;3654:46;:::i;:::-;17261:76;-1:-1;17374:3;17427:22;;3629:20;3654:46;3629:20;3654:46;:::i;:::-;17383:76;-1:-1;17496:3;17552:22;;3962:20;3987:49;3962:20;3987:49;:::i;:::-;17505:79;-1:-1;17621:3;17677:22;;3962:20;3987:49;3962:20;3987:49;:::i;:::-;17630:79;-1:-1;17746:3;17799:22;;3629:20;3654:46;3629:20;3654:46;:::i;:::-;17755:76;-1:-1;17868:3;17926:22;;3461:20;3486:51;3461:20;3486:51;:::i;:::-;17877:81;;;;16808:1166;;;;;;;;;;;:::o;19222:319::-;;19365:2;19353:9;19344:7;19340:23;19336:32;19333:2;;;-1:-1;;19371:12;19333:2;5715:20;19365:2;5715:20;:::i;:::-;7559:6;7553:13;7571:32;7597:5;7571:32;:::i;:::-;5805:85;;5958:2;6022:22;;7553:13;7571:32;7553:13;7571:32;:::i;:::-;5958:2;5973:16;;5966:85;6126:2;6191:22;;6996:13;7014:33;6996:13;7014:33;:::i;:::-;6126:2;6141:16;;6134:86;6145:5;19327:214;-1:-1;;;19327:214::o;19548:311::-;;19687:2;19675:9;19666:7;19662:23;19658:32;19655:2;;;-1:-1;;19693:12;19655:2;6428:20;19687:2;6428:20;:::i;:::-;6533:60;6589:3;6565:22;6533:60;:::i;:::-;6515:16;6508:86;6688:60;6744:3;6655:2;6724:9;6720:22;6688:60;:::i;:::-;6655:2;6670:16;;6663:86;6674:5;19649:210;-1:-1;;;19649:210::o;19866:533::-;;;;20014:2;20002:9;19993:7;19989:23;19985:32;19982:2;;;-1:-1;;20020:12;19982:2;6861:6;6855:13;6873:33;6900:5;6873:33;:::i;:::-;20183:2;20233:22;;6855:13;20072:74;;-1:-1;6873:33;6855:13;6873:33;:::i;:::-;20302:2;20351:22;;7414:13;20191:74;;-1:-1;77822:10;77811:22;;82053:34;;82043:2;;-1:-1;;82091:12;82043:2;20310:73;;;;19976:423;;;;;:::o;20406:399::-;;;20538:2;20526:9;20517:7;20513:23;20509:32;20506:2;;;-1:-1;;20544:12;20506:2;7002:6;6996:13;7014:33;7041:5;7014:33;:::i;:::-;20707:2;20757:22;;6996:13;20596:74;;-1:-1;7014:33;6996:13;7014:33;:::i;:::-;20715:74;;;;20500:305;;;;;:::o;21082:399::-;;;21214:2;21202:9;21193:7;21189:23;21185:32;21182:2;;;-1:-1;;21220:12;21182:2;-1:-1;;7274:13;;21383:2;21433:22;;;7274:13;;;;;-1:-1;21176:305::o;21488:259::-;;21601:2;21589:9;21580:7;21576:23;21572:32;21569:2;;;-1:-1;;21607:12;21569:2;7697:6;7691:13;78019:4;82322:5;78008:16;82299:5;82296:33;82286:2;;-1:-1;;82333:12;24921:646;;25095:5;69569:12;73231:6;73226:3;73219:19;73268:4;;73263:3;73259:14;25107:80;;73268:4;25255:5;67574:14;-1:-1;25294:251;25319:6;25316:1;25313:13;25294:251;;;25380:13;;76402;76395:21;36034:34;;21896:14;;;;71665;;;;25341:1;25334:9;25294:251;;;-1:-1;25551:10;;25029:538;-1:-1;;;;;25029:538::o;27636:870::-;;27894:5;69569:12;73231:6;73226:3;73219:19;73268:4;;73263:3;73259:14;27906:108;;73268:4;28110:5;67574:14;-1:-1;28149:335;28174:6;28171:1;28168:13;28149:335;;;28235:13;;42578:23;;77616:42;77605:54;37322:68;;42764:16;;42758:23;42835:14;;;36141:37;22769:4;22760:14;;;;71665;;;;28196:1;28189:9;28149:335;;35979:94;76402:13;76395:21;36034:34;;36028:45::o;36190:323::-;;36322:5;69569:12;73231:6;73226:3;73219:19;36405:52;36450:6;73268:4;73263:3;73259:14;73268:4;36431:5;36427:16;36405:52;:::i;:::-;80144:2;80124:14;80140:7;80120:28;36469:39;;;;73268:4;36469:39;;36270:243;-1:-1;;36270:243::o;37233:162::-;77616:42;77605:54;37322:68;;37316:79::o;39225:656::-;77917:18;;39449:16;39443:23;77906:30;57466:3;57459:36;77917:18;39619:4;39612:5;39608:16;39602:23;77906:30;39619:4;39681:3;39677:14;57459:36;;77496:34;39785:4;39778:5;39774:16;39768:23;77485:46;39785:4;39849:3;39845:14;57121:37;39337:544;;:::o;47754:472::-;47956:23;;36141:37;;48130:4;48119:16;;;48113:23;48190:14;;36141:37;47864:362::o;50874:467::-;51074:23;;77496:34;77485:46;;;57121:37;;51245:4;51234:16;;;51228:23;77485:46;51305:14;;57121:37;50978:363::o;57060:103::-;77496:34;77485:46;57121:37;;57115:48::o;57507:97::-;78019:4;78008:16;57564:35;;57558:46::o;57611:271::-;;37030:5;69569:12;37141:52;37186:6;37181:3;37174:4;37167:5;37163:16;37141:52;:::i;:::-;37205:16;;;;;57745:137;-1:-1;;57745:137::o;57889:222::-;77616:42;77605:54;;;;24847:37;;58016:2;58001:18;;57987:124::o;58118:333::-;77616:42;77605:54;;;24847:37;;77605:54;;58437:2;58422:18;;24847:37;58273:2;58258:18;;58244:207::o;58458:486::-;58693:2;58707:47;;;69569:12;;58678:18;;;73219:19;;;58458:486;;58693:2;73259:14;;;;;;67574;;;58458:486;26211:347;26236:6;26233:1;26230:13;26211:347;;;26303:6;26297:13;40204:76;40265:14;40181:16;40175:23;40204:76;:::i;:::-;40355:16;;;40349:23;40426:14;;;36141:37;40512:16;;;40506:23;40583:14;;;36141:37;40685:4;40674:16;;;40668:23;40745:14;;;36141:37;40849:4;40838:16;;;40832:23;40909:14;;;36141:37;41004:4;40993:16;;;40987:23;41064:14;;;36141:37;41165:4;41154:16;;;41148:23;41177:63;41225:14;;;41148:23;41177:63;:::i;:::-;;;41325:4;;41318:5;41314:16;41308:23;41337:63;41325:4;41389:3;41385:14;41371:12;41337:63;:::i;:::-;-1:-1;;41479:6;41468:18;;;41462:25;41541:16;;;36141:37;22203:6;22194:16;;;;71665:14;;;;26258:1;26251:9;26211:347;;;-1:-1;58760:174;;58664:280;-1:-1;;;;;;;58664:280::o;58951:470::-;59178:2;59192:47;;;69569:12;;59163:18;;;73219:19;;;58951:470;;59178:2;73259:14;;;;;;67574;;;58951:470;27196:335;27221:6;27218:1;27215:13;27196:335;;;27282:13;;41855:23;;77616:42;77605:54;37322:68;;42031:16;;;42025:23;42102:14;;;36141:37;42193:16;;42187:23;42264:14;;;36141:37;22487:4;22478:14;;;;71665;;;;27243:1;27236:9;27196:335;;59428:494;59667:2;59681:47;;;69569:12;;59652:18;;;73219:19;;;59428:494;;59667:2;73259:14;;;;;;29076:17;;;29067:27;;;;67574:14;;;59428:494;29235:423;29260:6;29257:1;29254:13;29235:423;;;29312:20;59656:9;29316:4;29312:20;;29307:3;29300:33;29367:6;29361:13;43112:6;43215:76;43276:14;43192:16;43186:23;43215:76;:::i;:::-;59667:2;43364:5;43360:16;43354:23;43383:76;59667:2;43448:3;43444:14;43430:12;43383:76;:::i;:::-;;73259:14;43533:5;43529:16;43523:23;43552:79;73259:14;43620:3;43616:14;43602:12;43552:79;:::i;:::-;;43716:4;;43709:5;43705:16;43699:23;43112:6;43716:4;43746:3;43742:14;43735:38;43788:71;43112:6;43107:3;43103:16;43840:12;43788:71;:::i;:::-;43780:79;;;;43960:4;;43953:5;43949:16;43943:23;43960:4;44024:3;44020:14;36141:37;;44129:4;;44122:5;44118:16;44112:23;44129:4;44193:3;44189:14;36141:37;;44289:4;;44282:5;44278:16;44272:23;44301:111;44289:4;44401:3;44397:14;44383:12;44301:111;:::i;:::-;-1:-1;;44504:4;44493:16;;44487:23;44573:6;44564:16;;;36141:37;;;;44656:18;;44650:25;44786:6;44681:113;44777:16;;;44650:25;44681:113;:::i;:::-;44872:18;;44866:25;44954:6;44945:16;;;36141:37;;;;45056:6;45045:18;;45039:25;45127:6;45118:16;;;36141:37;;;;45215:18;;;45209:25;45297:6;45288:16;;;36141:37;;;;45387:18;;;45381:25;45469:6;45460:16;;36141:37;45551:18;;;45545:25;;-1:-1;45576:121;45689:6;45680:16;;45545:25;45576:121;:::i;:::-;29637:14;;;;29381:134;-1:-1;;71665:14;;;;29282:1;29275:9;29235:423;;;-1:-1;59734:178;;59638:284;-1:-1;;;;;;;;59638:284::o;59929:474::-;60158:2;60172:47;;;69569:12;;60143:18;;;73219:19;;;59929:474;;60158:2;73259:14;;;;;;67574;;;59929:474;30320:338;30345:6;30342:1;30339:13;30320:338;;;30406:13;;46009:23;;77616:42;77605:54;;;37322:68;;46184:16;;;46178:23;77605:54;;46268:14;;;37322:68;46353:16;;;46347:23;77605:54;46437:14;;;37322:68;46538:4;46527:16;;;46521:23;46598:14;;;36141:37;23341:4;23332:14;;;;71665;;;;30367:1;30360:9;30320:338;;60410:474;60639:2;60653:47;;;69569:12;;60624:18;;;73219:19;;;60410:474;;60639:2;73259:14;;;;;;67574;;;60410:474;31303:338;31328:6;31325:1;31322:13;31303:338;;;31389:13;;46914:23;;77616:42;77605:54;37322:68;;47091:16;;;47085:23;47162:14;;;36141:37;47249:16;;;47243:23;47320:14;;;36141:37;47421:4;47410:16;;;47404:23;47481:14;;;36141:37;47578:4;47567:16;;;47561:23;47638:14;;;36141:37;23627:4;23618:14;;;;71665;;;;31350:1;31343:9;31303:338;;60891:478;61122:2;61136:47;;;69569:12;;61107:18;;;73219:19;;;60891:478;;61122:2;73259:14;;;;;;67574;;;60891:478;32293:341;32318:6;32315:1;32312:13;32293:341;;;23788:100;23884:3;32385:6;32379:13;23788:100;:::i;:::-;23908:14;;;;71665;;;;32340:1;32333:9;32293:341;;61376:478;61607:2;61621:47;;;69569:12;;61592:18;;;73219:19;;;61376:478;;61607:2;73259:14;;;;;;34343:17;;;34334:27;;;;67574:14;;;61376:478;34498:411;34523:6;34520:1;34517:13;34498:411;;;34575:20;61596:9;34579:4;34575:20;;34570:3;34563:33;34630:6;34624:13;51566:4;77616:42;51639:16;51633:23;77605:54;37329:3;37322:68;61607:2;51814:5;51810:16;51804:23;61607:2;51885:3;51881:14;36141:37;73259:14;51968:5;51964:16;51958:23;51566:4;73259:14;52005:3;52001:14;51994:38;52047:73;51566:4;51561:3;51557:14;52101:12;52047:73;:::i;:::-;52039:81;;;52207:4;;52200:5;52196:16;52190:23;52259:3;52253:4;52249:14;52207:4;52237:3;52233:14;52226:38;52279:73;52347:4;52333:12;52279:73;:::i;:::-;52449:4;52438:16;;;52432:23;52509:14;;;;36141:37;;;;-1:-1;;34888:14;;;;52271:81;-1:-1;71665:14;;;;34545:1;34538:9;34498:411;;61861:490;62098:2;62112:47;;;69569:12;;62083:18;;;73219:19;;;61861:490;;62098:2;73259:14;;;;;;67574;;;61861:490;35599:350;35624:6;35621:1;35618:13;35599:350;;;35685:13;;55498:23;;36141:37;;55661:16;;;55655:23;55732:14;;;36141:37;55822:16;;;55816:23;55893:14;;;36141:37;55992:4;55981:16;;;55975:23;56052:14;;;36141:37;56155:4;56144:16;;;56138:23;56215:14;;;36141:37;56316:4;56305:16;;;56299:23;56376:14;;;36141:37;56474:4;56463:16;;;56457:23;56534:14;;;36141:37;56632:4;56621:16;;;56615:23;56692:14;;;36141:37;56792:6;56781:18;;;56775:25;56854:16;;;36141:37;56953:6;56942:18;;;56936:25;57015:16;;;36141:37;24755:6;24746:16;;;;71665:14;;;;35646:1;35639:9;35599:350;;62358:306;;62503:2;62524:17;62517:47;62578:76;62503:2;62492:9;62488:18;62640:6;62578:76;:::i;64477:416::-;64677:2;64691:47;;;64662:18;;;73219:19;39100:34;73259:14;;;39080:55;39154:12;;;64648:245::o;64900:693::-;;65211:2;;65200:9;65196:18;65225:125;65332:17;65323:6;65225:125;:::i;:::-;65383:2;65368:18;;;65361:48;;;69569:12;;73219:19;;;;73259:14;;;;;;73268:4;33196:17;;;33187:27;;;;67574:14;;;-1:-1;33350:408;33375:6;33372:1;33369:13;33350:408;;;33427:20;65200:9;33431:4;33427:20;;33422:3;33415:33;33482:6;33476:13;48447:6;48520:16;48514:23;36148:3;36141:37;73268:4;48681:5;48677:16;48671:23;48700:76;73268:4;48765:3;48761:14;48747:12;48700:76;:::i;:::-;;65383:2;48854:5;48850:16;48844:23;65383:2;48925:3;48921:14;36141:37;65211:2;49010:5;49006:16;49000:23;49029:57;65211:2;49075:3;49071:14;49057:12;49029:57;:::i;:::-;;73259:14;49161:5;49157:16;49151:23;49180:79;73259:14;49248:3;49244:14;49230:12;49180:79;:::i;:::-;;49340:4;;49333:5;49329:16;49323:23;49352:76;49340:4;49417:3;49413:14;49399:12;49352:76;:::i;:::-;;;49509:4;;49502:5;49498:16;49492:23;49521:76;49509:4;49586:3;49582:14;49568:12;49521:76;:::i;:::-;;;49676:4;;49669:5;49665:16;49659:23;48447:6;49676:4;49706:3;49702:14;49695:38;49748:73;48447:6;48442:3;48438:16;49802:12;49748:73;:::i;:::-;49740:81;;;;49908:6;;49901:5;49897:18;49891:25;49964:3;49958:4;49954:14;49908:6;49940:3;49936:16;49929:40;49984:73;50052:4;50038:12;49984:73;:::i;:::-;49976:81;;;;50146:6;;50139:5;50135:18;50129:25;50109:45;;50160:61;50146:6;50208:3;50204:16;50190:12;50160:61;:::i;:::-;-1:-1;33737:14;;;;33496:124;-1:-1;;71665:14;;;;33397:1;33390:9;33350:408;;;-1:-1;65415:168;;65182:411;-1:-1;;;;;;;;;;;65182:411::o;65600:366::-;;65775:2;65796:17;65789:47;52859:16;52853:23;65775:2;65764:9;65760:18;36141:37;65775:2;53025:5;53021:16;53015:23;53092:14;65764:9;53092:14;36141:37;53092:14;53190:5;53186:16;53180:23;53257:14;65764:9;53257:14;36141:37;53257:14;53353:5;53349:16;53343:23;53420:14;65764:9;53420:14;36141:37;53420:14;53515:5;53511:16;53505:23;53582:14;65764:9;53582:14;36141:37;53582:14;53682:5;53678:16;53672:23;53749:14;65764:9;53749:14;36141:37;53749:14;53841:5;53837:16;53831:23;52779:6;;53874:14;65764:9;53874:14;53867:38;53920:153;52770:16;65764:9;52770:16;54054:12;53920:153;:::i;:::-;53874:14;54150:16;;54144:23;54221:14;;;;36141:37;;;;54309:18;;54303:25;54382:16;;;;36141:37;;;;54470:18;;54464:25;54543:16;;;;36141:37;;;;54636:18;;54630:25;54709:16;;;;36141:37;;;;54804:18;;54798:25;54877:16;;;;36141:37;;;;54980:18;;54974:25;55037:14;;;-1:-1;55037:14;55019:16;;;55012:40;53912:161;;-1:-1;55067:97;53912:161;54974:25;55067:97;:::i;:::-;65842:114;65746:220;-1:-1;;;;;;65746:220::o;65973:222::-;36141:37;;;66100:2;66085:18;;66071:124::o;66202:333::-;36141:37;;;77616:42;77605:54;66521:2;66506:18;;24847:37;66357:2;66342:18;;66328:207::o;66542:256::-;66604:2;66598:9;66630:17;;;66705:18;66690:34;;66726:22;;;66687:62;66684:2;;;66762:1;;66752:12;66684:2;66604;66771:22;66582:216;;-1:-1;66582:216::o;79780:268::-;79845:1;79852:101;79866:6;79863:1;79860:13;79852:101;;;79933:11;;;79927:18;79914:11;;;79907:39;79888:2;79881:10;79852:101;;;79968:6;79965:1;79962:13;79959:2;;;79845:1;80024:6;80019:3;80015:16;80008:27;79959:2;;79829:219;;;:::o;80161:117::-;77616:42;80248:5;77605:54;80223:5;80220:35;80210:2;;80269:1;;80259:12;80210:2;80204:74;:::o;81623:117::-;77380:30;81710:5;77369:42;81685:5;81682:35;81672:2;;81731:1;;81721:12;81747:117;77496:34;81834:5;77485:46;81809:5;81806:35;81796:2;;81855:1;;81845:12;82117:115;77917:18;82202:5;77906:30;82178:5;82175:34;82165:2;;82223:1;;82213:12

Swarm Source

ipfs://8d3a8fec06fc3ba3cafdcc69fc5fa84fc8d7f06a237e2a99f1af459d80427acc

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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.