Source Code
Latest 19 from a total of 19 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Increment Curren... | 22644817 | 22 hrs ago | IN | 0 ETH | 0.00047905 | ||||
Buy With ETH Wer... | 22639485 | 40 hrs ago | IN | 0.00386647 ETH | 0.00110173 | ||||
Increment Curren... | 22623395 | 3 days ago | IN | 0 ETH | 0.00110493 | ||||
Buy With Eth | 22594812 | 7 days ago | IN | 0.00017759 ETH | 0.00060653 | ||||
Buy With Eth | 22594488 | 7 days ago | IN | 0.001 ETH | 0.00082639 | ||||
Transfer Ownersh... | 22593718 | 8 days ago | IN | 0 ETH | 0.00009942 | ||||
Set Splits | 22589445 | 8 days ago | IN | 0 ETH | 0.00081417 | ||||
Buy With Eth | 22587575 | 8 days ago | IN | 0.001 ETH | 0.00061437 | ||||
Buy With USDT | 22573829 | 10 days ago | IN | 0 ETH | 0.00053262 | ||||
Buy With USDC | 22573828 | 10 days ago | IN | 0 ETH | 0.00058605 | ||||
Buy With Eth | 22573825 | 10 days ago | IN | 0.1 ETH | 0.00088621 | ||||
Start Claim | 22573823 | 10 days ago | IN | 0 ETH | 0.00051901 | ||||
Buy With USDC | 22573764 | 10 days ago | IN | 0 ETH | 0.00023205 | ||||
Buy With USDT | 22573763 | 10 days ago | IN | 0 ETH | 0.00023702 | ||||
Buy With USDC | 22573762 | 10 days ago | IN | 0 ETH | 0.00022598 | ||||
Buy With Eth | 22573746 | 10 days ago | IN | 0.1 ETH | 0.00035695 | ||||
Whitelist Users ... | 22573567 | 10 days ago | IN | 0 ETH | 0.00014037 | ||||
Set Sanctions | 22573567 | 10 days ago | IN | 0 ETH | 0.00009311 | ||||
Set Admin | 22573567 | 10 days ago | IN | 0 ETH | 0.00009239 |
Latest 18 internal transactions
Advanced mode:
Parent Transaction Hash | Method | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|---|
Transfer | 22639485 | 40 hrs ago | 0.00003828 ETH | ||||
Transfer | 22639485 | 40 hrs ago | 1 wei | ||||
Transfer | 22639485 | 40 hrs ago | 0.0001914 ETH | ||||
Transfer | 22639485 | 40 hrs ago | 0.00363677 ETH | ||||
Transfer | 22594812 | 7 days ago | 0.00000175 ETH | ||||
Transfer | 22594812 | 7 days ago | 1 wei | ||||
Transfer | 22594812 | 7 days ago | 0.00000879 ETH | ||||
Transfer | 22594812 | 7 days ago | 0.00016704 ETH | ||||
Transfer | 22594488 | 7 days ago | 0.00001719 ETH | ||||
Transfer | 22594488 | 7 days ago | 1 wei | ||||
Transfer | 22594488 | 7 days ago | 0.00004914 ETH | ||||
Transfer | 22594488 | 7 days ago | 0.00093366 ETH | ||||
Transfer | 22587575 | 8 days ago | 0.00001964 ETH | ||||
Transfer | 22587575 | 8 days ago | 0.00098035 ETH | ||||
Transfer | 22573825 | 10 days ago | 0.09825491 ETH | ||||
Transfer | 22573825 | 10 days ago | 0.00174508 ETH | ||||
Transfer | 22573746 | 10 days ago | 0.09825491 ETH | ||||
Transfer | 22573746 | 10 days ago | 0.00174508 ETH |
Loading...
Loading
Contract Name:
Presale
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2025-05-27 */ // SPDX-License-Identifier: MIT // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.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 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. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/access/[email protected] // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.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. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { 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 { _transferOwnership(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"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File @openzeppelin/contracts/security/[email protected] // OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { _requireNotPaused(); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { _requirePaused(); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { require(!paused(), "Pausable: paused"); } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { require(paused(), "Pausable: not paused"); } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File @openzeppelin/contracts/security/[email protected] // OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol) pragma solidity ^0.8.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]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being 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 percentage 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. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @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 making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be _NOT_ENTERED require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File @openzeppelin/contracts/token/ERC20/[email protected] // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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); /** * @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 `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount ) external returns (bool); } // File contracts/ETH/PresaleV1.sol // _ _____ _ // __ _____| |__|___ / _ __ __ _ _ _ _ __ ___ ___ _ __ | |_ ___ // \ \ /\ / / _ \ '_ \ |_ \| '_ \ / _` | | | | '_ ` _ \ / _ \ '_ \| __/ __| // \ V V / __/ |_) |__) | |_) | (_| | |_| | | | | | | __/ | | | |_\__ \ // \_/\_/ \___|_.__/____/| .__/ \__,_|\__, |_| |_| |_|\___|_| |_|\__|___/ // |_| |___/ // pragma solidity 0.8.9; interface Aggregator { function latestRoundData() external view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound); } interface StakingManager { function depositByPresale(address _user, uint256 _amount) external; } interface ISanctionsList { function isSanctioned(address addr) external view returns (bool); } contract Presale is ReentrancyGuard, Ownable, Pausable { // Structs for input grouping only struct ContractAddresses { address oracle; address usdt; address usdc; } struct PresaleConfig { uint256 startTime; uint256 maxTokensToBuy; bool dynamicTimeFlag; uint256 timeConstant; } // Presale config uint256 public startTime; uint256 public claimStart; uint256 public maxTokensToBuy; uint256 public baseDecimals; bool public dynamicTimeFlag; uint256 public timeConstant; // Token and payment tracking uint256 public totalTokensSold; uint256 public totalBoughtAndStaked; uint256 public usdRaised; address public saleToken; address public paymentWallet; address public admin; address public manager; // Round and checkpoint data uint256 public currentStep; uint256 public checkPoint; uint256[][3] public rounds; uint256[] public prevCheckpoints; uint256[] public remainingTokensTracker; uint256[] public percentages; address[] public wallets; // Interfaces IERC20 public USDTInterface; IERC20 public USDCInterface; Aggregator public aggregatorInterface; StakingManager public stakingManagerInterface; ISanctionsList public sanctionsList; // Flags and lists bool public applySanctions; bool public stakingWhitelistStatus; //New Variables address public web3PaymentWallet; uint256 public web3PaymentPercentage; uint256 public referrerPercentage; uint256 public initialReferrerPercentage; bool public referrersMustBeBuyers; bool public payInitialReferrers; uint256 public seededAmount; uint256 public seededUsers; mapping(address => uint256) public userDeposits; mapping(address => bool) public hasClaimed; mapping(address => bool) public isBlacklisted; mapping(address => bool) public isWhitelisted; mapping(address => bool) public wertWhitelisted; mapping(address => bool) public blacklistedReferrers; mapping(address => address) public initialReferrers; // Events event SaleTokenUpdated(address token); event SaleTimeSet(uint256 _start, uint256 timestamp); event SaleTimeUpdated(bytes32 indexed key, uint256 prevValue, uint256 newValue, uint256 timestamp); event TokensBought(address indexed user, uint256 indexed tokensBought, address indexed purchaseToken, uint256 amountPaid, uint256 usdEq, uint256 timestamp); event TokensAdded(address indexed token, uint256 noOfTokens, uint256 timestamp); event TokensClaimed(address indexed user, uint256 amount, uint256 timestamp); event ClaimStartUpdated(uint256 prevValue, uint256 newValue, uint256 timestamp); event TokensBoughtAndStaked(address indexed user, uint256 indexed tokensBought, address indexed purchaseToken, uint256 amountPaid, uint256 usdEq, uint256 timestamp); event TokensClaimedAndStaked(address indexed user, uint256 amount, uint256 timestamp); /** * @notice Constructor for the Presale contract. * @param _contracts Struct containing addresses of external contracts (oracle, USDT, USDC). * @param _config Struct containing configuration parameters for the presale (start/end times, max tokens, etc.). * @param _rounds A 3-dimensional array defining the rounds of the presale, containing price tiers or limits per round. */ constructor(ContractAddresses memory _contracts, PresaleConfig memory _config, uint256[][3] memory _rounds) { // --- Input Validations --- require(_contracts.oracle != address(0), 'Zero aggregator address'); require(_contracts.usdt != address(0), 'Zero USDT address'); require(_contracts.usdc != address(0), 'Zero USDC address'); require(_config.startTime > block.timestamp, 'Invalid time'); // --- Contract Interface Initializations --- aggregatorInterface = Aggregator(_contracts.oracle); USDTInterface = IERC20(_contracts.usdt); USDCInterface = IERC20(_contracts.usdc); // --- State Variable Initializations --- baseDecimals = (10 ** 18); startTime = _config.startTime; rounds = _rounds; maxTokensToBuy = _config.maxTokensToBuy; paymentWallet = msg.sender; dynamicTimeFlag = _config.dynamicTimeFlag; timeConstant = _config.timeConstant; manager = msg.sender; // --- Event Emission --- emit SaleTimeSet(startTime, block.timestamp); } //Role Check Functions //Info : Used functions instead of modifiers to reduce contract size function _onlyManagerOrOwner() internal view { require(msg.sender == manager || msg.sender == owner(), 'caller not manager or owner'); } function _onlyAdminOrManagerOrOwner() internal view { require(msg.sender == admin || msg.sender == manager || msg.sender == owner(), 'caller not admin, manager or owner'); } function _onlyManager() internal view { require(msg.sender == manager, 'caller not manager'); } /** * @dev To pause the presale */ function pause() external { _onlyManagerOrOwner(); _pause(); } /** * @dev To unpause the presale */ function unpause() external { _onlyManagerOrOwner(); _unpause(); } /** * @dev To calculate the price in USD for given amount of tokens. * @param _amount No of tokens */ function calculatePrice(uint256 _amount) public view returns (uint256) { uint256 USDTAmount; uint256 total = checkPoint == 0 ? totalTokensSold : checkPoint; require(_amount <= maxTokensToBuy, 'Amount exceeds max tokens to buy'); if (_amount + total > rounds[0][currentStep] || block.timestamp >= rounds[2][currentStep]) { require(currentStep < (rounds[0].length - 1), 'Wrong params'); if (block.timestamp >= rounds[2][currentStep]) { require(rounds[0][currentStep] + _amount <= rounds[0][currentStep + 1], 'Cant Purchase More in individual tx'); USDTAmount = _amount * rounds[1][currentStep + 1]; } else { uint256 tokenAmountForCurrentPrice = rounds[0][currentStep] - total; USDTAmount = tokenAmountForCurrentPrice * rounds[1][currentStep] + (_amount - tokenAmountForCurrentPrice) * rounds[1][currentStep + 1]; } } else USDTAmount = _amount * rounds[1][currentStep]; return USDTAmount; } /** * @dev To update the sale times * @param _startTime New start time */ function changeSaleTimes(uint256 _startTime) external { _onlyManagerOrOwner(); require(_startTime > 0, 'Invalid parameters'); require(block.timestamp < _startTime, 'Sale time in past'); uint256 prevValue = startTime; startTime = _startTime; emit SaleTimeUpdated(bytes32('START'), prevValue, _startTime, block.timestamp); } /** * @dev To get latest ETH price in 10**18 format */ function getLatestPrice() public view returns (uint256) { (, int256 price, , , ) = aggregatorInterface.latestRoundData(); price = (price * (10 ** 10)); return uint256(price); } function setSplits(address[] memory _wallets, uint256[] memory _percentages) public { _onlyManager(); require(_wallets.length == _percentages.length, 'Mismatched arrays'); delete wallets; delete percentages; uint256 totalPercentage = 0; for (uint256 i = 0; i < _wallets.length; i++) { require(_percentages[i] > 0, 'Percentage must be greater than 0'); totalPercentage += _percentages[i]; wallets.push(_wallets[i]); percentages.push(_percentages[i]); } require(totalPercentage == 100000, 'Total percentage must equal 100'); } modifier checkSaleState(uint256 amount) { require(block.timestamp >= startTime, 'Invalid time for buying'); require(amount > 0, 'Invalid sale amount'); _; } /** * @dev To buy into a presale using USDT * @param amount No of tokens to buy * @param stake boolean flag for token staking * @param referrer Address of referrer, can pass zero address if no referrer */ function buyWithUSDT(uint256 amount, bool stake, address referrer) external checkSaleState(amount) checkSanction(_msgSender()) whenNotPaused returns (bool) { uint256 usdPrice = calculatePrice(amount); totalTokensSold += amount; uint256 price = usdPrice / (10 ** 12); if (checkPoint != 0) checkPoint += amount; uint256 total = totalTokensSold > checkPoint ? totalTokensSold : checkPoint; if (total > rounds[0][currentStep] || block.timestamp >= rounds[2][currentStep]) { if (block.timestamp >= rounds[2][currentStep]) { checkPoint = rounds[0][currentStep] + amount; } if (dynamicTimeFlag) { manageTimeDiff(); } uint256 unsoldTokens = total > rounds[0][currentStep] ? 0 : rounds[0][currentStep] - total - amount; remainingTokensTracker.push(unsoldTokens); currentStep += 1; } if (stake) { if (stakingWhitelistStatus) { require(isWhitelisted[_msgSender()], 'User not whitelisted for stake'); } stakingManagerInterface.depositByPresale(_msgSender(), amount * baseDecimals); totalBoughtAndStaked += amount; emit TokensBoughtAndStaked(_msgSender(), amount, address(USDTInterface), price, usdPrice, block.timestamp); } else { userDeposits[_msgSender()] += (amount * baseDecimals); emit TokensBought(_msgSender(), amount, address(USDTInterface), price, usdPrice, block.timestamp); } usdRaised += usdPrice; uint256 ourAllowance = USDTInterface.allowance(_msgSender(), address(this)); require(price <= ourAllowance, 'Make sure to add enough allowance'); splitUSDTValue(price, referrer); return true; } /** * @dev To buy into a presale using USDC * @param amount No of tokens to buy * @param stake boolean flag for token staking * @param referrer Address of referrer, can pass zero address if no referrer */ function buyWithUSDC(uint256 amount, bool stake, address referrer) external checkSaleState(amount) checkSanction(_msgSender()) whenNotPaused returns (bool) { uint256 usdPrice = calculatePrice(amount); totalTokensSold += amount; uint256 price = usdPrice / (10 ** 12); if (checkPoint != 0) checkPoint += amount; uint256 total = totalTokensSold > checkPoint ? totalTokensSold : checkPoint; if (total > rounds[0][currentStep] || block.timestamp >= rounds[2][currentStep]) { if (block.timestamp >= rounds[2][currentStep]) { checkPoint = rounds[0][currentStep] + amount; } if (dynamicTimeFlag) { manageTimeDiff(); } uint256 unsoldTokens = total > rounds[0][currentStep] ? 0 : rounds[0][currentStep] - total - amount; remainingTokensTracker.push(unsoldTokens); currentStep += 1; } if (stake) { if (stakingWhitelistStatus) { require(isWhitelisted[_msgSender()], 'User not whitelisted for stake'); } stakingManagerInterface.depositByPresale(_msgSender(), amount * baseDecimals); totalBoughtAndStaked += amount; emit TokensBoughtAndStaked(_msgSender(), amount, address(USDCInterface), price, usdPrice, block.timestamp); } else { userDeposits[_msgSender()] += (amount * baseDecimals); emit TokensBought(_msgSender(), amount, address(USDCInterface), price, usdPrice, block.timestamp); } usdRaised += usdPrice; uint256 ourAllowance = USDCInterface.allowance(_msgSender(), address(this)); require(price <= ourAllowance, 'Make sure to add enough allowance'); splitUSDCValue(price, referrer); return true; } /** * @dev To buy into a presale using ETH * @param amount No of tokens to buy * @param stake boolean flag for token staking * @param referrer Address of referrer, can pass zero address if no referrer */ function buyWithEth(uint256 amount, bool stake, address referrer) external payable checkSaleState(amount) checkSanction(_msgSender()) whenNotPaused nonReentrant returns (bool) { uint256 usdPrice = calculatePrice(amount); uint256 ethAmount = (usdPrice * baseDecimals) / getLatestPrice(); require(msg.value >= ethAmount, 'Less payment'); uint256 excess = msg.value - ethAmount; totalTokensSold += amount; if (checkPoint != 0) checkPoint += amount; uint256 total = totalTokensSold > checkPoint ? totalTokensSold : checkPoint; if (total > rounds[0][currentStep] || block.timestamp >= rounds[2][currentStep]) { if (block.timestamp >= rounds[2][currentStep]) { checkPoint = rounds[0][currentStep] + amount; } if (dynamicTimeFlag) { manageTimeDiff(); } uint256 unsoldTokens = total > rounds[0][currentStep] ? 0 : rounds[0][currentStep] - total - amount; remainingTokensTracker.push(unsoldTokens); currentStep += 1; } if (stake) { if (stakingWhitelistStatus) { require(isWhitelisted[_msgSender()], 'User not whitelisted for stake'); } stakingManagerInterface.depositByPresale(_msgSender(), amount * baseDecimals); totalBoughtAndStaked += amount; emit TokensBoughtAndStaked(_msgSender(), amount, address(0), ethAmount, usdPrice, block.timestamp); } else { userDeposits[_msgSender()] += (amount * baseDecimals); emit TokensBought(_msgSender(), amount, address(0), ethAmount, usdPrice, block.timestamp); } usdRaised += usdPrice; splitETHValue(ethAmount, referrer, _msgSender()); if (excess > 0) sendValue(payable(_msgSender()), excess); return true; } /** * @dev To buy ETH directly from wert .*wert contract address should be whitelisted if wertBuyRestrictionStatus is set true * @param _user address of the user * @param _amount No of ETH to buy * @param stake boolean flag for token staking * @param referrer Address of referrer, can pass zero address if no referrer */ function buyWithETHWert(address _user, uint256 _amount, bool stake, address referrer) external payable checkSaleState(_amount) checkSanction(_user) whenNotPaused nonReentrant returns (bool) { require(wertWhitelisted[_msgSender()], 'User not whitelisted for this tx'); uint256 usdPrice = calculatePrice(_amount); uint256 ethAmount = (usdPrice * baseDecimals) / getLatestPrice(); require(msg.value >= ethAmount, 'Less payment'); uint256 excess = msg.value - ethAmount; totalTokensSold += _amount; if (checkPoint != 0) checkPoint += _amount; uint256 total = totalTokensSold > checkPoint ? totalTokensSold : checkPoint; if (total > rounds[0][currentStep] || block.timestamp >= rounds[2][currentStep]) { if (block.timestamp >= rounds[2][currentStep]) { checkPoint = rounds[0][currentStep] + _amount; } if (dynamicTimeFlag) { manageTimeDiff(); } uint256 unsoldTokens = total > rounds[0][currentStep] ? 0 : rounds[0][currentStep] - total - _amount; remainingTokensTracker.push(unsoldTokens); currentStep += 1; } if (stake) { if (stakingWhitelistStatus) { require(isWhitelisted[_user], 'User not whitelisted for stake'); } stakingManagerInterface.depositByPresale(_user, _amount * baseDecimals); totalBoughtAndStaked += _amount; emit TokensBoughtAndStaked(_user, _amount, address(0), ethAmount, usdPrice, block.timestamp); } else { userDeposits[_user] += (_amount * baseDecimals); emit TokensBought(_user, _amount, address(0), ethAmount, usdPrice, block.timestamp); } usdRaised += usdPrice; splitETHValue(ethAmount, referrer, _user); if (excess > 0) sendValue(payable(_user), excess); return true; } /** * @dev Helper function to get ETH price for given amount * @param amount No of tokens to buy */ function ethBuyHelper(uint256 amount) external view returns (uint256 ethAmount) { uint256 usdPrice = calculatePrice(amount); ethAmount = (usdPrice * baseDecimals) / getLatestPrice(); } /** * @dev Helper function to get USDT price for given amount * @param amount No of tokens to buy */ function usdtBuyHelper(uint256 amount) external view returns (uint256 usdPrice) { usdPrice = calculatePrice(amount); usdPrice = usdPrice / (10 ** 12); } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, 'Low balance'); (bool success, ) = recipient.call{value: amount}(''); require(success, 'ETH Payment failed'); } function splitETHValue(uint256 _amount, address _referrer, address _user) internal { uint256 amountForWeb3PaymentWallet; if (web3PaymentWallet != address(0)) { amountForWeb3PaymentWallet = payReferrersHelper(_amount, web3PaymentWallet, web3PaymentPercentage, address(0)); } uint256 amountForReferrers = payReferrers(_amount, _user, _referrer, address(0)); _amount -= (amountForWeb3PaymentWallet + amountForReferrers); if (wallets.length == 0) { require(paymentWallet != address(0), 'Payment wallet not set'); sendValue(payable(paymentWallet), _amount); } else { uint256 tempCalc; for (uint256 i = 0; i < wallets.length; i++) { uint256 amountToTransfer = (_amount * percentages[i]) / 100000; sendValue(payable(wallets[i]), amountToTransfer); tempCalc += amountToTransfer; } if ((_amount - tempCalc) > 0) { sendValue(payable(wallets[wallets.length - 1]), _amount - tempCalc); } } } function splitUSDTValue(uint256 _amount, address _referrer) internal { uint256 amountForWeb3PaymentWallet; if (web3PaymentWallet != address(0)) { amountForWeb3PaymentWallet = payReferrersHelper(_amount, web3PaymentWallet, web3PaymentPercentage, address(USDTInterface)); } uint256 amountForReferrers = payReferrers(_amount, _msgSender(), _referrer, address(USDTInterface)); _amount -= (amountForWeb3PaymentWallet + amountForReferrers); if (wallets.length == 0) { require(paymentWallet != address(0), 'Payment wallet not set'); (bool success, ) = address(USDTInterface).call(abi.encodeWithSignature('transferFrom(address,address,uint256)', _msgSender(), paymentWallet, _amount)); require(success, 'Token payment failed'); } else { uint256 tempCalc; for (uint256 i = 0; i < wallets.length; i++) { uint256 amountToTransfer = (_amount * percentages[i]) / 100000; (bool success, ) = address(USDTInterface).call(abi.encodeWithSignature('transferFrom(address,address,uint256)', _msgSender(), wallets[i], amountToTransfer)); require(success, 'Token payment failed'); tempCalc += amountToTransfer; } if ((_amount - tempCalc) > 0) { (bool success, ) = address(USDTInterface).call(abi.encodeWithSignature('transferFrom(address,address,uint256)', _msgSender(), wallets[wallets.length - 1], _amount - tempCalc)); require(success, 'Token payment failed'); } } } function splitUSDCValue(uint256 _amount, address _referrer) internal { uint256 amountForWeb3PaymentWallet; if (web3PaymentWallet != address(0)) { amountForWeb3PaymentWallet = payReferrersHelper(_amount, web3PaymentWallet, web3PaymentPercentage, address(USDCInterface)); } uint256 amountForReferrers = payReferrers(_amount, _msgSender(), _referrer, address(USDCInterface)); _amount -= (amountForWeb3PaymentWallet + amountForReferrers); if (wallets.length == 0) { require(paymentWallet != address(0), 'Payment wallet not set'); (bool success, ) = address(USDCInterface).call(abi.encodeWithSignature('transferFrom(address,address,uint256)', _msgSender(), paymentWallet, _amount)); require(success, 'Token payment failed'); } else { uint256 tempCalc; for (uint256 i = 0; i < wallets.length; i++) { uint256 amountToTransfer = (_amount * percentages[i]) / 100000; (bool success, ) = address(USDCInterface).call(abi.encodeWithSignature('transferFrom(address,address,uint256)', _msgSender(), wallets[i], amountToTransfer)); require(success, 'Token payment failed'); tempCalc += amountToTransfer; } if ((_amount - tempCalc) > 0) { (bool success, ) = address(USDCInterface).call(abi.encodeWithSignature('transferFrom(address,address,uint256)', _msgSender(), wallets[wallets.length - 1], _amount - tempCalc)); require(success, 'Token payment failed'); } } } /** * @dev to initialize staking manager with new address * @param _stakingManagerAddress address of the staking smartcontract */ function setStakingManager(address _stakingManagerAddress) external { _onlyManagerOrOwner(); require(_stakingManagerAddress != address(0), 'staking manager cannot be initialized with zero address'); stakingManagerInterface = StakingManager(_stakingManagerAddress); IERC20(saleToken).approve(_stakingManagerAddress, type(uint256).max); } /** * @dev To set the claim start time and sale token address by the owner * @param noOfTokens no of tokens to add to the contract * @param _saleToken sale toke address */ function startClaim(uint256 noOfTokens, address _saleToken, address _stakingManagerAddress) external returns (bool) { _onlyManagerOrOwner(); require(_saleToken != address(0), 'Zero token address'); saleToken = _saleToken; stakingManagerInterface = StakingManager(_stakingManagerAddress); IERC20(_saleToken).approve(_stakingManagerAddress, type(uint256).max); bool success = IERC20(_saleToken).transferFrom(_msgSender(), address(this), noOfTokens); require(success, 'Token transfer failed'); emit TokensAdded(_saleToken, noOfTokens, block.timestamp); return true; } /** * @dev To set status for claim whitelisting * @param _status bool value */ function setStakingWhitelistStatus(bool _status) external { _onlyManagerOrOwner(); stakingWhitelistStatus = _status; } function setSaleToken(address _saleToken) external { _onlyManagerOrOwner(); require(_saleToken != address(0), 'Zero token address'); saleToken = _saleToken; emit SaleTokenUpdated(saleToken); } /** * @dev To change the claim start time by the owner * @param _claimStart new claim start time */ function changeClaimStart(uint256 _claimStart) external returns (bool) { _onlyManagerOrOwner(); uint256 prevValue = claimStart; claimStart = _claimStart; emit ClaimStartUpdated(prevValue, _claimStart, block.timestamp); return true; } /** * @dev To claim tokens after claiming starts */ function claim() external whenNotPaused returns (bool) { require(saleToken != address(0), 'Sale token not added'); require(!isBlacklisted[_msgSender()], 'This Address is Blacklisted'); require((claimStart > 0 && block.timestamp >= claimStart) || isWhitelisted[_msgSender()], 'Claim has not started yet'); require(!hasClaimed[_msgSender()], 'Already claimed'); hasClaimed[_msgSender()] = true; uint256 amount = userDeposits[_msgSender()]; require(amount > 0, 'Nothing to claim'); delete userDeposits[_msgSender()]; bool success = IERC20(saleToken).transfer(_msgSender(), amount); require(success, 'Token transfer failed'); emit TokensClaimed(_msgSender(), amount, block.timestamp); return true; } function claimAndStake() external whenNotPaused returns (bool) { require(saleToken != address(0), 'Sale token not added'); require(!isBlacklisted[_msgSender()], 'This Address is Blacklisted'); if (stakingWhitelistStatus) { require(isWhitelisted[_msgSender()], 'User not whitelisted for stake'); } uint256 amount = userDeposits[_msgSender()]; require(amount > 0, 'Nothing to stake'); totalBoughtAndStaked += amount / baseDecimals; stakingManagerInterface.depositByPresale(_msgSender(), amount); delete userDeposits[_msgSender()]; emit TokensClaimedAndStaked(_msgSender(), amount, block.timestamp); return true; } /** * @dev To add wert contract addresses to whitelist * @param _whitelistStatus true for whitelisting, false to remove from whitelist * @param _addressesToWhitelist addresses of the contract */ function whitelistUsersForWERT(bool _whitelistStatus, address[] calldata _addressesToWhitelist) external { _onlyManagerOrOwner(); for (uint256 i = 0; i < _addressesToWhitelist.length; i++) { wertWhitelisted[_addressesToWhitelist[i]] = _whitelistStatus; } } function changeMaxTokensToBuy(uint256 _maxTokensToBuy) external { _onlyManagerOrOwner(); require(_maxTokensToBuy > 0, 'Zero max tokens to buy value'); maxTokensToBuy = _maxTokensToBuy; } function changeRoundsData(uint256[][3] memory _rounds) external { _onlyManagerOrOwner(); rounds = _rounds; } /** * @dev To add users to blacklist which restricts blacklisted users from claiming * @param _blacklistStatus true for blacklisting, false to remove from blacklist * @param _usersToBlacklist addresses of the users */ function blacklistUsers(bool _blacklistStatus, address[] calldata _usersToBlacklist) external { _onlyManagerOrOwner(); for (uint256 i = 0; i < _usersToBlacklist.length; i++) { isBlacklisted[_usersToBlacklist[i]] = _blacklistStatus; } } /** * @dev To add users to whitelist which restricts users from claiming if claimWhitelistStatus is true * @param _whitelistStatus true for whitelisting, false to remove from whitelist * @param _usersToWhitelist addresses of the users */ function whitelistUsers(bool _whitelistStatus, address[] calldata _usersToWhitelist) external { _onlyManagerOrOwner(); for (uint256 i = 0; i < _usersToWhitelist.length; i++) { isWhitelisted[_usersToWhitelist[i]] = _whitelistStatus; } } /** * @dev To set payment wallet address * @param _newPaymentWallet new payment wallet address */ function changePaymentWallet(address _newPaymentWallet) external { _onlyManagerOrOwner(); require(_newPaymentWallet != address(0), 'address cannot be zero'); paymentWallet = _newPaymentWallet; } /** * @dev To manage time gap between two rounds */ function manageTimeDiff() internal { for (uint256 i; i < rounds[2].length - currentStep; i++) { rounds[2][currentStep + i] = block.timestamp + i * timeConstant; } } /** * @dev To set time constant for manageTimeDiff() * @param _timeConstant time in <days>*24*60*60 format */ function setTimeConstant(uint256 _timeConstant) external { _onlyManagerOrOwner(); timeConstant = _timeConstant; } /** * @dev To get array of round details at once * @param _no array index */ function roundDetails(uint256 _no) external view returns (uint256[] memory) { return rounds[_no]; } /** * @dev to update userDeposits for purchases made on other chains * @param _users array of users * @param _userDeposits array of userDeposits associated with users */ function userSeeder(address[] calldata _users, uint256[] calldata _userDeposits) external { _onlyManagerOrOwner(); require(_users.length == _userDeposits.length, 'Length mismatch'); uint256 totalDepositsInCall = 0; for (uint256 i = 0; i < _users.length; i++) { userDeposits[_users[i]] += _userDeposits[i]; totalDepositsInCall += _userDeposits[i]; } seededUsers += _users.length; seededAmount += totalDepositsInCall; } /** * @dev To increment the rounds from backend */ function incrementCurrentStep() external { _onlyAdminOrManagerOrOwner(); prevCheckpoints.push(checkPoint); if (dynamicTimeFlag) { manageTimeDiff(); } if (checkPoint < rounds[0][currentStep]) { if (currentStep == 0) { remainingTokensTracker.push(rounds[0][currentStep] - totalTokensSold); } else { remainingTokensTracker.push(rounds[0][currentStep] - checkPoint); } checkPoint = rounds[0][currentStep]; } currentStep++; } /** * @dev To set admin * @param _admin new admin wallet address */ function setAdmin(address _admin) external { _onlyManagerOrOwner(); admin = _admin; } /** * @dev To change details of the round * @param _step round for which you want to change the details * @param _checkpoint token tracker amount */ function setCurrentStep(uint256 _step, uint256 _checkpoint) external { _onlyManagerOrOwner(); currentStep = _step; checkPoint = _checkpoint; } /** * @dev To set time shift functionality on/off * @param _dynamicTimeFlag bool value */ function setDynamicTimeFlag(bool _dynamicTimeFlag) external { _onlyManagerOrOwner(); dynamicTimeFlag = _dynamicTimeFlag; } /** * @dev Function to return remainingTokenTracker Array */ function trackRemainingTokens() external view returns (uint256[] memory) { return remainingTokensTracker; } /** * @dev To update remainingTokensTracker Array (pass 0 to delete existing array) * @param _unsoldTokens input parameters in uint256 array format */ function setRemainingTokensArray(uint256[] memory _unsoldTokens) public { _onlyAdminOrManagerOrOwner(); require(_unsoldTokens.length != 0, 'cannot update invalid values'); if (_unsoldTokens.length == 1 && _unsoldTokens[0] == 0) { delete remainingTokensTracker; } else { delete remainingTokensTracker; for (uint256 i; i < _unsoldTokens.length; i++) { remainingTokensTracker.push(_unsoldTokens[i]); } } } /** * @dev Sets the sanction details * @param _sanctionContract addresses of the contract * @param _applySanction boolean on whether the contract has to consider sanction list or not */ function setSanctions(address _sanctionContract, bool _applySanction) external { _onlyManagerOrOwner(); require(_sanctionContract != address(0)); sanctionsList = ISanctionsList(_sanctionContract); applySanctions = _applySanction; } /** * @dev Checks if sanction list is enabled and if user is in sanction list, reverts the transaction. * @param _user addresses of the user */ modifier checkSanction(address _user) { if (applySanctions) { require(!sanctionsList.isSanctioned(_user), 'Address present in sanction list'); } _; } function changeManager(address _manager) external { _onlyManager(); manager = _manager; } function renounceManager() external onlyOwner { manager = address(0); } /** * @dev To Update referral Details in a single go * @param _refereePercentage new percentage for referrals. * @param _initialReferrerPercentage new percentage for initial referrals. * @param _paymentAddress new web3 payment wallet address * @param _percentage new percentage. * @param _referrersMustBeBuyers boolean value * @param _payInitialReferrers boolean value */ function referrerDetails(uint256 _refereePercentage, uint256 _initialReferrerPercentage, address _paymentAddress, uint256 _percentage, bool _referrersMustBeBuyers, bool _payInitialReferrers) external { _onlyManagerOrOwner(); referrerPercentage = _refereePercentage; initialReferrerPercentage = _initialReferrerPercentage; web3PaymentWallet = _paymentAddress; web3PaymentPercentage = _percentage; referrersMustBeBuyers = _referrersMustBeBuyers; payInitialReferrers = _payInitialReferrers; } /** * @dev To Update referral percentage * @param _refereePercentage new percentage for referrals. * @param _initialReferrerPercentage new percentage for initial referrals. */ function updateReferrerPercentage(uint256 _refereePercentage, uint256 _initialReferrerPercentage) external { _onlyManagerOrOwner(); referrerPercentage = _refereePercentage; initialReferrerPercentage = _initialReferrerPercentage; } /** * @dev To Update referrers should be buyers or not for referral * @param _referrersMustBeBuyers boolean value */ function updateReferrersMustBeBuyers(bool _referrersMustBeBuyers) external { _onlyManagerOrOwner(); referrersMustBeBuyers = _referrersMustBeBuyers; } /** * @dev To determine if initial referees are to be paid * @param _payInitialReferrers boolean value */ function shouldPayInitialReferrers(bool _payInitialReferrers) external { _onlyManagerOrOwner(); payInitialReferrers = _payInitialReferrers; } /** * @dev To Update web3 payment details * @param _paymentAddress new web3 payment wallet address * @param _percentage new percentage. */ function updateWeb3PaymentDetails(address _paymentAddress, uint256 _percentage) external { _onlyManagerOrOwner(); web3PaymentWallet = _paymentAddress; web3PaymentPercentage = _percentage; } /** * @dev To add users to blacklisted Referral mapping * @param _referrers addresses of the users */ function blacklistReferrer(address[] calldata _referrers) external { _onlyManagerOrOwner(); uint256 referrersLen = _referrers.length; for (uint256 i = 0; i < referrersLen; i++) { blacklistedReferrers[_referrers[i]] = true; } } /** * @dev To remove users from blacklisted Referral mapping * @param _referrers addresses of the users */ function removeFromBlacklistedReferrerMapping(address[] calldata _referrers) external { _onlyManagerOrOwner(); uint256 referrersLen = _referrers.length; for (uint256 i = 0; i < referrersLen; i++) { blacklistedReferrers[_referrers[i]] = false; } } /** * @dev Returns a boolean based on referral can be applied or not * @param _referrer addresses of the users */ function checkReferralStatus(address _referrer) public view returns (bool) { if (_referrer == address(0) || blacklistedReferrers[_referrer] || _referrer == _msgSender()) { return false; } if (!referrersMustBeBuyers) { return true; } return userDeposits[_referrer] > 0; } /** * @dev Pays referrers in USDT/ETH and returns the total amount paid. * @param _amount The base amount used for referral payment calculations. * @param _referred The address of the referred user. * @param _referrer The address of the referring user. */ function payReferrers(uint256 _amount, address _referred, address _referrer, address _token) internal returns (uint256) { uint256 totalPaid; address referrer = getOrInsertInitialReferrer(_referred, _referrer); if (!checkReferralStatus(referrer)) { return totalPaid; } totalPaid += payReferrersHelper(_amount, referrer, referrerPercentage, _token); if (!payInitialReferrers) { return totalPaid; } address initialReferrer = getOrInsertInitialReferrer(referrer, address(0)); if (!checkReferralStatus(initialReferrer)) { return totalPaid; } return (totalPaid + payReferrersHelper(_amount, initialReferrer, initialReferrerPercentage, _token)); } /** * @dev Helper function to pay a referrer and return the amount paid. * @param _amount The base amount for payment calculation. * @param _referrer The address of the referrer. * @param _percentage The percentage of the base amount to pay. */ function payReferrersHelper(uint256 _amount, address _referrer, uint256 _percentage, address _token) internal returns (uint256) { uint256 amountForReferrer = (_amount * _percentage) / 100; if (_token != address(0)) { (bool success, ) = _token.call(abi.encodeWithSignature('transferFrom(address,address,uint256)', _msgSender(), _referrer, amountForReferrer)); require(success, 'Token payment failed'); } else { sendValue(payable(_referrer), amountForReferrer); } return amountForReferrer; } /** * @dev Returns the initial referrer or inserts one if not present. * @param _referred The address of the referred user. * @param _referrer The address of the referrer to insert if missing. */ function getOrInsertInitialReferrer(address _referred, address _referrer) internal returns (address) { if (initialReferrers[_referred] == address(0) && _referred != _referrer) { initialReferrers[_referred] = _referrer; } return initialReferrers[_referred]; } function tokenTransfer(address _token, uint256 amount) external { _onlyManagerOrOwner(); bool success = IERC20(_token).transfer(msg.sender, amount); require(success, 'Token transfer failed'); } /** * @notice Resets the presale to its initial state with new round configurations. * @dev This function can only be called by the manager or owner of the contract. * @param _rounds A 3-element array of arrays, where each inner array defines a presale round. * @return success A boolean indicating whether the presale reset was successful (always true). */ function resetPresale(uint256[][3] memory _rounds) external returns (bool) { _onlyManagerOrOwner(); rounds = _rounds; currentStep = 0; checkPoint = 0; delete remainingTokensTracker; return true; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"components":[{"internalType":"address","name":"oracle","type":"address"},{"internalType":"address","name":"usdt","type":"address"},{"internalType":"address","name":"usdc","type":"address"}],"internalType":"struct Presale.ContractAddresses","name":"_contracts","type":"tuple"},{"components":[{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"maxTokensToBuy","type":"uint256"},{"internalType":"bool","name":"dynamicTimeFlag","type":"bool"},{"internalType":"uint256","name":"timeConstant","type":"uint256"}],"internalType":"struct Presale.PresaleConfig","name":"_config","type":"tuple"},{"internalType":"uint256[][3]","name":"_rounds","type":"uint256[][3]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"prevValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"ClaimStartUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_start","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SaleTimeSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"key","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"prevValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SaleTimeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"}],"name":"SaleTokenUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"noOfTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TokensAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokensBought","type":"uint256"},{"indexed":true,"internalType":"address","name":"purchaseToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountPaid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"usdEq","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TokensBought","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokensBought","type":"uint256"},{"indexed":true,"internalType":"address","name":"purchaseToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountPaid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"usdEq","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TokensBoughtAndStaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TokensClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TokensClaimedAndStaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"USDCInterface","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDTInterface","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"aggregatorInterface","outputs":[{"internalType":"contract Aggregator","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"applySanctions","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseDecimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_referrers","type":"address[]"}],"name":"blacklistReferrer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_blacklistStatus","type":"bool"},{"internalType":"address[]","name":"_usersToBlacklist","type":"address[]"}],"name":"blacklistUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklistedReferrers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bool","name":"stake","type":"bool"},{"internalType":"address","name":"referrer","type":"address"}],"name":"buyWithETHWert","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"stake","type":"bool"},{"internalType":"address","name":"referrer","type":"address"}],"name":"buyWithEth","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"stake","type":"bool"},{"internalType":"address","name":"referrer","type":"address"}],"name":"buyWithUSDC","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"stake","type":"bool"},{"internalType":"address","name":"referrer","type":"address"}],"name":"buyWithUSDT","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"calculatePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_claimStart","type":"uint256"}],"name":"changeClaimStart","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_manager","type":"address"}],"name":"changeManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTokensToBuy","type":"uint256"}],"name":"changeMaxTokensToBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newPaymentWallet","type":"address"}],"name":"changePaymentWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[][3]","name":"_rounds","type":"uint256[][3]"}],"name":"changeRoundsData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startTime","type":"uint256"}],"name":"changeSaleTimes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"checkPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_referrer","type":"address"}],"name":"checkReferralStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimAndStake","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentStep","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dynamicTimeFlag","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ethBuyHelper","outputs":[{"internalType":"uint256","name":"ethAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLatestPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"hasClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"incrementCurrentStep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialReferrerPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"initialReferrers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTokensToBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payInitialReferrers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paymentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"percentages","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"prevCheckpoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_refereePercentage","type":"uint256"},{"internalType":"uint256","name":"_initialReferrerPercentage","type":"uint256"},{"internalType":"address","name":"_paymentAddress","type":"address"},{"internalType":"uint256","name":"_percentage","type":"uint256"},{"internalType":"bool","name":"_referrersMustBeBuyers","type":"bool"},{"internalType":"bool","name":"_payInitialReferrers","type":"bool"}],"name":"referrerDetails","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"referrerPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"referrersMustBeBuyers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"remainingTokensTracker","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_referrers","type":"address[]"}],"name":"removeFromBlacklistedReferrerMapping","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[][3]","name":"_rounds","type":"uint256[][3]"}],"name":"resetPresale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_no","type":"uint256"}],"name":"roundDetails","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"rounds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saleToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sanctionsList","outputs":[{"internalType":"contract ISanctionsList","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"seededAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"seededUsers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_admin","type":"address"}],"name":"setAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_step","type":"uint256"},{"internalType":"uint256","name":"_checkpoint","type":"uint256"}],"name":"setCurrentStep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_dynamicTimeFlag","type":"bool"}],"name":"setDynamicTimeFlag","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_unsoldTokens","type":"uint256[]"}],"name":"setRemainingTokensArray","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_saleToken","type":"address"}],"name":"setSaleToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sanctionContract","type":"address"},{"internalType":"bool","name":"_applySanction","type":"bool"}],"name":"setSanctions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_wallets","type":"address[]"},{"internalType":"uint256[]","name":"_percentages","type":"uint256[]"}],"name":"setSplits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_stakingManagerAddress","type":"address"}],"name":"setStakingManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setStakingWhitelistStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_timeConstant","type":"uint256"}],"name":"setTimeConstant","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_payInitialReferrers","type":"bool"}],"name":"shouldPayInitialReferrers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingManagerInterface","outputs":[{"internalType":"contract StakingManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingWhitelistStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"noOfTokens","type":"uint256"},{"internalType":"address","name":"_saleToken","type":"address"},{"internalType":"address","name":"_stakingManagerAddress","type":"address"}],"name":"startClaim","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timeConstant","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"tokenTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalBoughtAndStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokensSold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"trackRemainingTokens","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":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_refereePercentage","type":"uint256"},{"internalType":"uint256","name":"_initialReferrerPercentage","type":"uint256"}],"name":"updateReferrerPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_referrersMustBeBuyers","type":"bool"}],"name":"updateReferrersMustBeBuyers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_paymentAddress","type":"address"},{"internalType":"uint256","name":"_percentage","type":"uint256"}],"name":"updateWeb3PaymentDetails","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"usdRaised","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"usdtBuyHelper","outputs":[{"internalType":"uint256","name":"usdPrice","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userDeposits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"},{"internalType":"uint256[]","name":"_userDeposits","type":"uint256[]"}],"name":"userSeeder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"wallets","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"web3PaymentPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"web3PaymentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"wertWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_whitelistStatus","type":"bool"},{"internalType":"address[]","name":"_usersToWhitelist","type":"address[]"}],"name":"whitelistUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_whitelistStatus","type":"bool"},{"internalType":"address[]","name":"_addressesToWhitelist","type":"address[]"}],"name":"whitelistUsersForWERT","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620063153803806200631583398101604081905262000034916200057c565b6001600055620000443362000286565b6001805460ff60a01b1916905582516001600160a01b0316620000ae5760405162461bcd60e51b815260206004820152601760248201527f5a65726f2061676772656761746f72206164647265737300000000000000000060448201526064015b60405180910390fd5b60208301516001600160a01b0316620000fe5760405162461bcd60e51b81526020600482015260116024820152705a65726f2055534454206164647265737360781b6044820152606401620000a5565b60408301516001600160a01b03166200014e5760405162461bcd60e51b81526020600482015260116024820152705a65726f2055534443206164647265737360781b6044820152606401620000a5565b815142106200018f5760405162461bcd60e51b815260206004820152600c60248201526b496e76616c69642074696d6560a01b6044820152606401620000a5565b8251601a80546001600160a01b039283166001600160a01b031991821617909155602085015160188054918416918316919091179055604085015160198054919093169116179055670de0b6b3a76400006005558151600255620001f76011826003620002d8565b50602082810151600455600c8054336001600160a01b031991821681179092556040808601516006805460ff19169115159190911790556060860151600755600e80549092169092179055600254815190815242928101929092527f10b2d77c859ecee49aef95d7c6b9c94edec77023fb4bbd93271da218a1a551f5910160405180910390a150505062000669565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82600381019282156200031d579160200282015b828111156200031d57825180516200030c9184916020909101906200032f565b5091602001919060010190620002ec565b506200032b9291506200037b565b5090565b8280548282559060005260206000209081019282156200036d579160200282015b828111156200036d57825182559160200191906001019062000350565b506200032b9291506200039c565b808211156200032b576000620003928282620003b3565b506001016200037b565b5b808211156200032b57600081556001016200039d565b5080546000825590600052602060002090810190620003d391906200039c565b50565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715620004115762000411620003d6565b60405290565b604051608081016001600160401b0381118282101715620004115762000411620003d6565b604051601f8201601f191681016001600160401b0381118282101715620004675762000467620003d6565b604052919050565b80516001600160a01b03811681146200048757600080fd5b919050565b6000601f83818401126200049f57600080fd5b620004a9620003ec565b806060850186811115620004bc57600080fd5b855b81811015620005705780516001600160401b0380821115620004e05760008081fd5b81890191508987830112620004f55760008081fd5b81516020828211156200050c576200050c620003d6565b8160051b92506200051f8184016200043c565b828152928401810192818101908d8511156200053d57600093508384fd5b948201945b848610156200055d5785518252948201949082019062000542565b89525090960195505050602001620004be565b50909695505050505050565b60008060008385036101008112156200059457600080fd5b6060811215620005a357600080fd5b620005ad620003ec565b620005b8866200046f565b8152620005c8602087016200046f565b6020820152620005db604087016200046f565b604082015293506080605f1982011215620005f557600080fd5b506200060062000417565b606085015181526080850151602082015260a085015180151581146200062557600080fd5b604082015260c0850151606082015260e08501519092506001600160401b038111156200065157600080fd5b6200065f868287016200048c565b9150509250925092565b615c9c80620006796000396000f3fe6080604052600436106105025760003560e01c80638dcf67ca11610297578063d1690fec11610165578063f0120ff8116100cc578063f851a44011610085578063f851a44014610f8b578063f885838614610fab578063f8b91abe14610fcb578063fe21a94f14610fe0578063fe575a8714610ff3578063ff14ca111461102357600080fd5b8063f0120ff814610ed5578063f04d688f14610ef5578063f056633414610f0b578063f0ff892314610f2b578063f2fde38b14610f4b578063f597573f14610f6b57600080fd5b8063e985e3671161011e578063e985e36714610e1f578063eac0d11514610e3f578063eadd94ec14610e5f578063eb66e2ef14610e75578063ec571c6a14610e95578063efc8647814610eb557600080fd5b8063d1690fec14610d69578063d258919614610d89578063e19648db14610da9578063e32204dd14610dc9578063e6da921314610de9578063e6e78d0614610e0957600080fd5b8063b4d94f4411610209578063c6cc2672116101c2578063c6cc267214610cd9578063c8adff0114610cef578063ca1600b614610d04578063cad0055614610d1e578063cb1a4fc014610d3e578063cff805ab14610d5357600080fd5b8063b4d94f4414610bf6578063b8d612ec14610c2c578063ba166a3914610c4c578063bb695f2a14610c79578063c23326f314610c99578063c49cc64514610cb957600080fd5b8063a29f481c1161025b578063a29f481c14610b36578063a2db641614610b56578063a3fbbaae14610b76578063a6d42e4e14610b96578063ae10426514610bb6578063b00bba6a14610bd657600080fd5b80638dcf67ca14610aac5780638e15f47314610acb5780639a89c1fb14610ae05780639cfa0f7c14610b00578063a1fe1dee14610b1657600080fd5b80634e71d92d116103d45780636ddcca29116103465780637ad71f72116102ff5780637ad71f7214610a0d5780637f6fb25314610a2d5780638456cb5914610a4357806386fc6ea814610a5857806388c3e45814610a785780638da5cb5b14610a8e57600080fd5b80636ddcca29146109525780636e6973dd14610972578063704b6c0214610992578063715018a6146109b257806373b2e80e146109c757806378e97925146109f757600080fd5b80635df4f353116103985780635df4f3531461089757806361ad0b7c146108c757806363b20117146108e757806363e40879146108fd578063641046f41461091d57806368cdafe61461093257600080fd5b80634e71d92d1461080d57806350429ee4146108225780635bc34f71146108425780635c975abb146108585780635ddc56881461087757600080fd5b80632dc358e8116104785780633f4ba83a116104315780633f4ba83a146107795780634151848f1461078e578063415eed46146107a157806343568eae146107c1578063481c6a75146107d75780634bc6191a146107f757600080fd5b80632dc358e8146106bc57806330e74f08146106dc57806333f76178146106fd57806337ba50941461071357806338646608146107295780633af32abf1461074957600080fd5b8063232e95be116104ca578063232e95be146105e357806323a8f1c01461060457806325312e5414610624578063278c278b1461065c57806329a5a0b61461067c5780632c73304d1461069c57600080fd5b8063032bd1f71461050757806307f180821461054c5780630a200fc71461056c5780630ba36dcd1461058e5780631fa2bc92146105c9575b600080fd5b34801561051357600080fd5b50610537610522366004615212565b60296020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561055857600080fd5b5061053761056736600461522d565b611043565b34801561057857600080fd5b5061058c610587366004615254565b61109d565b005b34801561059a57600080fd5b506105bb6105a9366004615212565b60246020526000908152604090205481565b604051908152602001610543565b3480156105d557600080fd5b506006546105379060ff1681565b3480156105ef57600080fd5b50601c5461053790600160a81b900460ff1681565b34801561061057600080fd5b5061058c61061f36600461522d565b6110b8565b34801561063057600080fd5b50601954610644906001600160a01b031681565b6040516001600160a01b039091168152602001610543565b34801561066857600080fd5b5061058c61067736600461522d565b6110c5565b34801561068857600080fd5b506105bb61069736600461522d565b611127565b3480156106a857600080fd5b5061058c6106b7366004615271565b61115b565b3480156106c857600080fd5b5061058c6106d73660046153a7565b6111a3565b3480156106e857600080fd5b50601c5461053790600160a01b900460ff1681565b34801561070957600080fd5b506105bb60055481565b34801561071f57600080fd5b506105bb60225481565b34801561073557600080fd5b50601b54610644906001600160a01b031681565b34801561075557600080fd5b50610537610764366004615212565b60276020526000908152604090205460ff1681565b34801561078557600080fd5b5061058c611299565b61053761079c3660046153dc565b6112ab565b3480156107ad57600080fd5b506105376107bc36600461541a565b6117b9565b3480156107cd57600080fd5b506105bb60075481565b3480156107e357600080fd5b50600e54610644906001600160a01b031681565b34801561080357600080fd5b506105bb601e5481565b34801561081957600080fd5b506105376117f1565b34801561082e57600080fd5b50601d54610644906001600160a01b031681565b34801561084e57600080fd5b506105bb600f5481565b34801561086457600080fd5b50600154600160a01b900460ff16610537565b34801561088357600080fd5b5061058c6108923660046154b5565b611ad9565b3480156108a357600080fd5b506105376108b2366004615212565b60286020526000908152604090205460ff1681565b3480156108d357600080fd5b5061058c6108e2366004615254565b611cd4565b3480156108f357600080fd5b506105bb60085481565b34801561090957600080fd5b506105bb61091836600461522d565b611cef565b34801561092957600080fd5b5061058c611d11565b34801561093e57600080fd5b5061058c61094d366004615575565b611e6c565b34801561095e57600080fd5b5061058c61096d3660046155eb565b611f16565b34801561097e57600080fd5b5061058c61098d3660046155eb565b611f95565b34801561099e57600080fd5b5061058c6109ad366004615212565b61200e565b3480156109be57600080fd5b5061058c612038565b3480156109d357600080fd5b506105376109e2366004615212565b60256020526000908152604090205460ff1681565b348015610a0357600080fd5b506105bb60025481565b348015610a1957600080fd5b50610644610a2836600461522d565b61204a565b348015610a3957600080fd5b506105bb60095481565b348015610a4f57600080fd5b5061058c612074565b348015610a6457600080fd5b5061058c610a73366004615254565b612084565b348015610a8457600080fd5b506105bb601f5481565b348015610a9a57600080fd5b506001546001600160a01b0316610644565b348015610ab857600080fd5b5060215461053790610100900460ff1681565b348015610ad757600080fd5b506105bb6120a6565b348015610aec57600080fd5b5061058c610afb366004615640565b612146565b348015610b0c57600080fd5b506105bb60045481565b348015610b2257600080fd5b5061058c610b31366004615662565b612159565b348015610b4257600080fd5b5061058c610b51366004615212565b61229a565b348015610b6257600080fd5b5061058c610b713660046156ce565b612341565b348015610b8257600080fd5b5061058c610b91366004615212565b6123bc565b348015610ba257600080fd5b5061058c610bb136600461541a565b6123e6565b348015610bc257600080fd5b506105bb610bd136600461522d565b6123fb565b348015610be257600080fd5b5061058c610bf1366004615212565b612731565b348015610c0257600080fd5b50610644610c11366004615212565b602a602052600090815260409020546001600160a01b031681565b348015610c3857600080fd5b5061058c610c47366004615640565b612853565b348015610c5857600080fd5b50610c6c610c6736600461522d565b612866565b6040516105439190615710565b348015610c8557600080fd5b50610537610c94366004615212565b6128d2565b348015610ca557600080fd5b506105bb610cb436600461522d565b612952565b348015610cc557600080fd5b50601a54610644906001600160a01b031681565b348015610ce557600080fd5b506105bb60235481565b348015610cfb57600080fd5b50610c6c612973565b348015610d1057600080fd5b506021546105379060ff1681565b348015610d2a57600080fd5b5061058c610d39366004615212565b6129cb565b348015610d4a57600080fd5b50610537612a44565b348015610d5f57600080fd5b506105bb60105481565b348015610d7557600080fd5b50610537610d843660046153dc565b612c9e565b348015610d9557600080fd5b5061058c610da43660046156ce565b613219565b348015610db557600080fd5b506105bb610dc436600461522d565b613294565b348015610dd557600080fd5b50600c54610644906001600160a01b031681565b348015610df557600080fd5b506105bb610e04366004615640565b6132a4565b348015610e1557600080fd5b506105bb60205481565b348015610e2b57600080fd5b50600b54610644906001600160a01b031681565b348015610e4b57600080fd5b5061058c610e5a366004615254565b6132d8565b348015610e6b57600080fd5b506105bb600a5481565b348015610e8157600080fd5b5061058c610e903660046155eb565b6132fe565b348015610ea157600080fd5b50601c54610644906001600160a01b031681565b348015610ec157600080fd5b50610537610ed0366004615754565b613377565b348015610ee157600080fd5b50610537610ef03660046153dc565b613567565b348015610f0157600080fd5b506105bb60035481565b348015610f1757600080fd5b5061058c610f2636600461522d565b613ad2565b348015610f3757600080fd5b5061058c610f46366004615575565b613bb8565b348015610f5757600080fd5b5061058c610f66366004615212565b613be6565b348015610f7757600080fd5b50601854610644906001600160a01b031681565b348015610f9757600080fd5b50600d54610644906001600160a01b031681565b348015610fb757600080fd5b506105bb610fc636600461522d565b613c5c565b348015610fd757600080fd5b5061058c613c6c565b610537610fee366004615779565b613c86565b348015610fff57600080fd5b5061053761100e366004615212565b60266020526000908152604090205460ff1681565b34801561102f57600080fd5b5061058c61103e3660046157c8565b61421e565b600061104d61427d565b60038054908390556040805182815260208101859052428183015290517f5f3a900c85949962b4cc192dd3714dae64071dc2e907049ec720b023270905a49181900360600190a150600192915050565b6110a561427d565b6006805460ff1916911515919091179055565b6110c061427d565b600755565b6110cd61427d565b600081116111225760405162461bcd60e51b815260206004820152601c60248201527f5a65726f206d617820746f6b656e7320746f206275792076616c75650000000060448201526064015b60405180910390fd5b600455565b600080611133836123fb565b905061113d6120a6565b60055461114a9083615843565b6111549190615862565b9392505050565b61116361427d565b6001600160a01b03821661117657600080fd5b601c8054911515600160a01b026001600160a81b03199092166001600160a01b0390931692909217179055565b6111ab6142ec565b80516111f95760405162461bcd60e51b815260206004820152601c60248201527f63616e6e6f742075706461746520696e76616c69642076616c756573000000006044820152606401611119565b8051600114801561122457508060008151811061121857611218615884565b60200260200101516000145b15611238576112356015600061510f565b50565b6112446015600061510f565b60005b815181101561129557601582828151811061126457611264615884565b602090810291909101810151825460018101845560009384529190922001558061128d8161589a565b915050611247565b5050565b6112a161427d565b6112a961437b565b565b6000836002544210156112d05760405162461bcd60e51b8152600401611119906158b5565b600081116112f05760405162461bcd60e51b8152600401611119906158ec565b33601c54600160a01b900460ff161561139d57601c5460405163df592f7d60e01b81526001600160a01b0383811660048301529091169063df592f7d9060240160206040518083038186803b15801561134857600080fd5b505afa15801561135c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113809190615919565b1561139d5760405162461bcd60e51b815260040161111990615936565b6113a56143d0565b6113ad61441d565b60006113b8876123fb565b905060006113c46120a6565b6005546113d19084615843565b6113db9190615862565b90508034101561141c5760405162461bcd60e51b815260206004820152600c60248201526b13195cdcc81c185e5b595b9d60a21b6044820152606401611119565b6000611428823461596b565b9050886008600082825461143c9190615982565b90915550506010541561146157886010600082825461145b9190615982565b90915550505b6000601054600854116114765760105461147a565b6008545b90506011600001600f548154811061149457611494615884565b90600052602060002001548111806114ce57506011600201600f54815481106114bf576114bf615884565b90600052602060002001544210155b156115ef576011600201600f54815481106114eb576114eb615884565b9060005260206000200154421061152e57896011600001600f548154811061151557611515615884565b906000526020600020015461152a9190615982565b6010555b60065460ff161561154157611541614477565b600060118101600f548154811061155a5761155a615884565b906000526020600020015482116115a9578a826011600001600f548154811061158557611585615884565b906000526020600020015461159a919061596b565b6115a4919061596b565b6115ac565b60005b60158054600181810183556000928352600080516020615c27833981519152909101839055600f805493945090929091906115e8908490615982565b9091555050505b881561170457601c54600160a81b900460ff1615611636573360009081526027602052604090205460ff166116365760405162461bcd60e51b81526004016111199061599a565b601b546001600160a01b03166391c6196633600554611655908e615843565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561169b57600080fd5b505af11580156116af573d6000803e3d6000fd5b5050505089600960008282546116c59190615982565b90915550506040805184815260208101869052428183015290516000918c913391600080516020615c07833981519152919081900360600190a461176b565b600554611711908b615843565b3360009081526024602052604081208054909190611730908490615982565b90915550506040805184815260208101869052428183015290516000918c913391600080516020615c47833981519152919081900360600190a45b83600a600082825461177d9190615982565b9091555061178e90508389336144e7565b811561179e5761179e338361468e565b60019650505050506117b06001600055565b50509392505050565b60006117c361427d565b6117d0601183600361512d565b506000600f81905560108190556117e99060159061510f565b506001919050565b60006117fb6143d0565b600b546001600160a01b031661184a5760405162461bcd60e51b815260206004820152601460248201527314d85b19481d1bdad95b881b9bdd08185919195960621b6044820152606401611119565b3360009081526026602052604090205460ff16156118aa5760405162461bcd60e51b815260206004820152601b60248201527f54686973204164647265737320697320426c61636b6c697374656400000000006044820152606401611119565b60006003541180156118be57506003544210155b806118d857503360009081526027602052604090205460ff165b6119245760405162461bcd60e51b815260206004820152601960248201527f436c61696d20686173206e6f74207374617274656420796574000000000000006044820152606401611119565b3360009081526025602052604090205460ff16156119765760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e4818db185a5b5959608a1b6044820152606401611119565b336000908152602560209081526040808320805460ff191660011790556024909152902054806119db5760405162461bcd60e51b815260206004820152601060248201526f4e6f7468696e6720746f20636c61696d60801b6044820152606401611119565b336000818152602460208181526040808420849055600b54815163a9059cbb60e01b815260048101969096529285018690525192936001600160a01b039092169263a9059cbb92604480820193929182900301818787803b158015611a3f57600080fd5b505af1158015611a53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a779190615919565b905080611a965760405162461bcd60e51b8152600401611119906159d1565b6040805183815242602082015233917f9923b4306c6c030f2bdfbf156517d5983b87e15b96176da122cd4f2effa4ba7b910160405180910390a260019250505090565b611ae1614764565b8051825114611b265760405162461bcd60e51b81526020600482015260116024820152704d69736d6174636865642061727261797360781b6044820152606401611119565b611b326017600061510f565b611b3e6016600061510f565b6000805b8351811015611c7c576000838281518110611b5f57611b5f615884565b602002602001015111611bbe5760405162461bcd60e51b815260206004820152602160248201527f50657263656e74616765206d7573742062652067726561746572207468616e206044820152600360fc1b6064820152608401611119565b828181518110611bd057611bd0615884565b602002602001015182611be39190615982565b91506017848281518110611bf957611bf9615884565b60209081029190910181015182546001810184556000938452919092200180546001600160a01b0319166001600160a01b039092169190911790558251601690849083908110611c4b57611c4b615884565b6020908102919091018101518254600181018455600093845291909220015580611c748161589a565b915050611b42565b5080620186a014611ccf5760405162461bcd60e51b815260206004820152601f60248201527f546f74616c2070657263656e74616765206d75737420657175616c20313030006044820152606401611119565b505050565b611cdc61427d565b6021805460ff1916911515919091179055565b6000611cfa826123fb565b9050611d0b64e8d4a5100082615862565b92915050565b611d196142ec565b601054601480546001810182556000919091527fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ec015560065460ff1615611d6257611d62614477565b6011600001600f5481548110611d7a57611d7a615884565b90600052602060002001546010541015611e5557600f54611de3576008546015906011600001600f5481548110611db357611db3615884565b9060005260206000200154611dc8919061596b565b81546001810183556000928352602090922090910155611e2d565b6010546015906011600001600f5481548110611e0157611e01615884565b9060005260206000200154611e16919061596b565b815460018101835560009283526020909220909101555b6011600001600f5481548110611e4557611e45615884565b6000918252602090912001546010555b600f8054906000611e658361589a565b9190505550565b611e7461427d565b60405163a9059cbb60e01b8152336004820152602481018290526000906001600160a01b0384169063a9059cbb90604401602060405180830381600087803b158015611ebf57600080fd5b505af1158015611ed3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef79190615919565b905080611ccf5760405162461bcd60e51b8152600401611119906159d1565b611f1e61427d565b60005b81811015611f8f578360286000858585818110611f4057611f40615884565b9050602002016020810190611f559190615212565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611f878161589a565b915050611f21565b50505050565b611f9d61427d565b60005b81811015611f8f578360266000858585818110611fbf57611fbf615884565b9050602002016020810190611fd49190615212565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806120068161589a565b915050611fa0565b61201661427d565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6120406147b3565b6112a9600061480d565b6017818154811061205a57600080fd5b6000918252602090912001546001600160a01b0316905081565b61207c61427d565b6112a961485f565b61208c61427d565b602180549115156101000261ff0019909216919091179055565b600080601a60009054906101000a90046001600160a01b03166001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b1580156120f757600080fd5b505afa15801561210b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061212f9190615a1a565b505050915050806402540be400611d0b9190615a6a565b61214e61427d565b600f91909155601055565b61216161427d565b8281146121a25760405162461bcd60e51b815260206004820152600f60248201526e098cadccee8d040dad2e6dac2e8c6d608b1b6044820152606401611119565b6000805b8481101561225f578383828181106121c0576121c0615884565b90506020020135602460008888858181106121dd576121dd615884565b90506020020160208101906121f29190615212565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008282546122219190615982565b90915550849050838281811061223957612239615884565b905060200201358261224b9190615982565b9150806122578161589a565b9150506121a6565b5084849050602360008282546122759190615982565b92505081905550806022600082825461228e9190615982565b90915550505050505050565b6122a261427d565b6001600160a01b0381166122ed5760405162461bcd60e51b81526020600482015260126024820152715a65726f20746f6b656e206164647265737360701b6044820152606401611119565b600b80546001600160a01b0319166001600160a01b0383169081179091556040519081527f9197d4b7790c1ef2cbc99e6139e49173e9f34ff565c8df71a9f37acafde4d7159060200160405180910390a150565b61234961427d565b8060005b81811015611f8f5760016029600086868581811061236d5761236d615884565b90506020020160208101906123829190615212565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806123b48161589a565b91505061234d565b6123c4614764565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6123ee61427d565b611295601182600361512d565b600080600060105460001461241257601054612416565b6008545b905060045484111561246a5760405162461bcd60e51b815260206004820181905260248201527f416d6f756e742065786365656473206d617820746f6b656e7320746f206275796044820152606401611119565b6011600001600f548154811061248257612482615884565b906000526020600020015481856124999190615982565b11806124c757506011600201600f54815481106124b8576124b8615884565b90600052602060002001544210155b156126f9576011546124db9060019061596b565b600f541061251a5760405162461bcd60e51b815260206004820152600c60248201526b57726f6e6720706172616d7360a01b6044820152606401611119565b6011600201600f548154811061253257612532615884565b9060005260206000200154421061264557600f54601190612554906001615982565b8154811061256457612564615884565b906000526020600020015484601160006003811061258457612584615884565b01600f548154811061259857612598615884565b90600052602060002001546125ad9190615982565b11156126075760405162461bcd60e51b815260206004820152602360248201527f43616e74205075726368617365204d6f726520696e20696e646976696475616c604482015262040e8f60eb1b6064820152608401611119565b600f54601290612618906001615982565b8154811061262857612628615884565b90600052602060002001548461263e9190615843565b915061272a565b60008160118201600f548154811061265f5761265f615884565b9060005260206000200154612674919061596b565b600f54909150601290612688906001615982565b8154811061269857612698615884565b906000526020600020015481866126af919061596b565b6126b99190615843565b6011600101600f54815481106126d1576126d1615884565b9060005260206000200154826126e79190615843565b6126f19190615982565b92505061272a565b6011600101600f548154811061271157612711615884565b9060005260206000200154846127279190615843565b91505b5092915050565b61273961427d565b6001600160a01b0381166127b55760405162461bcd60e51b815260206004820152603760248201527f7374616b696e67206d616e616765722063616e6e6f7420626520696e6974696160448201527f6c697a65642077697468207a65726f20616464726573730000000000000000006064820152608401611119565b601b80546001600160a01b0319166001600160a01b03838116918217909255600b5460405163095ea7b360e01b8152600481019290925260001960248301529091169063095ea7b390604401602060405180830381600087803b15801561281b57600080fd5b505af115801561282f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112959190615919565b61285b61427d565b601f91909155602055565b60606011826003811061287b5761287b615884565b018054806020026020016040519081016040528092919081815260200182805480156128c657602002820191906000526020600020905b8154815260200190600101908083116128b2575b50505050509050919050565b60006001600160a01b038216158061290257506001600160a01b03821660009081526029602052604090205460ff165b8061291557506001600160a01b03821633145b1561292257506000919050565b60215460ff1661293457506001919050565b506001600160a01b0316600090815260246020526040902054151590565b6015818154811061296257600080fd5b600091825260209091200154905081565b606060158054806020026020016040519081016040528092919081815260200182805480156129c157602002820191906000526020600020905b8154815260200190600101908083116129ad575b5050505050905090565b6129d361427d565b6001600160a01b038116612a225760405162461bcd60e51b8152602060048201526016602482015275616464726573732063616e6e6f74206265207a65726f60501b6044820152606401611119565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000612a4e6143d0565b600b546001600160a01b0316612a9d5760405162461bcd60e51b815260206004820152601460248201527314d85b19481d1bdad95b881b9bdd08185919195960621b6044820152606401611119565b3360009081526026602052604090205460ff1615612afd5760405162461bcd60e51b815260206004820152601b60248201527f54686973204164647265737320697320426c61636b6c697374656400000000006044820152606401611119565b601c54600160a81b900460ff1615612b3e573360009081526027602052604090205460ff16612b3e5760405162461bcd60e51b81526004016111199061599a565b3360009081526024602052604090205480612b8e5760405162461bcd60e51b815260206004820152601060248201526f4e6f7468696e6720746f207374616b6560801b6044820152606401611119565b600554612b9b9082615862565b60096000828254612bac9190615982565b9091555050601b546001600160a01b03166391c61966336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401600060405180830381600087803b158015612c0b57600080fd5b505af1158015612c1f573d6000803e3d6000fd5b5050505060246000612c2e3390565b6001600160a01b031681526020810191909152604001600090812055336001600160a01b03167ffa4ec67f9254455933eb145bae864b26f29dd0a7bbb76eb11e4d6b8b9b184c2b8242604051612c8e929190918252602082015260400190565b60405180910390a2600191505090565b600083600254421015612cc35760405162461bcd60e51b8152600401611119906158b5565b60008111612ce35760405162461bcd60e51b8152600401611119906158ec565b33601c54600160a01b900460ff1615612d9057601c5460405163df592f7d60e01b81526001600160a01b0383811660048301529091169063df592f7d9060240160206040518083038186803b158015612d3b57600080fd5b505afa158015612d4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d739190615919565b15612d905760405162461bcd60e51b815260040161111990615936565b612d986143d0565b6000612da3876123fb565b90508660086000828254612db79190615982565b9091555060009050612dce64e8d4a5100083615862565b9050601054600014612df2578760106000828254612dec9190615982565b90915550505b600060105460085411612e0757601054612e0b565b6008545b90506011600001600f5481548110612e2557612e25615884565b9060005260206000200154811180612e5f57506011600201600f5481548110612e5057612e50615884565b90600052602060002001544210155b15612f80576011600201600f5481548110612e7c57612e7c615884565b90600052602060002001544210612ebf57886011600001600f5481548110612ea657612ea6615884565b9060005260206000200154612ebb9190615982565b6010555b60065460ff1615612ed257612ed2614477565b600060118101600f5481548110612eeb57612eeb615884565b90600052602060002001548211612f3a5789826011600001600f5481548110612f1657612f16615884565b9060005260206000200154612f2b919061596b565b612f35919061596b565b612f3d565b60005b60158054600181810183556000928352600080516020615c27833981519152909101839055600f80549394509092909190612f79908490615982565b9091555050505b87156130b157601c54600160a81b900460ff1615612fc7573360009081526027602052604090205460ff16612fc75760405162461bcd60e51b81526004016111199061599a565b601b546001600160a01b03166391c6196633600554612fe6908d615843565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561302c57600080fd5b505af1158015613040573d6000803e3d6000fd5b5050505088600960008282546130569190615982565b90915550506018546001600160a01b031689336001600160a01b0316600080516020615c078339815191528587426040516130a4939291909283526020830191909152604082015260600190565b60405180910390a4613134565b6005546130be908a615843565b33600090815260246020526040812080549091906130dd908490615982565b90915550506018546001600160a01b031689336001600160a01b0316600080516020615c4783398151915285874260405161312b939291909283526020830191909152604082015260600190565b60405180910390a45b82600a60008282546131469190615982565b90915550506018546000906001600160a01b031663dd62ed3e336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015230602482015260440160206040518083038186803b1580156131a557600080fd5b505afa1580156131b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131dd9190615aef565b9050808311156131ff5760405162461bcd60e51b815260040161111990615b08565b61320983896148a2565b5060019998505050505050505050565b61322161427d565b8060005b81811015611f8f5760006029600086868581811061324557613245615884565b905060200201602081019061325a9190615212565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061328c8161589a565b915050613225565b6014818154811061296257600080fd5b601182600381106132b457600080fd5b0181815481106132c357600080fd5b90600052602060002001600091509150505481565b6132e061427d565b601c8054911515600160a81b0260ff60a81b19909216919091179055565b61330661427d565b60005b81811015611f8f57836027600085858581811061332857613328615884565b905060200201602081019061333d9190615212565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061336f8161589a565b915050613309565b600061338161427d565b6001600160a01b0383166133cc5760405162461bcd60e51b81526020600482015260126024820152715a65726f20746f6b656e206164647265737360701b6044820152606401611119565b600b80546001600160a01b038581166001600160a01b03199283168117909355601b805491861691909216811790915560405163095ea7b360e01b81526004810191909152600019602482015263095ea7b390604401602060405180830381600087803b15801561343c57600080fd5b505af1158015613450573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134749190615919565b506040516323b872dd60e01b81526000906001600160a01b038516906323b872dd906134a890339030908a90600401615b49565b602060405180830381600087803b1580156134c257600080fd5b505af11580156134d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134fa9190615919565b9050806135195760405162461bcd60e51b8152600401611119906159d1565b604080518681524260208201526001600160a01b038616917fdc9670dbabdd488b372eb16ebe49a39b3124a12cdffdcefbc89834a408bf8ff8910160405180910390a2506001949350505050565b60008360025442101561358c5760405162461bcd60e51b8152600401611119906158b5565b600081116135ac5760405162461bcd60e51b8152600401611119906158ec565b33601c54600160a01b900460ff161561365957601c5460405163df592f7d60e01b81526001600160a01b0383811660048301529091169063df592f7d9060240160206040518083038186803b15801561360457600080fd5b505afa158015613618573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061363c9190615919565b156136595760405162461bcd60e51b815260040161111990615936565b6136616143d0565b600061366c876123fb565b905086600860008282546136809190615982565b909155506000905061369764e8d4a5100083615862565b90506010546000146136bb5787601060008282546136b59190615982565b90915550505b6000601054600854116136d0576010546136d4565b6008545b90506011600001600f54815481106136ee576136ee615884565b906000526020600020015481118061372857506011600201600f548154811061371957613719615884565b90600052602060002001544210155b15613849576011600201600f548154811061374557613745615884565b9060005260206000200154421061378857886011600001600f548154811061376f5761376f615884565b90600052602060002001546137849190615982565b6010555b60065460ff161561379b5761379b614477565b600060118101600f54815481106137b4576137b4615884565b906000526020600020015482116138035789826011600001600f54815481106137df576137df615884565b90600052602060002001546137f4919061596b565b6137fe919061596b565b613806565b60005b60158054600181810183556000928352600080516020615c27833981519152909101839055600f80549394509092909190613842908490615982565b9091555050505b871561397a57601c54600160a81b900460ff1615613890573360009081526027602052604090205460ff166138905760405162461bcd60e51b81526004016111199061599a565b601b546001600160a01b03166391c61966336005546138af908d615843565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156138f557600080fd5b505af1158015613909573d6000803e3d6000fd5b50505050886009600082825461391f9190615982565b90915550506019546001600160a01b031689336001600160a01b0316600080516020615c0783398151915285874260405161396d939291909283526020830191909152604082015260600190565b60405180910390a46139fd565b600554613987908a615843565b33600090815260246020526040812080549091906139a6908490615982565b90915550506019546001600160a01b031689336001600160a01b0316600080516020615c478339815191528587426040516139f4939291909283526020830191909152604082015260600190565b60405180910390a45b82600a6000828254613a0f9190615982565b90915550506019546000906001600160a01b031663dd62ed3e336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015230602482015260440160206040518083038186803b158015613a6e57600080fd5b505afa158015613a82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aa69190615aef565b905080831115613ac85760405162461bcd60e51b815260040161111990615b08565b6132098389614c67565b613ada61427d565b60008111613b1f5760405162461bcd60e51b8152602060048201526012602482015271496e76616c696420706172616d657465727360701b6044820152606401611119565b804210613b625760405162461bcd60e51b815260206004820152601160248201527014d85b19481d1a5b59481a5b881c185cdd607a1b6044820152606401611119565b60028054908290556040805182815260208101849052428183015290516414d510549560da1b917fddd2ed237e6993c9380182683f2c8bec486aaaa429528852cd74dbdb96cea0b2919081900360600190a25050565b613bc061427d565b601d80546001600160a01b0319166001600160a01b039390931692909217909155601e55565b613bee6147b3565b6001600160a01b038116613c535760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401611119565b6112358161480d565b6016818154811061296257600080fd5b613c746147b3565b600e80546001600160a01b0319169055565b600083600254421015613cab5760405162461bcd60e51b8152600401611119906158b5565b60008111613ccb5760405162461bcd60e51b8152600401611119906158ec565b601c548690600160a01b900460ff1615613d7957601c5460405163df592f7d60e01b81526001600160a01b0383811660048301529091169063df592f7d9060240160206040518083038186803b158015613d2457600080fd5b505afa158015613d38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d5c9190615919565b15613d795760405162461bcd60e51b815260040161111990615936565b613d816143d0565b613d8961441d565b3360009081526028602052604090205460ff16613de85760405162461bcd60e51b815260206004820181905260248201527f55736572206e6f742077686974656c697374656420666f7220746869732074786044820152606401611119565b6000613df3876123fb565b90506000613dff6120a6565b600554613e0c9084615843565b613e169190615862565b905080341015613e575760405162461bcd60e51b815260206004820152600c60248201526b13195cdcc81c185e5b595b9d60a21b6044820152606401611119565b6000613e63823461596b565b90508860086000828254613e779190615982565b909155505060105415613e9c578860106000828254613e969190615982565b90915550505b600060105460085411613eb157601054613eb5565b6008545b90506011600001600f5481548110613ecf57613ecf615884565b9060005260206000200154811180613f0957506011600201600f5481548110613efa57613efa615884565b90600052602060002001544210155b1561402a576011600201600f5481548110613f2657613f26615884565b90600052602060002001544210613f6957896011600001600f5481548110613f5057613f50615884565b9060005260206000200154613f659190615982565b6010555b60065460ff1615613f7c57613f7c614477565b600060118101600f5481548110613f9557613f95615884565b90600052602060002001548211613fe4578a826011600001600f5481548110613fc057613fc0615884565b9060005260206000200154613fd5919061596b565b613fdf919061596b565b613fe7565b60005b60158054600181810183556000928352600080516020615c27833981519152909101839055600f80549394509092909190614023908490615982565b9091555050505b881561415657601c54600160a81b900460ff161561407a576001600160a01b038b1660009081526027602052604090205460ff1661407a5760405162461bcd60e51b81526004016111199061599a565b601b546005546001600160a01b03909116906391c61966908d9061409e908e615843565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156140e457600080fd5b505af11580156140f8573d6000803e3d6000fd5b50505050896009600082825461410e9190615982565b90915550506040805184815260208101869052428183015290516000918c916001600160a01b038f1691600080516020615c07833981519152919081900360600190a46141cf565b600554614163908b615843565b6001600160a01b038c166000908152602460205260408120805490919061418b908490615982565b90915550506040805184815260208101869052428183015290516000918c916001600160a01b038f1691600080516020615c47833981519152919081900360600190a45b83600a60008282546141e19190615982565b909155506141f2905083898d6144e7565b8115614202576142028b8361468e565b60019650505050506142146001600055565b5050949350505050565b61422661427d565b601f95909555602093909355601d80546001600160a01b039093166001600160a01b031990931692909217909155601e55602180549215156101000261ff00199215159290921661ffff1990931692909217179055565b600e546001600160a01b03163314806142a057506001546001600160a01b031633145b6112a95760405162461bcd60e51b815260206004820152601b60248201527f63616c6c6572206e6f74206d616e61676572206f72206f776e657200000000006044820152606401611119565b600d546001600160a01b031633148061430f5750600e546001600160a01b031633145b8061432457506001546001600160a01b031633145b6112a95760405162461bcd60e51b815260206004820152602260248201527f63616c6c6572206e6f742061646d696e2c206d616e61676572206f72206f776e60448201526132b960f11b6064820152608401611119565b614383614e8e565b6001805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600154600160a01b900460ff16156112a95760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401611119565b600260005414156144705760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611119565b6002600055565b60005b600f5460135461448a919061596b565b8110156112355760075461449e9082615843565b6144a89042615982565b600f546013906144b9908490615982565b815481106144c9576144c9615884565b600091825260209091200155806144df8161589a565b91505061447a565b601d546000906001600160a01b03161561451d57601d54601e5461451a9186916001600160a01b03909116906000614ede565b90505b600061452c8584866000614fdc565b90506145388183615982565b614542908661596b565b60175490955061458f57600c546001600160a01b03166145745760405162461bcd60e51b815260040161111990615b6d565b600c5461458a906001600160a01b03168661468e565b614687565b6000805b601754811015614629576000620186a0601683815481106145b6576145b6615884565b9060005260206000200154896145cc9190615843565b6145d69190615862565b9050614609601783815481106145ee576145ee615884565b6000918252602090912001546001600160a01b03168261468e565b6146138184615982565b92505080806146219061589a565b915050614593565b506000614636828861596b565b1115614685576017805461468591906146519060019061596b565b8154811061466157614661615884565b6000918252602090912001546001600160a01b0316614680838961596b565b61468e565b505b5050505050565b804710156146cc5760405162461bcd60e51b815260206004820152600b60248201526a4c6f772062616c616e636560a81b6044820152606401611119565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114614719576040519150601f19603f3d011682016040523d82523d6000602084013e61471e565b606091505b5050905080611ccf5760405162461bcd60e51b81526020600482015260126024820152711155120814185e5b595b9d0819985a5b195960721b6044820152606401611119565b600e546001600160a01b031633146112a95760405162461bcd60e51b815260206004820152601260248201527131b0b63632b9103737ba1036b0b730b3b2b960711b6044820152606401611119565b6001546001600160a01b031633146112a95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611119565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6148676143d0565b6001805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586143b33390565b601d546000906001600160a01b0316156148dc57601d54601e546018546148d99286926001600160a01b0391821692909116614ede565b90505b60006148f6843360185486906001600160a01b0316614fdc565b90506149028183615982565b61490c908561596b565b601754909450614a0c57600c546001600160a01b031661493e5760405162461bcd60e51b815260040161111990615b6d565b6018546000906001600160a01b0316335b600c5460405161496e92916001600160a01b0316908990602401615b49565b60408051601f198184030181529181526020820180516001600160e01b03166323b872dd60e01b179052516149a39190615b9d565b6000604051808303816000865af19150503d80600081146149e0576040519150601f19603f3d011682016040523d82523d6000602084013e6149e5565b606091505b5050905080614a065760405162461bcd60e51b815260040161111990615bd8565b50611f8f565b6000805b601754811015614b5a576000620186a060168381548110614a3357614a33615884565b906000526020600020015488614a499190615843565b614a539190615862565b6018549091506000906001600160a01b03163360178581548110614a7957614a79615884565b600091825260209091200154604051614aa192916001600160a01b0316908690602401615b49565b60408051601f198184030181529181526020820180516001600160e01b03166323b872dd60e01b17905251614ad69190615b9d565b6000604051808303816000865af19150503d8060008114614b13576040519150601f19603f3d011682016040523d82523d6000602084013e614b18565b606091505b5050905080614b395760405162461bcd60e51b815260040161111990615bd8565b614b438285615982565b935050508080614b529061589a565b915050614a10565b506000614b67828761596b565b1115614687576018546000906001600160a01b0316335b60178054614b8e9060019061596b565b81548110614b9e57614b9e615884565b6000918252602090912001546001600160a01b0316614bbd858a61596b565b604051602401614bcf93929190615b49565b60408051601f198184030181529181526020820180516001600160e01b03166323b872dd60e01b17905251614c049190615b9d565b6000604051808303816000865af19150503d8060008114614c41576040519150601f19603f3d011682016040523d82523d6000602084013e614c46565b606091505b50509050806146855760405162461bcd60e51b815260040161111990615bd8565b601d546000906001600160a01b031615614ca157601d54601e54601954614c9e9286926001600160a01b0391821692909116614ede565b90505b6000614cbb843360195486906001600160a01b0316614fdc565b9050614cc78183615982565b614cd1908561596b565b601754909450614d1857600c546001600160a01b0316614d035760405162461bcd60e51b815260040161111990615b6d565b6019546000906001600160a01b03163361494f565b6000805b601754811015614e66576000620186a060168381548110614d3f57614d3f615884565b906000526020600020015488614d559190615843565b614d5f9190615862565b6019549091506000906001600160a01b03163360178581548110614d8557614d85615884565b600091825260209091200154604051614dad92916001600160a01b0316908690602401615b49565b60408051601f198184030181529181526020820180516001600160e01b03166323b872dd60e01b17905251614de29190615b9d565b6000604051808303816000865af19150503d8060008114614e1f576040519150601f19603f3d011682016040523d82523d6000602084013e614e24565b606091505b5050905080614e455760405162461bcd60e51b815260040161111990615bd8565b614e4f8285615982565b935050508080614e5e9061589a565b915050614d1c565b506000614e73828761596b565b1115614687576019546000906001600160a01b031633614b7e565b600154600160a01b900460ff166112a95760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401611119565b6000806064614eed8588615843565b614ef79190615862565b90506001600160a01b03831615614fc75760006001600160a01b038416338784604051602401614f2993929190615b49565b60408051601f198184030181529181526020820180516001600160e01b03166323b872dd60e01b17905251614f5e9190615b9d565b6000604051808303816000865af19150503d8060008114614f9b576040519150601f19603f3d011682016040523d82523d6000602084013e614fa0565b606091505b5050905080614fc15760405162461bcd60e51b815260040161111990615bd8565b50614fd1565b614fd1858261468e565b90505b949350505050565b6000806000614feb868661507f565b9050614ff6816128d2565b61500257509050614fd4565b6150108782601f5487614ede565b61501a9083615982565b602154909250610100900460ff1661503457509050614fd4565b600061504182600061507f565b905061504c816128d2565b61505b57829350505050614fd4565b615069888260205488614ede565b6150739084615982565b98975050505050505050565b6001600160a01b038281166000908152602a60205260408120549091161580156150bb5750816001600160a01b0316836001600160a01b031614155b156150ef576001600160a01b038381166000908152602a6020526040902080546001600160a01b0319169184169190911790555b50506001600160a01b039081166000908152602a60205260409020541690565b5080546000825590600052602060002090810190611235919061517d565b826003810192821561516d579160200282015b8281111561516d578251805161515d918491602090910190615192565b5091602001919060010190615140565b506151799291506151d9565b5090565b5b80821115615179576000815560010161517e565b8280548282559060005260206000209081019282156151cd579160200282015b828111156151cd5782518255916020019190600101906151b2565b5061517992915061517d565b808211156151795760006151ed828261510f565b506001016151d9565b80356001600160a01b038116811461520d57600080fd5b919050565b60006020828403121561522457600080fd5b611154826151f6565b60006020828403121561523f57600080fd5b5035919050565b801515811461123557600080fd5b60006020828403121561526657600080fd5b813561115481615246565b6000806040838503121561528457600080fd5b61528d836151f6565b9150602083013561529d81615246565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156152e1576152e16152a8565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715615310576153106152a8565b604052919050565b600067ffffffffffffffff821115615332576153326152a8565b5060051b60200190565b600082601f83011261534d57600080fd5b8135602061536261535d83615318565b6152e7565b82815260059290921b8401810191818101908684111561538157600080fd5b8286015b8481101561539c5780358352918301918301615385565b509695505050505050565b6000602082840312156153b957600080fd5b813567ffffffffffffffff8111156153d057600080fd5b614fd48482850161533c565b6000806000606084860312156153f157600080fd5b83359250602084013561540381615246565b9150615411604085016151f6565b90509250925092565b6000602080838503121561542d57600080fd5b823567ffffffffffffffff8082111561544557600080fd5b818501915085601f83011261545957600080fd5b6154616152be565b80606084018881111561547357600080fd5b845b818110156154a75780358581111561548d5760008081fd5b6154998b82890161533c565b855250928601928601615475565b509098975050505050505050565b600080604083850312156154c857600080fd5b823567ffffffffffffffff808211156154e057600080fd5b818501915085601f8301126154f457600080fd5b8135602061550461535d83615318565b82815260059290921b8401810191818101908984111561552357600080fd5b948201945b8386101561554857615539866151f6565b82529482019490820190615528565b9650508601359250508082111561555e57600080fd5b5061556b8582860161533c565b9150509250929050565b6000806040838503121561558857600080fd5b615591836151f6565b946020939093013593505050565b60008083601f8401126155b157600080fd5b50813567ffffffffffffffff8111156155c957600080fd5b6020830191508360208260051b85010111156155e457600080fd5b9250929050565b60008060006040848603121561560057600080fd5b833561560b81615246565b9250602084013567ffffffffffffffff81111561562757600080fd5b6156338682870161559f565b9497909650939450505050565b6000806040838503121561565357600080fd5b50508035926020909101359150565b6000806000806040858703121561567857600080fd5b843567ffffffffffffffff8082111561569057600080fd5b61569c8883890161559f565b909650945060208701359150808211156156b557600080fd5b506156c28782880161559f565b95989497509550505050565b600080602083850312156156e157600080fd5b823567ffffffffffffffff8111156156f857600080fd5b6157048582860161559f565b90969095509350505050565b6020808252825182820181905260009190848201906040850190845b818110156157485783518352928401929184019160010161572c565b50909695505050505050565b60008060006060848603121561576957600080fd5b83359250615403602085016151f6565b6000806000806080858703121561578f57600080fd5b615798856151f6565b93506020850135925060408501356157af81615246565b91506157bd606086016151f6565b905092959194509250565b60008060008060008060c087890312156157e157600080fd5b86359550602087013594506157f8604088016151f6565b935060608701359250608087013561580f81615246565b915060a087013561581f81615246565b809150509295509295509295565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561585d5761585d61582d565b500290565b60008261587f57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b60006000198214156158ae576158ae61582d565b5060010190565b60208082526017908201527f496e76616c69642074696d6520666f7220627579696e67000000000000000000604082015260600190565b602080825260139082015272125b9d985b1a59081cd85b1948185b5bdd5b9d606a1b604082015260600190565b60006020828403121561592b57600080fd5b815161115481615246565b6020808252818101527f416464726573732070726573656e7420696e2073616e6374696f6e206c697374604082015260600190565b60008282101561597d5761597d61582d565b500390565b600082198211156159955761599561582d565b500190565b6020808252601e908201527f55736572206e6f742077686974656c697374656420666f72207374616b650000604082015260600190565b602080825260159082015274151bdad95b881d1c985b9cd9995c8819985a5b1959605a1b604082015260600190565b805169ffffffffffffffffffff8116811461520d57600080fd5b600080600080600060a08688031215615a3257600080fd5b615a3b86615a00565b9450602086015193506040860151925060608601519150615a5e60808701615a00565b90509295509295909350565b60006001600160ff1b0381841382841380821686840486111615615a9057615a9061582d565b600160ff1b6000871282811687830589121615615aaf57615aaf61582d565b60008712925087820587128484161615615acb57615acb61582d565b87850587128184161615615ae157615ae161582d565b505050929093029392505050565b600060208284031215615b0157600080fd5b5051919050565b60208082526021908201527f4d616b65207375726520746f2061646420656e6f75676820616c6c6f77616e636040820152606560f81b606082015260800190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60208082526016908201527514185e5b595b9d081dd85b1b195d081b9bdd081cd95d60521b604082015260600190565b6000825160005b81811015615bbe5760208186018101518583015201615ba4565b81811115615bcd576000828501525b509190910192915050565b602080825260149082015273151bdad95b881c185e5b595b9d0819985a5b195960621b60408201526060019056fe6f225532a9c33b023b8e48247ad8df9d98f132ae17c769b97ff22d2b278fa73a55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4754d8aead3491b7eba4b5c7a65fc17e493b9e63f9e433522fc5f6a85a168fc9d36a26469706673582212203448370fd6ca7cb90265436efd0e9d72ebe445cb9a2a9faef1bd095f3c5df5b064736f6c634300080900330000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b8419000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4800000000000000000000000000000000000000000000000000000000683596e000000000000000000000000000000000000000000000000000000000005b8d800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000003f4800000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000000000000000000000000000000000000820000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000632ea00000000000000000000000000000000000000000000000000000000000c65d400000000000000000000000000000000000000000000000000000000001298be000000000000000000000000000000000000000000000000000000000018cba800000000000000000000000000000000000000000000000000000000001efe92000000000000000000000000000000000000000000000000000000000025317c00000000000000000000000000000000000000000000000000000000002b64660000000000000000000000000000000000000000000000000000000000319750000000000000000000000000000000000000000000000000000000000037ca3a00000000000000000000000000000000000000000000000000000000003dfd24000000000000000000000000000000000000000000000000000000000044300e00000000000000000000000000000000000000000000000000000000004a62f800000000000000000000000000000000000000000000000000000000005095e2000000000000000000000000000000000000000000000000000000000056c8cc00000000000000000000000000000000000000000000000000000000005cfbb60000000000000000000000000000000000000000000000000000000000632ea0000000000000000000000000000000000000000000000000000000000069618a00000000000000000000000000000000000000000000000000000000006f9474000000000000000000000000000000000000000000000000000000000075c75e00000000000000000000000000000000000000000000000000000000007bfa48000000000000000000000000000000000000000000000000000000000082a7440000000000000000000000000000000000000000000000000000000000895440000000000000000000000000000000000000000000000000000000000090013c000000000000000000000000000000000000000000000000000000000096ae3800000000000000000000000000000000000000000000000000000000009d5b340000000000000000000000000000000000000000000000000000000000a408300000000000000000000000000000000000000000000000000000000000aab52c0000000000000000000000000000000000000000000000000000000000b162280000000000000000000000000000000000000000000000000000000000b80f240000000000000000000000000000000000000000000000000000000000bebc200000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000a36cc19bab000000000000000000000000000000000000000000000000000000a52a689f9ba00000000000000000000000000000000000000000000000000000a6e80fa38c400000000000000000000000000000000000000000000000000000a8a5b6a77ce00000000000000000000000000000000000000000000000000000aa635dab6d800000000000000000000000000000000000000000000000000000ac2104af5e200000000000000000000000000000000000000000000000000000addeabb34ec00000000000000000000000000000000000000000000000000000af9c52b73f600000000000000000000000000000000000000000000000000000b159f9bb30000000000000000000000000000000000000000000000000000000b317a0bf20a00000000000000000000000000000000000000000000000000000b4d547c311400000000000000000000000000000000000000000000000000000b692eec701e00000000000000000000000000000000000000000000000000000b85095caf2800000000000000000000000000000000000000000000000000000ba0e3ccee3200000000000000000000000000000000000000000000000000000bbcbe3d2d3c00000000000000000000000000000000000000000000000000000bd898ad6c4600000000000000000000000000000000000000000000000000000bf4731dab5000000000000000000000000000000000000000000000000000000c104d8dea5a00000000000000000000000000000000000000000000000000000c2c27fe296400000000000000000000000000000000000000000000000000000c48026e686e00000000000000000000000000000000000000000000000000000c63dcdea77800000000000000000000000000000000000000000000000000000c7fb74ee68200000000000000000000000000000000000000000000000000000c9b91bf258c00000000000000000000000000000000000000000000000000000cb76c2f649600000000000000000000000000000000000000000000000000000cd3469fa3a000000000000000000000000000000000000000000000000000000cef210fe2aa00000000000000000000000000000000000000000000000000000d0afb8021b400000000000000000000000000000000000000000000000000000d26d5f060be00000000000000000000000000000000000000000000000000000d42b0609fc800000000000000000000000000000000000000000000000000000d5e8ad0ded2000000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000683ec7a0000000000000000000000000000000000000000000000000000000006842bc20000000000000000000000000000000000000000000000000000000006846b0a000000000000000000000000000000000000000000000000000000000684aa52000000000000000000000000000000000000000000000000000000000684e99a00000000000000000000000000000000000000000000000000000000068528e2000000000000000000000000000000000000000000000000000000000685682a000000000000000000000000000000000000000000000000000000000685a772000000000000000000000000000000000000000000000000000000000685e6ba0000000000000000000000000000000000000000000000000000000006862602000000000000000000000000000000000000000000000000000000000686654a000000000000000000000000000000000000000000000000000000000686a492000000000000000000000000000000000000000000000000000000000686e3da0000000000000000000000000000000000000000000000000000000006872322000000000000000000000000000000000000000000000000000000000687626a000000000000000000000000000000000000000000000000000000000687a1b2000000000000000000000000000000000000000000000000000000000687e0fa00000000000000000000000000000000000000000000000000000000068820420000000000000000000000000000000000000000000000000000000006885f8a0000000000000000000000000000000000000000000000000000000006889ed2000000000000000000000000000000000000000000000000000000000688de1a0000000000000000000000000000000000000000000000000000000006891d620000000000000000000000000000000000000000000000000000000006895caa0000000000000000000000000000000000000000000000000000000006899bf2000000000000000000000000000000000000000000000000000000000689db3a00000000000000000000000000000000000000000000000000000000068a1a8200000000000000000000000000000000000000000000000000000000068a59ca00000000000000000000000000000000000000000000000000000000068a991200000000000000000000000000000000000000000000000000000000068ad85a00000000000000000000000000000000000000000000000000000000068b17a20
Deployed Bytecode
0x6080604052600436106105025760003560e01c80638dcf67ca11610297578063d1690fec11610165578063f0120ff8116100cc578063f851a44011610085578063f851a44014610f8b578063f885838614610fab578063f8b91abe14610fcb578063fe21a94f14610fe0578063fe575a8714610ff3578063ff14ca111461102357600080fd5b8063f0120ff814610ed5578063f04d688f14610ef5578063f056633414610f0b578063f0ff892314610f2b578063f2fde38b14610f4b578063f597573f14610f6b57600080fd5b8063e985e3671161011e578063e985e36714610e1f578063eac0d11514610e3f578063eadd94ec14610e5f578063eb66e2ef14610e75578063ec571c6a14610e95578063efc8647814610eb557600080fd5b8063d1690fec14610d69578063d258919614610d89578063e19648db14610da9578063e32204dd14610dc9578063e6da921314610de9578063e6e78d0614610e0957600080fd5b8063b4d94f4411610209578063c6cc2672116101c2578063c6cc267214610cd9578063c8adff0114610cef578063ca1600b614610d04578063cad0055614610d1e578063cb1a4fc014610d3e578063cff805ab14610d5357600080fd5b8063b4d94f4414610bf6578063b8d612ec14610c2c578063ba166a3914610c4c578063bb695f2a14610c79578063c23326f314610c99578063c49cc64514610cb957600080fd5b8063a29f481c1161025b578063a29f481c14610b36578063a2db641614610b56578063a3fbbaae14610b76578063a6d42e4e14610b96578063ae10426514610bb6578063b00bba6a14610bd657600080fd5b80638dcf67ca14610aac5780638e15f47314610acb5780639a89c1fb14610ae05780639cfa0f7c14610b00578063a1fe1dee14610b1657600080fd5b80634e71d92d116103d45780636ddcca29116103465780637ad71f72116102ff5780637ad71f7214610a0d5780637f6fb25314610a2d5780638456cb5914610a4357806386fc6ea814610a5857806388c3e45814610a785780638da5cb5b14610a8e57600080fd5b80636ddcca29146109525780636e6973dd14610972578063704b6c0214610992578063715018a6146109b257806373b2e80e146109c757806378e97925146109f757600080fd5b80635df4f353116103985780635df4f3531461089757806361ad0b7c146108c757806363b20117146108e757806363e40879146108fd578063641046f41461091d57806368cdafe61461093257600080fd5b80634e71d92d1461080d57806350429ee4146108225780635bc34f71146108425780635c975abb146108585780635ddc56881461087757600080fd5b80632dc358e8116104785780633f4ba83a116104315780633f4ba83a146107795780634151848f1461078e578063415eed46146107a157806343568eae146107c1578063481c6a75146107d75780634bc6191a146107f757600080fd5b80632dc358e8146106bc57806330e74f08146106dc57806333f76178146106fd57806337ba50941461071357806338646608146107295780633af32abf1461074957600080fd5b8063232e95be116104ca578063232e95be146105e357806323a8f1c01461060457806325312e5414610624578063278c278b1461065c57806329a5a0b61461067c5780632c73304d1461069c57600080fd5b8063032bd1f71461050757806307f180821461054c5780630a200fc71461056c5780630ba36dcd1461058e5780631fa2bc92146105c9575b600080fd5b34801561051357600080fd5b50610537610522366004615212565b60296020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561055857600080fd5b5061053761056736600461522d565b611043565b34801561057857600080fd5b5061058c610587366004615254565b61109d565b005b34801561059a57600080fd5b506105bb6105a9366004615212565b60246020526000908152604090205481565b604051908152602001610543565b3480156105d557600080fd5b506006546105379060ff1681565b3480156105ef57600080fd5b50601c5461053790600160a81b900460ff1681565b34801561061057600080fd5b5061058c61061f36600461522d565b6110b8565b34801561063057600080fd5b50601954610644906001600160a01b031681565b6040516001600160a01b039091168152602001610543565b34801561066857600080fd5b5061058c61067736600461522d565b6110c5565b34801561068857600080fd5b506105bb61069736600461522d565b611127565b3480156106a857600080fd5b5061058c6106b7366004615271565b61115b565b3480156106c857600080fd5b5061058c6106d73660046153a7565b6111a3565b3480156106e857600080fd5b50601c5461053790600160a01b900460ff1681565b34801561070957600080fd5b506105bb60055481565b34801561071f57600080fd5b506105bb60225481565b34801561073557600080fd5b50601b54610644906001600160a01b031681565b34801561075557600080fd5b50610537610764366004615212565b60276020526000908152604090205460ff1681565b34801561078557600080fd5b5061058c611299565b61053761079c3660046153dc565b6112ab565b3480156107ad57600080fd5b506105376107bc36600461541a565b6117b9565b3480156107cd57600080fd5b506105bb60075481565b3480156107e357600080fd5b50600e54610644906001600160a01b031681565b34801561080357600080fd5b506105bb601e5481565b34801561081957600080fd5b506105376117f1565b34801561082e57600080fd5b50601d54610644906001600160a01b031681565b34801561084e57600080fd5b506105bb600f5481565b34801561086457600080fd5b50600154600160a01b900460ff16610537565b34801561088357600080fd5b5061058c6108923660046154b5565b611ad9565b3480156108a357600080fd5b506105376108b2366004615212565b60286020526000908152604090205460ff1681565b3480156108d357600080fd5b5061058c6108e2366004615254565b611cd4565b3480156108f357600080fd5b506105bb60085481565b34801561090957600080fd5b506105bb61091836600461522d565b611cef565b34801561092957600080fd5b5061058c611d11565b34801561093e57600080fd5b5061058c61094d366004615575565b611e6c565b34801561095e57600080fd5b5061058c61096d3660046155eb565b611f16565b34801561097e57600080fd5b5061058c61098d3660046155eb565b611f95565b34801561099e57600080fd5b5061058c6109ad366004615212565b61200e565b3480156109be57600080fd5b5061058c612038565b3480156109d357600080fd5b506105376109e2366004615212565b60256020526000908152604090205460ff1681565b348015610a0357600080fd5b506105bb60025481565b348015610a1957600080fd5b50610644610a2836600461522d565b61204a565b348015610a3957600080fd5b506105bb60095481565b348015610a4f57600080fd5b5061058c612074565b348015610a6457600080fd5b5061058c610a73366004615254565b612084565b348015610a8457600080fd5b506105bb601f5481565b348015610a9a57600080fd5b506001546001600160a01b0316610644565b348015610ab857600080fd5b5060215461053790610100900460ff1681565b348015610ad757600080fd5b506105bb6120a6565b348015610aec57600080fd5b5061058c610afb366004615640565b612146565b348015610b0c57600080fd5b506105bb60045481565b348015610b2257600080fd5b5061058c610b31366004615662565b612159565b348015610b4257600080fd5b5061058c610b51366004615212565b61229a565b348015610b6257600080fd5b5061058c610b713660046156ce565b612341565b348015610b8257600080fd5b5061058c610b91366004615212565b6123bc565b348015610ba257600080fd5b5061058c610bb136600461541a565b6123e6565b348015610bc257600080fd5b506105bb610bd136600461522d565b6123fb565b348015610be257600080fd5b5061058c610bf1366004615212565b612731565b348015610c0257600080fd5b50610644610c11366004615212565b602a602052600090815260409020546001600160a01b031681565b348015610c3857600080fd5b5061058c610c47366004615640565b612853565b348015610c5857600080fd5b50610c6c610c6736600461522d565b612866565b6040516105439190615710565b348015610c8557600080fd5b50610537610c94366004615212565b6128d2565b348015610ca557600080fd5b506105bb610cb436600461522d565b612952565b348015610cc557600080fd5b50601a54610644906001600160a01b031681565b348015610ce557600080fd5b506105bb60235481565b348015610cfb57600080fd5b50610c6c612973565b348015610d1057600080fd5b506021546105379060ff1681565b348015610d2a57600080fd5b5061058c610d39366004615212565b6129cb565b348015610d4a57600080fd5b50610537612a44565b348015610d5f57600080fd5b506105bb60105481565b348015610d7557600080fd5b50610537610d843660046153dc565b612c9e565b348015610d9557600080fd5b5061058c610da43660046156ce565b613219565b348015610db557600080fd5b506105bb610dc436600461522d565b613294565b348015610dd557600080fd5b50600c54610644906001600160a01b031681565b348015610df557600080fd5b506105bb610e04366004615640565b6132a4565b348015610e1557600080fd5b506105bb60205481565b348015610e2b57600080fd5b50600b54610644906001600160a01b031681565b348015610e4b57600080fd5b5061058c610e5a366004615254565b6132d8565b348015610e6b57600080fd5b506105bb600a5481565b348015610e8157600080fd5b5061058c610e903660046155eb565b6132fe565b348015610ea157600080fd5b50601c54610644906001600160a01b031681565b348015610ec157600080fd5b50610537610ed0366004615754565b613377565b348015610ee157600080fd5b50610537610ef03660046153dc565b613567565b348015610f0157600080fd5b506105bb60035481565b348015610f1757600080fd5b5061058c610f2636600461522d565b613ad2565b348015610f3757600080fd5b5061058c610f46366004615575565b613bb8565b348015610f5757600080fd5b5061058c610f66366004615212565b613be6565b348015610f7757600080fd5b50601854610644906001600160a01b031681565b348015610f9757600080fd5b50600d54610644906001600160a01b031681565b348015610fb757600080fd5b506105bb610fc636600461522d565b613c5c565b348015610fd757600080fd5b5061058c613c6c565b610537610fee366004615779565b613c86565b348015610fff57600080fd5b5061053761100e366004615212565b60266020526000908152604090205460ff1681565b34801561102f57600080fd5b5061058c61103e3660046157c8565b61421e565b600061104d61427d565b60038054908390556040805182815260208101859052428183015290517f5f3a900c85949962b4cc192dd3714dae64071dc2e907049ec720b023270905a49181900360600190a150600192915050565b6110a561427d565b6006805460ff1916911515919091179055565b6110c061427d565b600755565b6110cd61427d565b600081116111225760405162461bcd60e51b815260206004820152601c60248201527f5a65726f206d617820746f6b656e7320746f206275792076616c75650000000060448201526064015b60405180910390fd5b600455565b600080611133836123fb565b905061113d6120a6565b60055461114a9083615843565b6111549190615862565b9392505050565b61116361427d565b6001600160a01b03821661117657600080fd5b601c8054911515600160a01b026001600160a81b03199092166001600160a01b0390931692909217179055565b6111ab6142ec565b80516111f95760405162461bcd60e51b815260206004820152601c60248201527f63616e6e6f742075706461746520696e76616c69642076616c756573000000006044820152606401611119565b8051600114801561122457508060008151811061121857611218615884565b60200260200101516000145b15611238576112356015600061510f565b50565b6112446015600061510f565b60005b815181101561129557601582828151811061126457611264615884565b602090810291909101810151825460018101845560009384529190922001558061128d8161589a565b915050611247565b5050565b6112a161427d565b6112a961437b565b565b6000836002544210156112d05760405162461bcd60e51b8152600401611119906158b5565b600081116112f05760405162461bcd60e51b8152600401611119906158ec565b33601c54600160a01b900460ff161561139d57601c5460405163df592f7d60e01b81526001600160a01b0383811660048301529091169063df592f7d9060240160206040518083038186803b15801561134857600080fd5b505afa15801561135c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113809190615919565b1561139d5760405162461bcd60e51b815260040161111990615936565b6113a56143d0565b6113ad61441d565b60006113b8876123fb565b905060006113c46120a6565b6005546113d19084615843565b6113db9190615862565b90508034101561141c5760405162461bcd60e51b815260206004820152600c60248201526b13195cdcc81c185e5b595b9d60a21b6044820152606401611119565b6000611428823461596b565b9050886008600082825461143c9190615982565b90915550506010541561146157886010600082825461145b9190615982565b90915550505b6000601054600854116114765760105461147a565b6008545b90506011600001600f548154811061149457611494615884565b90600052602060002001548111806114ce57506011600201600f54815481106114bf576114bf615884565b90600052602060002001544210155b156115ef576011600201600f54815481106114eb576114eb615884565b9060005260206000200154421061152e57896011600001600f548154811061151557611515615884565b906000526020600020015461152a9190615982565b6010555b60065460ff161561154157611541614477565b600060118101600f548154811061155a5761155a615884565b906000526020600020015482116115a9578a826011600001600f548154811061158557611585615884565b906000526020600020015461159a919061596b565b6115a4919061596b565b6115ac565b60005b60158054600181810183556000928352600080516020615c27833981519152909101839055600f805493945090929091906115e8908490615982565b9091555050505b881561170457601c54600160a81b900460ff1615611636573360009081526027602052604090205460ff166116365760405162461bcd60e51b81526004016111199061599a565b601b546001600160a01b03166391c6196633600554611655908e615843565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561169b57600080fd5b505af11580156116af573d6000803e3d6000fd5b5050505089600960008282546116c59190615982565b90915550506040805184815260208101869052428183015290516000918c913391600080516020615c07833981519152919081900360600190a461176b565b600554611711908b615843565b3360009081526024602052604081208054909190611730908490615982565b90915550506040805184815260208101869052428183015290516000918c913391600080516020615c47833981519152919081900360600190a45b83600a600082825461177d9190615982565b9091555061178e90508389336144e7565b811561179e5761179e338361468e565b60019650505050506117b06001600055565b50509392505050565b60006117c361427d565b6117d0601183600361512d565b506000600f81905560108190556117e99060159061510f565b506001919050565b60006117fb6143d0565b600b546001600160a01b031661184a5760405162461bcd60e51b815260206004820152601460248201527314d85b19481d1bdad95b881b9bdd08185919195960621b6044820152606401611119565b3360009081526026602052604090205460ff16156118aa5760405162461bcd60e51b815260206004820152601b60248201527f54686973204164647265737320697320426c61636b6c697374656400000000006044820152606401611119565b60006003541180156118be57506003544210155b806118d857503360009081526027602052604090205460ff165b6119245760405162461bcd60e51b815260206004820152601960248201527f436c61696d20686173206e6f74207374617274656420796574000000000000006044820152606401611119565b3360009081526025602052604090205460ff16156119765760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e4818db185a5b5959608a1b6044820152606401611119565b336000908152602560209081526040808320805460ff191660011790556024909152902054806119db5760405162461bcd60e51b815260206004820152601060248201526f4e6f7468696e6720746f20636c61696d60801b6044820152606401611119565b336000818152602460208181526040808420849055600b54815163a9059cbb60e01b815260048101969096529285018690525192936001600160a01b039092169263a9059cbb92604480820193929182900301818787803b158015611a3f57600080fd5b505af1158015611a53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a779190615919565b905080611a965760405162461bcd60e51b8152600401611119906159d1565b6040805183815242602082015233917f9923b4306c6c030f2bdfbf156517d5983b87e15b96176da122cd4f2effa4ba7b910160405180910390a260019250505090565b611ae1614764565b8051825114611b265760405162461bcd60e51b81526020600482015260116024820152704d69736d6174636865642061727261797360781b6044820152606401611119565b611b326017600061510f565b611b3e6016600061510f565b6000805b8351811015611c7c576000838281518110611b5f57611b5f615884565b602002602001015111611bbe5760405162461bcd60e51b815260206004820152602160248201527f50657263656e74616765206d7573742062652067726561746572207468616e206044820152600360fc1b6064820152608401611119565b828181518110611bd057611bd0615884565b602002602001015182611be39190615982565b91506017848281518110611bf957611bf9615884565b60209081029190910181015182546001810184556000938452919092200180546001600160a01b0319166001600160a01b039092169190911790558251601690849083908110611c4b57611c4b615884565b6020908102919091018101518254600181018455600093845291909220015580611c748161589a565b915050611b42565b5080620186a014611ccf5760405162461bcd60e51b815260206004820152601f60248201527f546f74616c2070657263656e74616765206d75737420657175616c20313030006044820152606401611119565b505050565b611cdc61427d565b6021805460ff1916911515919091179055565b6000611cfa826123fb565b9050611d0b64e8d4a5100082615862565b92915050565b611d196142ec565b601054601480546001810182556000919091527fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ec015560065460ff1615611d6257611d62614477565b6011600001600f5481548110611d7a57611d7a615884565b90600052602060002001546010541015611e5557600f54611de3576008546015906011600001600f5481548110611db357611db3615884565b9060005260206000200154611dc8919061596b565b81546001810183556000928352602090922090910155611e2d565b6010546015906011600001600f5481548110611e0157611e01615884565b9060005260206000200154611e16919061596b565b815460018101835560009283526020909220909101555b6011600001600f5481548110611e4557611e45615884565b6000918252602090912001546010555b600f8054906000611e658361589a565b9190505550565b611e7461427d565b60405163a9059cbb60e01b8152336004820152602481018290526000906001600160a01b0384169063a9059cbb90604401602060405180830381600087803b158015611ebf57600080fd5b505af1158015611ed3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef79190615919565b905080611ccf5760405162461bcd60e51b8152600401611119906159d1565b611f1e61427d565b60005b81811015611f8f578360286000858585818110611f4057611f40615884565b9050602002016020810190611f559190615212565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611f878161589a565b915050611f21565b50505050565b611f9d61427d565b60005b81811015611f8f578360266000858585818110611fbf57611fbf615884565b9050602002016020810190611fd49190615212565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806120068161589a565b915050611fa0565b61201661427d565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6120406147b3565b6112a9600061480d565b6017818154811061205a57600080fd5b6000918252602090912001546001600160a01b0316905081565b61207c61427d565b6112a961485f565b61208c61427d565b602180549115156101000261ff0019909216919091179055565b600080601a60009054906101000a90046001600160a01b03166001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b1580156120f757600080fd5b505afa15801561210b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061212f9190615a1a565b505050915050806402540be400611d0b9190615a6a565b61214e61427d565b600f91909155601055565b61216161427d565b8281146121a25760405162461bcd60e51b815260206004820152600f60248201526e098cadccee8d040dad2e6dac2e8c6d608b1b6044820152606401611119565b6000805b8481101561225f578383828181106121c0576121c0615884565b90506020020135602460008888858181106121dd576121dd615884565b90506020020160208101906121f29190615212565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008282546122219190615982565b90915550849050838281811061223957612239615884565b905060200201358261224b9190615982565b9150806122578161589a565b9150506121a6565b5084849050602360008282546122759190615982565b92505081905550806022600082825461228e9190615982565b90915550505050505050565b6122a261427d565b6001600160a01b0381166122ed5760405162461bcd60e51b81526020600482015260126024820152715a65726f20746f6b656e206164647265737360701b6044820152606401611119565b600b80546001600160a01b0319166001600160a01b0383169081179091556040519081527f9197d4b7790c1ef2cbc99e6139e49173e9f34ff565c8df71a9f37acafde4d7159060200160405180910390a150565b61234961427d565b8060005b81811015611f8f5760016029600086868581811061236d5761236d615884565b90506020020160208101906123829190615212565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806123b48161589a565b91505061234d565b6123c4614764565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6123ee61427d565b611295601182600361512d565b600080600060105460001461241257601054612416565b6008545b905060045484111561246a5760405162461bcd60e51b815260206004820181905260248201527f416d6f756e742065786365656473206d617820746f6b656e7320746f206275796044820152606401611119565b6011600001600f548154811061248257612482615884565b906000526020600020015481856124999190615982565b11806124c757506011600201600f54815481106124b8576124b8615884565b90600052602060002001544210155b156126f9576011546124db9060019061596b565b600f541061251a5760405162461bcd60e51b815260206004820152600c60248201526b57726f6e6720706172616d7360a01b6044820152606401611119565b6011600201600f548154811061253257612532615884565b9060005260206000200154421061264557600f54601190612554906001615982565b8154811061256457612564615884565b906000526020600020015484601160006003811061258457612584615884565b01600f548154811061259857612598615884565b90600052602060002001546125ad9190615982565b11156126075760405162461bcd60e51b815260206004820152602360248201527f43616e74205075726368617365204d6f726520696e20696e646976696475616c604482015262040e8f60eb1b6064820152608401611119565b600f54601290612618906001615982565b8154811061262857612628615884565b90600052602060002001548461263e9190615843565b915061272a565b60008160118201600f548154811061265f5761265f615884565b9060005260206000200154612674919061596b565b600f54909150601290612688906001615982565b8154811061269857612698615884565b906000526020600020015481866126af919061596b565b6126b99190615843565b6011600101600f54815481106126d1576126d1615884565b9060005260206000200154826126e79190615843565b6126f19190615982565b92505061272a565b6011600101600f548154811061271157612711615884565b9060005260206000200154846127279190615843565b91505b5092915050565b61273961427d565b6001600160a01b0381166127b55760405162461bcd60e51b815260206004820152603760248201527f7374616b696e67206d616e616765722063616e6e6f7420626520696e6974696160448201527f6c697a65642077697468207a65726f20616464726573730000000000000000006064820152608401611119565b601b80546001600160a01b0319166001600160a01b03838116918217909255600b5460405163095ea7b360e01b8152600481019290925260001960248301529091169063095ea7b390604401602060405180830381600087803b15801561281b57600080fd5b505af115801561282f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112959190615919565b61285b61427d565b601f91909155602055565b60606011826003811061287b5761287b615884565b018054806020026020016040519081016040528092919081815260200182805480156128c657602002820191906000526020600020905b8154815260200190600101908083116128b2575b50505050509050919050565b60006001600160a01b038216158061290257506001600160a01b03821660009081526029602052604090205460ff165b8061291557506001600160a01b03821633145b1561292257506000919050565b60215460ff1661293457506001919050565b506001600160a01b0316600090815260246020526040902054151590565b6015818154811061296257600080fd5b600091825260209091200154905081565b606060158054806020026020016040519081016040528092919081815260200182805480156129c157602002820191906000526020600020905b8154815260200190600101908083116129ad575b5050505050905090565b6129d361427d565b6001600160a01b038116612a225760405162461bcd60e51b8152602060048201526016602482015275616464726573732063616e6e6f74206265207a65726f60501b6044820152606401611119565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000612a4e6143d0565b600b546001600160a01b0316612a9d5760405162461bcd60e51b815260206004820152601460248201527314d85b19481d1bdad95b881b9bdd08185919195960621b6044820152606401611119565b3360009081526026602052604090205460ff1615612afd5760405162461bcd60e51b815260206004820152601b60248201527f54686973204164647265737320697320426c61636b6c697374656400000000006044820152606401611119565b601c54600160a81b900460ff1615612b3e573360009081526027602052604090205460ff16612b3e5760405162461bcd60e51b81526004016111199061599a565b3360009081526024602052604090205480612b8e5760405162461bcd60e51b815260206004820152601060248201526f4e6f7468696e6720746f207374616b6560801b6044820152606401611119565b600554612b9b9082615862565b60096000828254612bac9190615982565b9091555050601b546001600160a01b03166391c61966336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401600060405180830381600087803b158015612c0b57600080fd5b505af1158015612c1f573d6000803e3d6000fd5b5050505060246000612c2e3390565b6001600160a01b031681526020810191909152604001600090812055336001600160a01b03167ffa4ec67f9254455933eb145bae864b26f29dd0a7bbb76eb11e4d6b8b9b184c2b8242604051612c8e929190918252602082015260400190565b60405180910390a2600191505090565b600083600254421015612cc35760405162461bcd60e51b8152600401611119906158b5565b60008111612ce35760405162461bcd60e51b8152600401611119906158ec565b33601c54600160a01b900460ff1615612d9057601c5460405163df592f7d60e01b81526001600160a01b0383811660048301529091169063df592f7d9060240160206040518083038186803b158015612d3b57600080fd5b505afa158015612d4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d739190615919565b15612d905760405162461bcd60e51b815260040161111990615936565b612d986143d0565b6000612da3876123fb565b90508660086000828254612db79190615982565b9091555060009050612dce64e8d4a5100083615862565b9050601054600014612df2578760106000828254612dec9190615982565b90915550505b600060105460085411612e0757601054612e0b565b6008545b90506011600001600f5481548110612e2557612e25615884565b9060005260206000200154811180612e5f57506011600201600f5481548110612e5057612e50615884565b90600052602060002001544210155b15612f80576011600201600f5481548110612e7c57612e7c615884565b90600052602060002001544210612ebf57886011600001600f5481548110612ea657612ea6615884565b9060005260206000200154612ebb9190615982565b6010555b60065460ff1615612ed257612ed2614477565b600060118101600f5481548110612eeb57612eeb615884565b90600052602060002001548211612f3a5789826011600001600f5481548110612f1657612f16615884565b9060005260206000200154612f2b919061596b565b612f35919061596b565b612f3d565b60005b60158054600181810183556000928352600080516020615c27833981519152909101839055600f80549394509092909190612f79908490615982565b9091555050505b87156130b157601c54600160a81b900460ff1615612fc7573360009081526027602052604090205460ff16612fc75760405162461bcd60e51b81526004016111199061599a565b601b546001600160a01b03166391c6196633600554612fe6908d615843565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561302c57600080fd5b505af1158015613040573d6000803e3d6000fd5b5050505088600960008282546130569190615982565b90915550506018546001600160a01b031689336001600160a01b0316600080516020615c078339815191528587426040516130a4939291909283526020830191909152604082015260600190565b60405180910390a4613134565b6005546130be908a615843565b33600090815260246020526040812080549091906130dd908490615982565b90915550506018546001600160a01b031689336001600160a01b0316600080516020615c4783398151915285874260405161312b939291909283526020830191909152604082015260600190565b60405180910390a45b82600a60008282546131469190615982565b90915550506018546000906001600160a01b031663dd62ed3e336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015230602482015260440160206040518083038186803b1580156131a557600080fd5b505afa1580156131b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131dd9190615aef565b9050808311156131ff5760405162461bcd60e51b815260040161111990615b08565b61320983896148a2565b5060019998505050505050505050565b61322161427d565b8060005b81811015611f8f5760006029600086868581811061324557613245615884565b905060200201602081019061325a9190615212565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061328c8161589a565b915050613225565b6014818154811061296257600080fd5b601182600381106132b457600080fd5b0181815481106132c357600080fd5b90600052602060002001600091509150505481565b6132e061427d565b601c8054911515600160a81b0260ff60a81b19909216919091179055565b61330661427d565b60005b81811015611f8f57836027600085858581811061332857613328615884565b905060200201602081019061333d9190615212565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061336f8161589a565b915050613309565b600061338161427d565b6001600160a01b0383166133cc5760405162461bcd60e51b81526020600482015260126024820152715a65726f20746f6b656e206164647265737360701b6044820152606401611119565b600b80546001600160a01b038581166001600160a01b03199283168117909355601b805491861691909216811790915560405163095ea7b360e01b81526004810191909152600019602482015263095ea7b390604401602060405180830381600087803b15801561343c57600080fd5b505af1158015613450573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134749190615919565b506040516323b872dd60e01b81526000906001600160a01b038516906323b872dd906134a890339030908a90600401615b49565b602060405180830381600087803b1580156134c257600080fd5b505af11580156134d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134fa9190615919565b9050806135195760405162461bcd60e51b8152600401611119906159d1565b604080518681524260208201526001600160a01b038616917fdc9670dbabdd488b372eb16ebe49a39b3124a12cdffdcefbc89834a408bf8ff8910160405180910390a2506001949350505050565b60008360025442101561358c5760405162461bcd60e51b8152600401611119906158b5565b600081116135ac5760405162461bcd60e51b8152600401611119906158ec565b33601c54600160a01b900460ff161561365957601c5460405163df592f7d60e01b81526001600160a01b0383811660048301529091169063df592f7d9060240160206040518083038186803b15801561360457600080fd5b505afa158015613618573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061363c9190615919565b156136595760405162461bcd60e51b815260040161111990615936565b6136616143d0565b600061366c876123fb565b905086600860008282546136809190615982565b909155506000905061369764e8d4a5100083615862565b90506010546000146136bb5787601060008282546136b59190615982565b90915550505b6000601054600854116136d0576010546136d4565b6008545b90506011600001600f54815481106136ee576136ee615884565b906000526020600020015481118061372857506011600201600f548154811061371957613719615884565b90600052602060002001544210155b15613849576011600201600f548154811061374557613745615884565b9060005260206000200154421061378857886011600001600f548154811061376f5761376f615884565b90600052602060002001546137849190615982565b6010555b60065460ff161561379b5761379b614477565b600060118101600f54815481106137b4576137b4615884565b906000526020600020015482116138035789826011600001600f54815481106137df576137df615884565b90600052602060002001546137f4919061596b565b6137fe919061596b565b613806565b60005b60158054600181810183556000928352600080516020615c27833981519152909101839055600f80549394509092909190613842908490615982565b9091555050505b871561397a57601c54600160a81b900460ff1615613890573360009081526027602052604090205460ff166138905760405162461bcd60e51b81526004016111199061599a565b601b546001600160a01b03166391c61966336005546138af908d615843565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156138f557600080fd5b505af1158015613909573d6000803e3d6000fd5b50505050886009600082825461391f9190615982565b90915550506019546001600160a01b031689336001600160a01b0316600080516020615c0783398151915285874260405161396d939291909283526020830191909152604082015260600190565b60405180910390a46139fd565b600554613987908a615843565b33600090815260246020526040812080549091906139a6908490615982565b90915550506019546001600160a01b031689336001600160a01b0316600080516020615c478339815191528587426040516139f4939291909283526020830191909152604082015260600190565b60405180910390a45b82600a6000828254613a0f9190615982565b90915550506019546000906001600160a01b031663dd62ed3e336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015230602482015260440160206040518083038186803b158015613a6e57600080fd5b505afa158015613a82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aa69190615aef565b905080831115613ac85760405162461bcd60e51b815260040161111990615b08565b6132098389614c67565b613ada61427d565b60008111613b1f5760405162461bcd60e51b8152602060048201526012602482015271496e76616c696420706172616d657465727360701b6044820152606401611119565b804210613b625760405162461bcd60e51b815260206004820152601160248201527014d85b19481d1a5b59481a5b881c185cdd607a1b6044820152606401611119565b60028054908290556040805182815260208101849052428183015290516414d510549560da1b917fddd2ed237e6993c9380182683f2c8bec486aaaa429528852cd74dbdb96cea0b2919081900360600190a25050565b613bc061427d565b601d80546001600160a01b0319166001600160a01b039390931692909217909155601e55565b613bee6147b3565b6001600160a01b038116613c535760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401611119565b6112358161480d565b6016818154811061296257600080fd5b613c746147b3565b600e80546001600160a01b0319169055565b600083600254421015613cab5760405162461bcd60e51b8152600401611119906158b5565b60008111613ccb5760405162461bcd60e51b8152600401611119906158ec565b601c548690600160a01b900460ff1615613d7957601c5460405163df592f7d60e01b81526001600160a01b0383811660048301529091169063df592f7d9060240160206040518083038186803b158015613d2457600080fd5b505afa158015613d38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d5c9190615919565b15613d795760405162461bcd60e51b815260040161111990615936565b613d816143d0565b613d8961441d565b3360009081526028602052604090205460ff16613de85760405162461bcd60e51b815260206004820181905260248201527f55736572206e6f742077686974656c697374656420666f7220746869732074786044820152606401611119565b6000613df3876123fb565b90506000613dff6120a6565b600554613e0c9084615843565b613e169190615862565b905080341015613e575760405162461bcd60e51b815260206004820152600c60248201526b13195cdcc81c185e5b595b9d60a21b6044820152606401611119565b6000613e63823461596b565b90508860086000828254613e779190615982565b909155505060105415613e9c578860106000828254613e969190615982565b90915550505b600060105460085411613eb157601054613eb5565b6008545b90506011600001600f5481548110613ecf57613ecf615884565b9060005260206000200154811180613f0957506011600201600f5481548110613efa57613efa615884565b90600052602060002001544210155b1561402a576011600201600f5481548110613f2657613f26615884565b90600052602060002001544210613f6957896011600001600f5481548110613f5057613f50615884565b9060005260206000200154613f659190615982565b6010555b60065460ff1615613f7c57613f7c614477565b600060118101600f5481548110613f9557613f95615884565b90600052602060002001548211613fe4578a826011600001600f5481548110613fc057613fc0615884565b9060005260206000200154613fd5919061596b565b613fdf919061596b565b613fe7565b60005b60158054600181810183556000928352600080516020615c27833981519152909101839055600f80549394509092909190614023908490615982565b9091555050505b881561415657601c54600160a81b900460ff161561407a576001600160a01b038b1660009081526027602052604090205460ff1661407a5760405162461bcd60e51b81526004016111199061599a565b601b546005546001600160a01b03909116906391c61966908d9061409e908e615843565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156140e457600080fd5b505af11580156140f8573d6000803e3d6000fd5b50505050896009600082825461410e9190615982565b90915550506040805184815260208101869052428183015290516000918c916001600160a01b038f1691600080516020615c07833981519152919081900360600190a46141cf565b600554614163908b615843565b6001600160a01b038c166000908152602460205260408120805490919061418b908490615982565b90915550506040805184815260208101869052428183015290516000918c916001600160a01b038f1691600080516020615c47833981519152919081900360600190a45b83600a60008282546141e19190615982565b909155506141f2905083898d6144e7565b8115614202576142028b8361468e565b60019650505050506142146001600055565b5050949350505050565b61422661427d565b601f95909555602093909355601d80546001600160a01b039093166001600160a01b031990931692909217909155601e55602180549215156101000261ff00199215159290921661ffff1990931692909217179055565b600e546001600160a01b03163314806142a057506001546001600160a01b031633145b6112a95760405162461bcd60e51b815260206004820152601b60248201527f63616c6c6572206e6f74206d616e61676572206f72206f776e657200000000006044820152606401611119565b600d546001600160a01b031633148061430f5750600e546001600160a01b031633145b8061432457506001546001600160a01b031633145b6112a95760405162461bcd60e51b815260206004820152602260248201527f63616c6c6572206e6f742061646d696e2c206d616e61676572206f72206f776e60448201526132b960f11b6064820152608401611119565b614383614e8e565b6001805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600154600160a01b900460ff16156112a95760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401611119565b600260005414156144705760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611119565b6002600055565b60005b600f5460135461448a919061596b565b8110156112355760075461449e9082615843565b6144a89042615982565b600f546013906144b9908490615982565b815481106144c9576144c9615884565b600091825260209091200155806144df8161589a565b91505061447a565b601d546000906001600160a01b03161561451d57601d54601e5461451a9186916001600160a01b03909116906000614ede565b90505b600061452c8584866000614fdc565b90506145388183615982565b614542908661596b565b60175490955061458f57600c546001600160a01b03166145745760405162461bcd60e51b815260040161111990615b6d565b600c5461458a906001600160a01b03168661468e565b614687565b6000805b601754811015614629576000620186a0601683815481106145b6576145b6615884565b9060005260206000200154896145cc9190615843565b6145d69190615862565b9050614609601783815481106145ee576145ee615884565b6000918252602090912001546001600160a01b03168261468e565b6146138184615982565b92505080806146219061589a565b915050614593565b506000614636828861596b565b1115614685576017805461468591906146519060019061596b565b8154811061466157614661615884565b6000918252602090912001546001600160a01b0316614680838961596b565b61468e565b505b5050505050565b804710156146cc5760405162461bcd60e51b815260206004820152600b60248201526a4c6f772062616c616e636560a81b6044820152606401611119565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114614719576040519150601f19603f3d011682016040523d82523d6000602084013e61471e565b606091505b5050905080611ccf5760405162461bcd60e51b81526020600482015260126024820152711155120814185e5b595b9d0819985a5b195960721b6044820152606401611119565b600e546001600160a01b031633146112a95760405162461bcd60e51b815260206004820152601260248201527131b0b63632b9103737ba1036b0b730b3b2b960711b6044820152606401611119565b6001546001600160a01b031633146112a95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611119565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6148676143d0565b6001805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586143b33390565b601d546000906001600160a01b0316156148dc57601d54601e546018546148d99286926001600160a01b0391821692909116614ede565b90505b60006148f6843360185486906001600160a01b0316614fdc565b90506149028183615982565b61490c908561596b565b601754909450614a0c57600c546001600160a01b031661493e5760405162461bcd60e51b815260040161111990615b6d565b6018546000906001600160a01b0316335b600c5460405161496e92916001600160a01b0316908990602401615b49565b60408051601f198184030181529181526020820180516001600160e01b03166323b872dd60e01b179052516149a39190615b9d565b6000604051808303816000865af19150503d80600081146149e0576040519150601f19603f3d011682016040523d82523d6000602084013e6149e5565b606091505b5050905080614a065760405162461bcd60e51b815260040161111990615bd8565b50611f8f565b6000805b601754811015614b5a576000620186a060168381548110614a3357614a33615884565b906000526020600020015488614a499190615843565b614a539190615862565b6018549091506000906001600160a01b03163360178581548110614a7957614a79615884565b600091825260209091200154604051614aa192916001600160a01b0316908690602401615b49565b60408051601f198184030181529181526020820180516001600160e01b03166323b872dd60e01b17905251614ad69190615b9d565b6000604051808303816000865af19150503d8060008114614b13576040519150601f19603f3d011682016040523d82523d6000602084013e614b18565b606091505b5050905080614b395760405162461bcd60e51b815260040161111990615bd8565b614b438285615982565b935050508080614b529061589a565b915050614a10565b506000614b67828761596b565b1115614687576018546000906001600160a01b0316335b60178054614b8e9060019061596b565b81548110614b9e57614b9e615884565b6000918252602090912001546001600160a01b0316614bbd858a61596b565b604051602401614bcf93929190615b49565b60408051601f198184030181529181526020820180516001600160e01b03166323b872dd60e01b17905251614c049190615b9d565b6000604051808303816000865af19150503d8060008114614c41576040519150601f19603f3d011682016040523d82523d6000602084013e614c46565b606091505b50509050806146855760405162461bcd60e51b815260040161111990615bd8565b601d546000906001600160a01b031615614ca157601d54601e54601954614c9e9286926001600160a01b0391821692909116614ede565b90505b6000614cbb843360195486906001600160a01b0316614fdc565b9050614cc78183615982565b614cd1908561596b565b601754909450614d1857600c546001600160a01b0316614d035760405162461bcd60e51b815260040161111990615b6d565b6019546000906001600160a01b03163361494f565b6000805b601754811015614e66576000620186a060168381548110614d3f57614d3f615884565b906000526020600020015488614d559190615843565b614d5f9190615862565b6019549091506000906001600160a01b03163360178581548110614d8557614d85615884565b600091825260209091200154604051614dad92916001600160a01b0316908690602401615b49565b60408051601f198184030181529181526020820180516001600160e01b03166323b872dd60e01b17905251614de29190615b9d565b6000604051808303816000865af19150503d8060008114614e1f576040519150601f19603f3d011682016040523d82523d6000602084013e614e24565b606091505b5050905080614e455760405162461bcd60e51b815260040161111990615bd8565b614e4f8285615982565b935050508080614e5e9061589a565b915050614d1c565b506000614e73828761596b565b1115614687576019546000906001600160a01b031633614b7e565b600154600160a01b900460ff166112a95760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401611119565b6000806064614eed8588615843565b614ef79190615862565b90506001600160a01b03831615614fc75760006001600160a01b038416338784604051602401614f2993929190615b49565b60408051601f198184030181529181526020820180516001600160e01b03166323b872dd60e01b17905251614f5e9190615b9d565b6000604051808303816000865af19150503d8060008114614f9b576040519150601f19603f3d011682016040523d82523d6000602084013e614fa0565b606091505b5050905080614fc15760405162461bcd60e51b815260040161111990615bd8565b50614fd1565b614fd1858261468e565b90505b949350505050565b6000806000614feb868661507f565b9050614ff6816128d2565b61500257509050614fd4565b6150108782601f5487614ede565b61501a9083615982565b602154909250610100900460ff1661503457509050614fd4565b600061504182600061507f565b905061504c816128d2565b61505b57829350505050614fd4565b615069888260205488614ede565b6150739084615982565b98975050505050505050565b6001600160a01b038281166000908152602a60205260408120549091161580156150bb5750816001600160a01b0316836001600160a01b031614155b156150ef576001600160a01b038381166000908152602a6020526040902080546001600160a01b0319169184169190911790555b50506001600160a01b039081166000908152602a60205260409020541690565b5080546000825590600052602060002090810190611235919061517d565b826003810192821561516d579160200282015b8281111561516d578251805161515d918491602090910190615192565b5091602001919060010190615140565b506151799291506151d9565b5090565b5b80821115615179576000815560010161517e565b8280548282559060005260206000209081019282156151cd579160200282015b828111156151cd5782518255916020019190600101906151b2565b5061517992915061517d565b808211156151795760006151ed828261510f565b506001016151d9565b80356001600160a01b038116811461520d57600080fd5b919050565b60006020828403121561522457600080fd5b611154826151f6565b60006020828403121561523f57600080fd5b5035919050565b801515811461123557600080fd5b60006020828403121561526657600080fd5b813561115481615246565b6000806040838503121561528457600080fd5b61528d836151f6565b9150602083013561529d81615246565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156152e1576152e16152a8565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715615310576153106152a8565b604052919050565b600067ffffffffffffffff821115615332576153326152a8565b5060051b60200190565b600082601f83011261534d57600080fd5b8135602061536261535d83615318565b6152e7565b82815260059290921b8401810191818101908684111561538157600080fd5b8286015b8481101561539c5780358352918301918301615385565b509695505050505050565b6000602082840312156153b957600080fd5b813567ffffffffffffffff8111156153d057600080fd5b614fd48482850161533c565b6000806000606084860312156153f157600080fd5b83359250602084013561540381615246565b9150615411604085016151f6565b90509250925092565b6000602080838503121561542d57600080fd5b823567ffffffffffffffff8082111561544557600080fd5b818501915085601f83011261545957600080fd5b6154616152be565b80606084018881111561547357600080fd5b845b818110156154a75780358581111561548d5760008081fd5b6154998b82890161533c565b855250928601928601615475565b509098975050505050505050565b600080604083850312156154c857600080fd5b823567ffffffffffffffff808211156154e057600080fd5b818501915085601f8301126154f457600080fd5b8135602061550461535d83615318565b82815260059290921b8401810191818101908984111561552357600080fd5b948201945b8386101561554857615539866151f6565b82529482019490820190615528565b9650508601359250508082111561555e57600080fd5b5061556b8582860161533c565b9150509250929050565b6000806040838503121561558857600080fd5b615591836151f6565b946020939093013593505050565b60008083601f8401126155b157600080fd5b50813567ffffffffffffffff8111156155c957600080fd5b6020830191508360208260051b85010111156155e457600080fd5b9250929050565b60008060006040848603121561560057600080fd5b833561560b81615246565b9250602084013567ffffffffffffffff81111561562757600080fd5b6156338682870161559f565b9497909650939450505050565b6000806040838503121561565357600080fd5b50508035926020909101359150565b6000806000806040858703121561567857600080fd5b843567ffffffffffffffff8082111561569057600080fd5b61569c8883890161559f565b909650945060208701359150808211156156b557600080fd5b506156c28782880161559f565b95989497509550505050565b600080602083850312156156e157600080fd5b823567ffffffffffffffff8111156156f857600080fd5b6157048582860161559f565b90969095509350505050565b6020808252825182820181905260009190848201906040850190845b818110156157485783518352928401929184019160010161572c565b50909695505050505050565b60008060006060848603121561576957600080fd5b83359250615403602085016151f6565b6000806000806080858703121561578f57600080fd5b615798856151f6565b93506020850135925060408501356157af81615246565b91506157bd606086016151f6565b905092959194509250565b60008060008060008060c087890312156157e157600080fd5b86359550602087013594506157f8604088016151f6565b935060608701359250608087013561580f81615246565b915060a087013561581f81615246565b809150509295509295509295565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561585d5761585d61582d565b500290565b60008261587f57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b60006000198214156158ae576158ae61582d565b5060010190565b60208082526017908201527f496e76616c69642074696d6520666f7220627579696e67000000000000000000604082015260600190565b602080825260139082015272125b9d985b1a59081cd85b1948185b5bdd5b9d606a1b604082015260600190565b60006020828403121561592b57600080fd5b815161115481615246565b6020808252818101527f416464726573732070726573656e7420696e2073616e6374696f6e206c697374604082015260600190565b60008282101561597d5761597d61582d565b500390565b600082198211156159955761599561582d565b500190565b6020808252601e908201527f55736572206e6f742077686974656c697374656420666f72207374616b650000604082015260600190565b602080825260159082015274151bdad95b881d1c985b9cd9995c8819985a5b1959605a1b604082015260600190565b805169ffffffffffffffffffff8116811461520d57600080fd5b600080600080600060a08688031215615a3257600080fd5b615a3b86615a00565b9450602086015193506040860151925060608601519150615a5e60808701615a00565b90509295509295909350565b60006001600160ff1b0381841382841380821686840486111615615a9057615a9061582d565b600160ff1b6000871282811687830589121615615aaf57615aaf61582d565b60008712925087820587128484161615615acb57615acb61582d565b87850587128184161615615ae157615ae161582d565b505050929093029392505050565b600060208284031215615b0157600080fd5b5051919050565b60208082526021908201527f4d616b65207375726520746f2061646420656e6f75676820616c6c6f77616e636040820152606560f81b606082015260800190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60208082526016908201527514185e5b595b9d081dd85b1b195d081b9bdd081cd95d60521b604082015260600190565b6000825160005b81811015615bbe5760208186018101518583015201615ba4565b81811115615bcd576000828501525b509190910192915050565b602080825260149082015273151bdad95b881c185e5b595b9d0819985a5b195960621b60408201526060019056fe6f225532a9c33b023b8e48247ad8df9d98f132ae17c769b97ff22d2b278fa73a55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4754d8aead3491b7eba4b5c7a65fc17e493b9e63f9e433522fc5f6a85a168fc9d36a26469706673582212203448370fd6ca7cb90265436efd0e9d72ebe445cb9a2a9faef1bd095f3c5df5b064736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b8419000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4800000000000000000000000000000000000000000000000000000000683596e000000000000000000000000000000000000000000000000000000000005b8d800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000003f4800000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000000000000000000000000000000000000820000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000632ea00000000000000000000000000000000000000000000000000000000000c65d400000000000000000000000000000000000000000000000000000000001298be000000000000000000000000000000000000000000000000000000000018cba800000000000000000000000000000000000000000000000000000000001efe92000000000000000000000000000000000000000000000000000000000025317c00000000000000000000000000000000000000000000000000000000002b64660000000000000000000000000000000000000000000000000000000000319750000000000000000000000000000000000000000000000000000000000037ca3a00000000000000000000000000000000000000000000000000000000003dfd24000000000000000000000000000000000000000000000000000000000044300e00000000000000000000000000000000000000000000000000000000004a62f800000000000000000000000000000000000000000000000000000000005095e2000000000000000000000000000000000000000000000000000000000056c8cc00000000000000000000000000000000000000000000000000000000005cfbb60000000000000000000000000000000000000000000000000000000000632ea0000000000000000000000000000000000000000000000000000000000069618a00000000000000000000000000000000000000000000000000000000006f9474000000000000000000000000000000000000000000000000000000000075c75e00000000000000000000000000000000000000000000000000000000007bfa48000000000000000000000000000000000000000000000000000000000082a7440000000000000000000000000000000000000000000000000000000000895440000000000000000000000000000000000000000000000000000000000090013c000000000000000000000000000000000000000000000000000000000096ae3800000000000000000000000000000000000000000000000000000000009d5b340000000000000000000000000000000000000000000000000000000000a408300000000000000000000000000000000000000000000000000000000000aab52c0000000000000000000000000000000000000000000000000000000000b162280000000000000000000000000000000000000000000000000000000000b80f240000000000000000000000000000000000000000000000000000000000bebc200000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000a36cc19bab000000000000000000000000000000000000000000000000000000a52a689f9ba00000000000000000000000000000000000000000000000000000a6e80fa38c400000000000000000000000000000000000000000000000000000a8a5b6a77ce00000000000000000000000000000000000000000000000000000aa635dab6d800000000000000000000000000000000000000000000000000000ac2104af5e200000000000000000000000000000000000000000000000000000addeabb34ec00000000000000000000000000000000000000000000000000000af9c52b73f600000000000000000000000000000000000000000000000000000b159f9bb30000000000000000000000000000000000000000000000000000000b317a0bf20a00000000000000000000000000000000000000000000000000000b4d547c311400000000000000000000000000000000000000000000000000000b692eec701e00000000000000000000000000000000000000000000000000000b85095caf2800000000000000000000000000000000000000000000000000000ba0e3ccee3200000000000000000000000000000000000000000000000000000bbcbe3d2d3c00000000000000000000000000000000000000000000000000000bd898ad6c4600000000000000000000000000000000000000000000000000000bf4731dab5000000000000000000000000000000000000000000000000000000c104d8dea5a00000000000000000000000000000000000000000000000000000c2c27fe296400000000000000000000000000000000000000000000000000000c48026e686e00000000000000000000000000000000000000000000000000000c63dcdea77800000000000000000000000000000000000000000000000000000c7fb74ee68200000000000000000000000000000000000000000000000000000c9b91bf258c00000000000000000000000000000000000000000000000000000cb76c2f649600000000000000000000000000000000000000000000000000000cd3469fa3a000000000000000000000000000000000000000000000000000000cef210fe2aa00000000000000000000000000000000000000000000000000000d0afb8021b400000000000000000000000000000000000000000000000000000d26d5f060be00000000000000000000000000000000000000000000000000000d42b0609fc800000000000000000000000000000000000000000000000000000d5e8ad0ded2000000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000683ec7a0000000000000000000000000000000000000000000000000000000006842bc20000000000000000000000000000000000000000000000000000000006846b0a000000000000000000000000000000000000000000000000000000000684aa52000000000000000000000000000000000000000000000000000000000684e99a00000000000000000000000000000000000000000000000000000000068528e2000000000000000000000000000000000000000000000000000000000685682a000000000000000000000000000000000000000000000000000000000685a772000000000000000000000000000000000000000000000000000000000685e6ba0000000000000000000000000000000000000000000000000000000006862602000000000000000000000000000000000000000000000000000000000686654a000000000000000000000000000000000000000000000000000000000686a492000000000000000000000000000000000000000000000000000000000686e3da0000000000000000000000000000000000000000000000000000000006872322000000000000000000000000000000000000000000000000000000000687626a000000000000000000000000000000000000000000000000000000000687a1b2000000000000000000000000000000000000000000000000000000000687e0fa00000000000000000000000000000000000000000000000000000000068820420000000000000000000000000000000000000000000000000000000006885f8a0000000000000000000000000000000000000000000000000000000006889ed2000000000000000000000000000000000000000000000000000000000688de1a0000000000000000000000000000000000000000000000000000000006891d620000000000000000000000000000000000000000000000000000000006895caa0000000000000000000000000000000000000000000000000000000006899bf2000000000000000000000000000000000000000000000000000000000689db3a00000000000000000000000000000000000000000000000000000000068a1a8200000000000000000000000000000000000000000000000000000000068a59ca00000000000000000000000000000000000000000000000000000000068a991200000000000000000000000000000000000000000000000000000000068ad85a00000000000000000000000000000000000000000000000000000000068b17a20
-----Decoded View---------------
Arg [0] : _contracts (tuple): System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput]
Arg [1] : _config (tuple): System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput]
Arg [2] : _rounds (uint256[][3]): System.Collections.Generic.List`1[System.Numerics.BigInteger],System.Collections.Generic.List`1[System.Numerics.BigInteger],System.Collections.Generic.List`1[System.Numerics.BigInteger]
-----Encoded View---------------
104 Constructor Arguments found :
Arg [0] : 0000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b8419
Arg [1] : 000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7
Arg [2] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Arg [3] : 00000000000000000000000000000000000000000000000000000000683596e0
Arg [4] : 00000000000000000000000000000000000000000000000000000000005b8d80
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [6] : 000000000000000000000000000000000000000000000000000000000003f480
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000440
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000820
Arg [11] : 000000000000000000000000000000000000000000000000000000000000001e
Arg [12] : 0000000000000000000000000000000000000000000000000000000000632ea0
Arg [13] : 0000000000000000000000000000000000000000000000000000000000c65d40
Arg [14] : 0000000000000000000000000000000000000000000000000000000001298be0
Arg [15] : 00000000000000000000000000000000000000000000000000000000018cba80
Arg [16] : 0000000000000000000000000000000000000000000000000000000001efe920
Arg [17] : 00000000000000000000000000000000000000000000000000000000025317c0
Arg [18] : 0000000000000000000000000000000000000000000000000000000002b64660
Arg [19] : 0000000000000000000000000000000000000000000000000000000003197500
Arg [20] : 00000000000000000000000000000000000000000000000000000000037ca3a0
Arg [21] : 0000000000000000000000000000000000000000000000000000000003dfd240
Arg [22] : 00000000000000000000000000000000000000000000000000000000044300e0
Arg [23] : 0000000000000000000000000000000000000000000000000000000004a62f80
Arg [24] : 0000000000000000000000000000000000000000000000000000000005095e20
Arg [25] : 00000000000000000000000000000000000000000000000000000000056c8cc0
Arg [26] : 0000000000000000000000000000000000000000000000000000000005cfbb60
Arg [27] : 000000000000000000000000000000000000000000000000000000000632ea00
Arg [28] : 00000000000000000000000000000000000000000000000000000000069618a0
Arg [29] : 0000000000000000000000000000000000000000000000000000000006f94740
Arg [30] : 00000000000000000000000000000000000000000000000000000000075c75e0
Arg [31] : 0000000000000000000000000000000000000000000000000000000007bfa480
Arg [32] : 00000000000000000000000000000000000000000000000000000000082a7440
Arg [33] : 0000000000000000000000000000000000000000000000000000000008954400
Arg [34] : 00000000000000000000000000000000000000000000000000000000090013c0
Arg [35] : 00000000000000000000000000000000000000000000000000000000096ae380
Arg [36] : 0000000000000000000000000000000000000000000000000000000009d5b340
Arg [37] : 000000000000000000000000000000000000000000000000000000000a408300
Arg [38] : 000000000000000000000000000000000000000000000000000000000aab52c0
Arg [39] : 000000000000000000000000000000000000000000000000000000000b162280
Arg [40] : 000000000000000000000000000000000000000000000000000000000b80f240
Arg [41] : 000000000000000000000000000000000000000000000000000000000bebc200
Arg [42] : 000000000000000000000000000000000000000000000000000000000000001e
Arg [43] : 00000000000000000000000000000000000000000000000000a36cc19bab0000
Arg [44] : 00000000000000000000000000000000000000000000000000a52a689f9ba000
Arg [45] : 00000000000000000000000000000000000000000000000000a6e80fa38c4000
Arg [46] : 00000000000000000000000000000000000000000000000000a8a5b6a77ce000
Arg [47] : 00000000000000000000000000000000000000000000000000aa635dab6d8000
Arg [48] : 00000000000000000000000000000000000000000000000000ac2104af5e2000
Arg [49] : 00000000000000000000000000000000000000000000000000addeabb34ec000
Arg [50] : 00000000000000000000000000000000000000000000000000af9c52b73f6000
Arg [51] : 00000000000000000000000000000000000000000000000000b159f9bb300000
Arg [52] : 00000000000000000000000000000000000000000000000000b317a0bf20a000
Arg [53] : 00000000000000000000000000000000000000000000000000b4d547c3114000
Arg [54] : 00000000000000000000000000000000000000000000000000b692eec701e000
Arg [55] : 00000000000000000000000000000000000000000000000000b85095caf28000
Arg [56] : 00000000000000000000000000000000000000000000000000ba0e3ccee32000
Arg [57] : 00000000000000000000000000000000000000000000000000bbcbe3d2d3c000
Arg [58] : 00000000000000000000000000000000000000000000000000bd898ad6c46000
Arg [59] : 00000000000000000000000000000000000000000000000000bf4731dab50000
Arg [60] : 00000000000000000000000000000000000000000000000000c104d8dea5a000
Arg [61] : 00000000000000000000000000000000000000000000000000c2c27fe2964000
Arg [62] : 00000000000000000000000000000000000000000000000000c48026e686e000
Arg [63] : 00000000000000000000000000000000000000000000000000c63dcdea778000
Arg [64] : 00000000000000000000000000000000000000000000000000c7fb74ee682000
Arg [65] : 00000000000000000000000000000000000000000000000000c9b91bf258c000
Arg [66] : 00000000000000000000000000000000000000000000000000cb76c2f6496000
Arg [67] : 00000000000000000000000000000000000000000000000000cd3469fa3a0000
Arg [68] : 00000000000000000000000000000000000000000000000000cef210fe2aa000
Arg [69] : 00000000000000000000000000000000000000000000000000d0afb8021b4000
Arg [70] : 00000000000000000000000000000000000000000000000000d26d5f060be000
Arg [71] : 00000000000000000000000000000000000000000000000000d42b0609fc8000
Arg [72] : 00000000000000000000000000000000000000000000000000d5e8ad0ded2000
Arg [73] : 000000000000000000000000000000000000000000000000000000000000001e
Arg [74] : 00000000000000000000000000000000000000000000000000000000683ec7a0
Arg [75] : 000000000000000000000000000000000000000000000000000000006842bc20
Arg [76] : 000000000000000000000000000000000000000000000000000000006846b0a0
Arg [77] : 00000000000000000000000000000000000000000000000000000000684aa520
Arg [78] : 00000000000000000000000000000000000000000000000000000000684e99a0
Arg [79] : 0000000000000000000000000000000000000000000000000000000068528e20
Arg [80] : 00000000000000000000000000000000000000000000000000000000685682a0
Arg [81] : 00000000000000000000000000000000000000000000000000000000685a7720
Arg [82] : 00000000000000000000000000000000000000000000000000000000685e6ba0
Arg [83] : 0000000000000000000000000000000000000000000000000000000068626020
Arg [84] : 00000000000000000000000000000000000000000000000000000000686654a0
Arg [85] : 00000000000000000000000000000000000000000000000000000000686a4920
Arg [86] : 00000000000000000000000000000000000000000000000000000000686e3da0
Arg [87] : 0000000000000000000000000000000000000000000000000000000068723220
Arg [88] : 00000000000000000000000000000000000000000000000000000000687626a0
Arg [89] : 00000000000000000000000000000000000000000000000000000000687a1b20
Arg [90] : 00000000000000000000000000000000000000000000000000000000687e0fa0
Arg [91] : 0000000000000000000000000000000000000000000000000000000068820420
Arg [92] : 000000000000000000000000000000000000000000000000000000006885f8a0
Arg [93] : 000000000000000000000000000000000000000000000000000000006889ed20
Arg [94] : 00000000000000000000000000000000000000000000000000000000688de1a0
Arg [95] : 000000000000000000000000000000000000000000000000000000006891d620
Arg [96] : 000000000000000000000000000000000000000000000000000000006895caa0
Arg [97] : 000000000000000000000000000000000000000000000000000000006899bf20
Arg [98] : 00000000000000000000000000000000000000000000000000000000689db3a0
Arg [99] : 0000000000000000000000000000000000000000000000000000000068a1a820
Arg [100] : 0000000000000000000000000000000000000000000000000000000068a59ca0
Arg [101] : 0000000000000000000000000000000000000000000000000000000068a99120
Arg [102] : 0000000000000000000000000000000000000000000000000000000068ad85a0
Arg [103] : 0000000000000000000000000000000000000000000000000000000068b17a20
Deployed Bytecode Sourcemap
13003:37869:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14950:52;;;;;;;;;;-1:-1:-1;14950:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;548:14:1;;541:22;523:41;;511:2;496:18;14950:52:0;;;;;;;;35609:261;;;;;;;;;;-1:-1:-1;35609:261:0;;;;;:::i;:::-;;:::i;42164:135::-;;;;;;;;;;-1:-1:-1;42164:135:0;;;;;:::i;:::-;;:::i;:::-;;14699:47;;;;;;;;;;-1:-1:-1;14699:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;1275:25:1;;;1263:2;1248:18;14699:47:0;1129:177:1;13483:27:0;;;;;;;;;;-1:-1:-1;13483:27:0;;;;;;;;14339:34;;;;;;;;;;-1:-1:-1;14339:34:0;;;;-1:-1:-1;;;14339:34:0;;;;;;39958:126;;;;;;;;;;-1:-1:-1;39958:126:0;;;;;:::i;:::-;;:::i;14120:27::-;;;;;;;;;;-1:-1:-1;14120:27:0;;;;-1:-1:-1;;;;;14120:27:0;;;;;;-1:-1:-1;;;;;1489:32:1;;;1471:51;;1459:2;1444:18;14120:27:0;1311:217:1;37886:204:0;;;;;;;;;;-1:-1:-1;37886:204:0;;;;;:::i;:::-;;:::i;28930:197::-;;;;;;;;;;-1:-1:-1;28930:197:0;;;;;:::i;:::-;;:::i;43353:254::-;;;;;;;;;;-1:-1:-1;43353:254:0;;;;;:::i;:::-;;:::i;42675:467::-;;;;;;;;;;-1:-1:-1;42675:467:0;;;;;:::i;:::-;;:::i;14308:26::-;;;;;;;;;;-1:-1:-1;14308:26:0;;;;-1:-1:-1;;;14308:26:0;;;;;;13451:27;;;;;;;;;;;;;;;;14634;;;;;;;;;;;;;;;;14194:45;;;;;;;;;;-1:-1:-1;14194:45:0;;;;-1:-1:-1;;;;;14194:45:0;;;14848;;;;;;;;;;-1:-1:-1;14848:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18123:79;;;;;;;;;;;;;:::i;24903:1748::-;;;;;;:::i;:::-;;:::i;50640:229::-;;;;;;;;;;-1:-1:-1;50640:229:0;;;;;:::i;:::-;;:::i;13515:27::-;;;;;;;;;;;;;;;;13773:22;;;;;;;;;;-1:-1:-1;13773:22:0;;;;-1:-1:-1;;;;;13773:22:0;;;14436:36;;;;;;;;;;;;;;;;35939:758;;;;;;;;;;;;;:::i;14399:32::-;;;;;;;;;;-1:-1:-1;14399:32:0;;;;-1:-1:-1;;;;;14399:32:0;;;13834:26;;;;;;;;;;;;;;;;5309:86;;;;;;;;;;-1:-1:-1;5380:7:0;;-1:-1:-1;;;5380:7:0;;;;5309:86;;20031:599;;;;;;;;;;-1:-1:-1;20031:599:0;;;;;:::i;:::-;;:::i;14898:47::-;;;;;;;;;;-1:-1:-1;14898:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;45666:162;;;;;;;;;;-1:-1:-1;45666:162:0;;;;;:::i;:::-;;:::i;13582:30::-;;;;;;;;;;;;;;;;29249:165;;;;;;;;;;-1:-1:-1;29249:165:0;;;;;:::i;:::-;;:::i;41021:511::-;;;;;;;;;;;;;:::i;50042:211::-;;;;;;;;;;-1:-1:-1;50042:211:0;;;;;:::i;:::-;;:::i;37599:281::-;;;;;;;;;;-1:-1:-1;37599:281:0;;;;;:::i;:::-;;:::i;38460:260::-;;;;;;;;;;-1:-1:-1;38460:260:0;;;;;:::i;:::-;;:::i;41621:98::-;;;;;;;;;;-1:-1:-1;41621:98:0;;;;;:::i;:::-;;:::i;2815:103::-;;;;;;;;;;;;;:::i;14751:42::-;;;;;;;;;;-1:-1:-1;14751:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;13358:24;;;;;;;;;;;;;;;;14040;;;;;;;;;;-1:-1:-1;14040:24:0;;;;;:::i;:::-;;:::i;13617:35::-;;;;;;;;;;;;;;;;17994:75;;;;;;;;;;;;;:::i;45955:154::-;;;;;;;;;;-1:-1:-1;45955:154:0;;;;;:::i;:::-;;:::i;14477:33::-;;;;;;;;;;;;;;;;2167:87;;;;;;;;;;-1:-1:-1;2240:6:0;;-1:-1:-1;;;;;2240:6:0;2167:87;;14598:31;;;;;;;;;;-1:-1:-1;14598:31:0;;;;;;;;;;;19831:194;;;;;;;;;;;;;:::i;41893:160::-;;;;;;;;;;-1:-1:-1;41893:160:0;;;;;:::i;:::-;;:::i;13417:29::-;;;;;;;;;;;;;;;;40484:469;;;;;;;;;;-1:-1:-1;40484:469:0;;;;;:::i;:::-;;:::i;35273:215::-;;;;;;;;;;-1:-1:-1;35273:215:0;;;;;:::i;:::-;;:::i;46603:256::-;;;;;;;;;;-1:-1:-1;46603:256:0;;;;;:::i;:::-;;:::i;43952:102::-;;;;;;;;;;-1:-1:-1;43952:102:0;;;;;:::i;:::-;;:::i;38096:121::-;;;;;;;;;;-1:-1:-1;38096:121:0;;;;;:::i;:::-;;:::i;18325:984::-;;;;;;;;;;-1:-1:-1;18325:984:0;;;;;:::i;:::-;;:::i;33868:359::-;;;;;;;;;;-1:-1:-1;33868:359:0;;;;;:::i;:::-;;:::i;15007:51::-;;;;;;;;;;-1:-1:-1;15007:51:0;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;15007:51:0;;;45280:248;;;;;;;;;;-1:-1:-1;45280:248:0;;;;;:::i;:::-;;:::i;40182:107::-;;;;;;;;;;-1:-1:-1;40182:107:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;47398:316::-;;;;;;;;;;-1:-1:-1;47398:316:0;;;;;:::i;:::-;;:::i;13963:39::-;;;;;;;;;;-1:-1:-1;13963:39:0;;;;;:::i;:::-;;:::i;14152:37::-;;;;;;;;;;-1:-1:-1;14152:37:0;;;;-1:-1:-1;;;;;14152:37:0;;;14666:26;;;;;;;;;;;;;;;;42381:115;;;;;;;;;;;;;:::i;14560:33::-;;;;;;;;;;-1:-1:-1;14560:33:0;;;;;;;;39362:212;;;;;;;;;;-1:-1:-1;39362:212:0;;;;;:::i;:::-;;:::i;36703:676::-;;;;;;;;;;;;;:::i;13865:25::-;;;;;;;;;;;;;;;;21044:1696;;;;;;;;;;-1:-1:-1;21044:1696:0;;;;;:::i;:::-;;:::i;46987:276::-;;;;;;;;;;-1:-1:-1;46987:276:0;;;;;:::i;:::-;;:::i;13926:32::-;;;;;;;;;;-1:-1:-1;13926:32:0;;;;;:::i;:::-;;:::i;13715:28::-;;;;;;;;;;-1:-1:-1;13715:28:0;;;;-1:-1:-1;;;;;13715:28:0;;;13895:26;;;;;;;;;;-1:-1:-1;13895:26:0;;;;;:::i;:::-;;:::i;14515:40::-;;;;;;;;;;;;;;;;13686:24;;;;;;;;;;-1:-1:-1;13686:24:0;;;;-1:-1:-1;;;;;13686:24:0;;;35136:131;;;;;;;;;;-1:-1:-1;35136:131:0;;;;;:::i;:::-;;:::i;13657:24::-;;;;;;;;;;;;;;;;38983:260;;;;;;;;;;-1:-1:-1;38983:260:0;;;;;:::i;:::-;;:::i;14244:35::-;;;;;;;;;;-1:-1:-1;14244:35:0;;;;-1:-1:-1;;;;;14244:35:0;;;34424:612;;;;;;;;;;-1:-1:-1;34424:612:0;;;;;:::i;:::-;;:::i;22974:1696::-;;;;;;;;;;-1:-1:-1;22974:1696:0;;;;;:::i;:::-;;:::i;13387:25::-;;;;;;;;;;;;;;;;19404:355;;;;;;;;;;-1:-1:-1;19404:355:0;;;;;:::i;:::-;;:::i;46273:207::-;;;;;;;;;;-1:-1:-1;46273:207:0;;;;;:::i;:::-;;:::i;3073:201::-;;;;;;;;;;-1:-1:-1;3073:201:0;;;;;:::i;:::-;;:::i;14088:27::-;;;;;;;;;;-1:-1:-1;14088:27:0;;;;-1:-1:-1;;;;;14088:27:0;;;13748:20;;;;;;;;;;-1:-1:-1;13748:20:0;;;;-1:-1:-1;;;;;13748:20:0;;;14007:28;;;;;;;;;;-1:-1:-1;14007:28:0;;;;;:::i;:::-;;:::i;44060:79::-;;;;;;;;;;;;;:::i;27005:1804::-;;;;;;:::i;:::-;;:::i;14798:45::-;;;;;;;;;;-1:-1:-1;14798:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;44552:527;;;;;;;;;;-1:-1:-1;44552:527:0;;;;;:::i;:::-;;:::i;35609:261::-;35674:4;35687:21;:19;:21::i;:::-;35735:10;;;35752:24;;;;35788:58;;;12136:25:1;;;12192:2;12177:18;;12170:34;;;35830:15:0;12220:18:1;;;12213:34;35788:58:0;;;;;;;12124:2:1;35788:58:0;;;-1:-1:-1;35860:4:0;;35609:261;-1:-1:-1;;35609:261:0:o;42164:135::-;42231:21;:19;:21::i;:::-;42259:15;:34;;-1:-1:-1;;42259:34:0;;;;;;;;;;42164:135::o;39958:126::-;40022:21;:19;:21::i;:::-;40050:12;:28;39958:126::o;37886:204::-;37957:21;:19;:21::i;:::-;38011:1;37993:15;:19;37985:60;;;;-1:-1:-1;;;37985:60:0;;12460:2:1;37985:60:0;;;12442:21:1;12499:2;12479:18;;;12472:30;12538;12518:18;;;12511:58;12586:18;;37985:60:0;;;;;;;;;38052:14;:32;37886:204::o;28930:197::-;28991:17;29017:16;29036:22;29051:6;29036:14;:22::i;:::-;29017:41;;29105:16;:14;:16::i;:::-;29089:12;;29078:23;;:8;:23;:::i;:::-;29077:44;;;;:::i;:::-;29065:56;28930:197;-1:-1:-1;;;28930:197:0:o;43353:254::-;43439:21;:19;:21::i;:::-;-1:-1:-1;;;;;43475:31:0;;43467:40;;;;;;43514:13;:49;;43570:31;;;-1:-1:-1;;;43570:31:0;-1:-1:-1;;;;;;43570:31:0;;;-1:-1:-1;;;;;43514:49:0;;;43570:31;;;;;;;43353:254::o;42675:467::-;42754:28;:26;:28::i;:::-;42797:20;;42789:66;;;;-1:-1:-1;;;42789:66:0;;13344:2:1;42789:66:0;;;13326:21:1;13383:2;13363:18;;;13356:30;13422;13402:18;;;13395:58;13470:18;;42789:66:0;13142:352:1;42789:66:0;42866:13;:20;42890:1;42866:25;:50;;;;;42895:13;42909:1;42895:16;;;;;;;;:::i;:::-;;;;;;;42915:1;42895:21;42866:50;42862:275;;;42927:29;42934:22;;42927:29;:::i;:::-;42675:467;:::o;42862:275::-;42979:29;42986:22;;42979:29;:::i;:::-;43022:9;43017:113;43037:13;:20;43033:1;:24;43017:113;;;43075:22;43103:13;43117:1;43103:16;;;;;;;;:::i;:::-;;;;;;;;;;;;43075:45;;;;;;;-1:-1:-1;43075:45:0;;;;;;;;;43059:3;;;;:::i;:::-;;;;43017:113;;;;42675:467;:::o;18123:79::-;18158:21;:19;:21::i;:::-;18186:10;:8;:10::i;:::-;18123:79::o;24903:1748::-;25073:4;25001:6;20710:9;;20691:15;:28;;20683:64;;;;-1:-1:-1;;;20683:64:0;;;;;;;:::i;:::-;20771:1;20762:6;:10;20754:42;;;;-1:-1:-1;;;20754:42:0;;;;;;;:::i;:::-;794:10;43821:14:::1;::::0;-1:-1:-1;;;43821:14:0;::::1;;;43817:116;;;43855:13;::::0;:33:::1;::::0;-1:-1:-1;;;43855:33:0;;-1:-1:-1;;;;;1489:32:1;;;43855:33:0::1;::::0;::::1;1471:51:1::0;43855:13:0;;::::1;::::0;:26:::1;::::0;1444:18:1;;43855:33:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43854:34;43846:79;;;;-1:-1:-1::0;;;43846:79:0::1;;;;;;;:::i;:::-;4914:19:::2;:17;:19::i;:::-;8642:21:::3;:19;:21::i;:::-;25086:16:::4;25105:22;25120:6;25105:14;:22::i;:::-;25086:41;;25134:17;25182:16;:14;:16::i;:::-;25166:12;::::0;25155:23:::4;::::0;:8;:23:::4;:::i;:::-;25154:44;;;;:::i;:::-;25134:64;;25226:9;25213;:22;;25205:47;;;::::0;-1:-1:-1;;;25205:47:0;;15284:2:1;25205:47:0::4;::::0;::::4;15266:21:1::0;15323:2;15303:18;;;15296:30;-1:-1:-1;;;15342:18:1;;;15335:42;15394:18;;25205:47:0::4;15082:336:1::0;25205:47:0::4;25259:14;25276:21;25288:9:::0;25276::::4;:21;:::i;:::-;25259:38;;25323:6;25304:15;;:25;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;25340:10:0::4;::::0;:15;25336:41:::4;;25371:6;25357:10;;:20;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;25336:41:0::4;25384:13;25418:10;;25400:15;;:28;:59;;25449:10;;25400:59;;;25431:15;;25400:59;25384:75:::0;-1:-1:-1;25478:6:0::4;25485:1;25478:9;25488:11;;25478:22;;;;;;;;:::i;:::-;;;;;;;;;25470:5;:30;:75;;;-1:-1:-1::0;25523:6:0::4;25530:1;25523:9;25533:11;;25523:22;;;;;;;;:::i;:::-;;;;;;;;;25504:15;:41;;25470:75;25466:458;;;25579:6;25586:1;25579:9;25589:11;;25579:22;;;;;;;;:::i;:::-;;;;;;;;;25560:15;:41;25556:112;;25652:6:::0;25627::::4;25634:1;25627:9;25637:11;;25627:22;;;;;;;;:::i;:::-;;;;;;;;;:31;;;;:::i;:::-;25614:10;:44:::0;25556:112:::4;25680:15;::::0;::::4;;25676:58;;;25708:16;:14;:16::i;:::-;25742:20;25773:6;25742:20:::0;25773:9:::4;25783:11;;25773:22;;;;;;;;:::i;:::-;;;;;;;;;25765:5;:30;:76;;25835:6:::0;25827:5;25802:6:::4;25809:1;25802:9;25812:11;;25802:22;;;;;;;;:::i;:::-;;;;;;;;;:30;;;;:::i;:::-;:39;;;;:::i;:::-;25765:76;;;25798:1;25765:76;25850:22;:41:::0;;::::4;::::0;;::::4;::::0;;-1:-1:-1;25850:41:0;;;-1:-1:-1;;;;;;;;;;;25850:41:0;;::::4;::::0;;;25900:11:::4;:16:::0;;25742:99;;-1:-1:-1;25850:41:0;;25900:11;;-1:-1:-1;25900:16:0::4;::::0;25850:41;;25900:16:::4;:::i;:::-;::::0;;;-1:-1:-1;;;25466:458:0::4;25934:5;25930:552;;;25954:22;::::0;-1:-1:-1;;;25954:22:0;::::4;;;25950:119;;;794:10:::0;25997:27:::4;::::0;;;:13:::4;:27;::::0;;;;;::::4;;25989:70;;;;-1:-1:-1::0;;;25989:70:0::4;;;;;;;:::i;:::-;26077:23;::::0;-1:-1:-1;;;;;26077:23:0::4;:40;794:10:::0;26141:12:::4;::::0;26132:21:::4;::::0;:6;:21:::4;:::i;:::-;26077:77;::::0;-1:-1:-1;;;;;;26077:77:0::4;::::0;;;;;;-1:-1:-1;;;;;16237:32:1;;;26077:77:0::4;::::0;::::4;16219:51:1::0;16286:18;;;16279:34;16192:18;;26077:77:0::4;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;26187:6;26163:20;;:30;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;26207:93:0::4;::::0;;12136:25:1;;;12192:2;12177:18;;12170:34;;;26284:15:0::4;12220:18:1::0;;;12213:34;26207:93:0;;-1:-1:-1;;26243:6:0;;794:10;;-1:-1:-1;;;;;;;;;;;26207:93:0;;;;;12124:2:1;26207:93:0;;::::4;25930:552;;;26363:12;::::0;26354:21:::4;::::0;:6;:21:::4;:::i;:::-;794:10:::0;26323:26:::4;::::0;;;:12:::4;:26;::::0;;;;:53;;:26;;;:53:::4;::::0;;;::::4;:::i;:::-;::::0;;;-1:-1:-1;;26390:84:0::4;::::0;;12136:25:1;;;12192:2;12177:18;;12170:34;;;26458:15:0::4;12220:18:1::0;;;12213:34;26390:84:0;;-1:-1:-1;;26417:6:0;;794:10;;-1:-1:-1;;;;;;;;;;;26390:84:0;;;;;12124:2:1;26390:84:0;;::::4;25930:552;26501:8;26488:9;;:21;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;26516:48:0::4;::::0;-1:-1:-1;26530:9:0;26541:8;794:10;26516:13:::4;:48::i;:::-;26575:10:::0;;26571:56:::4;;26587:40;794:10:::0;26620:6:::4;26587:9;:40::i;:::-;26641:4;26634:11;;;;;;8686:20:::3;8080:1:::0;9206:7;:22;9023:213;8686:20:::3;20803:1:::1;24903:1748:::0;;;;;;:::o;50640:229::-;50709:4;50722:21;:19;:21::i;:::-;50750:16;:6;50759:7;50750:16;;:::i;:::-;-1:-1:-1;50787:1:0;50773:11;:15;;;50795:10;:14;;;50816:29;;50823:22;;50816:29;:::i;:::-;-1:-1:-1;50859:4:0;;50640:229;-1:-1:-1;50640:229:0:o;35939:758::-;35988:4;4914:19;:17;:19::i;:::-;36009:9:::1;::::0;-1:-1:-1;;;;;36009:9:0::1;36001:56;;;::::0;-1:-1:-1;;;36001:56:0;;16526:2:1;36001:56:0::1;::::0;::::1;16508:21:1::0;16565:2;16545:18;;;16538:30;-1:-1:-1;;;16584:18:1;;;16577:50;16644:18;;36001:56:0::1;16324:344:1::0;36001:56:0::1;794:10:::0;36073:27:::1;::::0;;;:13:::1;:27;::::0;;;;;::::1;;36072:28;36064:68;;;::::0;-1:-1:-1;;;36064:68:0;;16875:2:1;36064:68:0::1;::::0;::::1;16857:21:1::0;16914:2;16894:18;;;16887:30;16953:29;16933:18;;;16926:57;17000:18;;36064:68:0::1;16673:351:1::0;36064:68:0::1;36161:1;36148:10;;:14;:47;;;;;36185:10;;36166:15;:29;;36148:47;36147:80;;;-1:-1:-1::0;794:10:0;36200:27:::1;::::0;;;:13:::1;:27;::::0;;;;;::::1;;36147:80;36139:118;;;::::0;-1:-1:-1;;;36139:118:0;;17231:2:1;36139:118:0::1;::::0;::::1;17213:21:1::0;17270:2;17250:18;;;17243:30;17309:27;17289:18;;;17282:55;17354:18;;36139:118:0::1;17029:349:1::0;36139:118:0::1;794:10:::0;36273:24:::1;::::0;;;:10:::1;:24;::::0;;;;;::::1;;36272:25;36264:53;;;::::0;-1:-1:-1;;;36264:53:0;;17585:2:1;36264:53:0::1;::::0;::::1;17567:21:1::0;17624:2;17604:18;;;17597:30;-1:-1:-1;;;17643:18:1;;;17636:45;17698:18;;36264:53:0::1;17383:339:1::0;36264:53:0::1;794:10:::0;36324:24:::1;::::0;;;:10:::1;:24;::::0;;;;;;;:31;;-1:-1:-1;;36324:31:0::1;36351:4;36324:31;::::0;;36379:12:::1;:26:::0;;;;;;36420:10;36412:39:::1;;;::::0;-1:-1:-1;;;36412:39:0;;17929:2:1;36412:39:0::1;::::0;::::1;17911:21:1::0;17968:2;17948:18;;;17941:30;-1:-1:-1;;;17987:18:1;;;17980:46;18043:18;;36412:39:0::1;17727:340:1::0;36412:39:0::1;794:10:::0;36465:26:::1;::::0;;;:12:::1;:26;::::0;;;;;;;36458:33;;;36520:9:::1;::::0;36513:48;;-1:-1:-1;;;36513:48:0;;::::1;::::0;::::1;16219:51:1::0;;;;16286:18;;;16279:34;;;36513:48:0;36465:26;;-1:-1:-1;;;;;36520:9:0;;::::1;::::0;36513:26:::1;::::0;16192:18:1;;;;;36465:26:0;36513:48;;;;;;36465:26;36520:9;36513:48;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36498:63;;36576:7;36568:41;;;;-1:-1:-1::0;;;36568:41:0::1;;;;;;;:::i;:::-;36621:52;::::0;;18596:25:1;;;36657:15:0::1;18652:2:1::0;18637:18;;18630:34;794:10:0;;36621:52:::1;::::0;18569:18:1;36621:52:0::1;;;;;;;36687:4;36680:11;;;;35939:758:::0;:::o;20031:599::-;20122:14;:12;:14::i;:::-;20170:12;:19;20151:8;:15;:38;20143:68;;;;-1:-1:-1;;;20143:68:0;;18877:2:1;20143:68:0;;;18859:21:1;18916:2;18896:18;;;18889:30;-1:-1:-1;;;18935:18:1;;;18928:47;18992:18;;20143:68:0;18675:341:1;20143:68:0;20218:14;20225:7;;20218:14;:::i;:::-;20239:18;20246:11;;20239:18;:::i;:::-;20264:23;20305:9;20300:247;20324:8;:15;20320:1;:19;20300:247;;;20381:1;20363:12;20376:1;20363:15;;;;;;;;:::i;:::-;;;;;;;:19;20355:65;;;;-1:-1:-1;;;20355:65:0;;19223:2:1;20355:65:0;;;19205:21:1;19262:2;19242:18;;;19235:30;19301:34;19281:18;;;19274:62;-1:-1:-1;;;19352:18:1;;;19345:31;19393:19;;20355:65:0;19021:397:1;20355:65:0;20448:12;20461:1;20448:15;;;;;;;;:::i;:::-;;;;;;;20429:34;;;;;:::i;:::-;;;20472:7;20485:8;20494:1;20485:11;;;;;;;;:::i;:::-;;;;;;;;;;;;20472:25;;;;;;;-1:-1:-1;20472:25:0;;;;;;;;;;-1:-1:-1;;;;;;20472:25:0;-1:-1:-1;;;;;20472:25:0;;;;;;;;;20523:15;;20506:11;;20523:15;;20536:1;;20523:15;;;;;;:::i;:::-;;;;;;;;;;;;20506:33;;;;;;;-1:-1:-1;20506:33:0;;;;;;;;;20341:3;;;;:::i;:::-;;;;20300:247;;;;20563:15;20582:6;20563:25;20555:69;;;;-1:-1:-1;;;20555:69:0;;19625:2:1;20555:69:0;;;19607:21:1;19664:2;19644:18;;;19637:30;19703:33;19683:18;;;19676:61;19754:18;;20555:69:0;19423:355:1;20555:69:0;20115:515;20031:599;;:::o;45666:162::-;45748:21;:19;:21::i;:::-;45776;:46;;-1:-1:-1;;45776:46:0;;;;;;;;;;45666:162::o;29249:165::-;29311:16;29347:22;29362:6;29347:14;:22::i;:::-;29336:33;-1:-1:-1;29387:21:0;29399:8;29336:33;29387:21;:::i;:::-;29376:32;29249:165;-1:-1:-1;;29249:165:0:o;41021:511::-;41069:28;:26;:28::i;:::-;41125:10;;41104:15;:32;;;;;;;-1:-1:-1;41104:32:0;;;;;;;41147:15;;;;41143:54;;;41173:16;:14;:16::i;:::-;41220:6;41227:1;41220:9;41230:11;;41220:22;;;;;;;;:::i;:::-;;;;;;;;;41207:10;;:35;41203:304;;;41257:11;;41253:203;;41339:15;;41286:22;;41314:6;41321:1;41314:9;41324:11;;41314:22;;;;;;;;:::i;:::-;;;;;;;;;:40;;;;:::i;:::-;41286:69;;;;;;;-1:-1:-1;41286:69:0;;;;;;;;;;;41253:203;;;41435:10;;41382:22;;41410:6;41417:1;41410:9;41420:11;;41410:22;;;;;;;;:::i;:::-;;;;;;;;;:35;;;;:::i;:::-;41382:64;;;;;;;-1:-1:-1;41382:64:0;;;;;;;;;;;41253:203;41477:6;41484:1;41477:9;41487:11;;41477:22;;;;;;;;:::i;:::-;;;;;;;;;;;41464:10;:35;41203:304;41513:11;:13;;;:11;:13;;;:::i;:::-;;;;;;41021:511::o;50042:211::-;50113:21;:19;:21::i;:::-;50156:43;;-1:-1:-1;;;50156:43:0;;50180:10;50156:43;;;16219:51:1;16286:18;;;16279:34;;;50141:12:0;;-1:-1:-1;;;;;50156:23:0;;;;;16192:18:1;;50156:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50141:58;;50214:7;50206:41;;;;-1:-1:-1;;;50206:41:0;;;;;;;:::i;37599:281::-;37711:21;:19;:21::i;:::-;37744:9;37739:136;37759:32;;;37739:136;;;37851:16;37807:15;:41;37823:21;;37845:1;37823:24;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37807:41:0;;;;;;;;;;;;-1:-1:-1;37807:41:0;:60;;-1:-1:-1;;37807:60:0;;;;;;;;;;37793:3;;;;:::i;:::-;;;;37739:136;;;;37599:281;;;:::o;38460:260::-;38561:21;:19;:21::i;:::-;38594:9;38589:126;38609:28;;;38589:126;;;38691:16;38653:13;:35;38667:17;;38685:1;38667:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;38653:35:0;;;;;;;;;;;;-1:-1:-1;38653:35:0;:54;;-1:-1:-1;;38653:54:0;;;;;;;;;;38639:3;;;;:::i;:::-;;;;38589:126;;41621:98;41671:21;:19;:21::i;:::-;41699:5;:14;;-1:-1:-1;;;;;;41699:14:0;-1:-1:-1;;;;;41699:14:0;;;;;;;;;;41621:98::o;2815:103::-;2053:13;:11;:13::i;:::-;2880:30:::1;2907:1;2880:18;:30::i;14040:24::-:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14040:24:0;;-1:-1:-1;14040:24:0;:::o;17994:75::-;18027:21;:19;:21::i;:::-;18055:8;:6;:8::i;45955:154::-;46033:21;:19;:21::i;:::-;46061:19;:42;;;;;;;-1:-1:-1;;46061:42:0;;;;;;;;;45955:154::o;19831:194::-;19878:7;19897:12;19919:19;;;;;;;;;-1:-1:-1;;;;;19919:19:0;-1:-1:-1;;;;;19919:35:0;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19894:62;;;;;;19972:5;19981:8;19972:18;;;;:::i;41893:160::-;41969:21;:19;:21::i;:::-;41997:11;:19;;;;42023:10;:24;41893:160::o;40484:469::-;40581:21;:19;:21::i;:::-;40617:37;;;40609:65;;;;-1:-1:-1;;;40609:65:0;;21205:2:1;40609:65:0;;;21187:21:1;21244:2;21224:18;;;21217:30;-1:-1:-1;;;21263:18:1;;;21256:45;21318:18;;40609:65:0;21003:339:1;40609:65:0;40681:27;40724:9;40719:152;40739:17;;;40719:152;;;40799:13;;40813:1;40799:16;;;;;;;:::i;:::-;;;;;;;40772:12;:23;40785:6;;40792:1;40785:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;40772:23:0;-1:-1:-1;;;;;40772:23:0;;;;;;;;;;;;;:43;;;;;;;:::i;:::-;;;;-1:-1:-1;40847:13:0;;-1:-1:-1;40847:13:0;40861:1;40847:16;;;;;;;:::i;:::-;;;;;;;40824:39;;;;;:::i;:::-;;-1:-1:-1;40758:3:0;;;;:::i;:::-;;;;40719:152;;;;40892:6;;:13;;40877:11;;:28;;;;;;;:::i;:::-;;;;;;;;40928:19;40912:12;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;40484:469:0:o;35273:215::-;35331:21;:19;:21::i;:::-;-1:-1:-1;;;;;35367:24:0;;35359:55;;;;-1:-1:-1;;;35359:55:0;;21549:2:1;35359:55:0;;;21531:21:1;21588:2;21568:18;;;21561:30;-1:-1:-1;;;21607:18:1;;;21600:48;21665:18;;35359:55:0;21347:342:1;35359:55:0;35421:9;:22;;-1:-1:-1;;;;;;35421:22:0;-1:-1:-1;;;;;35421:22:0;;;;;;;;35455:27;;1471:51:1;;;35455:27:0;;1459:2:1;1444:18;35455:27:0;;;;;;;35273:215;:::o;46603:256::-;46677:21;:19;:21::i;:::-;46728:10;46705:20;46752:102;46776:12;46772:1;:16;46752:102;;;46842:4;46804:20;:35;46825:10;;46836:1;46825:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;46804:35:0;;;;;;;;;;;;-1:-1:-1;46804:35:0;:42;;-1:-1:-1;;46804:42:0;;;;;;;;;;46790:3;;;;:::i;:::-;;;;46752:102;;43952;44009:14;:12;:14::i;:::-;44030:7;:18;;-1:-1:-1;;;;;;44030:18:0;-1:-1:-1;;;;;44030:18:0;;;;;;;;;;43952:102::o;38096:121::-;38167:21;:19;:21::i;:::-;38195:16;:6;38204:7;38195:16;;:::i;18325:984::-;18387:7;18403:18;18428:13;18444:10;;18458:1;18444:15;:46;;18480:10;;18444:46;;;18462:15;;18444:46;18428:62;;18516:14;;18505:7;:25;;18497:70;;;;-1:-1:-1;;;18497:70:0;;21896:2:1;18497:70:0;;;21878:21:1;;;21915:18;;;21908:30;21974:34;21954:18;;;21947:62;22026:18;;18497:70:0;21694:356:1;18497:70:0;18596:6;18603:1;18596:9;18606:11;;18596:22;;;;;;;;:::i;:::-;;;;;;;;;18588:5;18578:7;:15;;;;:::i;:::-;:40;:85;;;-1:-1:-1;18641:6:0;18648:1;18641:9;18651:11;;18641:22;;;;;;;;:::i;:::-;;;;;;;;;18622:15;:41;;18578:85;18574:705;;;18697:6;:16;:20;;18716:1;;18697:20;:::i;:::-;18682:11;;:36;18674:61;;;;-1:-1:-1;;;18674:61:0;;22257:2:1;18674:61:0;;;22239:21:1;22296:2;22276:18;;;22269:30;-1:-1:-1;;;22315:18:1;;;22308:42;22367:18;;18674:61:0;22055:336:1;18674:61:0;18767:6;18774:1;18767:9;18777:11;;18767:22;;;;;;;;:::i;:::-;;;;;;;;;18748:15;:41;18744:477;;18856:11;;18846:6;;18856:15;;18870:1;18856:15;:::i;:::-;18846:26;;;;;;;;:::i;:::-;;;;;;;;;18835:7;18810:6;18817:1;18810:9;;;;;;;:::i;:::-;;18820:11;;18810:22;;;;;;;;:::i;:::-;;;;;;;;;:32;;;;:::i;:::-;:62;;18802:110;;;;-1:-1:-1;;;18802:110:0;;22598:2:1;18802:110:0;;;22580:21:1;22637:2;22617:18;;;22610:30;22676:34;22656:18;;;22649:62;-1:-1:-1;;;22727:18:1;;;22720:33;22770:19;;18802:110:0;22396:399:1;18802:110:0;18956:11;;18946:9;;18956:15;;18953:1;18956:15;:::i;:::-;18946:26;;;;;;;;:::i;:::-;;;;;;;;;18936:7;:36;;;;:::i;:::-;18923:49;;18574:705;;18744:477;18999:34;19061:5;19036:6;18999:34;19036:9;19046:11;;19036:22;;;;;;;;:::i;:::-;;;;;;;;;:30;;;;:::i;:::-;19195:11;;18999:67;;-1:-1:-1;19185:9:0;;19195:15;;19192:1;19195:15;:::i;:::-;19185:26;;;;;;;;:::i;:::-;;;;;;;;;19155;19145:7;:36;;;;:::i;:::-;19144:67;;;;:::i;:::-;19119:6;19126:1;19119:9;19129:11;;19119:22;;;;;;;;:::i;:::-;;;;;;;;;19090:26;:51;;;;:::i;:::-;:121;;;;:::i;:::-;19077:134;;18988:233;18574:705;;;19257:6;19264:1;19257:9;19267:11;;19257:22;;;;;;;;:::i;:::-;;;;;;;;;19247:7;:32;;;;:::i;:::-;19234:45;;18574:705;-1:-1:-1;19293:10:0;18325:984;-1:-1:-1;;18325:984:0:o;33868:359::-;33943:21;:19;:21::i;:::-;-1:-1:-1;;;;;33979:36:0;;33971:104;;;;-1:-1:-1;;;33971:104:0;;23002:2:1;33971:104:0;;;22984:21:1;23041:2;23021:18;;;23014:30;23080:34;23060:18;;;23053:62;23151:25;23131:18;;;23124:53;23194:19;;33971:104:0;22800:419:1;33971:104:0;34082:23;:64;;-1:-1:-1;;;;;;34082:64:0;-1:-1:-1;;;;;34082:64:0;;;;;;;;;34160:9;;34153:68;;-1:-1:-1;;;34153:68:0;;;;;16219:51:1;;;;-1:-1:-1;;16286:18:1;;;16279:34;34160:9:0;;;;34153:25;;16192:18:1;;34153:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;45280:248::-;45394:21;:19;:21::i;:::-;45422:18;:39;;;;45468:25;:54;45280:248::o;40182:107::-;40240:16;40272:6;40279:3;40272:11;;;;;;;:::i;:::-;;40265:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40182:107;;;:::o;47398:316::-;47467:4;-1:-1:-1;;;;;47484:23:0;;;;:58;;-1:-1:-1;;;;;;47511:31:0;;;;;;:20;:31;;;;;;;;47484:58;:87;;;-1:-1:-1;;;;;;47546:25:0;;794:10;47546:25;47484:87;47480:122;;;-1:-1:-1;47589:5:0;;47398:316;-1:-1:-1;47398:316:0:o;47480:122::-;47615:21;;;;47610:56;;-1:-1:-1;47654:4:0;;47398:316;-1:-1:-1;47398:316:0:o;47610:56::-;-1:-1:-1;;;;;;47681:23:0;47707:1;47681:23;;;:12;:23;;;;;;:27;;;47398:316::o;13963:39::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13963:39:0;:::o;42381:115::-;42436:16;42468:22;42461:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42381:115;:::o;39362:212::-;39434:21;:19;:21::i;:::-;-1:-1:-1;;;;;39470:31:0;;39462:66;;;;-1:-1:-1;;;39462:66:0;;23426:2:1;39462:66:0;;;23408:21:1;23465:2;23445:18;;;23438:30;-1:-1:-1;;;23484:18:1;;;23477:52;23546:18;;39462:66:0;23224:346:1;39462:66:0;39535:13;:33;;-1:-1:-1;;;;;;39535:33:0;-1:-1:-1;;;;;39535:33:0;;;;;;;;;;39362:212::o;36703:676::-;36760:4;4914:19;:17;:19::i;:::-;36781:9:::1;::::0;-1:-1:-1;;;;;36781:9:0::1;36773:56;;;::::0;-1:-1:-1;;;36773:56:0;;16526:2:1;36773:56:0::1;::::0;::::1;16508:21:1::0;16565:2;16545:18;;;16538:30;-1:-1:-1;;;16584:18:1;;;16577:50;16644:18;;36773:56:0::1;16324:344:1::0;36773:56:0::1;794:10:::0;36845:27:::1;::::0;;;:13:::1;:27;::::0;;;;;::::1;;36844:28;36836:68;;;::::0;-1:-1:-1;;;36836:68:0;;16875:2:1;36836:68:0::1;::::0;::::1;16857:21:1::0;16914:2;16894:18;;;16887:30;16953:29;16933:18;;;16926:57;17000:18;;36836:68:0::1;16673:351:1::0;36836:68:0::1;36915:22;::::0;-1:-1:-1;;;36915:22:0;::::1;;;36911:115;;;794:10:::0;36956:27:::1;::::0;;;:13:::1;:27;::::0;;;;;::::1;;36948:70;;;;-1:-1:-1::0;;;36948:70:0::1;;;;;;;:::i;:::-;794:10:::0;37032:14:::1;37049:26:::0;;;:12:::1;:26;::::0;;;;;37090:10;37082:39:::1;;;::::0;-1:-1:-1;;;37082:39:0;;23777:2:1;37082:39:0::1;::::0;::::1;23759:21:1::0;23816:2;23796:18;;;23789:30;-1:-1:-1;;;23835:18:1;;;23828:46;23891:18;;37082:39:0::1;23575:340:1::0;37082:39:0::1;37161:12;::::0;37152:21:::1;::::0;:6;:21:::1;:::i;:::-;37128:20;;:45;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;37180:23:0::1;::::0;-1:-1:-1;;;;;37180:23:0::1;:40;794:10:::0;37180:62:::1;::::0;-1:-1:-1;;;;;;37180:62:0::1;::::0;;;;;;-1:-1:-1;;;;;16237:32:1;;;37180:62:0::1;::::0;::::1;16219:51:1::0;16286:18;;;16279:34;;;16192:18;;37180:62:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;37256:12;:26;37269:12;794:10:::0;;714:98;37269:12:::1;-1:-1:-1::0;;;;;37256:26:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;37256:26:0;;;37249:33;794:10;-1:-1:-1;;;;;37294:61:0::1;;37331:6;37339:15;37294:61;;;;;;18596:25:1::0;;;18652:2;18637:18;;18630:34;18584:2;18569:18;;18422:248;37294:61:0::1;;;;;;;;37369:4;37362:11;;;36703:676:::0;:::o;21044:1696::-;21194:4;21135:6;20710:9;;20691:15;:28;;20683:64;;;;-1:-1:-1;;;20683:64:0;;;;;;;:::i;:::-;20771:1;20762:6;:10;20754:42;;;;-1:-1:-1;;;20754:42:0;;;;;;;:::i;:::-;794:10;43821:14:::1;::::0;-1:-1:-1;;;43821:14:0;::::1;;;43817:116;;;43855:13;::::0;:33:::1;::::0;-1:-1:-1;;;43855:33:0;;-1:-1:-1;;;;;1489:32:1;;;43855:33:0::1;::::0;::::1;1471:51:1::0;43855:13:0;;::::1;::::0;:26:::1;::::0;1444:18:1;;43855:33:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43854:34;43846:79;;;;-1:-1:-1::0;;;43846:79:0::1;;;;;;;:::i;:::-;4914:19:::2;:17;:19::i;:::-;21207:16:::3;21226:22;21241:6;21226:14;:22::i;:::-;21207:41;;21274:6;21255:15;;:25;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;21287:13:0::3;::::0;-1:-1:-1;21303:21:0::3;21315:8;21303::::0;:21:::3;:::i;:::-;21287:37;;21335:10;;21349:1;21335:15;21331:41;;21366:6;21352:10;;:20;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;21331:41:0::3;21379:13;21413:10;;21395:15;;:28;:59;;21444:10;;21395:59;;;21426:15;;21395:59;21379:75:::0;-1:-1:-1;21473:6:0::3;21480:1;21473:9;21483:11;;21473:22;;;;;;;;:::i;:::-;;;;;;;;;21465:5;:30;:75;;;-1:-1:-1::0;21518:6:0::3;21525:1;21518:9;21528:11;;21518:22;;;;;;;;:::i;:::-;;;;;;;;;21499:15;:41;;21465:75;21461:458;;;21574:6;21581:1;21574:9;21584:11;;21574:22;;;;;;;;:::i;:::-;;;;;;;;;21555:15;:41;21551:112;;21647:6:::0;21622::::3;21629:1;21622:9;21632:11;;21622:22;;;;;;;;:::i;:::-;;;;;;;;;:31;;;;:::i;:::-;21609:10;:44:::0;21551:112:::3;21675:15;::::0;::::3;;21671:58;;;21703:16;:14;:16::i;:::-;21737:20;21768:6;21737:20:::0;21768:9:::3;21778:11;;21768:22;;;;;;;;:::i;:::-;;;;;;;;;21760:5;:30;:76;;21830:6:::0;21822:5;21797:6:::3;21804:1;21797:9;21807:11;;21797:22;;;;;;;;:::i;:::-;;;;;;;;;:30;;;;:::i;:::-;:39;;;;:::i;:::-;21760:76;;;21793:1;21760:76;21845:22;:41:::0;;::::3;::::0;;::::3;::::0;;-1:-1:-1;21845:41:0;;;-1:-1:-1;;;;;;;;;;;21845:41:0;;::::3;::::0;;;21895:11:::3;:16:::0;;21737:99;;-1:-1:-1;21845:41:0;;21895:11;;-1:-1:-1;21895:16:0::3;::::0;21845:41;;21895:16:::3;:::i;:::-;::::0;;;-1:-1:-1;;;21461:458:0::3;21929:5;21925:568;;;21949:22;::::0;-1:-1:-1;;;21949:22:0;::::3;;;21945:119;;;794:10:::0;21992:27:::3;::::0;;;:13:::3;:27;::::0;;;;;::::3;;21984:70;;;;-1:-1:-1::0;;;21984:70:0::3;;;;;;;:::i;:::-;22072:23;::::0;-1:-1:-1;;;;;22072:23:0::3;:40;794:10:::0;22136:12:::3;::::0;22127:21:::3;::::0;:6;:21:::3;:::i;:::-;22072:77;::::0;-1:-1:-1;;;;;;22072:77:0::3;::::0;;;;;;-1:-1:-1;;;;;16237:32:1;;;22072:77:0::3;::::0;::::3;16219:51:1::0;16286:18;;;16279:34;16192:18;;22072:77:0::3;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;22182:6;22158:20;;:30;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;22254:13:0::3;::::0;-1:-1:-1;;;;;22254:13:0::3;22238:6:::0;794:10;-1:-1:-1;;;;;22202:101:0::3;-1:-1:-1::0;;;;;;;;;;;22270:5:0::3;22277:8;22287:15;22202:101;;;;;;;12136:25:1::0;;;12192:2;12177:18;;12170:34;;;;12235:2;12220:18;;12213:34;12124:2;12109:18;;11934:319;22202:101:0::3;;;;;;;;21925:568;;;22366:12;::::0;22357:21:::3;::::0;:6;:21:::3;:::i;:::-;794:10:::0;22326:26:::3;::::0;;;:12:::3;:26;::::0;;;;:53;;:26;;;:53:::3;::::0;;;::::3;:::i;:::-;::::0;;;-1:-1:-1;;22436:13:0::3;::::0;-1:-1:-1;;;;;22436:13:0::3;22420:6:::0;794:10;-1:-1:-1;;;;;22393:92:0::3;-1:-1:-1::0;;;;;;;;;;;22452:5:0::3;22459:8;22469:15;22393:92;;;;;;;12136:25:1::0;;;12192:2;12177:18;;12170:34;;;;12235:2;12220:18;;12213:34;12124:2;12109:18;;11934:319;22393:92:0::3;;;;;;;;21925:568;22512:8;22499:9;;:21;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;22550:13:0::3;::::0;22527:20:::3;::::0;-1:-1:-1;;;;;22550:13:0::3;:23;794:10:::0;22550:52:::3;::::0;-1:-1:-1;;;;;;22550:52:0::3;::::0;;;;;;-1:-1:-1;;;;;24150:15:1;;;22550:52:0::3;::::0;::::3;24132:34:1::0;22596:4:0::3;24182:18:1::0;;;24175:43;24067:18;;22550:52:0::3;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22527:75;;22626:12;22617:5;:21;;22609:67;;;;-1:-1:-1::0;;;22609:67:0::3;;;;;;;:::i;:::-;22683:31;22698:5;22705:8;22683:14;:31::i;:::-;-1:-1:-1::0;22730:4:0::3;::::0;21044:1696;-1:-1:-1;;;;;;;;;21044:1696:0:o;46987:276::-;47080:21;:19;:21::i;:::-;47131:10;47108:20;47155:103;47179:12;47175:1;:16;47155:103;;;47245:5;47207:20;:35;47228:10;;47239:1;47228:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;47207:35:0;;;;;;;;;;;;-1:-1:-1;47207:35:0;:43;;-1:-1:-1;;47207:43:0;;;;;;;;;;47193:3;;;;:::i;:::-;;;;47155:103;;13926:32;;;;;;;;;;;;13895:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35136:131::-;35201:21;:19;:21::i;:::-;35229:22;:32;;;;;-1:-1:-1;;;35229:32:0;-1:-1:-1;;;;35229:32:0;;;;;;;;;35136:131::o;38983:260::-;39084:21;:19;:21::i;:::-;39117:9;39112:126;39132:28;;;39112:126;;;39214:16;39176:13;:35;39190:17;;39208:1;39190:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;39176:35:0;;;;;;;;;;;;-1:-1:-1;39176:35:0;:54;;-1:-1:-1;;39176:54:0;;;;;;;;;;39162:3;;;;:::i;:::-;;;;39112:126;;34424:612;34534:4;34547:21;:19;:21::i;:::-;-1:-1:-1;;;;;34583:24:0;;34575:55;;;;-1:-1:-1;;;34575:55:0;;21549:2:1;34575:55:0;;;21531:21:1;21588:2;21568:18;;;21561:30;-1:-1:-1;;;21607:18:1;;;21600:48;21665:18;;34575:55:0;21347:342:1;34575:55:0;34637:9;:22;;-1:-1:-1;;;;;34637:22:0;;;-1:-1:-1;;;;;;34637:22:0;;;;;;;;34666:23;:64;;;;;;;;;;;;;;34737:69;;-1:-1:-1;;;34737:69:0;;;;;16219:51:1;;;;-1:-1:-1;;16286:18:1;;;16279:34;34737:26:0;;16192:18:1;;34737:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;34828:72:0;;-1:-1:-1;;;34828:72:0;;34813:12;;-1:-1:-1;;;;;34828:31:0;;;;;:72;;794:10;;34882:4;;34889:10;;34828:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34813:87;;34915:7;34907:41;;;;-1:-1:-1;;;34907:41:0;;;;;;;:::i;:::-;34960:52;;;18596:25:1;;;34996:15:0;18652:2:1;18637:18;;18630:34;-1:-1:-1;;;;;34960:52:0;;;;;18569:18:1;34960:52:0;;;;;;;-1:-1:-1;35026:4:0;;34424:612;-1:-1:-1;;;;34424:612:0:o;22974:1696::-;23124:4;23065:6;20710:9;;20691:15;:28;;20683:64;;;;-1:-1:-1;;;20683:64:0;;;;;;;:::i;:::-;20771:1;20762:6;:10;20754:42;;;;-1:-1:-1;;;20754:42:0;;;;;;;:::i;:::-;794:10;43821:14:::1;::::0;-1:-1:-1;;;43821:14:0;::::1;;;43817:116;;;43855:13;::::0;:33:::1;::::0;-1:-1:-1;;;43855:33:0;;-1:-1:-1;;;;;1489:32:1;;;43855:33:0::1;::::0;::::1;1471:51:1::0;43855:13:0;;::::1;::::0;:26:::1;::::0;1444:18:1;;43855:33:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43854:34;43846:79;;;;-1:-1:-1::0;;;43846:79:0::1;;;;;;;:::i;:::-;4914:19:::2;:17;:19::i;:::-;23137:16:::3;23156:22;23171:6;23156:14;:22::i;:::-;23137:41;;23204:6;23185:15;;:25;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;23217:13:0::3;::::0;-1:-1:-1;23233:21:0::3;23245:8;23233::::0;:21:::3;:::i;:::-;23217:37;;23265:10;;23279:1;23265:15;23261:41;;23296:6;23282:10;;:20;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;23261:41:0::3;23309:13;23343:10;;23325:15;;:28;:59;;23374:10;;23325:59;;;23356:15;;23325:59;23309:75:::0;-1:-1:-1;23403:6:0::3;23410:1;23403:9;23413:11;;23403:22;;;;;;;;:::i;:::-;;;;;;;;;23395:5;:30;:75;;;-1:-1:-1::0;23448:6:0::3;23455:1;23448:9;23458:11;;23448:22;;;;;;;;:::i;:::-;;;;;;;;;23429:15;:41;;23395:75;23391:458;;;23504:6;23511:1;23504:9;23514:11;;23504:22;;;;;;;;:::i;:::-;;;;;;;;;23485:15;:41;23481:112;;23577:6:::0;23552::::3;23559:1;23552:9;23562:11;;23552:22;;;;;;;;:::i;:::-;;;;;;;;;:31;;;;:::i;:::-;23539:10;:44:::0;23481:112:::3;23605:15;::::0;::::3;;23601:58;;;23633:16;:14;:16::i;:::-;23667:20;23698:6;23667:20:::0;23698:9:::3;23708:11;;23698:22;;;;;;;;:::i;:::-;;;;;;;;;23690:5;:30;:76;;23760:6:::0;23752:5;23727:6:::3;23734:1;23727:9;23737:11;;23727:22;;;;;;;;:::i;:::-;;;;;;;;;:30;;;;:::i;:::-;:39;;;;:::i;:::-;23690:76;;;23723:1;23690:76;23775:22;:41:::0;;::::3;::::0;;::::3;::::0;;-1:-1:-1;23775:41:0;;;-1:-1:-1;;;;;;;;;;;23775:41:0;;::::3;::::0;;;23825:11:::3;:16:::0;;23667:99;;-1:-1:-1;23775:41:0;;23825:11;;-1:-1:-1;23825:16:0::3;::::0;23775:41;;23825:16:::3;:::i;:::-;::::0;;;-1:-1:-1;;;23391:458:0::3;23859:5;23855:568;;;23879:22;::::0;-1:-1:-1;;;23879:22:0;::::3;;;23875:119;;;794:10:::0;23922:27:::3;::::0;;;:13:::3;:27;::::0;;;;;::::3;;23914:70;;;;-1:-1:-1::0;;;23914:70:0::3;;;;;;;:::i;:::-;24002:23;::::0;-1:-1:-1;;;;;24002:23:0::3;:40;794:10:::0;24066:12:::3;::::0;24057:21:::3;::::0;:6;:21:::3;:::i;:::-;24002:77;::::0;-1:-1:-1;;;;;;24002:77:0::3;::::0;;;;;;-1:-1:-1;;;;;16237:32:1;;;24002:77:0::3;::::0;::::3;16219:51:1::0;16286:18;;;16279:34;16192:18;;24002:77:0::3;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;24112:6;24088:20;;:30;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;24184:13:0::3;::::0;-1:-1:-1;;;;;24184:13:0::3;24168:6:::0;794:10;-1:-1:-1;;;;;24132:101:0::3;-1:-1:-1::0;;;;;;;;;;;24200:5:0::3;24207:8;24217:15;24132:101;;;;;;;12136:25:1::0;;;12192:2;12177:18;;12170:34;;;;12235:2;12220:18;;12213:34;12124:2;12109:18;;11934:319;24132:101:0::3;;;;;;;;23855:568;;;24296:12;::::0;24287:21:::3;::::0;:6;:21:::3;:::i;:::-;794:10:::0;24256:26:::3;::::0;;;:12:::3;:26;::::0;;;;:53;;:26;;;:53:::3;::::0;;;::::3;:::i;:::-;::::0;;;-1:-1:-1;;24366:13:0::3;::::0;-1:-1:-1;;;;;24366:13:0::3;24350:6:::0;794:10;-1:-1:-1;;;;;24323:92:0::3;-1:-1:-1::0;;;;;;;;;;;24382:5:0::3;24389:8;24399:15;24323:92;;;;;;;12136:25:1::0;;;12192:2;12177:18;;12170:34;;;;12235:2;12220:18;;12213:34;12124:2;12109:18;;11934:319;24323:92:0::3;;;;;;;;23855:568;24442:8;24429:9;;:21;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;24480:13:0::3;::::0;24457:20:::3;::::0;-1:-1:-1;;;;;24480:13:0::3;:23;794:10:::0;24480:52:::3;::::0;-1:-1:-1;;;;;;24480:52:0::3;::::0;;;;;;-1:-1:-1;;;;;24150:15:1;;;24480:52:0::3;::::0;::::3;24132:34:1::0;24526:4:0::3;24182:18:1::0;;;24175:43;24067:18;;24480:52:0::3;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24457:75;;24556:12;24547:5;:21;;24539:67;;;;-1:-1:-1::0;;;24539:67:0::3;;;;;;;:::i;:::-;24613:31;24628:5;24635:8;24613:14;:31::i;19404:355::-:0;19465:21;:19;:21::i;:::-;19514:1;19501:10;:14;19493:45;;;;-1:-1:-1;;;19493:45:0;;25402:2:1;19493:45:0;;;25384:21:1;25441:2;25421:18;;;25414:30;-1:-1:-1;;;25460:18:1;;;25453:48;25518:18;;19493:45:0;25200:342:1;19493:45:0;19571:10;19553:15;:28;19545:58;;;;-1:-1:-1;;;19545:58:0;;25749:2:1;19545:58:0;;;25731:21:1;25788:2;25768:18;;;25761:30;-1:-1:-1;;;25807:18:1;;;25800:47;25864:18;;19545:58:0;25547:341:1;19545:58:0;19630:9;;;19646:22;;;;19680:73;;;12136:25:1;;;12192:2;12177:18;;12170:34;;;19737:15:0;12220:18:1;;;12213:34;19680:73:0;;-1:-1:-1;;;19696:16:0;19680:73;;;;;;12124:2:1;19680:73:0;;;19458:301;19404:355;:::o;46273:207::-;46369:21;:19;:21::i;:::-;46397:17;:35;;-1:-1:-1;;;;;;46397:35:0;-1:-1:-1;;;;;46397:35:0;;;;;;;;;;;46439:21;:35;46273:207::o;3073:201::-;2053:13;:11;:13::i;:::-;-1:-1:-1;;;;;3162:22:0;::::1;3154:73;;;::::0;-1:-1:-1;;;3154:73:0;;26095:2:1;3154:73:0::1;::::0;::::1;26077:21:1::0;26134:2;26114:18;;;26107:30;26173:34;26153:18;;;26146:62;-1:-1:-1;;;26224:18:1;;;26217:36;26270:19;;3154:73:0::1;25893:402:1::0;3154:73:0::1;3238:28;3257:8;3238:18;:28::i;14007:::-:0;;;;;;;;;;;;44060:79;2053:13;:11;:13::i;:::-;44113:7:::1;:20:::0;;-1:-1:-1;;;;;;44113:20:0::1;::::0;;44060:79::o;27005:1804::-;27189:4;27123:7;20710:9;;20691:15;:28;;20683:64;;;;-1:-1:-1;;;20683:64:0;;;;;;;:::i;:::-;20771:1;20762:6;:10;20754:42;;;;-1:-1:-1;;;20754:42:0;;;;;;;:::i;:::-;43821:14:::1;::::0;27146:5;;-1:-1:-1;;;43821:14:0;::::1;;;43817:116;;;43855:13;::::0;:33:::1;::::0;-1:-1:-1;;;43855:33:0;;-1:-1:-1;;;;;1489:32:1;;;43855:33:0::1;::::0;::::1;1471:51:1::0;43855:13:0;;::::1;::::0;:26:::1;::::0;1444:18:1;;43855:33:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43854:34;43846:79;;;;-1:-1:-1::0;;;43846:79:0::1;;;;;;;:::i;:::-;4914:19:::2;:17;:19::i;:::-;8642:21:::3;:19;:21::i;:::-;794:10:::0;27210:29:::4;::::0;;;:15:::4;:29;::::0;;;;;::::4;;27202:74;;;::::0;-1:-1:-1;;;27202:74:0;;26502:2:1;27202:74:0::4;::::0;::::4;26484:21:1::0;;;26521:18;;;26514:30;26580:34;26560:18;;;26553:62;26632:18;;27202:74:0::4;26300:356:1::0;27202:74:0::4;27283:16;27302:23;27317:7;27302:14;:23::i;:::-;27283:42;;27332:17;27380:16;:14;:16::i;:::-;27364:12;::::0;27353:23:::4;::::0;:8;:23:::4;:::i;:::-;27352:44;;;;:::i;:::-;27332:64;;27424:9;27411;:22;;27403:47;;;::::0;-1:-1:-1;;;27403:47:0;;15284:2:1;27403:47:0::4;::::0;::::4;15266:21:1::0;15323:2;15303:18;;;15296:30;-1:-1:-1;;;15342:18:1;;;15335:42;15394:18;;27403:47:0::4;15082:336:1::0;27403:47:0::4;27457:14;27474:21;27486:9:::0;27474::::4;:21;:::i;:::-;27457:38;;27521:7;27502:15;;:26;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;27539:10:0::4;::::0;:15;27535:42:::4;;27570:7;27556:10;;:21;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;27535:42:0::4;27584:13;27618:10;;27600:15;;:28;:59;;27649:10;;27600:59;;;27631:15;;27600:59;27584:75:::0;-1:-1:-1;27678:6:0::4;27685:1;27678:9;27688:11;;27678:22;;;;;;;;:::i;:::-;;;;;;;;;27670:5;:30;:75;;;-1:-1:-1::0;27723:6:0::4;27730:1;27723:9;27733:11;;27723:22;;;;;;;;:::i;:::-;;;;;;;;;27704:15;:41;;27670:75;27666:460;;;27779:6;27786:1;27779:9;27789:11;;27779:22;;;;;;;;:::i;:::-;;;;;;;;;27760:15;:41;27756:113;;27852:7:::0;27827:6:::4;27834:1;27827:9;27837:11;;27827:22;;;;;;;;:::i;:::-;;;;;;;;;:32;;;;:::i;:::-;27814:10;:45:::0;27756:113:::4;27881:15;::::0;::::4;;27877:58;;;27909:16;:14;:16::i;:::-;27943:20;27974:6;27943:20:::0;27974:9:::4;27984:11;;27974:22;;;;;;;;:::i;:::-;;;;;;;;;27966:5;:30;:77;;28036:7:::0;28028:5;28003:6:::4;28010:1;28003:9;28013:11;;28003:22;;;;;;;;:::i;:::-;;;;;;;;;:30;;;;:::i;:::-;:40;;;;:::i;:::-;27966:77;;;27999:1;27966:77;28052:22;:41:::0;;::::4;::::0;;::::4;::::0;;-1:-1:-1;28052:41:0;;;-1:-1:-1;;;;;;;;;;;28052:41:0;;::::4;::::0;;;28102:11:::4;:16:::0;;27943:100;;-1:-1:-1;28052:41:0;;28102:11;;-1:-1:-1;28102:16:0::4;::::0;28052:41;;28102:16:::4;:::i;:::-;::::0;;;-1:-1:-1;;;27666:460:0::4;28136:5;28132:522;;;28156:22;::::0;-1:-1:-1;;;28156:22:0;::::4;;;28152:112;;;-1:-1:-1::0;;;;;28199:20:0;::::4;;::::0;;;:13:::4;:20;::::0;;;;;::::4;;28191:63;;;;-1:-1:-1::0;;;28191:63:0::4;;;;;;;:::i;:::-;28272:23;::::0;28330:12:::4;::::0;-1:-1:-1;;;;;28272:23:0;;::::4;::::0;:40:::4;::::0;28313:5;;28320:22:::4;::::0;:7;:22:::4;:::i;:::-;28272:71;::::0;-1:-1:-1;;;;;;28272:71:0::4;::::0;;;;;;-1:-1:-1;;;;;16237:32:1;;;28272:71:0::4;::::0;::::4;16219:51:1::0;16286:18;;;16279:34;16192:18;;28272:71:0::4;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;28376:7;28352:20;;:31;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;28397:87:0::4;::::0;;12136:25:1;;;12192:2;12177:18;;12170:34;;;28468:15:0::4;12220:18:1::0;;;12213:34;28397:87:0;;-1:-1:-1;;28426:7:0;;-1:-1:-1;;;;;28397:87:0;::::4;::::0;-1:-1:-1;;;;;;;;;;;28397:87:0;;;;;12124:2:1;28397:87:0;;::::4;28132:522;;;28541:12;::::0;28531:22:::4;::::0;:7;:22:::4;:::i;:::-;-1:-1:-1::0;;;;;28507:19:0;::::4;;::::0;;;:12:::4;:19;::::0;;;;:47;;:19;;;:47:::4;::::0;;;::::4;:::i;:::-;::::0;;;-1:-1:-1;;28568:78:0::4;::::0;;12136:25:1;;;12192:2;12177:18;;12170:34;;;28630:15:0::4;12220:18:1::0;;;12213:34;28568:78:0;;-1:-1:-1;;28588:7:0;;-1:-1:-1;;;;;28568:78:0;::::4;::::0;-1:-1:-1;;;;;;;;;;;28568:78:0;;;;;12124:2:1;28568:78:0;;::::4;28132:522;28673:8;28660:9;;:21;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;28688:41:0::4;::::0;-1:-1:-1;28702:9:0;28713:8;28723:5;28688:13:::4;:41::i;:::-;28740:10:::0;;28736:49:::4;;28752:33;28770:5;28778:6;28752:9;:33::i;:::-;28799:4;28792:11;;;;;;8686:20:::3;8080:1:::0;9206:7;:22;9023:213;8686:20:::3;20803:1:::1;27005:1804:::0;;;;;;;:::o;44552:527::-;44759:21;:19;:21::i;:::-;44787:18;:39;;;;44833:25;:54;;;;44894:17;:35;;-1:-1:-1;;;;;44894:35:0;;;-1:-1:-1;;;;;;44894:35:0;;;;;;;;;;44936:21;:35;44978:21;:46;;45031:42;;;44894:35;45031:42;-1:-1:-1;;44978:46:0;;;45031:42;;;;-1:-1:-1;;45031:42:0;;;;;;;;;;44552:527::o;17502:144::-;17576:7;;-1:-1:-1;;;;;17576:7:0;17562:10;:21;;:46;;-1:-1:-1;2240:6:0;;-1:-1:-1;;;;;2240:6:0;17587:10;:21;17562:46;17554:86;;;;-1:-1:-1;;;17554:86:0;;26863:2:1;17554:86:0;;;26845:21:1;26902:2;26882:18;;;26875:30;26941:29;26921:18;;;26914:57;26988:18;;17554:86:0;26661:351:1;17652:181:0;17733:5;;-1:-1:-1;;;;;17733:5:0;17719:10;:19;;:44;;-1:-1:-1;17756:7:0;;-1:-1:-1;;;;;17756:7:0;17742:10;:21;17719:44;:69;;;-1:-1:-1;2240:6:0;;-1:-1:-1;;;;;2240:6:0;17767:10;:21;17719:69;17711:116;;;;-1:-1:-1;;;17711:116:0;;27219:2:1;17711:116:0;;;27201:21:1;27258:2;27238:18;;;27231:30;27297:34;27277:18;;;27270:62;-1:-1:-1;;;27348:18:1;;;27341:32;27390:19;;17711:116:0;27017:398:1;6164:120:0;5173:16;:14;:16::i;:::-;6223:7:::1;:15:::0;;-1:-1:-1;;;;6223:15:0::1;::::0;;6254:22:::1;794:10:::0;6263:12:::1;6254:22;::::0;-1:-1:-1;;;;;1489:32:1;;;1471:51;;1459:2;1444:18;6254:22:0::1;;;;;;;6164:120::o:0;5468:108::-;5380:7;;-1:-1:-1;;;5380:7:0;;;;5538:9;5530:38;;;;-1:-1:-1;;;5530:38:0;;27622:2:1;5530:38:0;;;27604:21:1;27661:2;27641:18;;;27634:30;-1:-1:-1;;;27680:18:1;;;27673:46;27736:18;;5530:38:0;27420:340:1;8722:293:0;8124:1;8856:7;;:19;;8848:63;;;;-1:-1:-1;;;8848:63:0;;27967:2:1;8848:63:0;;;27949:21:1;28006:2;27986:18;;;27979:30;28045:33;28025:18;;;28018:61;28096:18;;8848:63:0;27765:355:1;8848:63:0;8124:1;8989:7;:18;8722:293::o;39643:184::-;39690:9;39685:137;39724:11;;39705:9;:16;:30;;39724:11;39705:30;:::i;:::-;39701:1;:34;39685:137;;;39802:12;;39798:16;;:1;:16;:::i;:::-;39780:34;;:15;:34;:::i;:::-;39761:11;;39751:9;;39761:15;;39775:1;;39761:15;:::i;:::-;39751:26;;;;;;;;:::i;:::-;;;;;;;;;;:63;39737:3;;;;:::i;:::-;;;;39685:137;;29669:1016;29804:17;;29759:34;;-1:-1:-1;;;;;29804:17:0;:31;29800:164;;29903:17;;29922:21;;29875:81;;29894:7;;-1:-1:-1;;;;;29903:17:0;;;;;29875:18;:81::i;:::-;29846:110;;29800:164;29972:26;30001:51;30014:7;30023:5;30030:9;30049:1;30001:12;:51::i;:::-;29972:80;-1:-1:-1;30071:47:0;29972:80;30071:26;:47;:::i;:::-;30059:60;;;;:::i;:::-;30130:7;:14;30059:60;;-1:-1:-1;30126:554:0;;30168:13;;-1:-1:-1;;;;;30168:13:0;30160:62;;;;-1:-1:-1;;;30160:62:0;;;;;;;:::i;:::-;30249:13;;30231:42;;-1:-1:-1;;;;;30249:13:0;30265:7;30231:9;:42::i;:::-;30126:554;;;30296:16;;30321:226;30345:7;:14;30341:18;;30321:226;;;30377:24;30433:6;30415:11;30427:1;30415:14;;;;;;;;:::i;:::-;;;;;;;;;30405:7;:24;;;;:::i;:::-;30404:35;;;;:::i;:::-;30377:62;;30450:48;30468:7;30476:1;30468:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;30468:10:0;30481:16;30450:9;:48::i;:::-;30509:28;30521:16;30509:28;;:::i;:::-;;;30366:181;30361:3;;;;;:::i;:::-;;;;30321:226;;;-1:-1:-1;30582:1:0;30560:18;30570:8;30560:7;:18;:::i;:::-;30559:24;30555:118;;;30614:7;30622:14;;30596:67;;30614:7;30622:18;;30639:1;;30622:18;:::i;:::-;30614:27;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;30614:27:0;30644:18;30654:8;30644:7;:18;:::i;:::-;30596:9;:67::i;:::-;30287:393;30126:554;29752:933;;29669:1016;;;:::o;29420:243::-;29531:6;29506:21;:31;;29498:55;;;;-1:-1:-1;;;29498:55:0;;28678:2:1;29498:55:0;;;28660:21:1;28717:2;28697:18;;;28690:30;-1:-1:-1;;;28736:18:1;;;28729:41;28787:18;;29498:55:0;28476:335:1;29498:55:0;29561:12;29579:9;-1:-1:-1;;;;;29579:14:0;29601:6;29579:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29560:52;;;29627:7;29619:38;;;;-1:-1:-1;;;29619:38:0;;29228:2:1;29619:38:0;;;29210:21:1;29267:2;29247:18;;;29240:30;-1:-1:-1;;;29286:18:1;;;29279:48;29344:18;;29619:38:0;29026:342:1;17839:103:0;17906:7;;-1:-1:-1;;;;;17906:7:0;17892:10;:21;17884:52;;;;-1:-1:-1;;;17884:52:0;;29575:2:1;17884:52:0;;;29557:21:1;29614:2;29594:18;;;29587:30;-1:-1:-1;;;29633:18:1;;;29626:48;29691:18;;17884:52:0;29373:342:1;2332:132:0;2240:6;;-1:-1:-1;;;;;2240:6:0;794:10;2396:23;2388:68;;;;-1:-1:-1;;;2388:68:0;;29922:2:1;2388:68:0;;;29904:21:1;;;29941:18;;;29934:30;30000:34;29980:18;;;29973:62;30052:18;;2388:68:0;29720:356:1;3434:191:0;3527:6;;;-1:-1:-1;;;;;3544:17:0;;;-1:-1:-1;;;;;;3544:17:0;;;;;;;3577:40;;3527:6;;;3544:17;3527:6;;3577:40;;3508:16;;3577:40;3497:128;3434:191;:::o;5905:118::-;4914:19;:17;:19::i;:::-;5975:4:::1;5965:14:::0;;-1:-1:-1;;;;5965:14:0::1;-1:-1:-1::0;;;5965:14:0::1;::::0;;5995:20:::1;6002:12;794:10:::0;;714:98;30691:1510;30812:17;;30767:34;;-1:-1:-1;;;;;30812:17:0;:31;30808:176;;30911:17;;30930:21;;30961:13;;30883:93;;30902:7;;-1:-1:-1;;;;;30911:17:0;;;;30930:21;;30961:13;30883:18;:93::i;:::-;30854:122;;30808:176;30992:26;31021:70;31034:7;794:10;31076:13;;31057:9;;-1:-1:-1;;;;;31076:13:0;31021:12;:70::i;:::-;30992:99;-1:-1:-1;31110:47:0;30992:99;31110:26;:47;:::i;:::-;31098:60;;;;:::i;:::-;31171:7;:14;31098:60;;-1:-1:-1;31167:1029:0;;31209:13;;-1:-1:-1;;;;;31209:13:0;31201:62;;;;-1:-1:-1;;;31201:62:0;;;;;;;:::i;:::-;31299:13;;31273:12;;-1:-1:-1;;;;;31299:13:0;794:10;31384:12;31398:13;;31319:102;;;;;-1:-1:-1;;;;;31398:13:0;;31413:7;;31319:102;;;:::i;:::-;;;;-1:-1:-1;;31319:102:0;;;;;;;;;;;;;;-1:-1:-1;;;;;31319:102:0;-1:-1:-1;;;31319:102:0;;;31291:131;;;31319:102;31291:131;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31272:150;;;31439:7;31431:40;;;;-1:-1:-1;;;31431:40:0;;;;;;;:::i;:::-;31192:287;31167:1029;;;31494:16;;31519:385;31543:7;:14;31539:18;;31519:385;;;31575:24;31631:6;31613:11;31625:1;31613:14;;;;;;;;:::i;:::-;;;;;;;;;31603:7;:24;;;;:::i;:::-;31602:35;;;;:::i;:::-;31675:13;;31575:62;;-1:-1:-1;31649:12:0;;-1:-1:-1;;;;;31675:13:0;794:10;31774:7;31782:1;31774:10;;;;;;;;:::i;:::-;;;;;;;;;;;31695:108;;;;;-1:-1:-1;;;;;31774:10:0;;31786:16;;31695:108;;;:::i;:::-;;;;-1:-1:-1;;31695:108:0;;;;;;;;;;;;;;-1:-1:-1;;;;;31695:108:0;-1:-1:-1;;;31695:108:0;;;31667:137;;;31695:108;31667:137;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31648:156;;;31823:7;31815:40;;;;-1:-1:-1;;;31815:40:0;;;;;;;:::i;:::-;31866:28;31878:16;31866:28;;:::i;:::-;;;31564:340;;31559:3;;;;;:::i;:::-;;;;31519:385;;;-1:-1:-1;31939:1:0;31917:18;31927:8;31917:7;:18;:::i;:::-;31916:24;31912:277;;;31980:13;;31954:12;;-1:-1:-1;;;;;31980:13:0;794:10;32065:12;32079:7;32087:14;;:18;;32104:1;;32087:18;:::i;:::-;32079:27;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;32079:27:0;32108:18;32118:8;32108:7;:18;:::i;:::-;32000:127;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;32000:127:0;;;;;;;;;;;;;;-1:-1:-1;;;;;32000:127:0;-1:-1:-1;;;32000:127:0;;;31972:156;;;32000:127;31972:156;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31953:175;;;32147:7;32139:40;;;;-1:-1:-1;;;32139:40:0;;;;;;;:::i;32207:1510::-;32328:17;;32283:34;;-1:-1:-1;;;;;32328:17:0;:31;32324:176;;32427:17;;32446:21;;32477:13;;32399:93;;32418:7;;-1:-1:-1;;;;;32427:17:0;;;;32446:21;;32477:13;32399:18;:93::i;:::-;32370:122;;32324:176;32508:26;32537:70;32550:7;794:10;32592:13;;32573:9;;-1:-1:-1;;;;;32592:13:0;32537:12;:70::i;:::-;32508:99;-1:-1:-1;32626:47:0;32508:99;32626:26;:47;:::i;:::-;32614:60;;;;:::i;:::-;32687:7;:14;32614:60;;-1:-1:-1;32683:1029:0;;32725:13;;-1:-1:-1;;;;;32725:13:0;32717:62;;;;-1:-1:-1;;;32717:62:0;;;;;;;:::i;:::-;32815:13;;32789:12;;-1:-1:-1;;;;;32815:13:0;794:10;32900:12;714:98;32683:1029;33010:16;;33035:385;33059:7;:14;33055:18;;33035:385;;;33091:24;33147:6;33129:11;33141:1;33129:14;;;;;;;;:::i;:::-;;;;;;;;;33119:7;:24;;;;:::i;:::-;33118:35;;;;:::i;:::-;33191:13;;33091:62;;-1:-1:-1;33165:12:0;;-1:-1:-1;;;;;33191:13:0;794:10;33290:7;33298:1;33290:10;;;;;;;;:::i;:::-;;;;;;;;;;;33211:108;;;;;-1:-1:-1;;;;;33290:10:0;;33302:16;;33211:108;;;:::i;:::-;;;;-1:-1:-1;;33211:108:0;;;;;;;;;;;;;;-1:-1:-1;;;;;33211:108:0;-1:-1:-1;;;33211:108:0;;;33183:137;;;33211:108;33183:137;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33164:156;;;33339:7;33331:40;;;;-1:-1:-1;;;33331:40:0;;;;;;;:::i;:::-;33382:28;33394:16;33382:28;;:::i;:::-;;;33080:340;;33075:3;;;;;:::i;:::-;;;;33035:385;;;-1:-1:-1;33455:1:0;33433:18;33443:8;33433:7;:18;:::i;:::-;33432:24;33428:277;;;33496:13;;33470:12;;-1:-1:-1;;;;;33496:13:0;794:10;33581:12;714:98;5653:108;5380:7;;-1:-1:-1;;;5380:7:0;;;;5712:41;;;;-1:-1:-1;;;5712:41:0;;31063:2:1;5712:41:0;;;31045:21:1;31102:2;31082:18;;;31075:30;-1:-1:-1;;;31121:18:1;;;31114:50;31181:18;;5712:41:0;30861:344:1;48992:540:0;49111:7;;49181:3;49156:21;49166:11;49156:7;:21;:::i;:::-;49155:29;;;;:::i;:::-;49127:57;-1:-1:-1;;;;;;49195:20:0;;;49191:303;;49227:12;-1:-1:-1;;;;;49245:11:0;;794:10;49336:9;49347:17;49257:108;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;49257:108:0;;;;;;;;;;;;;;-1:-1:-1;;;;;49257:108:0;-1:-1:-1;;;49257:108:0;;;49245:121;;;49257:108;49245:121;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49226:140;;;49383:7;49375:40;;;;-1:-1:-1;;;49375:40:0;;;;;;;:::i;:::-;49217:206;49191:303;;;49438:48;49456:9;49468:17;49438:9;:48::i;:::-;49509:17;-1:-1:-1;48992:540:0;;;;;;;:::o;47999:719::-;48110:7;48126:17;48150:16;48169:48;48196:9;48207;48169:26;:48::i;:::-;48150:67;;48229:29;48249:8;48229:19;:29::i;:::-;48224:69;;-1:-1:-1;48276:9:0;-1:-1:-1;48269:16:0;;48224:69;48312:65;48331:7;48340:8;48350:18;;48370:6;48312:18;:65::i;:::-;48299:78;;;;:::i;:::-;48389:19;;48299:78;;-1:-1:-1;48389:19:0;;;;;48384:59;;-1:-1:-1;48426:9:0;-1:-1:-1;48419:16:0;;48384:59;48449:23;48475:48;48502:8;48520:1;48475:26;:48::i;:::-;48449:74;;48535:36;48555:15;48535:19;:36::i;:::-;48530:76;;48589:9;48582:16;;;;;;;48530:76;48632:79;48651:7;48660:15;48677:25;;48704:6;48632:18;:79::i;:::-;48620:91;;:9;:91;:::i;:::-;48612:100;47999:719;-1:-1:-1;;;;;;;;47999:719:0:o;49753:283::-;-1:-1:-1;;;;;49865:27:0;;;49845:7;49865:27;;;:16;:27;;;;;;49845:7;;49865:27;:41;:67;;;;;49923:9;-1:-1:-1;;;;;49910:22:0;:9;-1:-1:-1;;;;;49910:22:0;;;49865:67;49861:129;;;-1:-1:-1;;;;;49943:27:0;;;;;;;:16;:27;;;;;:39;;-1:-1:-1;;;;;;49943:39:0;;;;;;;;;;49861:129;-1:-1:-1;;;;;;;50003:27:0;;;;;;;:16;:27;;;;;;;;49753:283::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;14:173:1;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;575:180::-;634:6;687:2;675:9;666:7;662:23;658:32;655:52;;;703:1;700;693:12;655:52;-1:-1:-1;726:23:1;;575:180;-1:-1:-1;575:180:1:o;760:118::-;846:5;839:13;832:21;825:5;822:32;812:60;;868:1;865;858:12;883:241;939:6;992:2;980:9;971:7;967:23;963:32;960:52;;;1008:1;1005;998:12;960:52;1047:9;1034:23;1066:28;1088:5;1066:28;:::i;1533:315::-;1598:6;1606;1659:2;1647:9;1638:7;1634:23;1630:32;1627:52;;;1675:1;1672;1665:12;1627:52;1698:29;1717:9;1698:29;:::i;:::-;1688:39;;1777:2;1766:9;1762:18;1749:32;1790:28;1812:5;1790:28;:::i;:::-;1837:5;1827:15;;;1533:315;;;;;:::o;1853:127::-;1914:10;1909:3;1905:20;1902:1;1895:31;1945:4;1942:1;1935:15;1969:4;1966:1;1959:15;1985:251;2057:2;2051:9;2099:2;2087:15;;2132:18;2117:34;;2153:22;;;2114:62;2111:88;;;2179:18;;:::i;:::-;2215:2;2208:22;1985:251;:::o;2241:275::-;2312:2;2306:9;2377:2;2358:13;;-1:-1:-1;;2354:27:1;2342:40;;2412:18;2397:34;;2433:22;;;2394:62;2391:88;;;2459:18;;:::i;:::-;2495:2;2488:22;2241:275;;-1:-1:-1;2241:275:1:o;2521:183::-;2581:4;2614:18;2606:6;2603:30;2600:56;;;2636:18;;:::i;:::-;-1:-1:-1;2681:1:1;2677:14;2693:4;2673:25;;2521:183::o;2709:662::-;2763:5;2816:3;2809:4;2801:6;2797:17;2793:27;2783:55;;2834:1;2831;2824:12;2783:55;2870:6;2857:20;2896:4;2920:60;2936:43;2976:2;2936:43;:::i;:::-;2920:60;:::i;:::-;3014:15;;;3100:1;3096:10;;;;3084:23;;3080:32;;;3045:12;;;;3124:15;;;3121:35;;;3152:1;3149;3142:12;3121:35;3188:2;3180:6;3176:15;3200:142;3216:6;3211:3;3208:15;3200:142;;;3282:17;;3270:30;;3320:12;;;;3233;;3200:142;;;-1:-1:-1;3360:5:1;2709:662;-1:-1:-1;;;;;;2709:662:1:o;3376:348::-;3460:6;3513:2;3501:9;3492:7;3488:23;3484:32;3481:52;;;3529:1;3526;3519:12;3481:52;3569:9;3556:23;3602:18;3594:6;3591:30;3588:50;;;3634:1;3631;3624:12;3588:50;3657:61;3710:7;3701:6;3690:9;3686:22;3657:61;:::i;3959:383::-;4033:6;4041;4049;4102:2;4090:9;4081:7;4077:23;4073:32;4070:52;;;4118:1;4115;4108:12;4070:52;4154:9;4141:23;4131:33;;4214:2;4203:9;4199:18;4186:32;4227:28;4249:5;4227:28;:::i;:::-;4274:5;-1:-1:-1;4298:38:1;4332:2;4317:18;;4298:38;:::i;:::-;4288:48;;3959:383;;;;;:::o;4347:997::-;4454:6;4485:2;4528;4516:9;4507:7;4503:23;4499:32;4496:52;;;4544:1;4541;4534:12;4496:52;4584:9;4571:23;4613:18;4654:2;4646:6;4643:14;4640:34;;;4670:1;4667;4660:12;4640:34;4708:6;4697:9;4693:22;4683:32;;4753:7;4746:4;4742:2;4738:13;4734:27;4724:55;;4775:1;4772;4765:12;4724:55;4799:22;;:::i;:::-;4843:3;4877:2;4873;4869:11;4903:7;4895:6;4892:19;4889:39;;;4924:1;4921;4914:12;4889:39;4948:2;4959:355;4975:6;4970:3;4967:15;4959:355;;;5061:3;5048:17;5097:2;5084:11;5081:19;5078:109;;;5141:1;5170:2;5166;5159:14;5078:109;5212:59;5263:7;5249:11;5245:2;5241:20;5212:59;:::i;:::-;5200:72;;-1:-1:-1;5292:12:1;;;;4992;;4959:355;;;-1:-1:-1;5333:5:1;;4347:997;-1:-1:-1;;;;;;;;4347:997:1:o;5557:1146::-;5675:6;5683;5736:2;5724:9;5715:7;5711:23;5707:32;5704:52;;;5752:1;5749;5742:12;5704:52;5792:9;5779:23;5821:18;5862:2;5854:6;5851:14;5848:34;;;5878:1;5875;5868:12;5848:34;5916:6;5905:9;5901:22;5891:32;;5961:7;5954:4;5950:2;5946:13;5942:27;5932:55;;5983:1;5980;5973:12;5932:55;6019:2;6006:16;6041:4;6065:60;6081:43;6121:2;6081:43;:::i;6065:60::-;6159:15;;;6241:1;6237:10;;;;6229:19;;6225:28;;;6190:12;;;;6265:19;;;6262:39;;;6297:1;6294;6287:12;6262:39;6321:11;;;;6341:148;6357:6;6352:3;6349:15;6341:148;;;6423:23;6442:3;6423:23;:::i;:::-;6411:36;;6374:12;;;;6467;;;;6341:148;;;6508:5;-1:-1:-1;;6551:18:1;;6538:32;;-1:-1:-1;;6582:16:1;;;6579:36;;;6611:1;6608;6601:12;6579:36;;6634:63;6689:7;6678:8;6667:9;6663:24;6634:63;:::i;:::-;6624:73;;;5557:1146;;;;;:::o;6708:254::-;6776:6;6784;6837:2;6825:9;6816:7;6812:23;6808:32;6805:52;;;6853:1;6850;6843:12;6805:52;6876:29;6895:9;6876:29;:::i;:::-;6866:39;6952:2;6937:18;;;;6924:32;;-1:-1:-1;;;6708:254:1:o;6967:367::-;7030:8;7040:6;7094:3;7087:4;7079:6;7075:17;7071:27;7061:55;;7112:1;7109;7102:12;7061:55;-1:-1:-1;7135:20:1;;7178:18;7167:30;;7164:50;;;7210:1;7207;7200:12;7164:50;7247:4;7239:6;7235:17;7223:29;;7307:3;7300:4;7290:6;7287:1;7283:14;7275:6;7271:27;7267:38;7264:47;7261:67;;;7324:1;7321;7314:12;7261:67;6967:367;;;;;:::o;7339:566::-;7431:6;7439;7447;7500:2;7488:9;7479:7;7475:23;7471:32;7468:52;;;7516:1;7513;7506:12;7468:52;7555:9;7542:23;7574:28;7596:5;7574:28;:::i;:::-;7621:5;-1:-1:-1;7677:2:1;7662:18;;7649:32;7704:18;7693:30;;7690:50;;;7736:1;7733;7726:12;7690:50;7775:70;7837:7;7828:6;7817:9;7813:22;7775:70;:::i;:::-;7339:566;;7864:8;;-1:-1:-1;7749:96:1;;-1:-1:-1;;;;7339:566:1:o;7910:248::-;7978:6;7986;8039:2;8027:9;8018:7;8014:23;8010:32;8007:52;;;8055:1;8052;8045:12;8007:52;-1:-1:-1;;8078:23:1;;;8148:2;8133:18;;;8120:32;;-1:-1:-1;7910:248:1:o;8163:773::-;8285:6;8293;8301;8309;8362:2;8350:9;8341:7;8337:23;8333:32;8330:52;;;8378:1;8375;8368:12;8330:52;8418:9;8405:23;8447:18;8488:2;8480:6;8477:14;8474:34;;;8504:1;8501;8494:12;8474:34;8543:70;8605:7;8596:6;8585:9;8581:22;8543:70;:::i;:::-;8632:8;;-1:-1:-1;8517:96:1;-1:-1:-1;8720:2:1;8705:18;;8692:32;;-1:-1:-1;8736:16:1;;;8733:36;;;8765:1;8762;8755:12;8733:36;;8804:72;8868:7;8857:8;8846:9;8842:24;8804:72;:::i;:::-;8163:773;;;;-1:-1:-1;8895:8:1;-1:-1:-1;;;;8163:773:1:o;8941:437::-;9027:6;9035;9088:2;9076:9;9067:7;9063:23;9059:32;9056:52;;;9104:1;9101;9094:12;9056:52;9144:9;9131:23;9177:18;9169:6;9166:30;9163:50;;;9209:1;9206;9199:12;9163:50;9248:70;9310:7;9301:6;9290:9;9286:22;9248:70;:::i;:::-;9337:8;;9222:96;;-1:-1:-1;8941:437:1;-1:-1:-1;;;;8941:437:1:o;9383:632::-;9554:2;9606:21;;;9676:13;;9579:18;;;9698:22;;;9525:4;;9554:2;9777:15;;;;9751:2;9736:18;;;9525:4;9820:169;9834:6;9831:1;9828:13;9820:169;;;9895:13;;9883:26;;9964:15;;;;9929:12;;;;9856:1;9849:9;9820:169;;;-1:-1:-1;10006:3:1;;9383:632;-1:-1:-1;;;;;;9383:632:1:o;10476:328::-;10553:6;10561;10569;10622:2;10610:9;10601:7;10597:23;10593:32;10590:52;;;10638:1;10635;10628:12;10590:52;10674:9;10661:23;10651:33;;10703:38;10737:2;10726:9;10722:18;10703:38;:::i;10809:458::-;10892:6;10900;10908;10916;10969:3;10957:9;10948:7;10944:23;10940:33;10937:53;;;10986:1;10983;10976:12;10937:53;11009:29;11028:9;11009:29;:::i;:::-;10999:39;;11085:2;11074:9;11070:18;11057:32;11047:42;;11139:2;11128:9;11124:18;11111:32;11152:28;11174:5;11152:28;:::i;:::-;11199:5;-1:-1:-1;11223:38:1;11257:2;11242:18;;11223:38;:::i;:::-;11213:48;;10809:458;;;;;;;:::o;11272:657::-;11370:6;11378;11386;11394;11402;11410;11463:3;11451:9;11442:7;11438:23;11434:33;11431:53;;;11480:1;11477;11470:12;11431:53;11516:9;11503:23;11493:33;;11573:2;11562:9;11558:18;11545:32;11535:42;;11596:38;11630:2;11619:9;11615:18;11596:38;:::i;:::-;11586:48;;11681:2;11670:9;11666:18;11653:32;11643:42;;11735:3;11724:9;11720:19;11707:33;11749:28;11771:5;11749:28;:::i;:::-;11796:5;-1:-1:-1;11853:3:1;11838:19;;11825:33;11867:30;11825:33;11867:30;:::i;:::-;11916:7;11906:17;;;11272:657;;;;;;;;:::o;12615:127::-;12676:10;12671:3;12667:20;12664:1;12657:31;12707:4;12704:1;12697:15;12731:4;12728:1;12721:15;12747:168;12787:7;12853:1;12849;12845:6;12841:14;12838:1;12835:21;12830:1;12823:9;12816:17;12812:45;12809:71;;;12860:18;;:::i;:::-;-1:-1:-1;12900:9:1;;12747:168::o;12920:217::-;12960:1;12986;12976:132;;13030:10;13025:3;13021:20;13018:1;13011:31;13065:4;13062:1;13055:15;13093:4;13090:1;13083:15;12976:132;-1:-1:-1;13122:9:1;;12920:217::o;13499:127::-;13560:10;13555:3;13551:20;13548:1;13541:31;13591:4;13588:1;13581:15;13615:4;13612:1;13605:15;13631:135;13670:3;-1:-1:-1;;13691:17:1;;13688:43;;;13711:18;;:::i;:::-;-1:-1:-1;13758:1:1;13747:13;;13631:135::o;13771:347::-;13973:2;13955:21;;;14012:2;13992:18;;;13985:30;14051:25;14046:2;14031:18;;14024:53;14109:2;14094:18;;13771:347::o;14123:343::-;14325:2;14307:21;;;14364:2;14344:18;;;14337:30;-1:-1:-1;;;14398:2:1;14383:18;;14376:49;14457:2;14442:18;;14123:343::o;14471:245::-;14538:6;14591:2;14579:9;14570:7;14566:23;14562:32;14559:52;;;14607:1;14604;14597:12;14559:52;14639:9;14633:16;14658:28;14680:5;14658:28;:::i;14721:356::-;14923:2;14905:21;;;14942:18;;;14935:30;15001:34;14996:2;14981:18;;14974:62;15068:2;15053:18;;14721:356::o;15423:125::-;15463:4;15491:1;15488;15485:8;15482:34;;;15496:18;;:::i;:::-;-1:-1:-1;15533:9:1;;15423:125::o;15553:128::-;15593:3;15624:1;15620:6;15617:1;15614:13;15611:39;;;15630:18;;:::i;:::-;-1:-1:-1;15666:9:1;;15553:128::o;15686:354::-;15888:2;15870:21;;;15927:2;15907:18;;;15900:30;15966:32;15961:2;15946:18;;15939:60;16031:2;16016:18;;15686:354::o;18072:345::-;18274:2;18256:21;;;18313:2;18293:18;;;18286:30;-1:-1:-1;;;18347:2:1;18332:18;;18325:51;18408:2;18393:18;;18072:345::o;19783:179::-;19861:13;;19914:22;19903:34;;19893:45;;19883:73;;19952:1;19949;19942:12;19967:473;20070:6;20078;20086;20094;20102;20155:3;20143:9;20134:7;20130:23;20126:33;20123:53;;;20172:1;20169;20162:12;20123:53;20195:39;20224:9;20195:39;:::i;:::-;20185:49;;20274:2;20263:9;20259:18;20253:25;20243:35;;20318:2;20307:9;20303:18;20297:25;20287:35;;20362:2;20351:9;20347:18;20341:25;20331:35;;20385:49;20429:3;20418:9;20414:19;20385:49;:::i;:::-;20375:59;;19967:473;;;;;;;;:::o;20445:553::-;20484:7;-1:-1:-1;;;;;20554:9:1;;;20582;;;20607:11;;;20626:10;;;20620:17;;20603:35;20600:61;;;20641:18;;:::i;:::-;-1:-1:-1;;;20717:1:1;20710:9;;20735:11;;;20755;;;20748:19;;20731:37;20728:63;;;20771:18;;:::i;:::-;20817:1;20814;20810:9;20800:19;;20864:1;20860:2;20855:11;20852:1;20848:19;20843:2;20839;20835:11;20831:37;20828:63;;;20871:18;;:::i;:::-;20936:1;20932:2;20927:11;20924:1;20920:19;20915:2;20911;20907:11;20903:37;20900:63;;;20943:18;;:::i;:::-;-1:-1:-1;;;20983:9:1;;;;;20445:553;-1:-1:-1;;;20445:553:1:o;24229:184::-;24299:6;24352:2;24340:9;24331:7;24327:23;24323:32;24320:52;;;24368:1;24365;24358:12;24320:52;-1:-1:-1;24391:16:1;;24229:184;-1:-1:-1;24229:184:1:o;24418:397::-;24620:2;24602:21;;;24659:2;24639:18;;;24632:30;24698:34;24693:2;24678:18;;24671:62;-1:-1:-1;;;24764:2:1;24749:18;;24742:31;24805:3;24790:19;;24418:397::o;24820:375::-;-1:-1:-1;;;;;25078:15:1;;;25060:34;;25130:15;;;;25125:2;25110:18;;25103:43;25177:2;25162:18;;25155:34;;;;25010:2;24995:18;;24820:375::o;28125:346::-;28327:2;28309:21;;;28366:2;28346:18;;;28339:30;-1:-1:-1;;;28400:2:1;28385:18;;28378:52;28462:2;28447:18;;28125:346::o;30081:426::-;30210:3;30248:6;30242:13;30273:1;30283:129;30297:6;30294:1;30291:13;30283:129;;;30395:4;30379:14;;;30375:25;;30369:32;30356:11;;;30349:53;30312:12;30283:129;;;30430:6;30427:1;30424:13;30421:48;;;30465:1;30456:6;30451:3;30447:16;30440:27;30421:48;-1:-1:-1;30485:16:1;;;;;30081:426;-1:-1:-1;;30081:426:1:o;30512:344::-;30714:2;30696:21;;;30753:2;30733:18;;;30726:30;-1:-1:-1;;;30787:2:1;30772:18;;30765:50;30847:2;30832:18;;30512:344::o
Swarm Source
ipfs://3448370fd6ca7cb90265436efd0e9d72ebe445cb9a2a9faef1bd095f3c5df5b0
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.