Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
0x60806040 | 11349502 | 1429 days ago | IN | 0 ETH | 0.07437855 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
CORE_LGE_3
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-11-28 */ // Sources flattened with hardhat v2.0.1 https://hardhat.org // File contracts/v612/ICOREGlobals.sol // COPYRIGHT cVault.finance TEAM // NO COPY // COPY = BAD // This code is provided with no assurances or guarantees of any kind. Use at your own responsibility. // // _ _ _ _ _ _ // | | (_) (_) | (_) | // | | _ __ _ _ _ _ __| |_| |_ _ _ // | | | |/ _` | | | | |/ _` | | __| | | | // | |___| | (_| | |_| | | (_| | | |_| |_| | // \_____/_|\__, |\__,_|_|\__,_|_|\__|\__, | // | | __/ | // |_| |___/ // _____ _ _ _____ _ // | __ \ | | (_) | ___| | | // | | \/ ___ _ __ ___ _ __ __ _| |_ _ ___ _ __ | |____ _____ _ __ | |_ // | | __ / _ \ '_ \ / _ \ '__/ _` | __| |/ _ \| '_ \ | __\ \ / / _ \ '_ \| __| // | |_\ \ __/ | | | __/ | | (_| | |_| | (_) | | | | | |___\ V / __/ | | | |_ // \____/\___|_| |_|\___|_| \__,_|\__|_|\___/|_| |_| \____/ \_/ \___|_| |_|\__| // // \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ // \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ // \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ // \\\\\\\\\\\\\\\\\\\\\\\\\\\\\ // \\\\\\\\\\\\\\\\\\\\\\\\\\ // \\\\\\\\\\\\\\\\\\\\\ // \\\\\\\\\\\\\\\\\ // \\\\\\\\\\\\\\ // \\\\\\\\\\\\\ // \\\\\\\\\\\\ // \\\\\\\\\\\\ // \\\\\\\\\\\\ // \\\\\\\\\\\\ // \\\\\\\\\\\\ // \\\\\\\\\\\\ // \\\\\\\\\\\\ // ` \\\\\\\\\\\\ ` ` // * \\\\\\\\\\\\ * * // ` * * \\\\\\\\\\\\ * * ` // * * \\\\\\\\\\ * // ` * * \\\\\\\\\ * * ` // ` ` * \\\\\\\\ * `_____ // \ \ \ * \\\\\\\ * / /\`````\ // \ \ \ \ \\\\\\ / / / / \`````\ // \ \ \ \ \ \\\\\\ / / / / |[] | [] | // EqPtz5qN7HM // // This contract lets people kickstart pair liquidity on uniswap together // By pooling tokens together for a period of time // A bundle of sticks makes one mighty liquidity pool // // COPYRIGHT cVault.finance TEAM // NO COPY // COPY = BAD // This code is provided with no assurances or guarantees of any kind. Use at your own responsibility. interface ICOREGlobals { function CORETokenAddress() external view returns (address); function COREGlobalsAddress() external view returns (address); function COREDelegatorAddress() external view returns (address); function COREVaultAddress() external returns (address); function COREWETHUniPair() external view returns (address); function UniswapFactory() external view returns (address); function TransferHandler() external view returns (address); function addDelegatorStateChangePermission(address that, bool status) external; function isStateChangeApprovedContract(address that) external view returns (bool); } // File @uniswap/v2-periphery/contracts/interfaces/[email protected] pragma solidity >=0.5.0; interface IWETH { function deposit() external payable; function transfer(address to, uint value) external returns (bool); function withdraw(uint) external; } // File @openzeppelin/contracts-ethereum-package/contracts/[email protected] pragma solidity >=0.4.24 <0.7.0; /** * @title Initializable * * @dev Helper contract to support initializer functions. To use it, replace * the constructor with a function that has the `initializer` modifier. * WARNING: Unlike constructors, initializer functions must be manually * invoked. This applies both to deploying an Initializable contract, as well * as extending an Initializable contract via inheritance. * WARNING: When used with inheritance, manual care must be taken to not invoke * a parent initializer twice, or ensure that all initializers are idempotent, * because this is not dealt with automatically as with constructors. */ contract Initializable { /** * @dev Indicates that the contract has been initialized. */ bool private initialized; /** * @dev Indicates that the contract is in the process of being initialized. */ bool private initializing; /** * @dev Modifier to use in the initializer function of a contract. */ modifier initializer() { require(initializing || isConstructor() || !initialized, "Contract instance has already been initialized"); bool isTopLevelCall = !initializing; if (isTopLevelCall) { initializing = true; initialized = true; } _; if (isTopLevelCall) { initializing = false; } } /// @dev Returns true if and only if the function is running in the constructor function isConstructor() private view returns (bool) { // extcodesize checks the size of the code stored in an address, and // address returns the current address. Since the code is still not // deployed when running a constructor, any checks on its code size will // yield zero, making it an effective way to detect if a contract is // under construction or not. address self = address(this); uint256 cs; assembly { cs := extcodesize(self) } return cs == 0; } // Reserved storage space to allow for layout changes in the future. uint256[50] private ______gap; } // File @openzeppelin/contracts-ethereum-package/contracts/GSN/[email protected] pragma solidity ^0.6.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ contract ContextUpgradeSafe is Initializable { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. function __Context_init() internal initializer { __Context_init_unchained(); } function __Context_init_unchained() internal initializer { } function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } uint256[50] private __gap; } // File @openzeppelin/contracts-ethereum-package/contracts/access/[email protected] pragma solidity ^0.6.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract OwnableUpgradeSafe is Initializable, ContextUpgradeSafe { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ function __Ownable_init() internal initializer { __Context_init_unchained(); __Ownable_init_unchained(); } function __Ownable_init_unchained() internal initializer { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } uint256[49] private __gap; } // File @openzeppelin/contracts-ethereum-package/contracts/utils/[email protected] pragma solidity ^0.6.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ contract ReentrancyGuardUpgradeSafe is Initializable { bool private _notEntered; function __ReentrancyGuard_init() internal initializer { __ReentrancyGuard_init_unchained(); } function __ReentrancyGuard_init_unchained() internal initializer { // Storing an initial non-zero value makes deployment a bit more // expensive, but in exchange the refund on every call to nonReentrant // will be lower in amount. Since refunds are capped to a percetange of // the total transaction's gas, it is best to keep them low in cases // like this one, to increase the likelihood of the full refund coming // into effect. _notEntered = true; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_notEntered, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _notEntered = false; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _notEntered = true; } uint256[49] private __gap; } // File @openzeppelin/contracts/math/[email protected] // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File @openzeppelin/contracts/token/ERC20/[email protected] pragma solidity ^0.6.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File @uniswap/v2-core/contracts/interfaces/[email protected] pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // File @uniswap/v2-core/contracts/interfaces/[email protected] pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // File contracts/v612/COREv1/ICoreVault.sol pragma solidity ^0.6.0; interface ICoreVault { function devaddr() external returns (address); function addPendingRewards(uint _amount) external; } // File contracts/v612/LGE3.sol pragma solidity 0.6.12; // import "hardhat/console.sol"; interface ICOREVault { function depositFor(address, uint256 , uint256 ) external; } interface IERC95 { function wrapAtomic(address) external; function transfer(address, uint256) external returns (bool); function balanceOf(address) external view returns (uint256); function skim(address to) external; function unpauseTransfers() external; } interface ICORETransferHandler { function sync(address) external returns(bool,bool); function feePercentX100() external returns (uint8); } contract CORE_LGE_3 is Initializable, OwnableUpgradeSafe { using SafeMath for uint256; uint256 private locked; // Reentrancy lock modifier lock() { require(locked == 0, 'CORE LGE: LOCKED'); locked = 1; _; // Can't re-eter until function is finished locked = 0; } /// Addresses of different tokens address public WETH; address public CORE; address public DAI; address public cDAIxcCOREUniswapPair; address public cDAI; // TODO : Add setters address public cCORE; address payable public CORE_MULTISIG; // Uniswap factories for recognising LP tokens address public uniswapFactory; address public sushiswapFactory; //////////////////////////////////////// // Variables for calculating LP gotten per each user // Note all contributions get "flattened" to CORE // This means we just calculate how much CORE it would buy with the running average // And use that as the counter uint256 public totalLPCreated; uint256 private totalCOREUnitsContributed; uint256 public LPPerCOREUnitContributed; // stored as 1e18 more - this is done for change //////////////////////////////////////// event Contibution(uint256 COREvalue, address from); event COREBought(uint256 COREamt); mapping(address => PriceAverage) _averagePrices; struct PriceAverage{ uint8 lastAddedHead; uint256[20] price; uint256 cumulativeLast20Blocks; bool arrayFull; uint lastBlockOfIncrement; // Just update once per block ( by buy token function ) } mapping (address => bool) public claimed; mapping (address => bool) public doNotSellList; mapping (address => uint256) public credit; mapping (address => uint256) public tokenReserves; ICOREGlobals public coreGlobals; bool public LGEStarted; bool public LGEFinished; bool public LGEPaused; uint256 public contractStartTimestamp; uint256 public contractStartTimestampSaved; uint256 public LGEDurationDays; function initialize() public initializer { require(msg.sender == address(0x5A16552f59ea34E44ec81E58b3817833E9fD5436)); OwnableUpgradeSafe.__Ownable_init(); contractStartTimestamp = uint256(-1); // wet set it here to max so checks fail LGEDurationDays = 7 days; DAI = 0x6B175474E89094C44Da98b954EedeAC495271d0F; CORE = 0x62359Ed7505Efc61FF1D56fEF82158CcaffA23D7; WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; uniswapFactory = 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f; sushiswapFactory = 0xC0AEe478e3658e2610c5F7A4A2E1777cE9e4f2Ac; CORE_MULTISIG = 0x5A16552f59ea34E44ec81E58b3817833E9fD5436; coreGlobals = ICOREGlobals(0x255CA4596A963883Afe0eF9c85EA071Cc050128B); doNotSellList[DAI] = true; doNotSellList[CORE] = true; doNotSellList[WETH] = true; } /// Starts LGE by admin call function startLGE() public onlyOwner { require(LGEStarted == false, "Already started"); contractStartTimestamp = block.timestamp; LGEStarted = true; rescueRatioLock(CORE); rescueRatioLock(DAI); } ////////////////////////////////////////////// ////////////////////////////////////////////// ////////////////////////////////////////////// /// CONTRIBUTIONS /// Contributions user functions // Handling weth deposits function addLiquidityETH() lock external payable { require(LGEStarted == true, "LGE : Didn't start"); require(LGEFinished == false, "LGE : Liquidity generation finished"); require(isLGEOver() == false, "LGE : Is over."); require(msg.value > 0, "LGE : You should deposit something most likely"); IWETH(WETH).deposit{value: msg.value}(); // console.log("Value of ETH deposit is", msg.value / 1e18, "ETH"); uint256 valueInCOREUnits = getAveragePriceLast20BlocksIn1WETHPriceWorth(CORE).mul(msg.value).div(1e18); credit[msg.sender] = credit[msg.sender].add(valueInCOREUnits); tokenReserves[WETH] = tokenReserves[WETH].add(msg.value); updateRunningAverages(); } // Main function to contribute any token // Which will sell eveyr token we don't keep for WETH function contributeWithAllowance(address _token, uint256 _amountContribution) lock public { require(LGEStarted == true, "LGE : Didn't start"); require(LGEFinished == false, "LGE : Liquidity generation finished"); require(isLGEOver() == false, "LGE : Is over."); require(_amountContribution > 0, "LGE : You should deposit something most likely"); // We get the token from person safely // We check against reserves // We update our reserves with amount that flew in address [] memory tokensToSell; address token0; // We check if we can call a method for token 0 // Which uniswap pairs have and nothhing else does // If this is a trap token, which has this method, it wont be on the factory try IUniswapV2Pair(_token).token0() { token0 = IUniswapV2Pair(_token).token0(); } catch { } // We try to get it before if it was a normal token it would just not get written if(token0 != address(0)) { address token1 = IUniswapV2Pair(_token).token1(); bool isUniLP = IUniswapV2Factory(uniswapFactory).getPair(token1,token0) != address(0); bool isSushiLP = IUniswapV2Factory(sushiswapFactory).getPair(token0,token1) != address(0); if(!isUniLP && !isSushiLP) { revert("LGE : LP Token type not accepted"); } // reverts here // If its a LP we sell it safeTransferFrom(_token, msg.sender, _token, _amountContribution); uint256 balanceToken0Before = IERC20(token0).balanceOf(address(this)); uint256 balanceToken1Before = IERC20(token1).balanceOf(address(this)); IUniswapV2Pair(_token).burn(address(this)); uint256 balanceToken0After = IERC20(token0).balanceOf(address(this)); uint256 balanceToken1After = IERC20(token1).balanceOf(address(this)); uint256 amountOutToken0 = token0 == WETH ? balanceToken0After.sub(balanceToken0Before) : sellTokenForWETH(token0, balanceToken0After.sub(balanceToken0Before), false); uint256 amountOutToken1 = token1 == WETH ? balanceToken1After.sub(balanceToken1Before) : sellTokenForWETH(token1, balanceToken1After.sub(balanceToken1Before), false); uint256 balanceWETHNew = IERC20(WETH).balanceOf(address(this)); // console.log("Balance WETH", balanceWETHNew); uint256 reserveWETH = tokenReserves[WETH]; // console.log("amountOutToken0",amountOutToken0); // console.log("amountOutToken1",amountOutToken1); // console.log("REserve", reserveWETH); require(balanceWETHNew > reserveWETH, "sir."); uint256 totalWETHAdded = amountOutToken0.add(amountOutToken1); require(tokenReserves[WETH].add(totalWETHAdded) <= balanceWETHNew, "Ekhm"); // In case someone sends dirty dirty dust tokenReserves[WETH] = balanceWETHNew; uint256 valueInCOREUnits = getAveragePriceLast20BlocksIn1WETHPriceWorth(CORE).mul(totalWETHAdded).div(1e18); // console.log("Crediting for CORE UNITS",valueInCOREUnits); // console.log("Which is without deimals", valueInCOREUnits/1e18); credit[msg.sender] = credit[msg.sender].add(valueInCOREUnits); emit Contibution(valueInCOREUnits, msg.sender); // We did everything updateRunningAverages(); return; } // We loop over each token if(doNotSellList[_token] && token0 == address(0)) { // We dont sell this token aka its CORE or DAI // Not needed check but maybe? // We count it as higher even tho FoT if(_token == CORE) { safeTransferFrom(CORE, msg.sender, address(this), _amountContribution); uint256 COREReserves = IERC20(CORE).balanceOf(address(this)); require(COREReserves >= tokenReserves[CORE], "Didn't get enough CORE"); credit[msg.sender] = credit[msg.sender].add(_amountContribution); // we can trust this cause // we know CORE tokenReserves[CORE] = COREReserves; emit Contibution(_amountContribution, msg.sender); } else if(_token == DAI) { safeTransferFrom(DAI, msg.sender, address(this), _amountContribution); uint256 DAIReserves = IERC20(DAI).balanceOf(address(this)); require(DAIReserves >= tokenReserves[DAI].add(_amountContribution), "Didn't get enough DAI"); // console.log("Credit in DAI right now amount : ", _amountContribution/1e18); uint256 valueInWETH = _amountContribution .mul(1e18) .div(getAveragePriceLast20BlocksIn1WETHPriceWorth(DAI)); // 1weth buys this much DAI so we divide to get numer of weth // console.log("Thats in WETH", valueInWETH/1e18); uint256 valueInCOREUnits = getAveragePriceLast20BlocksIn1WETHPriceWorth(CORE).mul(valueInWETH).div(1e18); // console.log("Value in CORE ",valueInCOREUnits /1e18); credit[msg.sender] = credit[msg.sender].add(valueInCOREUnits); // We can similiary trust this cause we know DAI tokenReserves[DAI] = DAIReserves; emit Contibution(valueInCOREUnits, msg.sender); } else if(_token == WETH) { // This is when WETH is deposited // When its deposited from LP it will be alse so we wont ry to transfer from. safeTransferFrom(WETH, msg.sender, address(this), _amountContribution); uint256 reservesWETHNew = IERC20(WETH).balanceOf(address(this)); require(reservesWETHNew >= tokenReserves[WETH].add(_amountContribution), "Didn't get enough WETH"); tokenReserves[WETH] = reservesWETHNew; uint256 valueInCOREUnits = getAveragePriceLast20BlocksIn1WETHPriceWorth(CORE).mul(_amountContribution).div(1e18); credit[msg.sender] = credit[msg.sender].add(valueInCOREUnits); emit Contibution(valueInCOREUnits, msg.sender); } else { revert("Unsupported Token Error, somehow on not to sell list"); } // If its DAI we sell if for WETH if we have too much dai } else { // console.log("Found a shitcoin, selling it"); uint256 amountOut = sellTokenForWETH(_token, _amountContribution, true); // console.log("Sold shitcoin for WETH units", amountOut); // console.log("Thats without decimals", amountOut/1e18); uint256 balanceWETHNew = IERC20(WETH).balanceOf(address(this)); uint256 reserveWETH = tokenReserves[WETH]; require(balanceWETHNew > reserveWETH, "sir."); // console.log("Amount out",amountOut); // console.log("Balance new ", balanceWETHNew); // console.log("Reserves", reserveWETH); require(reserveWETH.add(amountOut) <= balanceWETHNew, "Ekhm"); // In case someone sends dirty dirty dust tokenReserves[WETH] = balanceWETHNew; uint256 valueInCOREUnits = getAveragePriceLast20BlocksIn1WETHPriceWorth(CORE).mul(amountOut).div(1e18); // console.log("Crediting for CORE UNITS",valueInCOREUnits); // console.log("Which is without deimals", valueInCOREUnits/1e18); credit[msg.sender] = credit[msg.sender].add(valueInCOREUnits); emit Contibution(valueInCOREUnits, msg.sender); } updateRunningAverages(); // After transactions are done } /// Claiming LP User functions function claimLP() lock public { safeTransfer(cDAIxcCOREUniswapPair, msg.sender, _claimLP()); } function claimAndStakeLP() lock public { address vault = coreGlobals.COREVaultAddress(); IUniswapV2Pair(cDAIxcCOREUniswapPair).approve(vault, uint(-1)); ICOREVault(vault).depositFor(msg.sender, 3, _claimLP()); } function _claimLP() internal returns (uint256 claimable){ uint256 credit = credit[msg.sender]; // gas savings require(LGEFinished == true, "LGE : Liquidity generation not finished"); require(claimed[msg.sender] == false, "LGE : Already claimed"); require(credit > 0, "LGE : Nothing to be claimed"); claimable = credit.mul(LPPerCOREUnitContributed).div(1e18); // LPPerUnitContributed is stored at 1e18 multiplied claimed[msg.sender] = true; } ////////////////////////////////////////////// ////////////////////////////////////////////// ////////////////////////////////////////////// /// VIEWS function getDAIxCOREBuyAmountsToEquilibrum (uint256 contributionValueETH) public view returns (uint256 COREBuyinETH,uint256 DAIBuyInETH){ /// This ratio is flashloanable which would throw the peg off /// But this is not a priority here. As its not a profitable attack to the attacker. (uint256 COREValueETH, uint256 DAIValueETH) = getDAIandCOREReservesValueInETH(); if(COREValueETH == DAIValueETH) return (contributionValueETH.div(2), contributionValueETH.div(2)); if(COREValueETH > DAIValueETH) { // To equalibrium uint256 DAIBuyToEquilibrium = COREValueETH - DAIValueETH; if(DAIBuyToEquilibrium + 1 >= contributionValueETH) { // If its nto 2 wei we cant split return (0 , contributionValueETH); } // We take the equalibrium and check how many percent of total contribution it is uint256 restETH = contributionValueETH - DAIBuyToEquilibrium; DAIBuyInETH = DAIBuyToEquilibrium.add(restETH).div(2); COREBuyinETH = restETH.div(2); } else { // DAIValueETH is bigger than COREValueETH uint256 COREBuyToEquilibrium = DAIValueETH - COREValueETH; if(COREBuyToEquilibrium + 1 >= contributionValueETH) { // If its nto 2 wei we cant split return (contributionValueETH, 0); } uint256 restETH = contributionValueETH - COREBuyToEquilibrium; COREBuyinETH = COREBuyToEquilibrium.add(restETH).div(2); DAIBuyInETH = restETH.div(2); } } function isLGEOver() public view returns (bool) { return block.timestamp > contractStartTimestamp.add(LGEDurationDays); } // returns WETH value of both reserves (dai and CORE for internal purposes) function getDAIandCOREReservesValueInETH() internal view returns (uint256 COREValueETH, uint256 DAIValueETH) { (uint256 reserveCORE, uint256 reserveDAI) = (tokenReserves[CORE], tokenReserves[DAI]); COREValueETH = reserveCORE.div(1e8).mul(getWETHValueOf1e8TokenUnits(CORE)); DAIValueETH = reserveDAI.div(1e8).mul(getWETHValueOf1e8TokenUnits(DAI)); } // returns WETH value of both reserves (dai and CORE + WETH) function getLGEContributionsValue() public view returns (uint256 COREValueETH, uint256 DAIValueETH, uint256 ETHValue) { (uint256 reserveCORE, uint256 reserveDAI) = (tokenReserves[CORE], tokenReserves[DAI]); COREValueETH = reserveCORE.div(1e8).mul(getWETHValueOf1e8TokenUnits(CORE)); DAIValueETH = reserveDAI.div(1e8).mul(getWETHValueOf1e8TokenUnits(DAI)); ETHValue = IERC20(WETH).balanceOf(address(this)); } function getWETHValueOf1e8TokenUnits(address _token) internal view returns (uint256) { address pairWithWETH = IUniswapV2Factory(uniswapFactory).getPair(_token, WETH); if(pairWithWETH == address(0)) return 0; IUniswapV2Pair pair = IUniswapV2Pair(pairWithWETH); (uint256 reserve0, uint256 reserve1 ,) = pair.getReserves(); if(pair.token0() == WETH) { return getAmountOut(1e8,reserve1,reserve0); } else { return getAmountOut(1e8,reserve0,reserve1); } } function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut) internal pure returns (uint256 amountOut) { require(amountIn > 0, 'UniswapV2Library: INSUFFICIENT_INPUT_AMOUNT'); require(reserveIn > 0 && reserveOut > 0, 'UniswapV2Library: INSUFFICIENT_LIQUIDITY'); uint amountInWithFee = amountIn.mul(997); uint numerator = amountInWithFee.mul(reserveOut); uint denominator = reserveIn.mul(1000).add(amountInWithFee); amountOut = numerator / denominator; } ////////////////////////////////////////////// ////////////////////////////////////////////// ////////////////////////////////////////////// /// Admin balancing functions function buyCOREforWETH(uint256 amountWETH, uint256 minAmountCOREOut) onlyOwner public { (uint256 COREValueETH, uint256 DAIValueETH) = getDAIandCOREReservesValueInETH(); require(COREValueETH.add(amountWETH) <= DAIValueETH, "Buying too much CORE"); IUniswapV2Pair pair = IUniswapV2Pair(0x32Ce7e48debdccbFE0CD037Cc89526E4382cb81b);// CORE/WETH pair safeTransfer(WETH, address(pair), amountWETH); // CORE is token0 (uint256 reservesCORE, uint256 reservesWETH, ) = pair.getReserves(); uint256 coreOUT = getAmountOut(amountWETH, reservesWETH, reservesCORE); pair.swap(coreOUT, 0, address(this), ""); tokenReserves[CORE] = tokenReserves[CORE].add(coreOUT); tokenReserves[WETH] = IERC20(WETH).balanceOf(address(this)); require(coreOUT >= minAmountCOREOut, "Buy Slippage too high"); emit COREBought(coreOUT); } function buyDAIforWETH(uint256 amountWETH, uint256 minAmountDAIOut) onlyOwner public { IUniswapV2Pair pair = IUniswapV2Pair(0xA478c2975Ab1Ea89e8196811F51A7B7Ade33eB11);// DAI/WETH pair safeTransfer(WETH, address(pair), amountWETH); // DAI is token0 (uint256 reservesDAI, uint256 reservesWETH, ) = pair.getReserves(); uint256 daiOUT = getAmountOut(amountWETH, reservesWETH, reservesDAI); pair.swap(daiOUT, 0, address(this), ""); tokenReserves[DAI] = IERC20(DAI).balanceOf(address(this)); tokenReserves[WETH] = IERC20(WETH).balanceOf(address(this)); require(daiOUT >= minAmountDAIOut, "Buy Slippage too high"); } function sellDAIforWETH(uint256 amountDAI, uint256 minAmountWETH) onlyOwner public { IUniswapV2Pair pair = IUniswapV2Pair(0xA478c2975Ab1Ea89e8196811F51A7B7Ade33eB11);// DAI/WETH pair safeTransfer(DAI, address(pair), amountDAI); // DAI is token0 (uint256 reservesDAI, uint256 reservesWETH, ) = pair.getReserves(); uint256 wethOUT = getAmountOut(amountDAI, reservesDAI, reservesWETH); pair.swap(0, wethOUT, address(this), ""); tokenReserves[DAI] = IERC20(DAI).balanceOf(address(this)); tokenReserves[WETH] = IERC20(WETH).balanceOf(address(this)); require(wethOUT >= minAmountWETH, "Buy Slippage too high"); } ////////////////////////////////////////////// ////////////////////////////////////////////// ////////////////////////////////////////////// /// Anti flash loan manipulation running averages function updateRunningAverages() internal { if(_averagePrices[DAI].lastBlockOfIncrement != block.number) { _averagePrices[DAI].lastBlockOfIncrement = block.number; updateRunningAveragePrice(DAI, false); } if(_averagePrices[CORE].lastBlockOfIncrement != block.number) { _averagePrices[CORE].lastBlockOfIncrement = block.number; updateRunningAveragePrice(CORE, false); } } // This is out tokens per 1WETH (1e18 units) function getAveragePriceLast20BlocksIn1WETHPriceWorth(address token) public view returns (uint256) { return _averagePrices[token].cumulativeLast20Blocks.div(_averagePrices[token].arrayFull ? 20 : _averagePrices[token].lastAddedHead); // We check if the "array is full" because 20 writes might not have happened yet // And therefor the average would be skewed by dividing it by 20 } // NOTE outTokenFor1WETH < lastQuote.mul(150).div(100) check function updateRunningAveragePrice(address token, bool isRescue) internal returns (uint256) { PriceAverage storage currentAveragePrices = _averagePrices[token]; address pairWithWETH = IUniswapV2Factory(uniswapFactory).getPair(token, WETH); uint256 wethReserves; uint256 tokenReserves; if(WETH == IUniswapV2Pair(pairWithWETH).token0()) { ( wethReserves, tokenReserves,) = IUniswapV2Pair(pairWithWETH).getReserves(); } else { (tokenReserves, wethReserves,) = IUniswapV2Pair(pairWithWETH).getReserves(); } // Get amt you would get for 1eth uint256 outTokenFor1WETH = getAmountOut(1e18, wethReserves, tokenReserves); // console.log("Inside running average out token for 1 weth is", outTokenFor1WETH); uint8 i = currentAveragePrices.lastAddedHead; //////////////////// /// flash loan safety //we check the last first quote price against current uint256 oldestQuoteIndex; if(currentAveragePrices.arrayFull == true) { if (i != 19 ) { oldestQuoteIndex = i + 1; } // its 0 already else } else { if (i > 0) { oldestQuoteIndex = i -1; } // its 0 already else } uint256 firstQuote = currentAveragePrices.price[oldestQuoteIndex]; // Safety flash loan revert // If change is above 50% // This can be rescued by the bool "isRescue" if(isRescue == false){ require(outTokenFor1WETH < firstQuote.mul(15000).div(10000), "Change too big from first recorded price"); } //////////////////// currentAveragePrices.cumulativeLast20Blocks = currentAveragePrices.cumulativeLast20Blocks.sub(currentAveragePrices.price[i]); currentAveragePrices.price[i] = outTokenFor1WETH; currentAveragePrices.cumulativeLast20Blocks = currentAveragePrices.cumulativeLast20Blocks.add(outTokenFor1WETH); currentAveragePrices.lastAddedHead++; if(currentAveragePrices.lastAddedHead > 19) { currentAveragePrices.lastAddedHead = 0; currentAveragePrices.arrayFull = true; } return currentAveragePrices.cumulativeLast20Blocks; } // Because its possible that price of someting legitimately goes +50% // Then the updateRunningAveragePrice would be stuck until it goes down, // This allows the admin to "rescue" it by writing a new average // skiping the +50% check function rescueRatioLock(address token) public onlyOwner{ updateRunningAveragePrice(token, true); } ////////////////////////////////////////////// ////////////////////////////////////////////// ////////////////////////////////////////////// /// Ending the LGE function addLiquidityToPair() public onlyOwner { require(block.timestamp > contractStartTimestamp.add(LGEDurationDays), "LGE : Liquidity generation ongoing"); require(LGEFinished == false, "LGE : Liquidity generation finished"); require(IERC20(WETH).balanceOf(address(this)) < 1 ether, "Too much WETH still left over in the contract"); require(CORE_MULTISIG != address(0), "CORE MUTISIG NOT SET"); require(cCORE != address(0), "cCORE NOT SET"); require(cDAI != address(0), "cDAI NOT SET"); (uint256 COREValueETH, uint256 DAIValueETH) = getDAIandCOREReservesValueInETH(); //If there is too much CORE we just take it from the top, no refunds in LGE3 if(COREValueETH > DAIValueETH) { uint256 DELTA = COREValueETH - DAIValueETH; uint256 percentOfCORETooMuch = DELTA.mul(1e18).div(COREValueETH); // carry 1e18 // Skim too much safeTransfer(CORE, CORE_MULTISIG, COREValueETH.mul(percentOfCORETooMuch).div(1e18)); } // Else DAI is bigger value, we just allow it to be 4% bigger max // We set max deviation from price of 4% require(COREValueETH.mul(104).div(100) > DAIValueETH, "Deviation from current price is too high" ); // !!!!!!!!!!! //unlock wrapping IERC95(cCORE).unpauseTransfers(); IERC95(cDAI).unpauseTransfers(); //!!!!!!!!! // Optimistically get pair cDAIxcCOREUniswapPair = IUniswapV2Factory(uniswapFactory).getPair(cCORE , cDAI); if(cDAIxcCOREUniswapPair == address(0)) { // Pair doesn't exist yet // create pair returns address cDAIxcCOREUniswapPair = IUniswapV2Factory(uniswapFactory).createPair( cDAI, cCORE ); } uint256 balanceCORE = IERC20(CORE).balanceOf(address(this)); uint256 balanceDAI = IERC20(CORE).balanceOf(address(this)); uint256 DEV_FEE = 1000; address CORE_MULTISIG = ICoreVault(coreGlobals.COREVaultAddress()).devaddr(); uint256 devFeeCORE = balanceCORE.mul(DEV_FEE).div(10000); uint256 devFeeDAI = balanceDAI.mul(DEV_FEE).div(10000); // transfer dev fee safeTransfer(CORE, CORE_MULTISIG, devFeeCORE); safeTransfer(DAI, CORE_MULTISIG, devFeeDAI); // Wrap and send to uniswap pair safeTransfer(CORE, cCORE, balanceCORE.sub(devFeeCORE)); safeTransfer(DAI, cDAI, balanceDAI.sub(devFeeDAI)); IERC95(cCORE).wrapAtomic(cDAIxcCOREUniswapPair); IERC95(cDAI).wrapAtomic(cDAIxcCOREUniswapPair); require(IERC95(cDAI).balanceOf(cDAIxcCOREUniswapPair) == balanceDAI.sub(devFeeDAI), "Pair did not recieve enough DAI"); require(IERC95(cCORE).balanceOf(cDAIxcCOREUniswapPair) == balanceCORE.sub(devFeeCORE), "Pair did not recieve enough CORE"); // Mint tokens from uniswap pair IUniswapV2Pair pair = IUniswapV2Pair(cDAIxcCOREUniswapPair); // cCORE/cDAI pair //we get lp tokens require(pair.totalSupply() == 0, "Somehow total supply is higher, sanity fail"); pair.mint(address(this)); require(pair.totalSupply() > 0, "We didn't create tokens!"); totalLPCreated = pair.balanceOf(address(this)); LPPerCOREUnitContributed = totalLPCreated.mul(1e18).div(totalCOREUnitsContributed); // Stored as 1e18 more for round erorrs and change require(LPPerCOREUnitContributed > 0, "LP Per Unit Contribute Must be above Zero"); //Sync pair ICORETransferHandler(coreGlobals.TransferHandler()).sync(cDAIxcCOREUniswapPair); LGEFinished = true; } ////////////////////////////////////////////// ////////////////////////////////////////////// ////////////////////////////////////////////// /// Helper functions // If LGE doesn't trigger in 24h after its complete its possible to withdraw tokens // Because then we can assume something went wrong since LGE is a publically callable function // And otherwise everything is stuck. function safetyTokenWithdraw(address token) onlyOwner public { require(block.timestamp > contractStartTimestamp.add(LGEDurationDays).add(1 days)); IERC20(token).transfer(msg.sender, IERC20(token).balanceOf(address(this))); } function safetyETHWithdraw() onlyOwner public { require(block.timestamp > contractStartTimestamp.add(LGEDurationDays).add(1 days)); msg.sender.call.value(address(this).balance)(""); } function setCDAI(address _cDAI) onlyOwner public { cDAI = _cDAI; } function setcCORE(address _cCORE) onlyOwner public { cCORE = _cCORE; } // Added safety function to extend LGE in case multisig #2 isn't avaiable from emergency life events // TODO x3 add your key here function extendLGE(uint256 numHours) public { require(msg.sender == 0x82810e81CAD10B8032D39758C8DBa3bA47Ad7092 || msg.sender == 0xC91FE1ee441402D854B8F22F94Ddf66618169636 || msg.sender == CORE_MULTISIG, "LGE: Requires admin"); require(numHours <= 24); LGEDurationDays = LGEDurationDays.add(numHours.mul(1 hours)); } function pauseLGE() public { require(msg.sender == 0x82810e81CAD10B8032D39758C8DBa3bA47Ad7092 || msg.sender == 0xC91FE1ee441402D854B8F22F94Ddf66618169636 || msg.sender == CORE_MULTISIG, "LGE: Requires admin"); require(LGEPaused == false, "LGE : LGE Already paused"); contractStartTimestampSaved = contractStartTimestamp; contractStartTimestamp = uint256(-1); LGEPaused = true; } function unpauseLGE() public { require(msg.sender == 0x82810e81CAD10B8032D39758C8DBa3bA47Ad7092 || msg.sender == 0xC91FE1ee441402D854B8F22F94Ddf66618169636 || msg.sender == CORE_MULTISIG, "LGE: Requires admin"); require(LGEPaused == true, "LGE : LGE isn't paused"); uint256 pausedTime = block.timestamp.sub(contractStartTimestampSaved); contractStartTimestamp = contractStartTimestampSaved.add(pausedTime); LGEPaused = false; } // Note selling tokens doesn't need slippage protection usually // Because front run bots dont hold, usually // but maybe rekt function sellTokenForWETH(address _token, uint256 _amountTransfer, bool fromPerson) internal returns (uint256 amountOut) { // we just sell on uni cause fuck you // console.log("Selling token", _token); require(_token != DAI, "No sell DAI"); address pairWithWETH = IUniswapV2Factory(uniswapFactory).getPair(_token, WETH); require(pairWithWETH != address(0), "Unsupported shitcoin"); // console.log("Got pair with shitcoin", pairWithWETH); // console.log("selling token for amount", _amountTransfer); IERC20 shitcoin = IERC20(_token); IUniswapV2Pair pair = IUniswapV2Pair(pairWithWETH); // check how much pair has uint256 balanceBefore = shitcoin.balanceOf(pairWithWETH); // can pumpthis, but fails later // Send all token to pair if(fromPerson) { safeTransferFrom(_token, msg.sender, pairWithWETH, _amountTransfer); // re } else { safeTransfer(_token, pairWithWETH, _amountTransfer); } // check how much it got uint256 balanceAfter = shitcoin.balanceOf(pairWithWETH); (uint256 reserve0, uint256 reserve1, ) = pair.getReserves(); // console.log("Reserve0",reserve0); // console.log("Reserve1",reserve1); uint256 DELTA = balanceAfter.sub(balanceBefore, "Fuqq"); // console.log("Delta after send", DELTA); // Make a swaperoo if(pair.token0() == _token) { // weth is 1 // in, reservein, reserveout amountOut = getAmountOut(DELTA, reserve0, reserve1); require(amountOut < reserve1.mul(30).div(100), "Too much slippage in selling"); pair.swap(0, amountOut, address(this), ""); } else { // WETH is 0 amountOut = getAmountOut(DELTA, reserve1, reserve0); pair.swap(amountOut, 0, address(this), ""); require(amountOut < reserve0.mul(30).div(100), "Too much slippage in selling"); } } function safeTransfer(address token, address to, uint256 value) internal { (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'LGE3: TRANSFER_FAILED'); } function safeTransferFrom(address token, address from, address to, uint256 value) internal { // bytes4(keccak256(bytes('transferFrom(address,address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'LGE3: TRANSFER_FROM_FAILED'); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"COREamt","type":"uint256"}],"name":"COREBought","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"COREvalue","type":"uint256"},{"indexed":false,"internalType":"address","name":"from","type":"address"}],"name":"Contibution","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"CORE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CORE_MULTISIG","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DAI","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LGEDurationDays","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LGEFinished","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LGEPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LGEStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LPPerCOREUnitContributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addLiquidityETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"addLiquidityToPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountWETH","type":"uint256"},{"internalType":"uint256","name":"minAmountCOREOut","type":"uint256"}],"name":"buyCOREforWETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountWETH","type":"uint256"},{"internalType":"uint256","name":"minAmountDAIOut","type":"uint256"}],"name":"buyDAIforWETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cCORE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cDAI","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cDAIxcCOREUniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimAndStakeLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractStartTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractStartTimestampSaved","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amountContribution","type":"uint256"}],"name":"contributeWithAllowance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"coreGlobals","outputs":[{"internalType":"contract ICOREGlobals","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"credit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"doNotSellList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numHours","type":"uint256"}],"name":"extendLGE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getAveragePriceLast20BlocksIn1WETHPriceWorth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"contributionValueETH","type":"uint256"}],"name":"getDAIxCOREBuyAmountsToEquilibrum","outputs":[{"internalType":"uint256","name":"COREBuyinETH","type":"uint256"},{"internalType":"uint256","name":"DAIBuyInETH","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLGEContributionsValue","outputs":[{"internalType":"uint256","name":"COREValueETH","type":"uint256"},{"internalType":"uint256","name":"DAIValueETH","type":"uint256"},{"internalType":"uint256","name":"ETHValue","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isLGEOver","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pauseLGE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"rescueRatioLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"safetyETHWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"safetyTokenWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountDAI","type":"uint256"},{"internalType":"uint256","name":"minAmountWETH","type":"uint256"}],"name":"sellDAIforWETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_cDAI","type":"address"}],"name":"setCDAI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_cCORE","type":"address"}],"name":"setcCORE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startLGE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sushiswapFactory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalLPCreated","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapFactory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpauseLGE","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50615b1480620000216000396000f3fe6080604052600436106102885760003560e01c80639272aa4d1161015a578063cbaae552116100c1578063de44391a1161007a578063de44391a146107ee578063e0bab4c414610803578063ed99530714610818578063f2fde38b14610820578063f33725ee14610853578063fb74381f1461088c57610288565b8063cbaae55214610719578063d41cb9b014610749578063d5a4d4f91461075e578063d5d44d8014610791578063d5e147f6146107c4578063db716042146107d957610288565b8063b4fb6e1e11610113578063b4fb6e1e1461063a578063bd9dc3691461064f578063c21d272014610664578063c30178d91461068e578063c884ef83146106d1578063cacb7f9f1461070457610288565b80639272aa4d14610580578063949b234b14610595578063abb4d8cd146105c8578063ad5c4648146105fb578063ade3e55714610610578063b082ab301461062557610288565b80636a2f796c116101fe578063798e603b116101b7578063798e603b146104e457806379d12755146105175780638129fc1c1461052c57806383fab405146105415780638bdb2afa146105565780638da5cb5b1461056b57610288565b80636a2f796c1461044b5780636b6c0774146104605780636f6941b914610475578063715018a61461048a57806372ab3b621461049f578063789b6a31146104b457610288565b80632c241929116102505780632c241929146103445780634471fa5914610377578063501070be146103a757806350b0ce9f146103bc578063596db0af146103ef5780635ef163211461043657610288565b80630706b1f51461028d5780630b612856146102be57806318df8b91146102e55780631ef28bc11461031a5780631f97e4a11461032f575b600080fd5b34801561029957600080fd5b506102a26108a1565b604080516001600160a01b039092168252519081900360200190f35b3480156102ca57600080fd5b506102d36108b0565b60408051918252519081900360200190f35b3480156102f157600080fd5b506103186004803603602081101561030857600080fd5b50356001600160a01b03166108b6565b005b34801561032657600080fd5b50610318610930565b34801561033b57600080fd5b506102d3610a1c565b34801561035057600080fd5b50610359610a22565b60408051938452602084019290925282820152519081900360600190f35b34801561038357600080fd5b506103186004803603604081101561039a57600080fd5b5080359060200135610b22565b3480156103b357600080fd5b506102a2610e22565b3480156103c857600080fd5b50610318600480360360208110156103df57600080fd5b50356001600160a01b0316610e31565b3480156103fb57600080fd5b506104226004803603602081101561041257600080fd5b50356001600160a01b0316610e98565b604080519115158252519081900360200190f35b34801561044257600080fd5b50610318610ead565b34801561045757600080fd5b506102d3611078565b34801561046c57600080fd5b506102a261107e565b34801561048157600080fd5b506102a261108d565b34801561049657600080fd5b5061031861109c565b3480156104ab57600080fd5b506102a261113e565b3480156104c057600080fd5b50610318600480360360408110156104d757600080fd5b508035906020013561114d565b3480156104f057600080fd5b506102d36004803603602081101561050757600080fd5b50356001600160a01b0316611496565b34801561052357600080fd5b506102d36114a8565b34801561053857600080fd5b506103186114ae565b34801561054d57600080fd5b506104226116b3565b34801561056257600080fd5b506102a26116c3565b34801561057757600080fd5b506102a26116d2565b34801561058c57600080fd5b506104226116e1565b3480156105a157600080fd5b506102d3600480360360208110156105b857600080fd5b50356001600160a01b03166116f1565b3480156105d457600080fd5b50610318600480360360208110156105eb57600080fd5b50356001600160a01b0316611769565b34801561060757600080fd5b506102a26118f7565b34801561061c57600080fd5b50610318611906565b34801561063157600080fd5b5061031861273e565b34801561064657600080fd5b50610422612865565b34801561065b57600080fd5b506102d3612885565b34801561067057600080fd5b506103186004803603602081101561068757600080fd5b503561288b565b34801561069a57600080fd5b506106b8600480360360208110156106b157600080fd5b5035612948565b6040805192835260208301919091528051918290030190f35b3480156106dd57600080fd5b50610422600480360360208110156106f457600080fd5b50356001600160a01b0316612a17565b34801561071057600080fd5b50610422612a2c565b34801561072557600080fd5b506103186004803603604081101561073c57600080fd5b5080359060200135612a3c565b34801561075557600080fd5b50610318612bb3565b34801561076a57600080fd5b506103186004803603602081101561078157600080fd5b50356001600160a01b0316612c74565b34801561079d57600080fd5b506102d3600480360360208110156107b457600080fd5b50356001600160a01b0316612cee565b3480156107d057600080fd5b50610318612d00565b3480156107e557600080fd5b506102a2612e11565b3480156107fa57600080fd5b50610318612e20565b34801561080f57600080fd5b506102a2612e8d565b610318612e9c565b34801561082c57600080fd5b506103186004803603602081101561084357600080fd5b50356001600160a01b0316613125565b34801561085f57600080fd5b506103186004803603604081101561087657600080fd5b506001600160a01b03813516906020013561321e565b34801561089857600080fd5b506102a26142c8565b60a9546001600160a01b031681565b60ac5481565b6108be6142d7565b6065546001600160a01b0390811691161461090e576040805162461bcd60e51b81526020600482018190526024820152600080516020615995833981519152604482015290519081900360640190fd5b609c80546001600160a01b0319166001600160a01b0392909216919091179055565b6109386142d7565b6065546001600160a01b03908116911614610988576040805162461bcd60e51b81526020600482018190526024820152600080516020615995833981519152604482015290519081900360640190fd5b60a954600160a01b900460ff16156109d9576040805162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e481cdd185c9d1959608a1b604482015290519081900360640190fd5b4260aa5560a9805460ff60a01b1916600160a01b179055609954610a05906001600160a01b0316610e31565b609a54610a1a906001600160a01b0316610e31565b565b60a35481565b6099546001600160a01b03908116600081815260a8602052604080822054609a54909416825281205490928392839290610a7390610a5f906142db565b610a6d846305f5e1006144ab565b906144f6565b609a54909550610a9d90610a8f906001600160a01b03166142db565b610a6d836305f5e1006144ab565b609854604080516370a0823160e01b815230600482015290519296506001600160a01b03909116916370a0823191602480820192602092909190829003018186803b158015610aeb57600080fd5b505afa158015610aff573d6000803e3d6000fd5b505050506040513d6020811015610b1557600080fd5b5051949593949392505050565b610b2a6142d7565b6065546001600160a01b03908116911614610b7a576040805162461bcd60e51b81526020600482018190526024820152600080516020615995833981519152604482015290519081900360640190fd5b60985473a478c2975ab1ea89e8196811f51a7b7ade33eb1190610ba7906001600160a01b0316828561454f565b600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015610be357600080fd5b505afa158015610bf7573d6000803e3d6000fd5b505050506040513d6060811015610c0d57600080fd5b5080516020909101516001600160701b0391821693501690506000610c338683856146b1565b6040805163022c0d9f60e01b815260048101839052600060248201819052306044830152608060648301526084820181905291519293506001600160a01b0387169263022c0d9f9260c48084019391929182900301818387803b158015610c9957600080fd5b505af1158015610cad573d6000803e3d6000fd5b5050609a54604080516370a0823160e01b815230600482015290516001600160a01b0390921693506370a082319250602480820192602092909190829003018186803b158015610cfc57600080fd5b505afa158015610d10573d6000803e3d6000fd5b505050506040513d6020811015610d2657600080fd5b5051609a546001600160a01b03908116600090815260a860209081526040918290209390935560985481516370a0823160e01b815230600482015291519216926370a0823192602480840193829003018186803b158015610d8657600080fd5b505afa158015610d9a573d6000803e3d6000fd5b505050506040513d6020811015610db057600080fd5b50516098546001600160a01b0316600090815260a8602052604090205584811015610e1a576040805162461bcd60e51b8152602060048201526015602482015274084eaf240a6d8d2e0e0c2ceca40e8dede40d0d2ced605b1b604482015290519081900360640190fd5b505050505050565b60a0546001600160a01b031681565b610e396142d7565b6065546001600160a01b03908116911614610e89576040805162461bcd60e51b81526020600482018190526024820152600080516020615995833981519152604482015290519081900360640190fd5b610e94816001614783565b5050565b60a66020526000908152604090205460ff1681565b60975415610ef5576040805162461bcd60e51b815260206004820152601060248201526f10d3d491481311d14e881313d0d2d15160821b604482015290519081900360640190fd5b600160975560a95460408051637bb53c2d60e11b815290516000926001600160a01b03169163f76a785a91600480830192602092919082900301818787803b158015610f4057600080fd5b505af1158015610f54573d6000803e3d6000fd5b505050506040513d6020811015610f6a57600080fd5b5051609b546040805163095ea7b360e01b81526001600160a01b0380851660048301526000196024830152915193945091169163095ea7b3916044808201926020929091908290030181600087803b158015610fc557600080fd5b505af1158015610fd9573d6000803e3d6000fd5b505050506040513d6020811015610fef57600080fd5b50506001600160a01b038116634cf5fbf533600361100b614b06565b6040518463ffffffff1660e01b815260040180846001600160a01b031681526020018381526020018281526020019350505050600060405180830381600087803b15801561105857600080fd5b505af115801561106c573d6000803e3d6000fd5b50506000609755505050565b60aa5481565b6099546001600160a01b031681565b609c546001600160a01b031681565b6110a46142d7565b6065546001600160a01b039081169116146110f4576040805162461bcd60e51b81526020600482018190526024820152600080516020615995833981519152604482015290519081900360640190fd5b6065546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3606580546001600160a01b0319169055565b609b546001600160a01b031681565b6111556142d7565b6065546001600160a01b039081169116146111a5576040805162461bcd60e51b81526020600482018190526024820152600080516020615995833981519152604482015290519081900360640190fd5b6000806111b0614c56565b9092509050806111c08386614cb7565b111561120a576040805162461bcd60e51b8152602060048201526014602482015273427579696e6720746f6f206d75636820434f524560601b604482015290519081900360640190fd5b6098547332ce7e48debdccbfe0cd037cc89526e4382cb81b90611237906001600160a01b0316828761454f565b600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561127357600080fd5b505afa158015611287573d6000803e3d6000fd5b505050506040513d606081101561129d57600080fd5b5080516020909101516001600160701b03918216935016905060006112c38883856146b1565b6040805163022c0d9f60e01b815260048101839052600060248201819052306044830152608060648301526084820181905291519293506001600160a01b0387169263022c0d9f9260c48084019391929182900301818387803b15801561132957600080fd5b505af115801561133d573d6000803e3d6000fd5b50506099546001600160a01b0316600090815260a860205260409020546113679250905082614cb7565b6099546001600160a01b03908116600090815260a860209081526040918290209390935560985481516370a0823160e01b815230600482015291519216926370a0823192602480840193829003018186803b1580156113c557600080fd5b505afa1580156113d9573d6000803e3d6000fd5b505050506040513d60208110156113ef57600080fd5b50516098546001600160a01b0316600090815260a8602052604090205586811015611459576040805162461bcd60e51b8152602060048201526015602482015274084eaf240a6d8d2e0e0c2ceca40e8dede40d0d2ced605b1b604482015290519081900360640190fd5b6040805182815290517ff28de31145210ce4c9e25f700f0de1061ffbbe567472f3a2c574414fbb48727b9181900360200190a15050505050505050565b60a86020526000908152604090205481565b60a15481565b600054610100900460ff16806114c757506114c7614d11565b806114d5575060005460ff16155b6115105760405162461bcd60e51b815260040180806020018281038252602e8152602001806159de602e913960400191505060405180910390fd5b600054610100900460ff1615801561153b576000805460ff1961ff0019909116610100171660011790555b33735a16552f59ea34e44ec81e58b3817833e9fd54361461155b57600080fd5b611563614d17565b60001960aa5562093a8060ac55609a80546001600160a01b0319908116736b175474e89094c44da98b954eedeac495271d0f17918290556099805482167362359ed7505efc61ff1d56fef82158ccaffa23d717815560988054831673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2178155609f80548416735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f17905560a08054841673c0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac179055609e80548416735a16552f59ea34e44ec81e58b3817833e9fd543617905560a9805490931673255ca4596a963883afe0ef9c85ea071cc050128b179092556001600160a01b03928316600090815260a66020526040808220805460ff19908116600190811790925593548616835281832080548516821790559354909416815292909220805490921617905580156116b0576000805461ff00191690555b50565b60a954600160a81b900460ff1681565b609f546001600160a01b031681565b6065546001600160a01b031690565b60a954600160b01b900460ff1681565b6001600160a01b038116600090815260a460205260408120601601546117619060ff16611739576001600160a01b038316600090815260a4602052604090205460ff1661173c565b60145b6001600160a01b038416600090815260a460205260409020601501549060ff166144ab565b90505b919050565b6117716142d7565b6065546001600160a01b039081169116146117c1576040805162461bcd60e51b81526020600482018190526024820152600080516020615995833981519152604482015290519081900360640190fd5b6117e5620151806117df60ac5460aa54614cb790919063ffffffff16565b90614cb7565b42116117f057600080fd5b806001600160a01b031663a9059cbb33836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561184d57600080fd5b505afa158015611861573d6000803e3d6000fd5b505050506040513d602081101561187757600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b1580156118c857600080fd5b505af11580156118dc573d6000803e3d6000fd5b505050506040513d60208110156118f257600080fd5b505050565b6098546001600160a01b031681565b61190e6142d7565b6065546001600160a01b0390811691161461195e576040805162461bcd60e51b81526020600482018190526024820152600080516020615995833981519152604482015290519081900360640190fd5b60ac5460aa5461196d91614cb7565b42116119aa5760405162461bcd60e51b8152600401808060200182810382526022815260200180615abd6022913960400191505060405180910390fd5b60a954600160a81b900460ff16156119f35760405162461bcd60e51b81526004018080602001828103825260238152602001806158d96023913960400191505060405180910390fd5b609854604080516370a0823160e01b81523060048201529051670de0b6b3a7640000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015611a4557600080fd5b505afa158015611a59573d6000803e3d6000fd5b505050506040513d6020811015611a6f57600080fd5b505110611aad5760405162461bcd60e51b815260040180806020018281038252602d8152602001806158ac602d913960400191505060405180910390fd5b609e546001600160a01b0316611b01576040805162461bcd60e51b815260206004820152601460248201527310d3d491481355551254d251c81393d50814d15560621b604482015290519081900360640190fd5b609d546001600160a01b0316611b4e576040805162461bcd60e51b815260206004820152600d60248201526c18d0d3d491481393d50814d155609a1b604482015290519081900360640190fd5b609c546001600160a01b0316611b9a576040805162461bcd60e51b815260206004820152600c60248201526b18d11052481393d50814d15560a21b604482015290519081900360640190fd5b600080611ba5614c56565b9150915080821115611c0a578082036000611bd284611bcc84670de0b6b3a76400006144f6565b906144ab565b609954609e54919250611c07916001600160a01b039182169116611c02670de0b6b3a7640000611bcc89876144f6565b61454f565b50505b80611c1b6064611bcc8560686144f6565b11611c575760405162461bcd60e51b81526004018080602001828103825260288152602001806158fc6028913960400191505060405180910390fd5b609d60009054906101000a90046001600160a01b03166001600160a01b0316638936a91f6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611ca757600080fd5b505af1158015611cbb573d6000803e3d6000fd5b50505050609c60009054906101000a90046001600160a01b03166001600160a01b0316638936a91f6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611d0f57600080fd5b505af1158015611d23573d6000803e3d6000fd5b5050609f54609d54609c546040805163e6a4390560e01b81526001600160a01b03938416600482015291831660248301525191909216935063e6a4390592506044808301926020929190829003018186803b158015611d8157600080fd5b505afa158015611d95573d6000803e3d6000fd5b505050506040513d6020811015611dab57600080fd5b5051609b80546001600160a01b0319166001600160a01b03928316179081905516611e7857609f54609c54609d54604080516364e329cb60e11b81526001600160a01b039384166004820152918316602483015251919092169163c9c653969160448083019260209291908290030181600087803b158015611e2c57600080fd5b505af1158015611e40573d6000803e3d6000fd5b505050506040513d6020811015611e5657600080fd5b5051609b80546001600160a01b0319166001600160a01b039092169190911790555b609954604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015611ec357600080fd5b505afa158015611ed7573d6000803e3d6000fd5b505050506040513d6020811015611eed57600080fd5b5051609954604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015611f4057600080fd5b505afa158015611f54573d6000803e3d6000fd5b505050506040513d6020811015611f6a57600080fd5b505160a95460408051637bb53c2d60e11b815290519293506103e8926000926001600160a01b03169163f76a785a91600480830192602092919082900301818787803b158015611fb957600080fd5b505af1158015611fcd573d6000803e3d6000fd5b505050506040513d6020811015611fe357600080fd5b50516040805163d49e77cd60e01b815290516001600160a01b039092169163d49e77cd916004808201926020929091908290030181600087803b15801561202957600080fd5b505af115801561203d573d6000803e3d6000fd5b505050506040513d602081101561205357600080fd5b505190506000612069612710611bcc87866144f6565b9050600061207d612710611bcc87876144f6565b609954909150612097906001600160a01b0316848461454f565b609a546120ae906001600160a01b0316848361454f565b609954609d546120cf916001600160a01b039081169116611c028986614dc8565b609a54609c546120f0916001600160a01b039081169116611c028885614dc8565b609d54609b5460408051630f59a7e360e21b81526001600160a01b03928316600482015290519190921691633d669f8c91602480830192600092919082900301818387803b15801561214157600080fd5b505af1158015612155573d6000803e3d6000fd5b5050609c54609b5460408051630f59a7e360e21b81526001600160a01b0392831660048201529051919092169350633d669f8c9250602480830192600092919082900301818387803b1580156121aa57600080fd5b505af11580156121be573d6000803e3d6000fd5b505050506121d58186614dc890919063ffffffff16565b609c54609b54604080516370a0823160e01b81526001600160a01b039283166004820152905191909216916370a08231916024808301926020929190829003018186803b15801561222557600080fd5b505afa158015612239573d6000803e3d6000fd5b505050506040513d602081101561224f57600080fd5b5051146122a3576040805162461bcd60e51b815260206004820152601f60248201527f5061697220646964206e6f74207265636965766520656e6f7567682044414900604482015290519081900360640190fd5b6122ad8683614dc8565b609d54609b54604080516370a0823160e01b81526001600160a01b039283166004820152905191909216916370a08231916024808301926020929190829003018186803b1580156122fd57600080fd5b505afa158015612311573d6000803e3d6000fd5b505050506040513d602081101561232757600080fd5b50511461237b576040805162461bcd60e51b815260206004820181905260248201527f5061697220646964206e6f74207265636965766520656e6f75676820434f5245604482015290519081900360640190fd5b609b54604080516318160ddd60e01b815290516001600160a01b039092169182916318160ddd916004808301926020929190829003018186803b1580156123c157600080fd5b505afa1580156123d5573d6000803e3d6000fd5b505050506040513d60208110156123eb57600080fd5b5051156124295760405162461bcd60e51b815260040180806020018281038252602b815260200180615a33602b913960400191505060405180910390fd5b604080516335313c2160e11b815230600482015290516001600160a01b03831691636a6278429160248083019260209291908290030181600087803b15801561247157600080fd5b505af1158015612485573d6000803e3d6000fd5b505050506040513d602081101561249b57600080fd5b5050604080516318160ddd60e01b815290516000916001600160a01b038416916318160ddd91600480820192602092909190829003018186803b1580156124e157600080fd5b505afa1580156124f5573d6000803e3d6000fd5b505050506040513d602081101561250b57600080fd5b50511161255f576040805162461bcd60e51b815260206004820152601860248201527f5765206469646e27742063726561746520746f6b656e73210000000000000000604482015290519081900360640190fd5b604080516370a0823160e01b815230600482015290516001600160a01b038316916370a08231916024808301926020929190829003018186803b1580156125a557600080fd5b505afa1580156125b9573d6000803e3d6000fd5b505050506040513d60208110156125cf57600080fd5b505160a181905560a2546125ef91611bcc90670de0b6b3a76400006144f6565b60a381905561262f5760405162461bcd60e51b81526004018080602001828103825260298152602001806159b56029913960400191505060405180910390fd5b60a960009054906101000a90046001600160a01b03166001600160a01b031663242c29296040518163ffffffff1660e01b815260040160206040518083038186803b15801561267d57600080fd5b505afa158015612691573d6000803e3d6000fd5b505050506040513d60208110156126a757600080fd5b5051609b5460408051632961046560e21b81526001600160a01b0392831660048201528151929093169263a584119492602480830193928290030181600087803b1580156126f457600080fd5b505af1158015612708573d6000803e3d6000fd5b505050506040513d604081101561271e57600080fd5b505060a9805460ff60a81b1916600160a81b179055505050505050505050565b7382810e81cad10b8032d39758c8dba3ba47ad7092331480612773575073c91fe1ee441402d854b8f22f94ddf6661816963633145b806127885750609e546001600160a01b031633145b6127cf576040805162461bcd60e51b81526020600482015260136024820152722623a29d102932b8bab4b932b99030b236b4b760691b604482015290519081900360640190fd5b60a954600160b01b900460ff16151560011461282b576040805162461bcd60e51b81526020600482015260166024820152751311d1480e881311d1481a5cdb89dd081c185d5cd95960521b604482015290519081900360640190fd5b600061284260ab5442614dc890919063ffffffff16565b60ab549091506128529082614cb7565b60aa555060a9805460ff60b01b19169055565b600061287e60ac5460aa54614cb790919063ffffffff16565b4211905090565b60ab5481565b7382810e81cad10b8032d39758c8dba3ba47ad70923314806128c0575073c91fe1ee441402d854b8f22f94ddf6661816963633145b806128d55750609e546001600160a01b031633145b61291c576040805162461bcd60e51b81526020600482015260136024820152722623a29d102932b8bab4b932b99030b236b4b760691b604482015290519081900360640190fd5b601881111561292a57600080fd5b61294261293982610e106144f6565b60ac5490614cb7565b60ac5550565b600080600080612956614c56565b91509150808214156129835761296d8560026144ab565b6129788660026144ab565b935093505050612a12565b808211156129cf578082036001810186116129a75760008694509450505050612a12565b8086036129b96002611bcc8484614cb7565b94506129c68160026144ab565b95505050612a0f565b8181036001810186116129eb5785600094509450505050612a12565b8086036129fd6002611bcc8484614cb7565b9550612a0a8160026144ab565b945050505b50505b915091565b60a56020526000908152604090205460ff1681565b60a954600160a01b900460ff1681565b612a446142d7565b6065546001600160a01b03908116911614612a94576040805162461bcd60e51b81526020600482018190526024820152600080516020615995833981519152604482015290519081900360640190fd5b609a5473a478c2975ab1ea89e8196811f51a7b7ade33eb1190612ac1906001600160a01b0316828561454f565b600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015612afd57600080fd5b505afa158015612b11573d6000803e3d6000fd5b505050506040513d6060811015612b2757600080fd5b5080516020909101516001600160701b0391821693501690506000612b4d8684846146b1565b6040805163022c0d9f60e01b815260006004820181905260248201849052306044830152608060648301526084820181905291519293506001600160a01b0387169263022c0d9f9260c48084019391929182900301818387803b158015610c9957600080fd5b612bbb6142d7565b6065546001600160a01b03908116911614612c0b576040805162461bcd60e51b81526020600482018190526024820152600080516020615995833981519152604482015290519081900360640190fd5b612c29620151806117df60ac5460aa54614cb790919063ffffffff16565b4211612c3457600080fd5b60405133904790600081818185875af1925050503d80600081146118f2576040519150601f19603f3d011682016040523d82523d6000602084013e6118f2565b612c7c6142d7565b6065546001600160a01b03908116911614612ccc576040805162461bcd60e51b81526020600482018190526024820152600080516020615995833981519152604482015290519081900360640190fd5b609d80546001600160a01b0319166001600160a01b0392909216919091179055565b60a76020526000908152604090205481565b7382810e81cad10b8032d39758c8dba3ba47ad7092331480612d35575073c91fe1ee441402d854b8f22f94ddf6661816963633145b80612d4a5750609e546001600160a01b031633145b612d91576040805162461bcd60e51b81526020600482015260136024820152722623a29d102932b8bab4b932b99030b236b4b760691b604482015290519081900360640190fd5b60a954600160b01b900460ff1615612df0576040805162461bcd60e51b815260206004820152601860248201527f4c4745203a204c474520416c7265616479207061757365640000000000000000604482015290519081900360640190fd5b60aa805460ab55600019905560a9805460ff60b01b1916600160b01b179055565b609e546001600160a01b031681565b60975415612e68576040805162461bcd60e51b815260206004820152601060248201526f10d3d491481311d14e881313d0d2d15160821b604482015290519081900360640190fd5b6001609755609b54612e86906001600160a01b031633611c02614b06565b6000609755565b609a546001600160a01b031681565b60975415612ee4576040805162461bcd60e51b815260206004820152601060248201526f10d3d491481311d14e881313d0d2d15160821b604482015290519081900360640190fd5b6001609781905560a954600160a01b900460ff16151514612f41576040805162461bcd60e51b81526020600482015260126024820152711311d1480e88111a591b89dd081cdd185c9d60721b604482015290519081900360640190fd5b60a954600160a81b900460ff1615612f8a5760405162461bcd60e51b81526004018080602001828103825260238152602001806158d96023913960400191505060405180910390fd5b612f92612865565b15612fd5576040805162461bcd60e51b815260206004820152600e60248201526d2623a2901d1024b99037bb32b91760911b604482015290519081900360640190fd5b600034116130145760405162461bcd60e51b815260040180806020018281038252602e81526020018061587e602e913960400191505060405180910390fd5b609860009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561306457600080fd5b505af1158015613078573d6000803e3d6000fd5b5050609954600093506130a99250670de0b6b3a76400009150611bcc903490610a6d906001600160a01b03166116f1565b33600090815260a760205260409020549091506130c69082614cb7565b33600090815260a760209081526040808320939093556098546001600160a01b0316825260a8905220546130fa9034614cb7565b6098546001600160a01b0316600090815260a8602052604090205561311d614e0a565b506000609755565b61312d6142d7565b6065546001600160a01b0390811691161461317d576040805162461bcd60e51b81526020600482018190526024820152600080516020615995833981519152604482015290519081900360640190fd5b6001600160a01b0381166131c25760405162461bcd60e51b81526004018080602001828103825260268152602001806158386026913960400191505060405180910390fd5b6065546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3606580546001600160a01b0319166001600160a01b0392909216919091179055565b60975415613266576040805162461bcd60e51b815260206004820152601060248201526f10d3d491481311d14e881313d0d2d15160821b604482015290519081900360640190fd5b6001609781905560a954600160a01b900460ff161515146132c3576040805162461bcd60e51b81526020600482015260126024820152711311d1480e88111a591b89dd081cdd185c9d60721b604482015290519081900360640190fd5b60a954600160a81b900460ff161561330c5760405162461bcd60e51b81526004018080602001828103825260238152602001806158d96023913960400191505060405180910390fd5b613314612865565b15613357576040805162461bcd60e51b815260206004820152600e60248201526d2623a2901d1024b99037bb32b91760911b604482015290519081900360640190fd5b600081116133965760405162461bcd60e51b815260040180806020018281038252602e81526020018061587e602e913960400191505060405180910390fd5b60606000836001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156133d357600080fd5b505afa9250505080156133f857506040513d60208110156133f357600080fd5b505160015b6134015761346a565b50836001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561343b57600080fd5b505afa15801561344f573d6000803e3d6000fd5b505050506040513d602081101561346557600080fd5b505190505b6001600160a01b03811615613b3f576000846001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156134b457600080fd5b505afa1580156134c8573d6000803e3d6000fd5b505050506040513d60208110156134de57600080fd5b5051609f546040805163e6a4390560e01b81526001600160a01b0380851660048301528681166024830152915193945060009384939092169163e6a4390591604480820192602092909190829003018186803b15801561353d57600080fd5b505afa158015613551573d6000803e3d6000fd5b505050506040513d602081101561356757600080fd5b505160a0546040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151938216949094141594506000938493919092169163e6a43905916044808301926020929190829003018186803b1580156135cd57600080fd5b505afa1580156135e1573d6000803e3d6000fd5b505050506040513d60208110156135f757600080fd5b50516001600160a01b03161415905081158015613612575080155b15613664576040805162461bcd60e51b815260206004820181905260248201527f4c4745203a204c5020546f6b656e2074797065206e6f74206163636570746564604482015290519081900360640190fd5b61367087338989614eb8565b6000846001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156136bf57600080fd5b505afa1580156136d3573d6000803e3d6000fd5b505050506040513d60208110156136e957600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038716916370a08231916024808301926020929190829003018186803b15801561373757600080fd5b505afa15801561374b573d6000803e3d6000fd5b505050506040513d602081101561376157600080fd5b50516040805163226bf2d160e21b815230600482015281519293506001600160a01b038c16926389afcb44926024808401939192918290030181600087803b1580156137ac57600080fd5b505af11580156137c0573d6000803e3d6000fd5b505050506040513d60408110156137d657600080fd5b5050604080516370a0823160e01b815230600482015290516000916001600160a01b038916916370a0823191602480820192602092909190829003018186803b15801561382257600080fd5b505afa158015613836573d6000803e3d6000fd5b505050506040513d602081101561384c57600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038916916370a08231916024808301926020929190829003018186803b15801561389a57600080fd5b505afa1580156138ae573d6000803e3d6000fd5b505050506040513d60208110156138c457600080fd5b50516098549091506000906001600160a01b038a81169116146138fb576138f6896138ef8588614dc8565b6000615023565b613905565b6139058386614dc8565b6098549091506000906001600160a01b038a81169116146139335761392e896138ef8588614dc8565b61393d565b61393d8386614dc8565b609854604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561398e57600080fd5b505afa1580156139a2573d6000803e3d6000fd5b505050506040513d60208110156139b857600080fd5b50516098546001600160a01b0316600090815260a86020526040902054909150808211613a15576040805162461bcd60e51b8152602060048083019190915260248201526339b4b91760e11b604482015290519081900360640190fd5b6000613a218585614cb7565b6098546001600160a01b0316600090815260a860205260409020549091508390613a4b9083614cb7565b1115613a87576040805162461bcd60e51b81526020600480830191909152602482015263456b686d60e01b604482015290519081900360640190fd5b6098546001600160a01b03908116600090815260a8602052604081208590556099549091613ac991670de0b6b3a764000091611bcc918691610a6d91166116f1565b33600090815260a76020526040902054909150613ae69082614cb7565b33600081815260a7602090815260409182902093909355805184815292830191909152805160008051602061585e8339815191529281900390910190a1613b2b614e0a565b5050505050505050505050505050506142bf565b6001600160a01b038416600090815260a6602052604090205460ff168015613b6e57506001600160a01b038116155b156140e6576099546001600160a01b0385811691161415613cf957609954613ba1906001600160a01b0316333086614eb8565b609954604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015613bec57600080fd5b505afa158015613c00573d6000803e3d6000fd5b505050506040513d6020811015613c1657600080fd5b50516099546001600160a01b0316600090815260a86020526040902054909150811015613c83576040805162461bcd60e51b81526020600482015260166024820152754469646e27742067657420656e6f75676820434f524560501b604482015290519081900360640190fd5b33600090815260a76020526040902054613c9d9085614cb7565b33600081815260a760209081526040808320949094556099546001600160a01b0316825260a8815290839020849055825187815290810191909152815160008051602061585e833981519152929181900390910190a1506140e1565b609a546001600160a01b0385811691161415613eed57609a54613d27906001600160a01b0316333086614eb8565b609a54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015613d7257600080fd5b505afa158015613d86573d6000803e3d6000fd5b505050506040513d6020811015613d9c57600080fd5b5051609a546001600160a01b0316600090815260a86020526040902054909150613dc69085614cb7565b811015613e12576040805162461bcd60e51b81526020600482015260156024820152744469646e27742067657420656e6f7567682044414960581b604482015290519081900360640190fd5b609a54600090613e4090613e2e906001600160a01b03166116f1565b611bcc87670de0b6b3a76400006144f6565b90506000613e72670de0b6b3a7640000611bcc84610a6d609960009054906101000a90046001600160a01b03166116f1565b33600090815260a76020526040902054909150613e8f9082614cb7565b33600081815260a76020908152604080832094909455609a546001600160a01b0316825260a8815290839020869055825184815290810191909152815160008051602061585e833981519152929181900390910190a15050506140e1565b6098546001600160a01b03858116911614156140aa57609854613f1b906001600160a01b0316333086614eb8565b609854604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015613f6657600080fd5b505afa158015613f7a573d6000803e3d6000fd5b505050506040513d6020811015613f9057600080fd5b50516098546001600160a01b0316600090815260a86020526040902054909150613fba9085614cb7565b811015614007576040805162461bcd60e51b8152602060048201526016602482015275088d2c8dc4ee840cecae840cadcdeeaced040ae8aa8960531b604482015290519081900360640190fd5b6098546001600160a01b03908116600090815260a860205260408120839055609954909161404991670de0b6b3a764000091611bcc918991610a6d91166116f1565b33600090815260a760205260409020549091506140669082614cb7565b33600081815260a7602090815260409182902093909355805184815292830191909152805160008051602061585e8339815191529281900390910190a150506140e1565b60405162461bcd60e51b8152600401808060200182810382526034815260200180615a5e6034913960400191505060405180910390fd5b6142b4565b60006140f485856001615023565b609854604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561414557600080fd5b505afa158015614159573d6000803e3d6000fd5b505050506040513d602081101561416f57600080fd5b50516098546001600160a01b0316600090815260a860205260409020549091508082116141cc576040805162461bcd60e51b8152602060048083019190915260248201526339b4b91760e11b604482015290519081900360640190fd5b816141d78285614cb7565b1115614213576040805162461bcd60e51b81526020600480830191909152602482015263456b686d60e01b604482015290519081900360640190fd5b6098546001600160a01b03908116600090815260a860205260408120849055609954909161425591670de0b6b3a764000091611bcc918891610a6d91166116f1565b33600090815260a760205260409020549091506142729082614cb7565b33600081815260a7602090815260409182902093909355805184815292830191909152805160008051602061585e8339815191529281900390910190a1505050505b6142bc614e0a565b50505b50506000609755565b609d546001600160a01b031681565b3390565b609f546098546040805163e6a4390560e01b81526001600160a01b038581166004830152928316602482015290516000938493169163e6a43905916044808301926020929190829003018186803b15801561433557600080fd5b505afa158015614349573d6000803e3d6000fd5b505050506040513d602081101561435f57600080fd5b505190506001600160a01b03811661437b576000915050611764565b6000819050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156143bc57600080fd5b505afa1580156143d0573d6000803e3d6000fd5b505050506040513d60608110156143e657600080fd5b50805160209182015160985460408051630dfe168160e01b815290516001600160701b0394851697509390921694506001600160a01b039081169390871692630dfe1681926004808201939291829003018186803b15801561444757600080fd5b505afa15801561445b573d6000803e3d6000fd5b505050506040513d602081101561447157600080fd5b50516001600160a01b0316141561449c576144916305f5e10082846146b1565b945050505050611764565b6144916305f5e10083836146b1565b60006144ed83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506155a2565b90505b92915050565b600082614505575060006144f0565b8282028284828161451257fe5b04146144ed5760405162461bcd60e51b81526004018080602001828103825260218152602001806159746021913960400191505060405180910390fd5b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106145cc5780518252601f1990920191602091820191016145ad565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461462e576040519150601f19603f3d011682016040523d82523d6000602084013e614633565b606091505b5091509150818015614661575080511580614661575080806020019051602081101561465e57600080fd5b50515b6146aa576040805162461bcd60e51b81526020600482015260156024820152741311d14cce881514905394d1915497d19052531151605a1b604482015290519081900360640190fd5b5050505050565b60008084116146f15760405162461bcd60e51b815260040180806020018281038252602b815260200180615a92602b913960400191505060405180910390fd5b6000831180156147015750600082115b61473c5760405162461bcd60e51b81526004018080602001828103825260288152602001806159246028913960400191505060405180910390fd5b600061474a856103e56144f6565b9050600061475882856144f6565b9050600061476c836117df886103e86144f6565b905080828161477757fe5b04979650505050505050565b6001600160a01b03808316600081815260a460209081526040808320609f54609854835163e6a4390560e01b81526004810197909752871660248701529151939590948694929091169263e6a4390592604480840193829003018186803b1580156147ed57600080fd5b505afa158015614801573d6000803e3d6000fd5b505050506040513d602081101561481757600080fd5b505160408051630dfe168160e01b8152905191925060009182916001600160a01b03851691630dfe168191600480820192602092909190829003018186803b15801561486257600080fd5b505afa158015614876573d6000803e3d6000fd5b505050506040513d602081101561488c57600080fd5b50516098546001600160a01b039081169116141561492557826001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156148dd57600080fd5b505afa1580156148f1573d6000803e3d6000fd5b505050506040513d606081101561490757600080fd5b5080516020909101516001600160701b0391821693501690506149a2565b826001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561495e57600080fd5b505afa158015614972573d6000803e3d6000fd5b505050506040513d606081101561498857600080fd5b5080516020909101516001600160701b0390811693501690505b60006149b7670de0b6b3a764000084846146b1565b8554601687015491925060ff90811691600091161515600114156149ee578160ff166013146149e9575060ff60018201165b614a01565b60ff821615614a01575060ff6000198201165b6000876001018260148110614a1257fe5b0154905089614a6a57614a2d612710611bcc83613a986144f6565b8410614a6a5760405162461bcd60e51b815260040180806020018281038252602881526020018061594c6028913960400191505060405180910390fd5b614a8c886001018460ff1660148110614a7f57fe5b015460158a015490614dc8565b6015890155836001890160ff851660148110614aa457fe5b01556015880154614ab59085614cb7565b6015890155875460ff198116600160ff92831601821617808a55601391161115614af257875460ff19908116895560168901805490911660011790555b505050601590940154979650505050505050565b33600090815260a7602052604081205460a954600160a81b900460ff161515600114614b635760405162461bcd60e51b8152600401808060200182810382526027815260200180615a0c6027913960400191505060405180910390fd5b33600090815260a5602052604090205460ff1615614bc0576040805162461bcd60e51b81526020600482015260156024820152741311d1480e88105b1c9958591e4818db185a5b5959605a1b604482015290519081900360640190fd5b60008111614c15576040805162461bcd60e51b815260206004820152601b60248201527f4c4745203a204e6f7468696e6720746f20626520636c61696d65640000000000604482015290519081900360640190fd5b614c36670de0b6b3a7640000611bcc60a354846144f690919063ffffffff16565b33600090815260a560205260409020805460ff1916600117905592915050565b6099546001600160a01b03908116600081815260a8602052604080822054609a54909416825281205490928392909190614c9390610a5f906142db565b609a54909450614caf90610a8f906001600160a01b03166142db565b925050509091565b6000828201838110156144ed576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b303b1590565b600054610100900460ff1680614d305750614d30614d11565b80614d3e575060005460ff16155b614d795760405162461bcd60e51b815260040180806020018281038252602e8152602001806159de602e913960400191505060405180910390fd5b600054610100900460ff16158015614da4576000805460ff1961ff0019909116610100171660011790555b614dac615644565b614db46156e4565b80156116b0576000805461ff001916905550565b60006144ed83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506157dd565b609a546001600160a01b0316600090815260a460205260409020601701544314614e6257609a80546001600160a01b03908116600090815260a460205260408120436017909101559154614e6092911690614783565b505b6099546001600160a01b0316600090815260a460205260409020601701544314610a1a57609980546001600160a01b03908116600090815260a4602052604081204360179091015591546116b092911690614783565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b60208310614f3d5780518252601f199092019160209182019101614f1e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614f9f576040519150601f19603f3d011682016040523d82523d6000602084013e614fa4565b606091505b5091509150818015614fd2575080511580614fd25750808060200190516020811015614fcf57600080fd5b50515b610e1a576040805162461bcd60e51b815260206004820152601a60248201527f4c4745333a205452414e534645525f46524f4d5f4641494c4544000000000000604482015290519081900360640190fd5b609a546000906001600160a01b0385811691161415615077576040805162461bcd60e51b815260206004820152600b60248201526a4e6f2073656c6c2044414960a81b604482015290519081900360640190fd5b609f546098546040805163e6a4390560e01b81526001600160a01b03888116600483015292831660248201529051600093929092169163e6a4390591604480820192602092909190829003018186803b1580156150d357600080fd5b505afa1580156150e7573d6000803e3d6000fd5b505050506040513d60208110156150fd57600080fd5b505190506001600160a01b038116615153576040805162461bcd60e51b81526020600482015260146024820152732ab739bab83837b93a32b21039b434ba31b7b4b760611b604482015290519081900360640190fd5b600085905060008290506000826001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156151ac57600080fd5b505afa1580156151c0573d6000803e3d6000fd5b505050506040513d60208110156151d657600080fd5b5051905085156151f1576151ec8833868a614eb8565b6151fc565b6151fc88858961454f565b6000836001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561524b57600080fd5b505afa15801561525f573d6000803e3d6000fd5b505050506040513d602081101561527557600080fd5b505160408051630240bc6b60e21b8152905191925060009182916001600160a01b03871691630902f1ac91600480820192606092909190829003018186803b1580156152c057600080fd5b505afa1580156152d4573d6000803e3d6000fd5b505050506040513d60608110156152ea57600080fd5b5080516020918201516040805180820190915260048152634675717160e01b938101939093526001600160701b03918216945016915060009061533090859087906157dd565b90508b6001600160a01b0316866001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561537557600080fd5b505afa158015615389573d6000803e3d6000fd5b505050506040513d602081101561539f57600080fd5b50516001600160a01b0316141561549e576153bb8184846146b1565b98506153cd6064611bcc84601e6144f6565b8910615420576040805162461bcd60e51b815260206004820152601c60248201527f546f6f206d75636820736c69707061676520696e2073656c6c696e6700000000604482015290519081900360640190fd5b6040805163022c0d9f60e01b8152600060048201819052602482018c9052306044830152608060648301526084820181905291516001600160a01b0389169263022c0d9f9260c4808201939182900301818387803b15801561548157600080fd5b505af1158015615495573d6000803e3d6000fd5b50505050615593565b6154a98183856146b1565b6040805163022c0d9f60e01b81526004810183905260006024820181905230604483015260806064830152608482018190529151929b506001600160a01b0389169263022c0d9f9260c48084019391929182900301818387803b15801561550f57600080fd5b505af1158015615523573d6000803e3d6000fd5b505050506155406064611bcc601e866144f690919063ffffffff16565b8910615593576040805162461bcd60e51b815260206004820152601c60248201527f546f6f206d75636820736c69707061676520696e2073656c6c696e6700000000604482015290519081900360640190fd5b50505050505050509392505050565b6000818361562e5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156155f35781810151838201526020016155db565b50505050905090810190601f1680156156205780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161563a57fe5b0495945050505050565b600054610100900460ff168061565d575061565d614d11565b8061566b575060005460ff16155b6156a65760405162461bcd60e51b815260040180806020018281038252602e8152602001806159de602e913960400191505060405180910390fd5b600054610100900460ff16158015614db4576000805460ff1961ff00199091166101001716600117905580156116b0576000805461ff001916905550565b600054610100900460ff16806156fd57506156fd614d11565b8061570b575060005460ff16155b6157465760405162461bcd60e51b815260040180806020018281038252602e8152602001806159de602e913960400191505060405180910390fd5b600054610100900460ff16158015615771576000805460ff1961ff0019909116610100171660011790555b600061577b6142d7565b606580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156116b0576000805461ff001916905550565b6000818484111561582f5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156155f35781810151838201526020016155db565b50505090039056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737341892ddb04331614cc8d0b2be5d92c744beb730ffd9677993a8813e339414dde4c4745203a20596f752073686f756c64206465706f73697420736f6d657468696e67206d6f7374206c696b656c79546f6f206d7563682057455448207374696c6c206c656674206f76657220696e2074686520636f6e74726163744c4745203a204c69717569646974792067656e65726174696f6e2066696e6973686564446576696174696f6e2066726f6d2063757272656e7420707269636520697320746f6f2068696768556e697377617056324c6962726172793a20494e53554646494349454e545f4c49515549444954594368616e676520746f6f206269672066726f6d206669727374207265636f72646564207072696365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724c502050657220556e697420436f6e74726962757465204d7573742062652061626f7665205a65726f436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a65644c4745203a204c69717569646974792067656e65726174696f6e206e6f742066696e6973686564536f6d65686f7720746f74616c20737570706c79206973206869676865722c2073616e697479206661696c556e737570706f7274656420546f6b656e204572726f722c20736f6d65686f77206f6e206e6f7420746f2073656c6c206c697374556e697377617056324c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e544c4745203a204c69717569646974792067656e65726174696f6e206f6e676f696e67a26469706673582212202a602b59438172e81bc04e7172ff78af85180a64078d75845567b5f5d368197d64736f6c634300060c0033
Deployed Bytecode
0x6080604052600436106102885760003560e01c80639272aa4d1161015a578063cbaae552116100c1578063de44391a1161007a578063de44391a146107ee578063e0bab4c414610803578063ed99530714610818578063f2fde38b14610820578063f33725ee14610853578063fb74381f1461088c57610288565b8063cbaae55214610719578063d41cb9b014610749578063d5a4d4f91461075e578063d5d44d8014610791578063d5e147f6146107c4578063db716042146107d957610288565b8063b4fb6e1e11610113578063b4fb6e1e1461063a578063bd9dc3691461064f578063c21d272014610664578063c30178d91461068e578063c884ef83146106d1578063cacb7f9f1461070457610288565b80639272aa4d14610580578063949b234b14610595578063abb4d8cd146105c8578063ad5c4648146105fb578063ade3e55714610610578063b082ab301461062557610288565b80636a2f796c116101fe578063798e603b116101b7578063798e603b146104e457806379d12755146105175780638129fc1c1461052c57806383fab405146105415780638bdb2afa146105565780638da5cb5b1461056b57610288565b80636a2f796c1461044b5780636b6c0774146104605780636f6941b914610475578063715018a61461048a57806372ab3b621461049f578063789b6a31146104b457610288565b80632c241929116102505780632c241929146103445780634471fa5914610377578063501070be146103a757806350b0ce9f146103bc578063596db0af146103ef5780635ef163211461043657610288565b80630706b1f51461028d5780630b612856146102be57806318df8b91146102e55780631ef28bc11461031a5780631f97e4a11461032f575b600080fd5b34801561029957600080fd5b506102a26108a1565b604080516001600160a01b039092168252519081900360200190f35b3480156102ca57600080fd5b506102d36108b0565b60408051918252519081900360200190f35b3480156102f157600080fd5b506103186004803603602081101561030857600080fd5b50356001600160a01b03166108b6565b005b34801561032657600080fd5b50610318610930565b34801561033b57600080fd5b506102d3610a1c565b34801561035057600080fd5b50610359610a22565b60408051938452602084019290925282820152519081900360600190f35b34801561038357600080fd5b506103186004803603604081101561039a57600080fd5b5080359060200135610b22565b3480156103b357600080fd5b506102a2610e22565b3480156103c857600080fd5b50610318600480360360208110156103df57600080fd5b50356001600160a01b0316610e31565b3480156103fb57600080fd5b506104226004803603602081101561041257600080fd5b50356001600160a01b0316610e98565b604080519115158252519081900360200190f35b34801561044257600080fd5b50610318610ead565b34801561045757600080fd5b506102d3611078565b34801561046c57600080fd5b506102a261107e565b34801561048157600080fd5b506102a261108d565b34801561049657600080fd5b5061031861109c565b3480156104ab57600080fd5b506102a261113e565b3480156104c057600080fd5b50610318600480360360408110156104d757600080fd5b508035906020013561114d565b3480156104f057600080fd5b506102d36004803603602081101561050757600080fd5b50356001600160a01b0316611496565b34801561052357600080fd5b506102d36114a8565b34801561053857600080fd5b506103186114ae565b34801561054d57600080fd5b506104226116b3565b34801561056257600080fd5b506102a26116c3565b34801561057757600080fd5b506102a26116d2565b34801561058c57600080fd5b506104226116e1565b3480156105a157600080fd5b506102d3600480360360208110156105b857600080fd5b50356001600160a01b03166116f1565b3480156105d457600080fd5b50610318600480360360208110156105eb57600080fd5b50356001600160a01b0316611769565b34801561060757600080fd5b506102a26118f7565b34801561061c57600080fd5b50610318611906565b34801561063157600080fd5b5061031861273e565b34801561064657600080fd5b50610422612865565b34801561065b57600080fd5b506102d3612885565b34801561067057600080fd5b506103186004803603602081101561068757600080fd5b503561288b565b34801561069a57600080fd5b506106b8600480360360208110156106b157600080fd5b5035612948565b6040805192835260208301919091528051918290030190f35b3480156106dd57600080fd5b50610422600480360360208110156106f457600080fd5b50356001600160a01b0316612a17565b34801561071057600080fd5b50610422612a2c565b34801561072557600080fd5b506103186004803603604081101561073c57600080fd5b5080359060200135612a3c565b34801561075557600080fd5b50610318612bb3565b34801561076a57600080fd5b506103186004803603602081101561078157600080fd5b50356001600160a01b0316612c74565b34801561079d57600080fd5b506102d3600480360360208110156107b457600080fd5b50356001600160a01b0316612cee565b3480156107d057600080fd5b50610318612d00565b3480156107e557600080fd5b506102a2612e11565b3480156107fa57600080fd5b50610318612e20565b34801561080f57600080fd5b506102a2612e8d565b610318612e9c565b34801561082c57600080fd5b506103186004803603602081101561084357600080fd5b50356001600160a01b0316613125565b34801561085f57600080fd5b506103186004803603604081101561087657600080fd5b506001600160a01b03813516906020013561321e565b34801561089857600080fd5b506102a26142c8565b60a9546001600160a01b031681565b60ac5481565b6108be6142d7565b6065546001600160a01b0390811691161461090e576040805162461bcd60e51b81526020600482018190526024820152600080516020615995833981519152604482015290519081900360640190fd5b609c80546001600160a01b0319166001600160a01b0392909216919091179055565b6109386142d7565b6065546001600160a01b03908116911614610988576040805162461bcd60e51b81526020600482018190526024820152600080516020615995833981519152604482015290519081900360640190fd5b60a954600160a01b900460ff16156109d9576040805162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e481cdd185c9d1959608a1b604482015290519081900360640190fd5b4260aa5560a9805460ff60a01b1916600160a01b179055609954610a05906001600160a01b0316610e31565b609a54610a1a906001600160a01b0316610e31565b565b60a35481565b6099546001600160a01b03908116600081815260a8602052604080822054609a54909416825281205490928392839290610a7390610a5f906142db565b610a6d846305f5e1006144ab565b906144f6565b609a54909550610a9d90610a8f906001600160a01b03166142db565b610a6d836305f5e1006144ab565b609854604080516370a0823160e01b815230600482015290519296506001600160a01b03909116916370a0823191602480820192602092909190829003018186803b158015610aeb57600080fd5b505afa158015610aff573d6000803e3d6000fd5b505050506040513d6020811015610b1557600080fd5b5051949593949392505050565b610b2a6142d7565b6065546001600160a01b03908116911614610b7a576040805162461bcd60e51b81526020600482018190526024820152600080516020615995833981519152604482015290519081900360640190fd5b60985473a478c2975ab1ea89e8196811f51a7b7ade33eb1190610ba7906001600160a01b0316828561454f565b600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015610be357600080fd5b505afa158015610bf7573d6000803e3d6000fd5b505050506040513d6060811015610c0d57600080fd5b5080516020909101516001600160701b0391821693501690506000610c338683856146b1565b6040805163022c0d9f60e01b815260048101839052600060248201819052306044830152608060648301526084820181905291519293506001600160a01b0387169263022c0d9f9260c48084019391929182900301818387803b158015610c9957600080fd5b505af1158015610cad573d6000803e3d6000fd5b5050609a54604080516370a0823160e01b815230600482015290516001600160a01b0390921693506370a082319250602480820192602092909190829003018186803b158015610cfc57600080fd5b505afa158015610d10573d6000803e3d6000fd5b505050506040513d6020811015610d2657600080fd5b5051609a546001600160a01b03908116600090815260a860209081526040918290209390935560985481516370a0823160e01b815230600482015291519216926370a0823192602480840193829003018186803b158015610d8657600080fd5b505afa158015610d9a573d6000803e3d6000fd5b505050506040513d6020811015610db057600080fd5b50516098546001600160a01b0316600090815260a8602052604090205584811015610e1a576040805162461bcd60e51b8152602060048201526015602482015274084eaf240a6d8d2e0e0c2ceca40e8dede40d0d2ced605b1b604482015290519081900360640190fd5b505050505050565b60a0546001600160a01b031681565b610e396142d7565b6065546001600160a01b03908116911614610e89576040805162461bcd60e51b81526020600482018190526024820152600080516020615995833981519152604482015290519081900360640190fd5b610e94816001614783565b5050565b60a66020526000908152604090205460ff1681565b60975415610ef5576040805162461bcd60e51b815260206004820152601060248201526f10d3d491481311d14e881313d0d2d15160821b604482015290519081900360640190fd5b600160975560a95460408051637bb53c2d60e11b815290516000926001600160a01b03169163f76a785a91600480830192602092919082900301818787803b158015610f4057600080fd5b505af1158015610f54573d6000803e3d6000fd5b505050506040513d6020811015610f6a57600080fd5b5051609b546040805163095ea7b360e01b81526001600160a01b0380851660048301526000196024830152915193945091169163095ea7b3916044808201926020929091908290030181600087803b158015610fc557600080fd5b505af1158015610fd9573d6000803e3d6000fd5b505050506040513d6020811015610fef57600080fd5b50506001600160a01b038116634cf5fbf533600361100b614b06565b6040518463ffffffff1660e01b815260040180846001600160a01b031681526020018381526020018281526020019350505050600060405180830381600087803b15801561105857600080fd5b505af115801561106c573d6000803e3d6000fd5b50506000609755505050565b60aa5481565b6099546001600160a01b031681565b609c546001600160a01b031681565b6110a46142d7565b6065546001600160a01b039081169116146110f4576040805162461bcd60e51b81526020600482018190526024820152600080516020615995833981519152604482015290519081900360640190fd5b6065546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3606580546001600160a01b0319169055565b609b546001600160a01b031681565b6111556142d7565b6065546001600160a01b039081169116146111a5576040805162461bcd60e51b81526020600482018190526024820152600080516020615995833981519152604482015290519081900360640190fd5b6000806111b0614c56565b9092509050806111c08386614cb7565b111561120a576040805162461bcd60e51b8152602060048201526014602482015273427579696e6720746f6f206d75636820434f524560601b604482015290519081900360640190fd5b6098547332ce7e48debdccbfe0cd037cc89526e4382cb81b90611237906001600160a01b0316828761454f565b600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561127357600080fd5b505afa158015611287573d6000803e3d6000fd5b505050506040513d606081101561129d57600080fd5b5080516020909101516001600160701b03918216935016905060006112c38883856146b1565b6040805163022c0d9f60e01b815260048101839052600060248201819052306044830152608060648301526084820181905291519293506001600160a01b0387169263022c0d9f9260c48084019391929182900301818387803b15801561132957600080fd5b505af115801561133d573d6000803e3d6000fd5b50506099546001600160a01b0316600090815260a860205260409020546113679250905082614cb7565b6099546001600160a01b03908116600090815260a860209081526040918290209390935560985481516370a0823160e01b815230600482015291519216926370a0823192602480840193829003018186803b1580156113c557600080fd5b505afa1580156113d9573d6000803e3d6000fd5b505050506040513d60208110156113ef57600080fd5b50516098546001600160a01b0316600090815260a8602052604090205586811015611459576040805162461bcd60e51b8152602060048201526015602482015274084eaf240a6d8d2e0e0c2ceca40e8dede40d0d2ced605b1b604482015290519081900360640190fd5b6040805182815290517ff28de31145210ce4c9e25f700f0de1061ffbbe567472f3a2c574414fbb48727b9181900360200190a15050505050505050565b60a86020526000908152604090205481565b60a15481565b600054610100900460ff16806114c757506114c7614d11565b806114d5575060005460ff16155b6115105760405162461bcd60e51b815260040180806020018281038252602e8152602001806159de602e913960400191505060405180910390fd5b600054610100900460ff1615801561153b576000805460ff1961ff0019909116610100171660011790555b33735a16552f59ea34e44ec81e58b3817833e9fd54361461155b57600080fd5b611563614d17565b60001960aa5562093a8060ac55609a80546001600160a01b0319908116736b175474e89094c44da98b954eedeac495271d0f17918290556099805482167362359ed7505efc61ff1d56fef82158ccaffa23d717815560988054831673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2178155609f80548416735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f17905560a08054841673c0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac179055609e80548416735a16552f59ea34e44ec81e58b3817833e9fd543617905560a9805490931673255ca4596a963883afe0ef9c85ea071cc050128b179092556001600160a01b03928316600090815260a66020526040808220805460ff19908116600190811790925593548616835281832080548516821790559354909416815292909220805490921617905580156116b0576000805461ff00191690555b50565b60a954600160a81b900460ff1681565b609f546001600160a01b031681565b6065546001600160a01b031690565b60a954600160b01b900460ff1681565b6001600160a01b038116600090815260a460205260408120601601546117619060ff16611739576001600160a01b038316600090815260a4602052604090205460ff1661173c565b60145b6001600160a01b038416600090815260a460205260409020601501549060ff166144ab565b90505b919050565b6117716142d7565b6065546001600160a01b039081169116146117c1576040805162461bcd60e51b81526020600482018190526024820152600080516020615995833981519152604482015290519081900360640190fd5b6117e5620151806117df60ac5460aa54614cb790919063ffffffff16565b90614cb7565b42116117f057600080fd5b806001600160a01b031663a9059cbb33836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561184d57600080fd5b505afa158015611861573d6000803e3d6000fd5b505050506040513d602081101561187757600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b1580156118c857600080fd5b505af11580156118dc573d6000803e3d6000fd5b505050506040513d60208110156118f257600080fd5b505050565b6098546001600160a01b031681565b61190e6142d7565b6065546001600160a01b0390811691161461195e576040805162461bcd60e51b81526020600482018190526024820152600080516020615995833981519152604482015290519081900360640190fd5b60ac5460aa5461196d91614cb7565b42116119aa5760405162461bcd60e51b8152600401808060200182810382526022815260200180615abd6022913960400191505060405180910390fd5b60a954600160a81b900460ff16156119f35760405162461bcd60e51b81526004018080602001828103825260238152602001806158d96023913960400191505060405180910390fd5b609854604080516370a0823160e01b81523060048201529051670de0b6b3a7640000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015611a4557600080fd5b505afa158015611a59573d6000803e3d6000fd5b505050506040513d6020811015611a6f57600080fd5b505110611aad5760405162461bcd60e51b815260040180806020018281038252602d8152602001806158ac602d913960400191505060405180910390fd5b609e546001600160a01b0316611b01576040805162461bcd60e51b815260206004820152601460248201527310d3d491481355551254d251c81393d50814d15560621b604482015290519081900360640190fd5b609d546001600160a01b0316611b4e576040805162461bcd60e51b815260206004820152600d60248201526c18d0d3d491481393d50814d155609a1b604482015290519081900360640190fd5b609c546001600160a01b0316611b9a576040805162461bcd60e51b815260206004820152600c60248201526b18d11052481393d50814d15560a21b604482015290519081900360640190fd5b600080611ba5614c56565b9150915080821115611c0a578082036000611bd284611bcc84670de0b6b3a76400006144f6565b906144ab565b609954609e54919250611c07916001600160a01b039182169116611c02670de0b6b3a7640000611bcc89876144f6565b61454f565b50505b80611c1b6064611bcc8560686144f6565b11611c575760405162461bcd60e51b81526004018080602001828103825260288152602001806158fc6028913960400191505060405180910390fd5b609d60009054906101000a90046001600160a01b03166001600160a01b0316638936a91f6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611ca757600080fd5b505af1158015611cbb573d6000803e3d6000fd5b50505050609c60009054906101000a90046001600160a01b03166001600160a01b0316638936a91f6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611d0f57600080fd5b505af1158015611d23573d6000803e3d6000fd5b5050609f54609d54609c546040805163e6a4390560e01b81526001600160a01b03938416600482015291831660248301525191909216935063e6a4390592506044808301926020929190829003018186803b158015611d8157600080fd5b505afa158015611d95573d6000803e3d6000fd5b505050506040513d6020811015611dab57600080fd5b5051609b80546001600160a01b0319166001600160a01b03928316179081905516611e7857609f54609c54609d54604080516364e329cb60e11b81526001600160a01b039384166004820152918316602483015251919092169163c9c653969160448083019260209291908290030181600087803b158015611e2c57600080fd5b505af1158015611e40573d6000803e3d6000fd5b505050506040513d6020811015611e5657600080fd5b5051609b80546001600160a01b0319166001600160a01b039092169190911790555b609954604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015611ec357600080fd5b505afa158015611ed7573d6000803e3d6000fd5b505050506040513d6020811015611eed57600080fd5b5051609954604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015611f4057600080fd5b505afa158015611f54573d6000803e3d6000fd5b505050506040513d6020811015611f6a57600080fd5b505160a95460408051637bb53c2d60e11b815290519293506103e8926000926001600160a01b03169163f76a785a91600480830192602092919082900301818787803b158015611fb957600080fd5b505af1158015611fcd573d6000803e3d6000fd5b505050506040513d6020811015611fe357600080fd5b50516040805163d49e77cd60e01b815290516001600160a01b039092169163d49e77cd916004808201926020929091908290030181600087803b15801561202957600080fd5b505af115801561203d573d6000803e3d6000fd5b505050506040513d602081101561205357600080fd5b505190506000612069612710611bcc87866144f6565b9050600061207d612710611bcc87876144f6565b609954909150612097906001600160a01b0316848461454f565b609a546120ae906001600160a01b0316848361454f565b609954609d546120cf916001600160a01b039081169116611c028986614dc8565b609a54609c546120f0916001600160a01b039081169116611c028885614dc8565b609d54609b5460408051630f59a7e360e21b81526001600160a01b03928316600482015290519190921691633d669f8c91602480830192600092919082900301818387803b15801561214157600080fd5b505af1158015612155573d6000803e3d6000fd5b5050609c54609b5460408051630f59a7e360e21b81526001600160a01b0392831660048201529051919092169350633d669f8c9250602480830192600092919082900301818387803b1580156121aa57600080fd5b505af11580156121be573d6000803e3d6000fd5b505050506121d58186614dc890919063ffffffff16565b609c54609b54604080516370a0823160e01b81526001600160a01b039283166004820152905191909216916370a08231916024808301926020929190829003018186803b15801561222557600080fd5b505afa158015612239573d6000803e3d6000fd5b505050506040513d602081101561224f57600080fd5b5051146122a3576040805162461bcd60e51b815260206004820152601f60248201527f5061697220646964206e6f74207265636965766520656e6f7567682044414900604482015290519081900360640190fd5b6122ad8683614dc8565b609d54609b54604080516370a0823160e01b81526001600160a01b039283166004820152905191909216916370a08231916024808301926020929190829003018186803b1580156122fd57600080fd5b505afa158015612311573d6000803e3d6000fd5b505050506040513d602081101561232757600080fd5b50511461237b576040805162461bcd60e51b815260206004820181905260248201527f5061697220646964206e6f74207265636965766520656e6f75676820434f5245604482015290519081900360640190fd5b609b54604080516318160ddd60e01b815290516001600160a01b039092169182916318160ddd916004808301926020929190829003018186803b1580156123c157600080fd5b505afa1580156123d5573d6000803e3d6000fd5b505050506040513d60208110156123eb57600080fd5b5051156124295760405162461bcd60e51b815260040180806020018281038252602b815260200180615a33602b913960400191505060405180910390fd5b604080516335313c2160e11b815230600482015290516001600160a01b03831691636a6278429160248083019260209291908290030181600087803b15801561247157600080fd5b505af1158015612485573d6000803e3d6000fd5b505050506040513d602081101561249b57600080fd5b5050604080516318160ddd60e01b815290516000916001600160a01b038416916318160ddd91600480820192602092909190829003018186803b1580156124e157600080fd5b505afa1580156124f5573d6000803e3d6000fd5b505050506040513d602081101561250b57600080fd5b50511161255f576040805162461bcd60e51b815260206004820152601860248201527f5765206469646e27742063726561746520746f6b656e73210000000000000000604482015290519081900360640190fd5b604080516370a0823160e01b815230600482015290516001600160a01b038316916370a08231916024808301926020929190829003018186803b1580156125a557600080fd5b505afa1580156125b9573d6000803e3d6000fd5b505050506040513d60208110156125cf57600080fd5b505160a181905560a2546125ef91611bcc90670de0b6b3a76400006144f6565b60a381905561262f5760405162461bcd60e51b81526004018080602001828103825260298152602001806159b56029913960400191505060405180910390fd5b60a960009054906101000a90046001600160a01b03166001600160a01b031663242c29296040518163ffffffff1660e01b815260040160206040518083038186803b15801561267d57600080fd5b505afa158015612691573d6000803e3d6000fd5b505050506040513d60208110156126a757600080fd5b5051609b5460408051632961046560e21b81526001600160a01b0392831660048201528151929093169263a584119492602480830193928290030181600087803b1580156126f457600080fd5b505af1158015612708573d6000803e3d6000fd5b505050506040513d604081101561271e57600080fd5b505060a9805460ff60a81b1916600160a81b179055505050505050505050565b7382810e81cad10b8032d39758c8dba3ba47ad7092331480612773575073c91fe1ee441402d854b8f22f94ddf6661816963633145b806127885750609e546001600160a01b031633145b6127cf576040805162461bcd60e51b81526020600482015260136024820152722623a29d102932b8bab4b932b99030b236b4b760691b604482015290519081900360640190fd5b60a954600160b01b900460ff16151560011461282b576040805162461bcd60e51b81526020600482015260166024820152751311d1480e881311d1481a5cdb89dd081c185d5cd95960521b604482015290519081900360640190fd5b600061284260ab5442614dc890919063ffffffff16565b60ab549091506128529082614cb7565b60aa555060a9805460ff60b01b19169055565b600061287e60ac5460aa54614cb790919063ffffffff16565b4211905090565b60ab5481565b7382810e81cad10b8032d39758c8dba3ba47ad70923314806128c0575073c91fe1ee441402d854b8f22f94ddf6661816963633145b806128d55750609e546001600160a01b031633145b61291c576040805162461bcd60e51b81526020600482015260136024820152722623a29d102932b8bab4b932b99030b236b4b760691b604482015290519081900360640190fd5b601881111561292a57600080fd5b61294261293982610e106144f6565b60ac5490614cb7565b60ac5550565b600080600080612956614c56565b91509150808214156129835761296d8560026144ab565b6129788660026144ab565b935093505050612a12565b808211156129cf578082036001810186116129a75760008694509450505050612a12565b8086036129b96002611bcc8484614cb7565b94506129c68160026144ab565b95505050612a0f565b8181036001810186116129eb5785600094509450505050612a12565b8086036129fd6002611bcc8484614cb7565b9550612a0a8160026144ab565b945050505b50505b915091565b60a56020526000908152604090205460ff1681565b60a954600160a01b900460ff1681565b612a446142d7565b6065546001600160a01b03908116911614612a94576040805162461bcd60e51b81526020600482018190526024820152600080516020615995833981519152604482015290519081900360640190fd5b609a5473a478c2975ab1ea89e8196811f51a7b7ade33eb1190612ac1906001600160a01b0316828561454f565b600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015612afd57600080fd5b505afa158015612b11573d6000803e3d6000fd5b505050506040513d6060811015612b2757600080fd5b5080516020909101516001600160701b0391821693501690506000612b4d8684846146b1565b6040805163022c0d9f60e01b815260006004820181905260248201849052306044830152608060648301526084820181905291519293506001600160a01b0387169263022c0d9f9260c48084019391929182900301818387803b158015610c9957600080fd5b612bbb6142d7565b6065546001600160a01b03908116911614612c0b576040805162461bcd60e51b81526020600482018190526024820152600080516020615995833981519152604482015290519081900360640190fd5b612c29620151806117df60ac5460aa54614cb790919063ffffffff16565b4211612c3457600080fd5b60405133904790600081818185875af1925050503d80600081146118f2576040519150601f19603f3d011682016040523d82523d6000602084013e6118f2565b612c7c6142d7565b6065546001600160a01b03908116911614612ccc576040805162461bcd60e51b81526020600482018190526024820152600080516020615995833981519152604482015290519081900360640190fd5b609d80546001600160a01b0319166001600160a01b0392909216919091179055565b60a76020526000908152604090205481565b7382810e81cad10b8032d39758c8dba3ba47ad7092331480612d35575073c91fe1ee441402d854b8f22f94ddf6661816963633145b80612d4a5750609e546001600160a01b031633145b612d91576040805162461bcd60e51b81526020600482015260136024820152722623a29d102932b8bab4b932b99030b236b4b760691b604482015290519081900360640190fd5b60a954600160b01b900460ff1615612df0576040805162461bcd60e51b815260206004820152601860248201527f4c4745203a204c474520416c7265616479207061757365640000000000000000604482015290519081900360640190fd5b60aa805460ab55600019905560a9805460ff60b01b1916600160b01b179055565b609e546001600160a01b031681565b60975415612e68576040805162461bcd60e51b815260206004820152601060248201526f10d3d491481311d14e881313d0d2d15160821b604482015290519081900360640190fd5b6001609755609b54612e86906001600160a01b031633611c02614b06565b6000609755565b609a546001600160a01b031681565b60975415612ee4576040805162461bcd60e51b815260206004820152601060248201526f10d3d491481311d14e881313d0d2d15160821b604482015290519081900360640190fd5b6001609781905560a954600160a01b900460ff16151514612f41576040805162461bcd60e51b81526020600482015260126024820152711311d1480e88111a591b89dd081cdd185c9d60721b604482015290519081900360640190fd5b60a954600160a81b900460ff1615612f8a5760405162461bcd60e51b81526004018080602001828103825260238152602001806158d96023913960400191505060405180910390fd5b612f92612865565b15612fd5576040805162461bcd60e51b815260206004820152600e60248201526d2623a2901d1024b99037bb32b91760911b604482015290519081900360640190fd5b600034116130145760405162461bcd60e51b815260040180806020018281038252602e81526020018061587e602e913960400191505060405180910390fd5b609860009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561306457600080fd5b505af1158015613078573d6000803e3d6000fd5b5050609954600093506130a99250670de0b6b3a76400009150611bcc903490610a6d906001600160a01b03166116f1565b33600090815260a760205260409020549091506130c69082614cb7565b33600090815260a760209081526040808320939093556098546001600160a01b0316825260a8905220546130fa9034614cb7565b6098546001600160a01b0316600090815260a8602052604090205561311d614e0a565b506000609755565b61312d6142d7565b6065546001600160a01b0390811691161461317d576040805162461bcd60e51b81526020600482018190526024820152600080516020615995833981519152604482015290519081900360640190fd5b6001600160a01b0381166131c25760405162461bcd60e51b81526004018080602001828103825260268152602001806158386026913960400191505060405180910390fd5b6065546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3606580546001600160a01b0319166001600160a01b0392909216919091179055565b60975415613266576040805162461bcd60e51b815260206004820152601060248201526f10d3d491481311d14e881313d0d2d15160821b604482015290519081900360640190fd5b6001609781905560a954600160a01b900460ff161515146132c3576040805162461bcd60e51b81526020600482015260126024820152711311d1480e88111a591b89dd081cdd185c9d60721b604482015290519081900360640190fd5b60a954600160a81b900460ff161561330c5760405162461bcd60e51b81526004018080602001828103825260238152602001806158d96023913960400191505060405180910390fd5b613314612865565b15613357576040805162461bcd60e51b815260206004820152600e60248201526d2623a2901d1024b99037bb32b91760911b604482015290519081900360640190fd5b600081116133965760405162461bcd60e51b815260040180806020018281038252602e81526020018061587e602e913960400191505060405180910390fd5b60606000836001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156133d357600080fd5b505afa9250505080156133f857506040513d60208110156133f357600080fd5b505160015b6134015761346a565b50836001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561343b57600080fd5b505afa15801561344f573d6000803e3d6000fd5b505050506040513d602081101561346557600080fd5b505190505b6001600160a01b03811615613b3f576000846001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156134b457600080fd5b505afa1580156134c8573d6000803e3d6000fd5b505050506040513d60208110156134de57600080fd5b5051609f546040805163e6a4390560e01b81526001600160a01b0380851660048301528681166024830152915193945060009384939092169163e6a4390591604480820192602092909190829003018186803b15801561353d57600080fd5b505afa158015613551573d6000803e3d6000fd5b505050506040513d602081101561356757600080fd5b505160a0546040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151938216949094141594506000938493919092169163e6a43905916044808301926020929190829003018186803b1580156135cd57600080fd5b505afa1580156135e1573d6000803e3d6000fd5b505050506040513d60208110156135f757600080fd5b50516001600160a01b03161415905081158015613612575080155b15613664576040805162461bcd60e51b815260206004820181905260248201527f4c4745203a204c5020546f6b656e2074797065206e6f74206163636570746564604482015290519081900360640190fd5b61367087338989614eb8565b6000846001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156136bf57600080fd5b505afa1580156136d3573d6000803e3d6000fd5b505050506040513d60208110156136e957600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038716916370a08231916024808301926020929190829003018186803b15801561373757600080fd5b505afa15801561374b573d6000803e3d6000fd5b505050506040513d602081101561376157600080fd5b50516040805163226bf2d160e21b815230600482015281519293506001600160a01b038c16926389afcb44926024808401939192918290030181600087803b1580156137ac57600080fd5b505af11580156137c0573d6000803e3d6000fd5b505050506040513d60408110156137d657600080fd5b5050604080516370a0823160e01b815230600482015290516000916001600160a01b038916916370a0823191602480820192602092909190829003018186803b15801561382257600080fd5b505afa158015613836573d6000803e3d6000fd5b505050506040513d602081101561384c57600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038916916370a08231916024808301926020929190829003018186803b15801561389a57600080fd5b505afa1580156138ae573d6000803e3d6000fd5b505050506040513d60208110156138c457600080fd5b50516098549091506000906001600160a01b038a81169116146138fb576138f6896138ef8588614dc8565b6000615023565b613905565b6139058386614dc8565b6098549091506000906001600160a01b038a81169116146139335761392e896138ef8588614dc8565b61393d565b61393d8386614dc8565b609854604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561398e57600080fd5b505afa1580156139a2573d6000803e3d6000fd5b505050506040513d60208110156139b857600080fd5b50516098546001600160a01b0316600090815260a86020526040902054909150808211613a15576040805162461bcd60e51b8152602060048083019190915260248201526339b4b91760e11b604482015290519081900360640190fd5b6000613a218585614cb7565b6098546001600160a01b0316600090815260a860205260409020549091508390613a4b9083614cb7565b1115613a87576040805162461bcd60e51b81526020600480830191909152602482015263456b686d60e01b604482015290519081900360640190fd5b6098546001600160a01b03908116600090815260a8602052604081208590556099549091613ac991670de0b6b3a764000091611bcc918691610a6d91166116f1565b33600090815260a76020526040902054909150613ae69082614cb7565b33600081815260a7602090815260409182902093909355805184815292830191909152805160008051602061585e8339815191529281900390910190a1613b2b614e0a565b5050505050505050505050505050506142bf565b6001600160a01b038416600090815260a6602052604090205460ff168015613b6e57506001600160a01b038116155b156140e6576099546001600160a01b0385811691161415613cf957609954613ba1906001600160a01b0316333086614eb8565b609954604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015613bec57600080fd5b505afa158015613c00573d6000803e3d6000fd5b505050506040513d6020811015613c1657600080fd5b50516099546001600160a01b0316600090815260a86020526040902054909150811015613c83576040805162461bcd60e51b81526020600482015260166024820152754469646e27742067657420656e6f75676820434f524560501b604482015290519081900360640190fd5b33600090815260a76020526040902054613c9d9085614cb7565b33600081815260a760209081526040808320949094556099546001600160a01b0316825260a8815290839020849055825187815290810191909152815160008051602061585e833981519152929181900390910190a1506140e1565b609a546001600160a01b0385811691161415613eed57609a54613d27906001600160a01b0316333086614eb8565b609a54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015613d7257600080fd5b505afa158015613d86573d6000803e3d6000fd5b505050506040513d6020811015613d9c57600080fd5b5051609a546001600160a01b0316600090815260a86020526040902054909150613dc69085614cb7565b811015613e12576040805162461bcd60e51b81526020600482015260156024820152744469646e27742067657420656e6f7567682044414960581b604482015290519081900360640190fd5b609a54600090613e4090613e2e906001600160a01b03166116f1565b611bcc87670de0b6b3a76400006144f6565b90506000613e72670de0b6b3a7640000611bcc84610a6d609960009054906101000a90046001600160a01b03166116f1565b33600090815260a76020526040902054909150613e8f9082614cb7565b33600081815260a76020908152604080832094909455609a546001600160a01b0316825260a8815290839020869055825184815290810191909152815160008051602061585e833981519152929181900390910190a15050506140e1565b6098546001600160a01b03858116911614156140aa57609854613f1b906001600160a01b0316333086614eb8565b609854604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015613f6657600080fd5b505afa158015613f7a573d6000803e3d6000fd5b505050506040513d6020811015613f9057600080fd5b50516098546001600160a01b0316600090815260a86020526040902054909150613fba9085614cb7565b811015614007576040805162461bcd60e51b8152602060048201526016602482015275088d2c8dc4ee840cecae840cadcdeeaced040ae8aa8960531b604482015290519081900360640190fd5b6098546001600160a01b03908116600090815260a860205260408120839055609954909161404991670de0b6b3a764000091611bcc918991610a6d91166116f1565b33600090815260a760205260409020549091506140669082614cb7565b33600081815260a7602090815260409182902093909355805184815292830191909152805160008051602061585e8339815191529281900390910190a150506140e1565b60405162461bcd60e51b8152600401808060200182810382526034815260200180615a5e6034913960400191505060405180910390fd5b6142b4565b60006140f485856001615023565b609854604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561414557600080fd5b505afa158015614159573d6000803e3d6000fd5b505050506040513d602081101561416f57600080fd5b50516098546001600160a01b0316600090815260a860205260409020549091508082116141cc576040805162461bcd60e51b8152602060048083019190915260248201526339b4b91760e11b604482015290519081900360640190fd5b816141d78285614cb7565b1115614213576040805162461bcd60e51b81526020600480830191909152602482015263456b686d60e01b604482015290519081900360640190fd5b6098546001600160a01b03908116600090815260a860205260408120849055609954909161425591670de0b6b3a764000091611bcc918891610a6d91166116f1565b33600090815260a760205260409020549091506142729082614cb7565b33600081815260a7602090815260409182902093909355805184815292830191909152805160008051602061585e8339815191529281900390910190a1505050505b6142bc614e0a565b50505b50506000609755565b609d546001600160a01b031681565b3390565b609f546098546040805163e6a4390560e01b81526001600160a01b038581166004830152928316602482015290516000938493169163e6a43905916044808301926020929190829003018186803b15801561433557600080fd5b505afa158015614349573d6000803e3d6000fd5b505050506040513d602081101561435f57600080fd5b505190506001600160a01b03811661437b576000915050611764565b6000819050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156143bc57600080fd5b505afa1580156143d0573d6000803e3d6000fd5b505050506040513d60608110156143e657600080fd5b50805160209182015160985460408051630dfe168160e01b815290516001600160701b0394851697509390921694506001600160a01b039081169390871692630dfe1681926004808201939291829003018186803b15801561444757600080fd5b505afa15801561445b573d6000803e3d6000fd5b505050506040513d602081101561447157600080fd5b50516001600160a01b0316141561449c576144916305f5e10082846146b1565b945050505050611764565b6144916305f5e10083836146b1565b60006144ed83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506155a2565b90505b92915050565b600082614505575060006144f0565b8282028284828161451257fe5b04146144ed5760405162461bcd60e51b81526004018080602001828103825260218152602001806159746021913960400191505060405180910390fd5b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106145cc5780518252601f1990920191602091820191016145ad565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461462e576040519150601f19603f3d011682016040523d82523d6000602084013e614633565b606091505b5091509150818015614661575080511580614661575080806020019051602081101561465e57600080fd5b50515b6146aa576040805162461bcd60e51b81526020600482015260156024820152741311d14cce881514905394d1915497d19052531151605a1b604482015290519081900360640190fd5b5050505050565b60008084116146f15760405162461bcd60e51b815260040180806020018281038252602b815260200180615a92602b913960400191505060405180910390fd5b6000831180156147015750600082115b61473c5760405162461bcd60e51b81526004018080602001828103825260288152602001806159246028913960400191505060405180910390fd5b600061474a856103e56144f6565b9050600061475882856144f6565b9050600061476c836117df886103e86144f6565b905080828161477757fe5b04979650505050505050565b6001600160a01b03808316600081815260a460209081526040808320609f54609854835163e6a4390560e01b81526004810197909752871660248701529151939590948694929091169263e6a4390592604480840193829003018186803b1580156147ed57600080fd5b505afa158015614801573d6000803e3d6000fd5b505050506040513d602081101561481757600080fd5b505160408051630dfe168160e01b8152905191925060009182916001600160a01b03851691630dfe168191600480820192602092909190829003018186803b15801561486257600080fd5b505afa158015614876573d6000803e3d6000fd5b505050506040513d602081101561488c57600080fd5b50516098546001600160a01b039081169116141561492557826001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156148dd57600080fd5b505afa1580156148f1573d6000803e3d6000fd5b505050506040513d606081101561490757600080fd5b5080516020909101516001600160701b0391821693501690506149a2565b826001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561495e57600080fd5b505afa158015614972573d6000803e3d6000fd5b505050506040513d606081101561498857600080fd5b5080516020909101516001600160701b0390811693501690505b60006149b7670de0b6b3a764000084846146b1565b8554601687015491925060ff90811691600091161515600114156149ee578160ff166013146149e9575060ff60018201165b614a01565b60ff821615614a01575060ff6000198201165b6000876001018260148110614a1257fe5b0154905089614a6a57614a2d612710611bcc83613a986144f6565b8410614a6a5760405162461bcd60e51b815260040180806020018281038252602881526020018061594c6028913960400191505060405180910390fd5b614a8c886001018460ff1660148110614a7f57fe5b015460158a015490614dc8565b6015890155836001890160ff851660148110614aa457fe5b01556015880154614ab59085614cb7565b6015890155875460ff198116600160ff92831601821617808a55601391161115614af257875460ff19908116895560168901805490911660011790555b505050601590940154979650505050505050565b33600090815260a7602052604081205460a954600160a81b900460ff161515600114614b635760405162461bcd60e51b8152600401808060200182810382526027815260200180615a0c6027913960400191505060405180910390fd5b33600090815260a5602052604090205460ff1615614bc0576040805162461bcd60e51b81526020600482015260156024820152741311d1480e88105b1c9958591e4818db185a5b5959605a1b604482015290519081900360640190fd5b60008111614c15576040805162461bcd60e51b815260206004820152601b60248201527f4c4745203a204e6f7468696e6720746f20626520636c61696d65640000000000604482015290519081900360640190fd5b614c36670de0b6b3a7640000611bcc60a354846144f690919063ffffffff16565b33600090815260a560205260409020805460ff1916600117905592915050565b6099546001600160a01b03908116600081815260a8602052604080822054609a54909416825281205490928392909190614c9390610a5f906142db565b609a54909450614caf90610a8f906001600160a01b03166142db565b925050509091565b6000828201838110156144ed576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b303b1590565b600054610100900460ff1680614d305750614d30614d11565b80614d3e575060005460ff16155b614d795760405162461bcd60e51b815260040180806020018281038252602e8152602001806159de602e913960400191505060405180910390fd5b600054610100900460ff16158015614da4576000805460ff1961ff0019909116610100171660011790555b614dac615644565b614db46156e4565b80156116b0576000805461ff001916905550565b60006144ed83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506157dd565b609a546001600160a01b0316600090815260a460205260409020601701544314614e6257609a80546001600160a01b03908116600090815260a460205260408120436017909101559154614e6092911690614783565b505b6099546001600160a01b0316600090815260a460205260409020601701544314610a1a57609980546001600160a01b03908116600090815260a4602052604081204360179091015591546116b092911690614783565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b60208310614f3d5780518252601f199092019160209182019101614f1e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614f9f576040519150601f19603f3d011682016040523d82523d6000602084013e614fa4565b606091505b5091509150818015614fd2575080511580614fd25750808060200190516020811015614fcf57600080fd5b50515b610e1a576040805162461bcd60e51b815260206004820152601a60248201527f4c4745333a205452414e534645525f46524f4d5f4641494c4544000000000000604482015290519081900360640190fd5b609a546000906001600160a01b0385811691161415615077576040805162461bcd60e51b815260206004820152600b60248201526a4e6f2073656c6c2044414960a81b604482015290519081900360640190fd5b609f546098546040805163e6a4390560e01b81526001600160a01b03888116600483015292831660248201529051600093929092169163e6a4390591604480820192602092909190829003018186803b1580156150d357600080fd5b505afa1580156150e7573d6000803e3d6000fd5b505050506040513d60208110156150fd57600080fd5b505190506001600160a01b038116615153576040805162461bcd60e51b81526020600482015260146024820152732ab739bab83837b93a32b21039b434ba31b7b4b760611b604482015290519081900360640190fd5b600085905060008290506000826001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156151ac57600080fd5b505afa1580156151c0573d6000803e3d6000fd5b505050506040513d60208110156151d657600080fd5b5051905085156151f1576151ec8833868a614eb8565b6151fc565b6151fc88858961454f565b6000836001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561524b57600080fd5b505afa15801561525f573d6000803e3d6000fd5b505050506040513d602081101561527557600080fd5b505160408051630240bc6b60e21b8152905191925060009182916001600160a01b03871691630902f1ac91600480820192606092909190829003018186803b1580156152c057600080fd5b505afa1580156152d4573d6000803e3d6000fd5b505050506040513d60608110156152ea57600080fd5b5080516020918201516040805180820190915260048152634675717160e01b938101939093526001600160701b03918216945016915060009061533090859087906157dd565b90508b6001600160a01b0316866001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561537557600080fd5b505afa158015615389573d6000803e3d6000fd5b505050506040513d602081101561539f57600080fd5b50516001600160a01b0316141561549e576153bb8184846146b1565b98506153cd6064611bcc84601e6144f6565b8910615420576040805162461bcd60e51b815260206004820152601c60248201527f546f6f206d75636820736c69707061676520696e2073656c6c696e6700000000604482015290519081900360640190fd5b6040805163022c0d9f60e01b8152600060048201819052602482018c9052306044830152608060648301526084820181905291516001600160a01b0389169263022c0d9f9260c4808201939182900301818387803b15801561548157600080fd5b505af1158015615495573d6000803e3d6000fd5b50505050615593565b6154a98183856146b1565b6040805163022c0d9f60e01b81526004810183905260006024820181905230604483015260806064830152608482018190529151929b506001600160a01b0389169263022c0d9f9260c48084019391929182900301818387803b15801561550f57600080fd5b505af1158015615523573d6000803e3d6000fd5b505050506155406064611bcc601e866144f690919063ffffffff16565b8910615593576040805162461bcd60e51b815260206004820152601c60248201527f546f6f206d75636820736c69707061676520696e2073656c6c696e6700000000604482015290519081900360640190fd5b50505050505050509392505050565b6000818361562e5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156155f35781810151838201526020016155db565b50505050905090810190601f1680156156205780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161563a57fe5b0495945050505050565b600054610100900460ff168061565d575061565d614d11565b8061566b575060005460ff16155b6156a65760405162461bcd60e51b815260040180806020018281038252602e8152602001806159de602e913960400191505060405180910390fd5b600054610100900460ff16158015614db4576000805460ff1961ff00199091166101001716600117905580156116b0576000805461ff001916905550565b600054610100900460ff16806156fd57506156fd614d11565b8061570b575060005460ff16155b6157465760405162461bcd60e51b815260040180806020018281038252602e8152602001806159de602e913960400191505060405180910390fd5b600054610100900460ff16158015615771576000805460ff1961ff0019909116610100171660011790555b600061577b6142d7565b606580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156116b0576000805461ff001916905550565b6000818484111561582f5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156155f35781810151838201526020016155db565b50505090039056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737341892ddb04331614cc8d0b2be5d92c744beb730ffd9677993a8813e339414dde4c4745203a20596f752073686f756c64206465706f73697420736f6d657468696e67206d6f7374206c696b656c79546f6f206d7563682057455448207374696c6c206c656674206f76657220696e2074686520636f6e74726163744c4745203a204c69717569646974792067656e65726174696f6e2066696e6973686564446576696174696f6e2066726f6d2063757272656e7420707269636520697320746f6f2068696768556e697377617056324c6962726172793a20494e53554646494349454e545f4c49515549444954594368616e676520746f6f206269672066726f6d206669727374207265636f72646564207072696365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724c502050657220556e697420436f6e74726962757465204d7573742062652061626f7665205a65726f436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a65644c4745203a204c69717569646974792067656e65726174696f6e206e6f742066696e6973686564536f6d65686f7720746f74616c20737570706c79206973206869676865722c2073616e697479206661696c556e737570706f7274656420546f6b656e204572726f722c20736f6d65686f77206f6e206e6f7420746f2073656c6c206c697374556e697377617056324c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e544c4745203a204c69717569646974792067656e65726174696f6e206f6e676f696e67a26469706673582212202a602b59438172e81bc04e7172ff78af85180a64078d75845567b5f5d368197d64736f6c634300060c0033
Deployed Bytecode Sourcemap
25432:33533:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27300:31;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;27300:31:0;;;;;;;;;;;;;;27518:30;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;54327:80;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54327:80:0;-1:-1:-1;;;;;54327:80:0;;:::i;:::-;;28497:250;;;;;;;;;;;;;:::i;26550:39::-;;;;;;;;;;;;;:::i;41451:449::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;44129:698;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44129:698:0;;;;;;;:::i;26135:31::-;;;;;;;;;;;;;:::i;49370:113::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49370:113:0;-1:-1:-1;;;;;49370:113:0;;:::i;27140:46::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27140:46:0;-1:-1:-1;;;;;27140:46:0;;:::i;:::-;;;;;;;;;;;;;;;;;;38175:243;;;;;;;;;;;;;:::i;27425:37::-;;;;;;;;;;;;;:::i;25833:19::-;;;;;;;;;;;;;:::i;25927:::-;;;;;;;;;;;;;:::i;9921:148::-;;;;;;;;;;;;;:::i;25884:36::-;;;;;;;;;;;;;:::i;43203:916::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43203:916:0;;;;;;;:::i;27242:49::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27242:49:0;-1:-1:-1;;;;;27242:49:0;;:::i;26462:29::-;;;;;;;;;;;;;:::i;27559:896::-;;;;;;;;;;;;;:::i;27367:23::-;;;;;;;;;;;;;:::i;26099:29::-;;;;;;;;;;;;;:::i;9279:79::-;;;;;;;;;;;;;:::i;27397:21::-;;;;;;;;;;;;;:::i;46281:410::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46281:410:0;-1:-1:-1;;;;;46281:410:0;;:::i;53860:247::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53860:247:0;-1:-1:-1;;;;;53860:247:0;;:::i;25807:19::-;;;;;;;;;;;;;:::i;49673:3761::-;;;;;;;;;;;;;:::i;55496:505::-;;;;;;;;;;;;;:::i;40776:135::-;;;;;;;;;;;;;:::i;27469:42::-;;;;;;;;;;;;;:::i;54647:375::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54647:375:0;;:::i;39130:1640::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39130:1640:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;27092:40;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27092:40:0;-1:-1:-1;;;;;27092:40:0;;:::i;27338:22::-;;;;;;;;;;;;;:::i;44835:694::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44835:694:0;;;;;;;:::i;54113:206::-;;;;;;;;;;;;;:::i;54415:84::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54415:84:0;-1:-1:-1;;;;;54415:84:0;;:::i;27193:42::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27193:42:0;-1:-1:-1;;;;;27193:42:0;;:::i;55030:458::-;;;;;;;;;;;;;:::i;26002:36::-;;;;;;;;;;;;;:::i;38058:109::-;;;;;;;;;;;;;:::i;25859:18::-;;;;;;;;;;;;;:::i;29019:764::-;;;:::i;10224:244::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10224:244:0;-1:-1:-1;;;;;10224:244:0;;:::i;29896:8118::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29896:8118:0;;;;;;;;:::i;25975:20::-;;;;;;;;;;;;;:::i;27300:31::-;;;-1:-1:-1;;;;;27300:31:0;;:::o;27518:30::-;;;;:::o;54327:80::-;9501:12;:10;:12::i;:::-;9491:6;;-1:-1:-1;;;;;9491:6:0;;;:22;;;9483:67;;;;;-1:-1:-1;;;9483:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9483:67:0;;;;;;;;;;;;;;;54387:4:::1;:12:::0;;-1:-1:-1;;;;;;54387:12:0::1;-1:-1:-1::0;;;;;54387:12:0;;;::::1;::::0;;;::::1;::::0;;54327:80::o;28497:250::-;9501:12;:10;:12::i;:::-;9491:6;;-1:-1:-1;;;;;9491:6:0;;;:22;;;9483:67;;;;;-1:-1:-1;;;9483:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9483:67:0;;;;;;;;;;;;;;;28553:10:::1;::::0;-1:-1:-1;;;28553:10:0;::::1;;;:19;28545:47;;;::::0;;-1:-1:-1;;;28545:47:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;28545:47:0;;;;;;;;;;;;;::::1;;28630:15;28605:22;:40:::0;28656:10:::1;:17:::0;;-1:-1:-1;;;;28656:17:0::1;-1:-1:-1::0;;;28656:17:0::1;::::0;;28702:4:::1;::::0;28686:21:::1;::::0;-1:-1:-1;;;;;28702:4:0::1;28686:15;:21::i;:::-;28734:3;::::0;28718:20:::1;::::0;-1:-1:-1;;;;;28734:3:0::1;28718:15;:20::i;:::-;28497:250::o:0;26550:39::-;;;;:::o;41451:449::-;41639:4;;-1:-1:-1;;;;;41639:4:0;;;41508:20;41625:19;;;:13;:19;;;;;;;41660:3;;;;;41646:18;;;;;41508:20;;;;;;41646:18;41691:59;;41716:33;;:27;:33::i;:::-;41691:20;:11;41707:3;41691:15;:20::i;:::-;:24;;:59::i;:::-;41827:3;;41676:74;;-1:-1:-1;41775:57:0;;41799:32;;-1:-1:-1;;;;;41827:3:0;41799:27;:32::i;:::-;41775:19;:10;41790:3;41775:14;:19::i;:57::-;41862:4;;41855:37;;;-1:-1:-1;;;41855:37:0;;41886:4;41855:37;;;;;;41761:71;;-1:-1:-1;;;;;;41862:4:0;;;;41855:22;;:37;;;;;;;;;;;;;;;41862:4;41855:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41855:37:0;41451:449;;;;41855:37;41451:449;-1:-1:-1;;;41451:449:0:o;44129:698::-;9501:12;:10;:12::i;:::-;9491:6;;-1:-1:-1;;;;;9491:6:0;;;:22;;;9483:67;;;;;-1:-1:-1;;;9483:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9483:67:0;;;;;;;;;;;;;;;44345:4:::1;::::0;44262:42:::1;::::0;44332:45:::1;::::0;-1:-1:-1;;;;;44345:4:0::1;44262:42:::0;44366:10;44332:12:::1;:45::i;:::-;44415:19;44436:20:::0;44462:4:::1;-1:-1:-1::0;;;;;44462:16:0::1;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;44462:18:0;;::::1;::::0;;::::1;::::0;-1:-1:-1;;;;;44414:66:0;;::::1;::::0;-1:-1:-1;44414:66:0::1;::::0;-1:-1:-1;44491:14:0::1;44508:51;44521:10:::0;44414:66;;44508:12:::1;:51::i;:::-;44570:39;::::0;;-1:-1:-1;;;44570:39:0;;::::1;::::0;::::1;::::0;;;44588:1:::1;44570:39:::0;;;;;;44599:4:::1;44570:39:::0;;;;;;;;;;;;;;;;;44491:68;;-1:-1:-1;;;;;;44570:9:0;::::1;::::0;::::1;::::0;:39;;;;;44588:1;;44570:39;;;;;;44588:1;44570:9;:39;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;44648:3:0::1;::::0;44641:36:::1;::::0;;-1:-1:-1;;;44641:36:0;;44671:4:::1;44641:36;::::0;::::1;::::0;;;-1:-1:-1;;;;;44648:3:0;;::::1;::::0;-1:-1:-1;44641:21:0::1;::::0;-1:-1:-1;44641:36:0;;;;;::::1;::::0;;;;;;;;;44648:3;44641:36;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;44641:36:0;44634:3:::1;::::0;-1:-1:-1;;;;;44634:3:0;;::::1;44620:18;::::0;;;:13:::1;44641:36;44620:18:::0;;;;;;;;:57;;;;44718:4:::1;::::0;44711:37;;-1:-1:-1;;;44711:37:0;;44742:4:::1;44711:37;::::0;::::1;::::0;;;44718:4;::::1;::::0;44711:22:::1;::::0;:37;;;;;;;;;;44718:4;44711:37;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;44711:37:0;44703:4:::1;::::0;-1:-1:-1;;;;;44703:4:0::1;44689:19;::::0;;;:13:::1;44711:37;44689:19:::0;;;;:59;44768:25;;::::1;;44760:59;;;::::0;;-1:-1:-1;;;44760:59:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;44760:59:0;;;;;;;;;;;;;::::1;;9561:1;;;;44129:698:::0;;:::o;26135:31::-;;;-1:-1:-1;;;;;26135:31:0;;:::o;49370:113::-;9501:12;:10;:12::i;:::-;9491:6;;-1:-1:-1;;;;;9491:6:0;;;:22;;;9483:67;;;;;-1:-1:-1;;;9483:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9483:67:0;;;;;;;;;;;;;;;49437:38:::1;49463:5;49470:4;49437:25;:38::i;:::-;;49370:113:::0;:::o;27140:46::-;;;;;;;;;;;;;;;:::o;38175:243::-;25622:6;;:11;25614:40;;;;;-1:-1:-1;;;25614:40:0;;;;;;;;;;;;-1:-1:-1;;;25614:40:0;;;;;;;;;;;;;;;25674:1;25665:6;:10;38241:11:::1;::::0;:30:::1;::::0;;-1:-1:-1;;;38241:30:0;;;;38225:13:::1;::::0;-1:-1:-1;;;;;38241:11:0::1;::::0;:28:::1;::::0;:30:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;38225:13;38241:11;:30;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;38241:30:0;38297:21:::1;::::0;38282:62:::1;::::0;;-1:-1:-1;;;38282:62:0;;-1:-1:-1;;;;;38282:62:0;;::::1;;::::0;::::1;::::0;-1:-1:-1;;38282:62:0;;;;;;38241:30;;-1:-1:-1;38297:21:0;::::1;::::0;38282:45:::1;::::0;:62;;;;;38241:30:::1;::::0;38282:62;;;;;;;;38297:21:::1;::::0;38282:62;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;;;;;;38355:28:0;::::1;;38384:10;38396:1;38399:10;:8;:10::i;:::-;38355:55;;;;;;;;;;;;;-1:-1:-1::0;;;;;38355:55:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;25751:1:0;25742:6;:10;-1:-1:-1;;;38175:243:0:o;27425:37::-;;;;:::o;25833:19::-;;;-1:-1:-1;;;;;25833:19:0;;:::o;25927:::-;;;-1:-1:-1;;;;;25927:19:0;;:::o;9921:148::-;9501:12;:10;:12::i;:::-;9491:6;;-1:-1:-1;;;;;9491:6:0;;;:22;;;9483:67;;;;;-1:-1:-1;;;9483:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9483:67:0;;;;;;;;;;;;;;;10012:6:::1;::::0;9991:40:::1;::::0;10028:1:::1;::::0;-1:-1:-1;;;;;10012:6:0::1;::::0;9991:40:::1;::::0;10028:1;;9991:40:::1;10042:6;:19:::0;;-1:-1:-1;;;;;;10042:19:0::1;::::0;;9921:148::o;25884:36::-;;;-1:-1:-1;;;;;25884:36:0;;:::o;43203:916::-;9501:12;:10;:12::i;:::-;9491:6;;-1:-1:-1;;;;;9491:6:0;;;:22;;;9483:67;;;;;-1:-1:-1;;;9483:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9483:67:0;;;;;;;;;;;;;;;43302:20:::1;43324:19:::0;43347:33:::1;:31;:33::i;:::-;43301:79:::0;;-1:-1:-1;43301:79:0;-1:-1:-1;43301:79:0;43399:28:::1;43301:79:::0;43416:10;43399:16:::1;:28::i;:::-;:43;;43391:76;;;::::0;;-1:-1:-1;;;43391:76:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;43391:76:0;;;;;;;;;;;;;::::1;;43599:4;::::0;43515:42:::1;::::0;43586:45:::1;::::0;-1:-1:-1;;;;;43599:4:0::1;43515:42:::0;43620:10;43586:12:::1;:45::i;:::-;43670:20;43692::::0;43718:4:::1;-1:-1:-1::0;;;;;43718:16:0::1;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;43718:18:0;;::::1;::::0;;::::1;::::0;-1:-1:-1;;;;;43669:67:0;;::::1;::::0;-1:-1:-1;43669:67:0::1;::::0;-1:-1:-1;43747:15:0::1;43765:52;43778:10:::0;43669:67;;43765:12:::1;:52::i;:::-;43828:40;::::0;;-1:-1:-1;;;43828:40:0;;::::1;::::0;::::1;::::0;;;43847:1:::1;43828:40:::0;;;;;;43858:4:::1;43828:40:::0;;;;;;;;;;;;;;;;;43747:70;;-1:-1:-1;;;;;;43828:9:0;::::1;::::0;::::1;::::0;:40;;;;;43847:1;;43828:40;;;;;;43847:1;43828:9;:40;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;43915:4:0::1;::::0;-1:-1:-1;;;;;43915:4:0::1;43901:19;::::0;;;:13:::1;:19;::::0;;;;;:32:::1;::::0;-1:-1:-1;43901:19:0;-1:-1:-1;43925:7:0;43901:23:::1;:32::i;:::-;43893:4;::::0;-1:-1:-1;;;;;43893:4:0;;::::1;43879:19;::::0;;;:13:::1;:19;::::0;;;;;;;;:54;;;;43973:4:::1;::::0;43966:37;;-1:-1:-1;;;43966:37:0;;43997:4:::1;43966:37;::::0;::::1;::::0;;;43973:4;::::1;::::0;43966:22:::1;::::0;:37;;;;;;;;;;43973:4;43966:37;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;43966:37:0;43958:4:::1;::::0;-1:-1:-1;;;;;43958:4:0::1;43944:19;::::0;;;:13:::1;43966:37;43944:19:::0;;;;:59;44023:27;;::::1;;44015:61;;;::::0;;-1:-1:-1;;;44015:61:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;44015:61:0;;;;;;;;;;;;;::::1;;44092:19;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;9561:1;;;;;;43203:916:::0;;:::o;27242:49::-;;;;;;;;;;;;;:::o;26462:29::-;;;;:::o;27559:896::-;5510:12;;;;;;;;:31;;;5526:15;:13;:15::i;:::-;5510:47;;;-1:-1:-1;5546:11:0;;;;5545:12;5510:47;5502:106;;;;-1:-1:-1;;;5502:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5617:19;5640:12;;;;;;5639:13;5659:83;;;;5688:12;:19;;-1:-1:-1;;;;5688:19:0;;;;;5716:18;5703:4;5716:18;;;5659:83;27619:10:::1;27641:42;27619:65;27611:74;;;::::0;::::1;;27696:35;:33;:35::i;:::-;-1:-1:-1::0;;27744:22:0::1;:36:::0;27850:6:::1;27832:15;:24:::0;27869:3:::1;:48:::0;;-1:-1:-1;;;;;;27869:48:0;;::::1;27875:42;27869:48;::::0;;;;27928:4:::1;:49:::0;;;::::1;27935:42;27928:49;::::0;;27988:4:::1;:49:::0;;;::::1;27995:42;27988:49;::::0;;28048:14:::1;:59:::0;;;::::1;28065:42;28048:59;::::0;;28118:16:::1;:61:::0;;;::::1;28137:42;28118:61;::::0;;28190:13:::1;:58:::0;;;::::1;28206:42;28190:58;::::0;;28259:11:::1;:70:::0;;;;::::1;28286:42;28259:70;::::0;;;-1:-1:-1;;;;;28360:3:0;;::::1;-1:-1:-1::0;28346:18:0;;;:13:::1;:18;::::0;;;;;:25;;-1:-1:-1;;28346:25:0;;::::1;27869:48:::0;28346:25;;::::1;::::0;;;28396:4;;;::::1;28382:19:::0;;;;;:26;;;::::1;::::0;::::1;::::0;;28433:4;;;;::::1;28419:19:::0;;;;;;:26;;;;::::1;;::::0;;5760:57;;;;5804:5;5789:20;;-1:-1:-1;;5789:20:0;;;5760:57;27559:896;:::o;27367:23::-;;;-1:-1:-1;;;27367:23:0;;;;;:::o;26099:29::-;;;-1:-1:-1;;;;;26099:29:0;;:::o;9279:79::-;9344:6;;-1:-1:-1;;;;;9344:6:0;9279:79;:::o;27397:21::-;;;-1:-1:-1;;;27397:21:0;;;;;:::o;46281:410::-;-1:-1:-1;;;;;46446:21:0;;46371:7;46446:21;;;:14;:21;;;;;:31;;;46397:124;;46446:31;;:74;;-1:-1:-1;;;;;46485:21:0;;;;;;:14;:21;;;;;:35;;;46446:74;;;46480:2;46446:74;-1:-1:-1;;;;;46397:21:0;;;;;;:14;:21;;;;;:44;;;;:124;;:48;:124::i;:::-;46390:131;;46281:410;;;;:::o;53860:247::-;9501:12;:10;:12::i;:::-;9491:6;;-1:-1:-1;;;;;9491:6:0;;;:22;;;9483:67;;;;;-1:-1:-1;;;9483:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9483:67:0;;;;;;;;;;;;;;;53958:55:::1;54006:6;53958:43;53985:15;;53958:22;;:26;;:43;;;;:::i;:::-;:47:::0;::::1;:55::i;:::-;53940:15;:73;53932:82;;;::::0;::::1;;54032:5;-1:-1:-1::0;;;;;54025:22:0::1;;54048:10;54067:5;-1:-1:-1::0;;;;;54060:23:0::1;;54092:4;54060:38;;;;;;;;;;;;;-1:-1:-1::0;;;;;54060:38:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;54060:38:0;54025:74:::1;::::0;;-1:-1:-1;;;;;;54025:74:0::1;::::0;;;;;;-1:-1:-1;;;;;54025:74:0;;::::1;;::::0;::::1;::::0;;;;;;;;;;;;;;54060:38:::1;::::0;54025:74;;;;;;;-1:-1:-1;54025:74:0;;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;;53860:247:0:o;25807:19::-;;;-1:-1:-1;;;;;25807:19:0;;:::o;49673:3761::-;9501:12;:10;:12::i;:::-;9491:6;;-1:-1:-1;;;;;9491:6:0;;;:22;;;9483:67;;;;;-1:-1:-1;;;9483:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9483:67:0;;;;;;;;;;;;;;;49784:15:::1;::::0;49757:22:::1;::::0;:43:::1;::::0;:26:::1;:43::i;:::-;49739:15;:61;49731:108;;;;-1:-1:-1::0;;;49731:108:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49858:11;::::0;-1:-1:-1;;;49858:11:0;::::1;;;:20;49850:68;;;;-1:-1:-1::0;;;49850:68:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49944:4;::::0;49937:37:::1;::::0;;-1:-1:-1;;;49937:37:0;;49968:4:::1;49937:37;::::0;::::1;::::0;;;49977:7:::1;::::0;-1:-1:-1;;;;;49944:4:0::1;::::0;49937:22:::1;::::0;:37;;;;;::::1;::::0;;;;;;;;49944:4;49937:37;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;49937:37:0;:47:::1;49929:105;;;;-1:-1:-1::0;;;49929:105:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50053:13;::::0;-1:-1:-1;;;;;50053:13:0::1;50045:60;;;::::0;;-1:-1:-1;;;50045:60:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;50045:60:0;;;;;;;;;;;;;::::1;;50124:5;::::0;-1:-1:-1;;;;;50124:5:0::1;50116:45;;;::::0;;-1:-1:-1;;;50116:45:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;50116:45:0;;;;;;;;;;;;;::::1;;50180:4;::::0;-1:-1:-1;;;;;50180:4:0::1;50172:43;;;::::0;;-1:-1:-1;;;50172:43:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;50172:43:0;;;;;;;;;;;;;::::1;;50229:20;50251:19:::0;50274:33:::1;:31;:33::i;:::-;50228:79;;;;50424:11;50409:12;:26;50406:321;;;50468:26:::0;;::::1;50452:13;50540:33;50468:12:::0;50540:15:::1;50468:26:::0;50550:4:::1;50540:9;:15::i;:::-;:19:::0;::::1;:33::i;:::-;50645:4;::::0;50651:13:::1;::::0;50509:64;;-1:-1:-1;50632:83:0::1;::::0;-1:-1:-1;;;;;50645:4:0;;::::1;::::0;50651:13:::1;50666:48;50709:4;50666:38;:12:::0;50509:64;50666:16:::1;:38::i;:48::-;50632:12;:83::i;:::-;50406:321;;;50906:11:::0;50873:30:::1;50899:3;50873:21;:12:::0;50890:3:::1;50873:16;:21::i;:30::-;:44;50865:98;;;;-1:-1:-1::0;;;50865:98:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51034:5;;;;;;;;;-1:-1:-1::0;;;;;51034:5:0::1;-1:-1:-1::0;;;;;51027:30:0::1;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;51077:4;;;;;;;;;-1:-1:-1::0;;;;;51077:4:0::1;-1:-1:-1::0;;;;;51070:29:0::1;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;51213:14:0::1;::::0;51237:5:::1;::::0;51245:4:::1;::::0;51195:55:::1;::::0;;-1:-1:-1;;;51195:55:0;;-1:-1:-1;;;;;51237:5:0;;::::1;51195:55;::::0;::::1;::::0;51245:4;;::::1;51195:55:::0;;;;;51213:14;;;::::1;::::0;-1:-1:-1;51195:41:0::1;::::0;-1:-1:-1;51195:55:0;;;;;::::1;::::0;;;;;;;;51213:14;51195:55;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;51195:55:0;51171:21:::1;:79:::0;;-1:-1:-1;;;;;;51171:79:0::1;-1:-1:-1::0;;;;;51171:79:0;;::::1;;::::0;;;;51264:21:::1;51261:268;;51429:14;::::0;51474:4:::1;::::0;51497:5:::1;::::0;51411:106:::1;::::0;;-1:-1:-1;;;51411:106:0;;-1:-1:-1;;;;;51474:4:0;;::::1;51411:106;::::0;::::1;::::0;51497:5;;::::1;51411:106:::0;;;;;51429:14;;;::::1;::::0;51411:44:::1;::::0;:106;;;;;::::1;::::0;;;;;;;;51429:14:::1;::::0;51411:106;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;51411:106:0;51387:21:::1;:130:::0;;-1:-1:-1;;;;;;51387:130:0::1;-1:-1:-1::0;;;;;51387:130:0;;::::1;::::0;;;::::1;::::0;;51261:268:::1;51572:4;::::0;51565:37:::1;::::0;;-1:-1:-1;;;51565:37:0;;51596:4:::1;51565:37;::::0;::::1;::::0;;;51543:19:::1;::::0;-1:-1:-1;;;;;51572:4:0::1;::::0;51565:22:::1;::::0;:37;;;;;::::1;::::0;;;;;;;;51572:4;51565:37;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;51565:37:0;51641:4:::1;::::0;51634:37:::1;::::0;;-1:-1:-1;;;51634:37:0;;51665:4:::1;51634:37;::::0;::::1;::::0;;;51565;;-1:-1:-1;51613:18:0::1;::::0;-1:-1:-1;;;;;51641:4:0;;::::1;::::0;51634:22:::1;::::0;:37;;;;;51565::::1;::::0;51634;;;;;;;;51641:4;51634:37;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;51634:37:0;51751:11:::1;::::0;:30:::1;::::0;;-1:-1:-1;;;51751:30:0;;;;51634:37;;-1:-1:-1;51700:4:0::1;::::0;51682:15:::1;::::0;-1:-1:-1;;;;;51751:11:0::1;::::0;:28:::1;::::0;:30:::1;::::0;;::::1;::::0;51634:37:::1;::::0;51751:30;;;;;;;51682:15;51751:11;:30;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;51751:30:0;51740:52:::1;::::0;;-1:-1:-1;;;51740:52:0;;;;-1:-1:-1;;;;;51740:50:0;;::::1;::::0;::::1;::::0;:52:::1;::::0;;::::1;::::0;51751:30:::1;::::0;51740:52;;;;;;;;::::1;:50:::0;:52;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;51740:52:0;;-1:-1:-1;51803:18:0::1;51824:35;51853:5;51824:24;:11:::0;51840:7;51824:15:::1;:24::i;:35::-;51803:56:::0;-1:-1:-1;51870:17:0::1;51890:34;51918:5;51890:23;:10:::0;51905:7;51890:14:::1;:23::i;:34::-;51981:4;::::0;51870:54;;-1:-1:-1;51968:45:0::1;::::0;-1:-1:-1;;;;;51981:4:0::1;51987:13:::0;52002:10;51968:12:::1;:45::i;:::-;52037:3;::::0;52024:43:::1;::::0;-1:-1:-1;;;;;52037:3:0::1;52042:13:::0;52057:9;52024:12:::1;:43::i;:::-;52135:4;::::0;52141:5:::1;::::0;52122:54:::1;::::0;-1:-1:-1;;;;;52135:4:0;;::::1;::::0;52141:5:::1;52148:27;:11:::0;52164:10;52148:15:::1;:27::i;52122:54::-;52200:3;::::0;52205:4:::1;::::0;52187:50:::1;::::0;-1:-1:-1;;;;;52200:3:0;;::::1;::::0;52205:4:::1;52211:25;:10:::0;52226:9;52211:14:::1;:25::i;52187:50::-;52255:5;::::0;52273:21:::1;::::0;52248:47:::1;::::0;;-1:-1:-1;;;52248:47:0;;-1:-1:-1;;;;;52273:21:0;;::::1;52248:47;::::0;::::1;::::0;;;52255:5;;;::::1;::::0;52248:24:::1;::::0;:47;;;;;52255:5:::1;::::0;52248:47;;;;;;;52255:5;;52248:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;52313:4:0::1;::::0;52330:21:::1;::::0;52306:46:::1;::::0;;-1:-1:-1;;;52306:46:0;;-1:-1:-1;;;;;52330:21:0;;::::1;52306:46;::::0;::::1;::::0;;;52313:4;;;::::1;::::0;-1:-1:-1;52306:23:0::1;::::0;-1:-1:-1;52306:46:0;;;;;52313:4:::1;::::0;52306:46;;;;;;;52313:4;;52306:46;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;52422:25;52437:9;52422:10;:14;;:25;;;;:::i;:::-;52380:4;::::0;52396:21:::1;::::0;52373:45:::1;::::0;;-1:-1:-1;;;52373:45:0;;-1:-1:-1;;;;;52396:21:0;;::::1;52373:45;::::0;::::1;::::0;;;52380:4;;;::::1;::::0;52373:22:::1;::::0;:45;;;;;::::1;::::0;;;;;;;;52380:4;52373:45;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;52373:45:0;:74:::1;52365:118;;;::::0;;-1:-1:-1;;;52365:118:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;52552:27;:11:::0;52568:10;52552:15:::1;:27::i;:::-;52509:5;::::0;52526:21:::1;::::0;52502:46:::1;::::0;;-1:-1:-1;;;52502:46:0;;-1:-1:-1;;;;;52526:21:0;;::::1;52502:46;::::0;::::1;::::0;;;52509:5;;;::::1;::::0;52502:23:::1;::::0;:46;;;;;::::1;::::0;;;;;;;;52509:5;52502:46;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;52502:46:0;:77:::1;52494:122;;;::::0;;-1:-1:-1;;;52494:122:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;52710:21;::::0;52808:18:::1;::::0;;-1:-1:-1;;;52808:18:0;;;;-1:-1:-1;;;;;52710:21:0;;::::1;::::0;;;52808:16:::1;::::0;:18:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;52710:21;52808:18;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;52808:18:0;:23;52800:79:::1;;;;-1:-1:-1::0;;;52800:79:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52890:24;::::0;;-1:-1:-1;;;52890:24:0;;52908:4:::1;52890:24;::::0;::::1;::::0;;;-1:-1:-1;;;;;52890:9:0;::::1;::::0;::::1;::::0;:24;;;;;::::1;::::0;;;;;;;;-1:-1:-1;52890:9:0;:24;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;52933:18:0::1;::::0;;-1:-1:-1;;;52933:18:0;;;;52954:1:::1;::::0;-1:-1:-1;;;;;52933:16:0;::::1;::::0;::::1;::::0;:18:::1;::::0;;::::1;::::0;52890:24:::1;::::0;52933:18;;;;;;;;:16;:18;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;52933:18:0;:22:::1;52925:59;;;::::0;;-1:-1:-1;;;52925:59:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;53014:29;::::0;;-1:-1:-1;;;53014:29:0;;53037:4:::1;53014:29;::::0;::::1;::::0;;;-1:-1:-1;;;;;53014:14:0;::::1;::::0;::::1;::::0;:29;;;;;::::1;::::0;;;;;;;;:14;:29;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;53014:29:0;52997:14:::1;:46:::0;;;53110:25:::1;::::0;53081:55:::1;::::0;:24:::1;::::0;53100:4:::1;53081:18;:24::i;:55::-;53054:24;:82:::0;;;53198::::1;;;;-1:-1:-1::0;;;53198:82:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53335:11;;;;;;;;;-1:-1:-1::0;;;;;53335:11:0::1;-1:-1:-1::0;;;;;53335:27:0::1;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;53335:29:0;53371:21:::1;::::0;53314:79:::1;::::0;;-1:-1:-1;;;53314:79:0;;-1:-1:-1;;;;;53371:21:0;;::::1;53314:79;::::0;::::1;::::0;;;:56;;;::::1;::::0;::::1;::::0;:79;;;;;;;;;;;53371:21:::1;53314:56:::0;:79;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;53406:11:0::1;:18:::0;;-1:-1:-1;;;;53406:18:0::1;-1:-1:-1::0;;;53406:18:0::1;::::0;;-1:-1:-1;;;;;;;;;49673:3761:0:o;55496:505::-;55558:42;55544:10;:56;;:130;;-1:-1:-1;55632:42:0;55618:10;:56;55544:130;:175;;;-1:-1:-1;55706:13:0;;-1:-1:-1;;;;;55706:13:0;55692:10;:27;55544:175;55536:207;;;;;-1:-1:-1;;;55536:207:0;;;;;;;;;;;;-1:-1:-1;;;55536:207:0;;;;;;;;;;;;;;;55762:9;;-1:-1:-1;;;55762:9:0;;;;:17;;55775:4;55762:17;55754:52;;;;;-1:-1:-1;;;55754:52:0;;;;;;;;;;;;-1:-1:-1;;;55754:52:0;;;;;;;;;;;;;;;55817:18;55838:48;55858:27;;55838:15;:19;;:48;;;;:::i;:::-;55922:27;;55817:69;;-1:-1:-1;55922:43:0;;55817:69;55922:31;:43::i;:::-;55897:22;:68;-1:-1:-1;55976:9:0;:17;;-1:-1:-1;;;;55976:17:0;;;55496:505::o;40776:135::-;40818:4;40860:43;40887:15;;40860:22;;:26;;:43;;;;:::i;:::-;40842:15;:61;40835:68;;40776:135;:::o;27469:42::-;;;;:::o;54647:375::-;54724:42;54710:10;:56;;:130;;-1:-1:-1;54798:42:0;54784:10;:56;54710:130;:175;;;-1:-1:-1;54872:13:0;;-1:-1:-1;;;;;54872:13:0;54858:10;:27;54710:175;54702:207;;;;;-1:-1:-1;;;54702:207:0;;;;;;;;;;;;-1:-1:-1;;;54702:207:0;;;;;;;;;;;;;;;54940:2;54928:8;:14;;54920:23;;;;;;54972:42;54992:21;:8;55005:7;54992:12;:21::i;:::-;54972:15;;;:19;:42::i;:::-;54954:15;:60;-1:-1:-1;54647:375:0:o;39130:1640::-;39225:20;39246:19;39445:20;39467:19;39490:33;:31;:33::i;:::-;39444:79;;;;39555:11;39539:12;:27;39536:97;;;39576:27;:20;39601:1;39576:24;:27::i;:::-;39605;:20;39630:1;39605:24;:27::i;:::-;39568:65;;;;;;;;39536:97;39664:11;39649:12;:26;39646:1115;;;39755:26;;;39823:1;39801:23;;:47;-1:-1:-1;39798:154:0;;39911:1;39915:20;39903:33;;;;;;;;;39798:154;40081:42;;;40154:39;40191:1;40154:32;40104:19;40081:42;40154:23;:32::i;:39::-;40140:53;-1:-1:-1;40223:14:0;:7;40235:1;40223:11;:14::i;:::-;40208:29;;39646:1115;;;;;40360:26;;;40429:1;40406:24;;:48;-1:-1:-1;40403:154:0;;40517:20;40539:1;40509:32;;;;;;;;;40403:154;40591:43;;;40664:40;40702:1;40664:33;40614:20;40591:43;40664:24;:33::i;:40::-;40649:55;-1:-1:-1;40733:14:0;:7;40745:1;40733:11;:14::i;:::-;40719:28;;39646:1115;;;39130:1640;;;;;;:::o;27092:40::-;;;;;;;;;;;;;;;:::o;27338:22::-;;;-1:-1:-1;;;27338:22:0;;;;;:::o;44835:694::-;9501:12;:10;:12::i;:::-;9491:6;;-1:-1:-1;;;;;9491:6:0;;;:22;;;9483:67;;;;;-1:-1:-1;;;9483:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9483:67:0;;;;;;;;;;;;;;;45049:3:::1;::::0;44966:42:::1;::::0;45036:43:::1;::::0;-1:-1:-1;;;;;45049:3:0::1;44966:42:::0;45069:9;45036:12:::1;:43::i;:::-;45117:19;45138:20:::0;45164:4:::1;-1:-1:-1::0;;;;;45164:16:0::1;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;45164:18:0;;::::1;::::0;;::::1;::::0;-1:-1:-1;;;;;45116:66:0;;::::1;::::0;-1:-1:-1;45116:66:0::1;::::0;-1:-1:-1;45193:15:0::1;45211:50;45224:9:::0;45116:66;;45211:12:::1;:50::i;:::-;45272:40;::::0;;-1:-1:-1;;;45272:40:0;;45282:1:::1;45272:40;::::0;::::1;::::0;;;;;;;;;45302:4:::1;45272:40:::0;;;;;;;;;;;;;;;;;45193:68;;-1:-1:-1;;;;;;45272:9:0;::::1;::::0;::::1;::::0;:40;;;;;45282:1;;45272:40;;;;;;45282:1;45272:9;:40;::::1;;::::0;::::1;;;;::::0;::::1;54113:206:::0;9501:12;:10;:12::i;:::-;9491:6;;-1:-1:-1;;;;;9491:6:0;;;:22;;;9483:67;;;;;-1:-1:-1;;;9483:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9483:67:0;;;;;;;;;;;;;;;54196:55:::1;54244:6;54196:43;54223:15;;54196:22;;:26;;:43;;;;:::i;:55::-;54178:15;:73;54170:82;;;::::0;::::1;;54263:48;::::0;:10:::1;::::0;54285:21:::1;::::0;54263:48:::1;::::0;;;54285:21;54263:10;:48:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54415:84:::0;9501:12;:10;:12::i;:::-;9491:6;;-1:-1:-1;;;;;9491:6:0;;;:22;;;9483:67;;;;;-1:-1:-1;;;9483:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9483:67:0;;;;;;;;;;;;;;;54477:5:::1;:14:::0;;-1:-1:-1;;;;;;54477:14:0::1;-1:-1:-1::0;;;;;54477:14:0;;;::::1;::::0;;;::::1;::::0;;54415:84::o;27193:42::-;;;;;;;;;;;;;:::o;55030:458::-;55090:42;55076:10;:56;;:130;;-1:-1:-1;55164:42:0;55150:10;:56;55076:130;:175;;;-1:-1:-1;55238:13:0;;-1:-1:-1;;;;;55238:13:0;55224:10;:27;55076:175;55068:207;;;;;-1:-1:-1;;;55068:207:0;;;;;;;;;;;;-1:-1:-1;;;55068:207:0;;;;;;;;;;;;;;;55294:9;;-1:-1:-1;;;55294:9:0;;;;:18;55286:55;;;;;-1:-1:-1;;;55286:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;55382:22;;;55352:27;:52;-1:-1:-1;;55415:36:0;;55462:9;:16;;-1:-1:-1;;;;55462:16:0;-1:-1:-1;;;55462:16:0;;;55030:458::o;26002:36::-;;;-1:-1:-1;;;;;26002:36:0;;:::o;38058:109::-;25622:6;;:11;25614:40;;;;;-1:-1:-1;;;25614:40:0;;;;;;;;;;;;-1:-1:-1;;;25614:40:0;;;;;;;;;;;;;;;25674:1;25665:6;:10;38113:21:::1;::::0;38100:59:::1;::::0;-1:-1:-1;;;;;38113:21:0::1;38136:10;38148;:8;:10::i;38100:59::-;25751:1:::0;25742:6;:10;38058:109::o;25859:18::-;;;-1:-1:-1;;;;;25859:18:0;;:::o;29019:764::-;25622:6;;:11;25614:40;;;;;-1:-1:-1;;;25614:40:0;;;;;;;;;;;;-1:-1:-1;;;25614:40:0;;;;;;;;;;;;;;;25674:1;25665:6;:10;;;29087::::1;::::0;-1:-1:-1;;;29087:10:0;::::1;;;:18;;;29079:49;;;::::0;;-1:-1:-1;;;29079:49:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;29079:49:0;;;;;;;;;;;;;::::1;;29147:11;::::0;-1:-1:-1;;;29147:11:0;::::1;;;:20;29139:68;;;;-1:-1:-1::0;;;29139:68:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29226:11;:9;:11::i;:::-;:20;29218:47;;;::::0;;-1:-1:-1;;;29218:47:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;29218:47:0;;;;;;;;;;;;;::::1;;29296:1;29284:9;:13;29276:72;;;;-1:-1:-1::0;;;29276:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29375:4;;;;;;;;;-1:-1:-1::0;;;;;29375:4:0::1;-1:-1:-1::0;;;;;29369:19:0::1;;29396:9;29369:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;29570:4:0::1;::::0;29498:24:::1;::::0;-1:-1:-1;29525:75:0::1;::::0;-1:-1:-1;29595:4:0::1;::::0;-1:-1:-1;29525:65:0::1;::::0;29580:9:::1;::::0;29525:50:::1;::::0;-1:-1:-1;;;;;29570:4:0::1;29525:44;:50::i;:75::-;29639:10;29632:18;::::0;;;:6:::1;:18;::::0;;;;;29498:102;;-1:-1:-1;29632:40:0::1;::::0;29498:102;29632:22:::1;:40::i;:::-;29618:10;29611:18;::::0;;;:6:::1;:18;::::0;;;;;;;:61;;;;29719:4:::1;::::0;-1:-1:-1;;;;;29719:4:0::1;29705:19:::0;;:13:::1;:19:::0;;;;:34:::1;::::0;29729:9:::1;29705:23;:34::i;:::-;29697:4;::::0;-1:-1:-1;;;;;29697:4:0::1;29683:19;::::0;;;:13:::1;:19;::::0;;;;:56;29750:23:::1;:21;:23::i;:::-;-1:-1:-1::0;25751:1:0;25742:6;:10;29019:764::o;10224:244::-;9501:12;:10;:12::i;:::-;9491:6;;-1:-1:-1;;;;;9491:6:0;;;:22;;;9483:67;;;;;-1:-1:-1;;;9483:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9483:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;10313:22:0;::::1;10305:73;;;;-1:-1:-1::0;;;10305:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10415:6;::::0;10394:38:::1;::::0;-1:-1:-1;;;;;10394:38:0;;::::1;::::0;10415:6:::1;::::0;10394:38:::1;::::0;10415:6:::1;::::0;10394:38:::1;10443:6;:17:::0;;-1:-1:-1;;;;;;10443:17:0::1;-1:-1:-1::0;;;;;10443:17:0;;;::::1;::::0;;;::::1;::::0;;10224:244::o;29896:8118::-;25622:6;;:11;25614:40;;;;;-1:-1:-1;;;25614:40:0;;;;;;;;;;;;-1:-1:-1;;;25614:40:0;;;;;;;;;;;;;;;25674:1;25665:6;:10;;;30007::::1;::::0;-1:-1:-1;;;30007:10:0;::::1;;;:18;;;29999:49;;;::::0;;-1:-1:-1;;;29999:49:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;29999:49:0;;;;;;;;;;;;;::::1;;30067:11;::::0;-1:-1:-1;;;30067:11:0;::::1;;;:20;30059:68;;;;-1:-1:-1::0;;;30059:68:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30146:11;:9;:11::i;:::-;:20;30138:47;;;::::0;;-1:-1:-1;;;30138:47:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;30138:47:0;;;;;;;;;;;;;::::1;;30226:1;30204:19;:23;30196:82;;;;-1:-1:-1::0;;;30196:82:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30437:30;30480:14;30727:6;-1:-1:-1::0;;;;;30712:29:0::1;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;30712:31:0;::::1;;30708:91;;;;;;30770:6;-1:-1:-1::0;;;;;30755:29:0::1;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;30755:31:0;;-1:-1:-1;30708:91:0::1;-1:-1:-1::0;;;;;30905:20:0;::::1;::::0;30902:2563:::1;;30942:14;30974:6;-1:-1:-1::0;;;;;30959:29:0::1;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;30959:31:0;31038:14:::1;::::0;31020:56:::1;::::0;;-1:-1:-1;;;31020:56:0;;-1:-1:-1;;;;;31020:56:0;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;;;30959:31;;-1:-1:-1;31005:12:0::1;::::0;;;31038:14;;::::1;::::0;31020:41:::1;::::0;:56;;;;;30959:31:::1;::::0;31020:56;;;;;;;;31038:14;31020:56;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;31020:56:0;31141:16:::1;::::0;31123:58:::1;::::0;;-1:-1:-1;;;31123:58:0;;-1:-1:-1;;;;;31123:58:0;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;;;31020:71;;::::1;::::0;;;::::1;;::::0;-1:-1:-1;;;;;31141:16:0;;;::::1;::::0;31123:43:::1;::::0;:58;;;;;31020:56:::1;::::0;31123:58;;;;;;;31141:16;31123:58;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;31123:58:0;-1:-1:-1;;;;;31123:73:0::1;;;::::0;-1:-1:-1;31214:8:0;::::1;:22:::0;::::1;;;;31227:9;31226:10;31214:22;31211:74;;;31240:42;::::0;;-1:-1:-1;;;31240:42:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;31211:74;31354:65;31371:6;31379:10;31391:6;31399:19;31354:16;:65::i;:::-;31434:27;31471:6;-1:-1:-1::0;;;;;31464:24:0::1;;31497:4;31464:39;;;;;;;;;;;;;-1:-1:-1::0;;;;;31464:39:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;31464:39:0;31548::::1;::::0;;-1:-1:-1;;;31548:39:0;;31581:4:::1;31548:39;::::0;::::1;::::0;;;31464;;-1:-1:-1;31518:27:0::1;::::0;-1:-1:-1;;;;;31548:24:0;::::1;::::0;::::1;::::0;:39;;;;;31464::::1;::::0;31548;;;;;;;:24;:39;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;31548:39:0;31602:42:::1;::::0;;-1:-1:-1;;;31602:42:0;;31638:4:::1;31602:42;::::0;::::1;::::0;;;31548:39;;-1:-1:-1;;;;;;31602:27:0;::::1;::::0;::::1;::::0;:42;;;;;;;;;;;;;-1:-1:-1;31602:27:0;:42;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;31602:42:0;31688:39;;-1:-1:-1;;;31688:39:0;;31721:4:::1;31688:39;::::0;::::1;::::0;;;31659:26:::1;::::0;-1:-1:-1;;;;;31688:24:0;::::1;::::0;::::1;::::0;:39;;;;;31602:42:::1;::::0;31688:39;;;;;;;;:24;:39;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;31688:39:0;31771::::1;::::0;;-1:-1:-1;;;31771:39:0;;31804:4:::1;31771:39;::::0;::::1;::::0;;;31688;;-1:-1:-1;31742:26:0::1;::::0;-1:-1:-1;;;;;31771:24:0;::::1;::::0;::::1;::::0;:39;;;;;31688::::1;::::0;31771;;;;;;;:24;:39;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;31771:39:0;31863:4:::1;::::0;31771:39;;-1:-1:-1;31827:23:0::1;::::0;-1:-1:-1;;;;;31853:14:0;;::::1;31863:4:::0;::::1;31853:14;:174;;31951:76;31968:6:::0;31976:43:::1;:18:::0;31999:19;31976:22:::1;:43::i;:::-;32021:5;31951:16;:76::i;:::-;31853:174;;;31888:43;:18:::0;31911:19;31888:22:::1;:43::i;:::-;32080:4;::::0;31827:200;;-1:-1:-1;32044:23:0::1;::::0;-1:-1:-1;;;;;32070:14:0;;::::1;32080:4:::0;::::1;32070:14;:174;;32168:76;32185:6:::0;32193:43:::1;:18:::0;32216:19;32193:22:::1;:43::i;32168:76::-;32070:174;;;32105:43;:18:::0;32128:19;32105:22:::1;:43::i;:::-;32293:4;::::0;32286:37:::1;::::0;;-1:-1:-1;;;32286:37:0;;32317:4:::1;32286:37;::::0;::::1;::::0;;;32044:200;;-1:-1:-1;32261:22:0::1;::::0;-1:-1:-1;;;;;32293:4:0;;::::1;::::0;32286:22:::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;32293:4;32286:37;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;32286:37:0;32437:4:::1;::::0;-1:-1:-1;;;;;32437:4:0::1;32401:19;32423::::0;;;:13:::1;32286:37;32423:19:::0;;;;;32286:37;;-1:-1:-1;32648:28:0;;::::1;32640:45;;;::::0;;-1:-1:-1;;;32640:45:0;;::::1;;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;;;32640:45:0;;;;;;;;;;;;;::::1;;32700:22;32725:36;:15:::0;32745;32725:19:::1;:36::i;:::-;32798:4;::::0;-1:-1:-1;;;;;32798:4:0::1;32784:19;::::0;;;:13:::1;:19;::::0;;;;;32700:61;;-1:-1:-1;32827:14:0;;32784:39:::1;::::0;32700:61;32784:23:::1;:39::i;:::-;:57;;32776:74;;;::::0;;-1:-1:-1;;;32776:74:0;;::::1;;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;;;32776:74:0;;;;;;;;;;;;;::::1;;32921:4;::::0;-1:-1:-1;;;;;32921:4:0;;::::1;32907:19;::::0;;;:13:::1;:19;::::0;;;;:36;;;33030:4:::1;::::0;32907:19;;32985:80:::1;::::0;33060:4:::1;::::0;32985:70:::1;::::0;33040:14;;32985:50:::1;::::0;33030:4:::1;32985:44;:50::i;:80::-;33264:10;33257:18;::::0;;;:6:::1;:18;::::0;;;;;32958:107;;-1:-1:-1;33257:40:0::1;::::0;32958:107;33257:22:::1;:40::i;:::-;33243:10;33236:18;::::0;;;:6:::1;:18;::::0;;;;;;;;:61;;;;33317:41;;;;;;;::::1;::::0;;;;;;-1:-1:-1;;;;;;;;;;;33317:41:0;;;;;;;;::::1;33409:23;:21;:23::i;:::-;33447:7;;;;;;;;;;;;;;;;;30902:2563;-1:-1:-1::0;;;;;33533:21:0;::::1;;::::0;;;:13:::1;:21;::::0;;;;;::::1;;:45:::0;::::1;;;-1:-1:-1::0;;;;;;33558:20:0;::::1;::::0;33533:45:::1;33530:4412;;;33798:4;::::0;-1:-1:-1;;;;;33788:14:0;;::::1;33798:4:::0;::::1;33788:14;33785:2829;;;33840:4;::::0;33823:70:::1;::::0;-1:-1:-1;;;;;33840:4:0::1;33846:10;33866:4;33873:19:::0;33823:16:::1;:70::i;:::-;33942:4;::::0;33935:37:::1;::::0;;-1:-1:-1;;;33935:37:0;;33966:4:::1;33935:37;::::0;::::1;::::0;;;33912:20:::1;::::0;-1:-1:-1;;;;;33942:4:0::1;::::0;33935:22:::1;::::0;:37;;;;;::::1;::::0;;;;;;;;33942:4;33935:37;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;33935:37:0;34029:4:::1;::::0;-1:-1:-1;;;;;34029:4:0::1;34015:19;::::0;;;:13:::1;33935:37;34015:19:::0;;;;;33935:37;;-1:-1:-1;33999:35:0;::::1;;33991:70;;;::::0;;-1:-1:-1;;;33991:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;33991:70:0;;;;;;;;;;;;;::::1;;34108:10;34101:18;::::0;;;:6:::1;:18;::::0;;;;;:43:::1;::::0;34124:19;34101:22:::1;:43::i;:::-;34087:10;34080:18;::::0;;;:6:::1;:18;::::0;;;;;;;:64;;;;34303:4:::1;::::0;-1:-1:-1;;;;;34303:4:0::1;34289:19:::0;;:13:::1;:19:::0;;;;;;:34;;;34347:44;;;;;;;::::1;::::0;;;;;;-1:-1:-1;;;;;;;;;;;34347:44:0;;;;;;;;;::::1;33785:2829;;;;34441:3;::::0;-1:-1:-1;;;;;34431:13:0;;::::1;34441:3:::0;::::1;34431:13;34428:2186;;;34482:3;::::0;34465:69:::1;::::0;-1:-1:-1;;;;;34482:3:0::1;34487:10;34507:4;34514:19:::0;34465:16:::1;:69::i;:::-;34582:3;::::0;34575:36:::1;::::0;;-1:-1:-1;;;34575:36:0;;34605:4:::1;34575:36;::::0;::::1;::::0;;;34553:19:::1;::::0;-1:-1:-1;;;;;34582:3:0::1;::::0;34575:21:::1;::::0;:36;;;;;::::1;::::0;;;;;;;;34582:3;34575:36;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;34575:36:0;34667:3:::1;::::0;-1:-1:-1;;;;;34667:3:0::1;34653:18;::::0;;;:13:::1;34575:36;34653:18:::0;;;;;34575:36;;-1:-1:-1;34653:43:0::1;::::0;34676:19;34653:22:::1;:43::i;:::-;34638:11;:58;;34630:92;;;::::0;;-1:-1:-1;;;34630:92:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;34630:92:0;;;;;;;;;;;;;::::1;;35008:3;::::0;34840:19:::1;::::0;34884:129:::1;::::0;34963:49:::1;::::0;-1:-1:-1;;;;;35008:3:0::1;34963:44;:49::i;:::-;34884:51;:19:::0;34930:4:::1;34884:45;:51::i;:129::-;34840:173;;35164:24;35191:77;35263:4;35191:67;35246:11;35191:50;35236:4;;;;;;;;;-1:-1:-1::0;;;;;35236:4:0::1;35191:44;:50::i;:77::-;35391:10;35384:18;::::0;;;:6:::1;:18;::::0;;;;;35164:104;;-1:-1:-1;35384:40:0::1;::::0;35164:104;35384:22:::1;:40::i;:::-;35370:10;35363:18;::::0;;;:6:::1;:18;::::0;;;;;;;:61;;;;35575:3:::1;::::0;-1:-1:-1;;;;;35575:3:0::1;35561:18:::0;;:13:::1;:18:::0;;;;;;:32;;;35618:41;;;;;;;::::1;::::0;;;;;;-1:-1:-1;;;;;;;;;;;35618:41:0;;;;;;;;;::::1;34428:2186;;;;;;35709:4;::::0;-1:-1:-1;;;;;35699:14:0;;::::1;35709:4:::0;::::1;35699:14;35696:918;;;35898:4;::::0;35881:70:::1;::::0;-1:-1:-1;;;;;35898:4:0::1;35904:10;35924:4;35931:19:::0;35881:16:::1;:70::i;:::-;36003:4;::::0;35996:37:::1;::::0;;-1:-1:-1;;;35996:37:0;;36027:4:::1;35996:37;::::0;::::1;::::0;;;35970:23:::1;::::0;-1:-1:-1;;;;;36003:4:0::1;::::0;35996:22:::1;::::0;:37;;;;;::::1;::::0;;;;;;;;36003:4;35996:37;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;35996:37:0;36093:4:::1;::::0;-1:-1:-1;;;;;36093:4:0::1;36079:19;::::0;;;:13:::1;35996:37;36079:19:::0;;;;;35996:37;;-1:-1:-1;36079:44:0::1;::::0;36103:19;36079:23:::1;:44::i;:::-;36060:15;:63;;36052:98;;;::::0;;-1:-1:-1;;;36052:98:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;36052:98:0;;;;;;;;;;;;;::::1;;36183:4;::::0;-1:-1:-1;;;;;36183:4:0;;::::1;36169:19;::::0;;;:13:::1;:19;::::0;;;;:37;;;36297:4:::1;::::0;36169:19;;36252:85:::1;::::0;36332:4:::1;::::0;36252:75:::1;::::0;36307:19;;36252:50:::1;::::0;36297:4:::1;36252:44;:50::i;:85::-;36384:10;36377:18;::::0;;;:6:::1;:18;::::0;;;;;36225:112;;-1:-1:-1;36377:40:0::1;::::0;36225:112;36377:22:::1;:40::i;:::-;36363:10;36356:18;::::0;;;:6:::1;:18;::::0;;;;;;;;:61;;;;36441:41;;;;;;;::::1;::::0;;;;;;-1:-1:-1;;;;;;;;;;;36441:41:0;;;;;;;;::::1;35696:918;;;;;36536:62;;-1:-1:-1::0;;;36536:62:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35696:918;33530:4412;;;36776:17;36796:51;36813:6;36821:19;36842:4;36796:16;:51::i;:::-;37037:4;::::0;37030:37:::1;::::0;;-1:-1:-1;;;37030:37:0;;37061:4:::1;37030:37;::::0;::::1;::::0;;;36776:71;;-1:-1:-1;37005:22:0::1;::::0;-1:-1:-1;;;;;37037:4:0;;::::1;::::0;37030:22:::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;37037:4;37030:37;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;37030:37:0;37118:4:::1;::::0;-1:-1:-1;;;;;37118:4:0::1;37082:19;37104::::0;;;:13:::1;37030:37;37104:19:::0;;;;;37030:37;;-1:-1:-1;37146:28:0;;::::1;37138:45;;;::::0;;-1:-1:-1;;;37138:45:0;;::::1;;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;;;37138:45:0;;;;;;;;;;;;;::::1;;37404:14:::0;37374:26:::1;:11:::0;37390:9;37374:15:::1;:26::i;:::-;:44;;37366:61;;;::::0;;-1:-1:-1;;;37366:61:0;;::::1;;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;;;37366:61:0;;;;;;;;;;;;;::::1;;37498:4;::::0;-1:-1:-1;;;;;37498:4:0;;::::1;37484:19;::::0;;;:13:::1;:19;::::0;;;;:36;;;37607:4:::1;::::0;37484:19;;37562:75:::1;::::0;37632:4:::1;::::0;37562:65:::1;::::0;37617:9;;37562:50:::1;::::0;37607:4:::1;37562:44;:50::i;:75::-;37834:10;37827:18;::::0;;;:6:::1;:18;::::0;;;;;37535:102;;-1:-1:-1;37827:40:0::1;::::0;37535:102;37827:22:::1;:40::i;:::-;37813:10;37806:18;::::0;;;:6:::1;:18;::::0;;;;;;;;:61;;;;37887:41;;;;;;;::::1;::::0;;;;;;-1:-1:-1;;;;;;;;;;;37887:41:0;;;;;;;;::::1;33530:4412;;;;;37952:23;:21;:23::i;:::-;25686:1;;;-1:-1:-1::0;;25751:1:0;25742:6;:10;29896:8118::o;25975:20::-;;;-1:-1:-1;;;;;25975:20:0;;:::o;7547:106::-;7635:10;7547:106;:::o;41908:554::-;42046:14;;42078:4;;42028:55;;;-1:-1:-1;;;42028:55:0;;-1:-1:-1;;;;;42028:55:0;;;;;;;42078:4;;;42028:55;;;;;;41984:7;;;;42046:14;;42028:41;;:55;;;;;;;;;;;;;;42046:14;42028:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42028:55:0;;-1:-1:-1;;;;;;42098:26:0;;42095:39;;42133:1;42126:8;;;;;42095:39;42146:19;42183:12;42146:50;;42209:16;42227;42249:4;-1:-1:-1;;;;;42249:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42249:18:0;;;;;;;42301:4;;42249:18;42284:13;;-1:-1:-1;;;42284:13:0;;;;-1:-1:-1;;;;;42208:59:0;;;;-1:-1:-1;42208:59:0;;;;;-1:-1:-1;;;;;;42301:4:0;;;;42284:11;;;;;;:13;;;;;42249:18;42284:13;;;;;;:11;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42284:13:0;-1:-1:-1;;;;;42284:21:0;;42281:174;;;42330:35;42343:3;42347:8;42356;42330:12;:35::i;:::-;42323:42;;;;;;;;42281:174;42407:35;42420:3;42424:8;42433;42407:12;:35::i;16275:132::-;16333:7;16360:39;16364:1;16367;16360:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;16353:46;;16275:132;;;;;:::o;15328:471::-;15386:7;15631:6;15627:47;;-1:-1:-1;15661:1:0;15654:8;;15627:47;15698:5;;;15702:1;15698;:5;:1;15722:5;;;;;:10;15714:56;;;;-1:-1:-1;;;15714:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58261:287;58392:45;;;-1:-1:-1;;;;;58392:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;58392:45:0;-1:-1:-1;;;58392:45:0;;;58381:57;;;;58346:12;;58360:17;;58381:10;;;;58392:45;58381:57;;;58392:45;58381:57;;58392:45;58381:57;;;;;;;;;;-1:-1:-1;;58381:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58345:93;;;;58457:7;:57;;;;-1:-1:-1;58469:11:0;;:16;;:44;;;58500:4;58489:24;;;;;;;;;;;;;;;-1:-1:-1;58489:24:0;58469:44;58449:91;;;;;-1:-1:-1;;;58449:91:0;;;;;;;;;;;;-1:-1:-1;;;58449:91:0;;;;;;;;;;;;;;;58261:287;;;;;:::o;42470:530::-;42573:17;42622:1;42611:8;:12;42603:68;;;;-1:-1:-1;;;42603:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42702:1;42690:9;:13;:31;;;;;42720:1;42707:10;:14;42690:31;42682:84;;;;-1:-1:-1;;;42682:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42777:20;42800:17;:8;42813:3;42800:12;:17::i;:::-;42777:40;-1:-1:-1;42828:14:0;42845:31;42777:40;42865:10;42845:19;:31::i;:::-;42828:48;-1:-1:-1;42887:16:0;42906:40;42930:15;42906:19;:9;42920:4;42906:13;:19::i;:40::-;42887:59;;42981:11;42969:9;:23;;;;;;;42470:530;-1:-1:-1;;;;;;;42470:530:0:o;46767:2341::-;-1:-1:-1;;;;;46917:21:0;;;46850:7;46917:21;;;:14;:21;;;;;;;;46990:14;;47021:4;;46972:54;;-1:-1:-1;;;46972:54:0;;;;;;;;;47021:4;;46972:54;;;;;;46850:7;;46917:21;;46850:7;;46990:14;;;;;46972:41;;:54;;;;;;;;;;46990:14;46972:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46972:54:0;47102:37;;;-1:-1:-1;;;47102:37:0;;;;46972:54;;-1:-1:-1;47037:20:0;;;;-1:-1:-1;;;;;47102:35:0;;;;;:37;;;;;46972:54;;47102:37;;;;;;;;:35;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47102:37:0;47094:4;;-1:-1:-1;;;;;47094:4:0;;;:45;;;47091:263;;;47205:12;-1:-1:-1;;;;;47190:40:0;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47190:42:0;;;;;;;-1:-1:-1;;;;;47156:76:0;;;;-1:-1:-1;47156:76:0;;-1:-1:-1;47091:263:0;;;47313:12;-1:-1:-1;;;;;47298:40:0;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47298:42:0;;;;;;;-1:-1:-1;;;;;47265:75:0;;;;-1:-1:-1;47265:75:0;;-1:-1:-1;47091:263:0;47408:24;47435:47;47448:4;47454:12;47468:13;47435:12;:47::i;:::-;47598:34;;47815:30;;;;47408:74;;-1:-1:-1;47598:34:0;;;;;47588:7;;47815:30;:38;;47598:34;47815:38;47812:286;;;47874:1;:7;;47879:2;47874:7;47870:72;;-1:-1:-1;47902:24:0;47925:1;47921:5;;47902:24;47870:72;47812:286;;;48000:5;;;;47996:69;;-1:-1:-1;48026:23:0;-1:-1:-1;;48045:4:0;;48026:23;47996:69;48108:18;48129:20;:26;;48156:16;48129:44;;;;;;;;;;-1:-1:-1;48317:17:0;48314:152;;48377:32;48403:5;48377:21;:10;48392:5;48377:14;:21::i;:32::-;48358:16;:51;48350:104;;;;-1:-1:-1;;;48350:104:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48562:78;48610:20;:26;;48637:1;48610:29;;;;;;;;;;;48562:43;;;;;:47;:78::i;:::-;48516:43;;;:124;48683:16;48651:26;;;:29;;;;;;;;;;;:48;48756:43;;;;:65;;48804:16;48756:47;:65::i;:::-;48710:43;;;:111;48832:36;;-1:-1:-1;;48832:36:0;;;;;;;;;;;;;;48919:2;48882:34;;:39;48879:161;;;48938:38;;-1:-1:-1;;48938:38:0;;;;;48991:30;;;:37;;;;;48938:38;48991:37;;;48879:161;-1:-1:-1;;;49057:43:0;;;;;;46767:2341;-1:-1:-1;;;;;;;46767:2341:0:o;38426:521::-;38518:10;38464:17;38511:18;;;:6;:18;;;;;;38565:11;;-1:-1:-1;;;38565:11:0;;;;:19;;38580:4;38565:19;38557:71;;;;-1:-1:-1;;;38557:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38655:10;38647:19;;;;:7;:19;;;;;;;;:28;38639:62;;;;;-1:-1:-1;;;38639:62:0;;;;;;;;;;;;-1:-1:-1;;;38639:62:0;;;;;;;;;;;;;;;38729:1;38720:6;:10;38712:50;;;;;-1:-1:-1;;;38712:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;38787:46;38828:4;38787:36;38798:24;;38787:6;:10;;:36;;;;:::i;:46::-;38920:10;38912:19;;;;:7;:19;;;;;:27;;-1:-1:-1;;38912:27:0;38935:4;38912:27;;;38775:58;38426:521;-1:-1:-1;;38426:521:0:o;40998:380::-;41177:4;;-1:-1:-1;;;;;41177:4:0;;;41064:20;41163:19;;;:13;:19;;;;;;;41198:3;;;;;41184:18;;;;;41064:20;;;;41163:19;;41184:18;41229:59;;41254:33;;:27;:33::i;41229:59::-;41365:3;;41214:74;;-1:-1:-1;41313:57:0;;41337:32;;-1:-1:-1;;;;;41365:3:0;41337:27;:32::i;41313:57::-;41299:71;;40998:380;;;;:::o;13974:181::-;14032:7;14064:5;;;14088:6;;;;14080:46;;;;;-1:-1:-1;;;14080:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;5911:508;6328:4;6374:17;6406:7;5911:508;:::o;8857:129::-;5510:12;;;;;;;;:31;;;5526:15;:13;:15::i;:::-;5510:47;;;-1:-1:-1;5546:11:0;;;;5545:12;5510:47;5502:106;;;;-1:-1:-1;;;5502:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5617:19;5640:12;;;;;;5639:13;5659:83;;;;5688:12;:19;;-1:-1:-1;;;;5688:19:0;;;;;5716:18;5703:4;5716:18;;;5659:83;8915:26:::1;:24;:26::i;:::-;8952;:24;:26::i;:::-;5764:14:::0;5760:57;;;5804:5;5789:20;;-1:-1:-1;;5789:20:0;;;8857:129;:::o;14438:136::-;14496:7;14523:43;14527:1;14530;14523:43;;;;;;;;;;;;;;;;;:3;:43::i;45755:468::-;45827:3;;-1:-1:-1;;;;;45827:3:0;45812:19;;;;:14;:19;;;;;:40;;;45856:12;45812:56;45809:197;;45900:3;;;-1:-1:-1;;;;;45900:3:0;;;45885:19;;;;:14;:19;;;;;45928:12;45885:40;;;;:55;45981:3;;45955:37;;45981:3;;;45955:25;:37::i;:::-;;45809:197;46035:4;;-1:-1:-1;;;;;46035:4:0;46020:20;;;;:14;:20;;;;;:41;;;46065:12;46020:57;46017:199;;46109:4;;;-1:-1:-1;;;;;46109:4:0;;;46094:20;;;;:14;:20;;;;;46138:12;46094:41;;;;:56;46191:4;;46165:38;;46191:4;;;46165:25;:38::i;58556:395::-;58784:51;;;-1:-1:-1;;;;;58784:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;58784:51:0;-1:-1:-1;;;58784:51:0;;;58773:63;;;;58738:12;;58752:17;;58773:10;;;;58784:51;58773:63;;;58784:51;58773:63;;58784:51;58773:63;;;;;;;;;;-1:-1:-1;;58773:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58737:99;;;;58855:7;:57;;;;-1:-1:-1;58867:11:0;;:16;;:44;;;58898:4;58887:24;;;;;;;;;;;;;;;-1:-1:-1;58887:24:0;58867:44;58847:96;;;;;-1:-1:-1;;;58847:96:0;;;;;;;;;;;;;;;;;;;;;;;;;;;56157:2096;56414:3;;56259:17;;-1:-1:-1;;;;;56404:13:0;;;56414:3;;56404:13;;56396:37;;;;;-1:-1:-1;;;56396:37:0;;;;;;;;;;;;-1:-1:-1;;;56396:37:0;;;;;;;;;;;;;;;56485:14;;56517:4;;56467:55;;;-1:-1:-1;;;56467:55:0;;-1:-1:-1;;;;;56467:55:0;;;;;;;56517:4;;;56467:55;;;;;;56444:20;;56485:14;;;;;56467:41;;:55;;;;;;;;;;;;;;;56485:14;56467:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;56467:55:0;;-1:-1:-1;;;;;;56541:26:0;;56533:59;;;;;-1:-1:-1;;;56533:59:0;;;;;;;;;;;;-1:-1:-1;;;56533:59:0;;;;;;;;;;;;;;;56741:15;56766:6;56741:32;;56784:19;56821:12;56784:50;;56881:21;56905:8;-1:-1:-1;;;;;56905:18:0;;56924:12;56905:32;;;;;;;;;;;;;-1:-1:-1;;;;;56905:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;56905:32:0;;-1:-1:-1;57016:199:0;;;;57046:67;57063:6;57071:10;57083:12;57097:15;57046:16;:67::i;:::-;57016:199;;;57152:51;57165:6;57173:12;57187:15;57152:12;:51::i;:::-;57259:20;57282:8;-1:-1:-1;;;;;57282:18:0;;57301:12;57282:32;;;;;;;;;;;;;-1:-1:-1;;;;;57282:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;57282:32:0;57366:18;;;-1:-1:-1;;;57366:18:0;;;;57282:32;;-1:-1:-1;57326:16:0;;;;-1:-1:-1;;;;;57366:16:0;;;;;:18;;;;;;;;;;;;;;;:16;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;57366:18:0;;;;;;;;57505:39;;;;;;;;;;;-1:-1:-1;;;57505:39:0;;;;;;;-1:-1:-1;;;;;57325:59:0;;;;-1:-1:-1;57325:59:0;;-1:-1:-1;57489:13:0;;57505:39;;:12;;57522:13;;57505:16;:39::i;:::-;57489:55;;57675:6;-1:-1:-1;;;;;57658:23:0;:4;-1:-1:-1;;;;;57658:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;57658:13:0;-1:-1:-1;;;;;57658:23:0;;57655:589;;;57792:39;57805:5;57812:8;57822;57792:12;:39::i;:::-;57780:51;-1:-1:-1;57866:25:0;57887:3;57866:16;:8;57879:2;57866:12;:16::i;:25::-;57854:9;:37;57846:78;;;;;-1:-1:-1;;;57846:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;57939:42;;;-1:-1:-1;;;57939:42:0;;57949:1;57939:42;;;;;;;;;;;;57971:4;57939:42;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;57939:9:0;;;;;:42;;;;;;;;;;;57949:1;57939:9;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57655:589;;;58041:39;58054:5;58061:8;58071;58041:12;:39::i;:::-;58095:42;;;-1:-1:-1;;;58095:42:0;;;;;;;;58116:1;58095:42;;;;;;58127:4;58095:42;;;;;;;;;;;;;;;;;58029:51;;-1:-1:-1;;;;;;58095:9:0;;;;;:42;;;;;58116:1;;58095:42;;;;;;58116:1;58095:9;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58172:25;58193:3;58172:16;58185:2;58172:8;:12;;:16;;;;:::i;:25::-;58160:9;:37;58152:78;;;;;-1:-1:-1;;;58152:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;56157:2096;;;;;;;;;;;;;:::o;16903:278::-;16989:7;17024:12;17017:5;17009:28;;;;-1:-1:-1;;;17009:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17048:9;17064:1;17060;:5;;;;;;;16903:278;-1:-1:-1;;;;;16903:278:0:o;7468:69::-;5510:12;;;;;;;;:31;;;5526:15;:13;:15::i;:::-;5510:47;;;-1:-1:-1;5546:11:0;;;;5545:12;5510:47;5502:106;;;;-1:-1:-1;;;5502:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5617:19;5640:12;;;;;;5639:13;5659:83;;;;5688:12;:19;;-1:-1:-1;;;;5688:19:0;;;;;5716:18;5703:4;5716:18;;;5764:14;5760:57;;;5804:5;5789:20;;-1:-1:-1;;5789:20:0;;;7468:69;:::o;8994:202::-;5510:12;;;;;;;;:31;;;5526:15;:13;:15::i;:::-;5510:47;;;-1:-1:-1;5546:11:0;;;;5545:12;5510:47;5502:106;;;;-1:-1:-1;;;5502:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5617:19;5640:12;;;;;;5639:13;5659:83;;;;5688:12;:19;;-1:-1:-1;;;;5688:19:0;;;;;5716:18;5703:4;5716:18;;;5659:83;9066:17:::1;9086:12;:10;:12::i;:::-;9109:6;:18:::0;;-1:-1:-1;;;;;;9109:18:0::1;-1:-1:-1::0;;;;;9109:18:0;::::1;::::0;;::::1;::::0;;;9143:43:::1;::::0;9109:18;;-1:-1:-1;9109:18:0;-1:-1:-1;;9143:43:0::1;::::0;-1:-1:-1;;9143:43:0::1;5750:1;5764:14:::0;5760:57;;;5804:5;5789:20;;-1:-1:-1;;5789:20:0;;;8994:202;:::o;14877:192::-;14963:7;14999:12;14991:6;;;;14983:29;;;;-1:-1:-1;;;14983:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;15035:5:0;;;14877:192::o
Swarm Source
ipfs://2a602b59438172e81bc04e7172ff78af85180a64078d75845567b5f5d368197d
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.