More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 168,332 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Harvest Many | 10548309 | 2 days ago | IN | 0 GLMR | 0.0089195 | ||||
Withdraw | 10545346 | 2 days ago | IN | 0 GLMR | 0.02420715 | ||||
Deposit | 10545314 | 2 days ago | IN | 0 GLMR | 0.024852 | ||||
Withdraw | 10518177 | 4 days ago | IN | 0 GLMR | 0.0314745 | ||||
Withdraw | 10508369 | 4 days ago | IN | 0 GLMR | 0.0303005 | ||||
Withdraw | 10255812 | 22 days ago | IN | 0 GLMR | 0.029843 | ||||
Harvest Many | 10255796 | 22 days ago | IN | 0 GLMR | 0.0253965 | ||||
Withdraw | 10185939 | 27 days ago | IN | 0 GLMR | 0.034991 | ||||
Withdraw | 10185911 | 27 days ago | IN | 0 GLMR | 0.029708 | ||||
Deposit | 10171081 | 28 days ago | IN | 0 GLMR | 0.0318085 | ||||
Withdraw | 10098399 | 33 days ago | IN | 0 GLMR | 0.02251827 | ||||
Harvest Many | 10098033 | 33 days ago | IN | 0 GLMR | 0.02544844 | ||||
Withdraw | 9950128 | 44 days ago | IN | 0 GLMR | 0.0090395 | ||||
Withdraw | 9950125 | 44 days ago | IN | 0 GLMR | 0.029831 | ||||
Withdraw | 9886993 | 48 days ago | IN | 0 GLMR | 0.0299625 | ||||
Harvest Many | 9789888 | 55 days ago | IN | 0 GLMR | 0.00075759 | ||||
Harvest Many | 9789888 | 55 days ago | IN | 0 GLMR | 0.0089235 | ||||
Withdraw | 9767997 | 57 days ago | IN | 0 GLMR | 0.02980909 | ||||
Withdraw | 9767991 | 57 days ago | IN | 0 GLMR | 0.02609846 | ||||
Harvest Many | 9767987 | 57 days ago | IN | 0 GLMR | 0.0253765 | ||||
Withdraw | 9740982 | 59 days ago | IN | 0 GLMR | 0.03147619 | ||||
Harvest Many | 9740979 | 59 days ago | IN | 0 GLMR | 0.02678068 | ||||
Harvest Many | 9517222 | 74 days ago | IN | 0 GLMR | 0.0089235 | ||||
Withdraw | 9421911 | 81 days ago | IN | 0 GLMR | 0.0302585 | ||||
Withdraw | 9421706 | 81 days ago | IN | 0 GLMR | 0.03147619 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
BeamChef
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity)
/** *Submitted for verification at moonbeam.moonscan.io on 2022-01-16 */ // Sources flattened with hardhat v2.7.1 https://hardhat.org // File @openzeppelin/contracts/utils/[email protected] // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (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 v4.4.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 Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _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 v4.4.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() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // 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/utils/[email protected] // OpenZeppelin Contracts v4.4.0 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File contracts/yield-farm/libraries/IBoringERC20.sol pragma solidity 0.8.11; interface IBoringERC20 { function mint(address to, uint256 amount) external; function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval( address indexed owner, address indexed spender, uint256 value ); /// @notice EIP 2612 function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; } // File contracts/yield-farm/rewarders/IMultipleRewards.sol pragma solidity 0.8.11; interface IMultipleRewards { function onBeamReward( uint256 pid, address user, uint256 newLpAmount ) external; function pendingTokens(uint256 pid, address user) external view returns (uint256 pending); function rewardToken() external view returns (IBoringERC20); function poolRewardsPerSec(uint256 pid) external view returns (uint256); } // File contracts/yield-farm/libraries/BoringERC20.sol pragma solidity 0.8.11; // solhint-disable avoid-low-level-calls library BoringERC20 { bytes4 private constant SIG_SYMBOL = 0x95d89b41; // symbol() bytes4 private constant SIG_NAME = 0x06fdde03; // name() bytes4 private constant SIG_DECIMALS = 0x313ce567; // decimals() bytes4 private constant SIG_TRANSFER = 0xa9059cbb; // transfer(address,uint256) bytes4 private constant SIG_TRANSFER_FROM = 0x23b872dd; // transferFrom(address,address,uint256) function returnDataToString(bytes memory data) internal pure returns (string memory) { if (data.length >= 64) { return abi.decode(data, (string)); } else if (data.length == 32) { uint8 i = 0; while (i < 32 && data[i] != 0) { i++; } bytes memory bytesArray = new bytes(i); for (i = 0; i < 32 && data[i] != 0; i++) { bytesArray[i] = data[i]; } return string(bytesArray); } else { return "???"; } } /// @notice Provides a safe ERC20.symbol version which returns '???' as fallback string. /// @param token The address of the ERC-20 token contract. /// @return (string) Token symbol. function safeSymbol(IBoringERC20 token) internal view returns (string memory) { (bool success, bytes memory data) = address(token).staticcall( abi.encodeWithSelector(SIG_SYMBOL) ); return success ? returnDataToString(data) : "???"; } /// @notice Provides a safe ERC20.name version which returns '???' as fallback string. /// @param token The address of the ERC-20 token contract. /// @return (string) Token name. function safeName(IBoringERC20 token) internal view returns (string memory) { (bool success, bytes memory data) = address(token).staticcall( abi.encodeWithSelector(SIG_NAME) ); return success ? returnDataToString(data) : "???"; } /// @notice Provides a safe ERC20.decimals version which returns '18' as fallback value. /// @param token The address of the ERC-20 token contract. /// @return (uint8) Token decimals. function safeDecimals(IBoringERC20 token) internal view returns (uint8) { (bool success, bytes memory data) = address(token).staticcall( abi.encodeWithSelector(SIG_DECIMALS) ); return success && data.length == 32 ? abi.decode(data, (uint8)) : 18; } /// @notice Provides a safe ERC20.transfer version for different ERC-20 implementations. /// Reverts on a failed transfer. /// @param token The address of the ERC-20 token. /// @param to Transfer tokens to. /// @param amount The token amount. function safeTransfer( IBoringERC20 token, address to, uint256 amount ) internal { (bool success, bytes memory data) = address(token).call( abi.encodeWithSelector(SIG_TRANSFER, to, amount) ); require( success && (data.length == 0 || abi.decode(data, (bool))), "BoringERC20: Transfer failed" ); } /// @notice Provides a safe ERC20.transferFrom version for different ERC-20 implementations. /// Reverts on a failed transfer. /// @param token The address of the ERC-20 token. /// @param from Transfer tokens from. /// @param to Transfer tokens to. /// @param amount The token amount. function safeTransferFrom( IBoringERC20 token, address from, address to, uint256 amount ) internal { (bool success, bytes memory data) = address(token).call( abi.encodeWithSelector(SIG_TRANSFER_FROM, from, to, amount) ); require( success && (data.length == 0 || abi.decode(data, (bool))), "BoringERC20: TransferFrom failed" ); } } // File contracts/yield-farm/IBeamSwapPair.sol pragma solidity 0.8.11; interface IBeamSwapPair { function initialize(address, address) external; function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; } // File contracts/yield-farm/BeamChef.sol pragma solidity 0.8.11; contract BeamChef is Ownable, ReentrancyGuard { using BoringERC20 for IBoringERC20; // Info of each user. struct UserInfo { uint256 amount; // How many LP tokens the user has provided. uint256 rewardDebt; // Reward debt. See explanation below. uint256 rewardLockedUp; // Reward locked up. uint256 nextHarvestUntil; // When can the user harvest again. } // Info of each pool. struct PoolInfo { IBoringERC20 lpToken; // Address of LP token contract. uint256 allocPoint; // How many allocation points assigned to this pool. Beam to distribute per block. uint256 lastRewardTimestamp; // Last block number that Beam distribution occurs. uint256 accBeamPerShare; // Accumulated Beam per share, times 1e18. See below. uint16 depositFeeBP; // Deposit fee in basis points uint256 harvestInterval; // Harvest interval in seconds uint256 totalLp; // Total token in Pool IMultipleRewards[] rewarders; // Array of rewarder contract for pools with incentives } IBoringERC20 public beam; // Beam tokens created per second uint256 public beamPerSec; // Max harvest interval: 14 days uint256 public constant MAXIMUM_HARVEST_INTERVAL = 14 days; // Maximum deposit fee rate: 10% uint16 public constant MAXIMUM_DEPOSIT_FEE_RATE = 1000; // Info of each pool PoolInfo[] public poolInfo; // Info of each user that stakes LP tokens. mapping(uint256 => mapping(address => UserInfo)) public userInfo; // Total allocation points. Must be the sum of all allocation points in all pools. uint256 public totalAllocPoint; // The timestamp when Beam mining starts. uint256 public startTimestamp; // Total locked up rewards uint256 public totalLockedUpRewards; // Total Beam in Beam Pools (can be multiple pools) uint256 public totalBeamInPools; // Beamshare address. address public beamShareAddress; // deposit fee address if needed address public feeAddress; // Percentage of pool rewards that goto the team. uint256 public beamSharePercent; // The precision factor uint256 private constant ACC_TOKEN_PRECISION = 1e12; modifier validatePoolByPid(uint256 _pid) { require(_pid < poolInfo.length, "Pool does not exist"); _; } event Add( uint256 indexed pid, uint256 allocPoint, IBoringERC20 indexed lpToken, uint16 depositFeeBP, uint256 harvestInterval, IMultipleRewards[] indexed rewarders ); event Set( uint256 indexed pid, uint256 allocPoint, uint16 depositFeeBP, uint256 harvestInterval, IMultipleRewards[] indexed rewarders ); event UpdatePool( uint256 indexed pid, uint256 lastRewardTimestamp, uint256 lpSupply, uint256 accBeamPerShare ); event Deposit(address indexed user, uint256 indexed pid, uint256 amount); event Withdraw(address indexed user, uint256 indexed pid, uint256 amount); event EmergencyWithdraw( address indexed user, uint256 indexed pid, uint256 amount ); event EmissionRateUpdated( address indexed caller, uint256 previousValue, uint256 newValue ); event RewardLockedUp( address indexed user, uint256 indexed pid, uint256 amountLockedUp ); event AllocPointsUpdated( address indexed caller, uint256 previousAmount, uint256 newAmount ); event SetbeamShareAddress( address indexed oldAddress, address indexed newAddress ); event SetFeeAddress(address indexed oldAddress, address indexed newAddress); event SetInvestorAddress( address indexed oldAddress, address indexed newAddress ); event SetbeamSharePercent(uint256 oldPercent, uint256 newPercent); event SetTreasuryPercent(uint256 oldPercent, uint256 newPercent); event SetInvestorPercent(uint256 oldPercent, uint256 newPercent); constructor( IBoringERC20 _beam, uint256 _beamPerSec, address _beamShareAddress, uint256 _beamSharePercent, address _feeAddress ) { require( _beamSharePercent <= 100, "constructor: invalid beamshare percent value" ); startTimestamp = block.timestamp + (60 * 60 * 24 * 365); beam = _beam; beamPerSec = _beamPerSec; beamShareAddress = _beamShareAddress; beamSharePercent = _beamSharePercent; feeAddress = _feeAddress; } // Set farming start, can call only once function startFarming() public onlyOwner { require(block.timestamp < startTimestamp, "farm already started"); uint256 length = poolInfo.length; for (uint256 pid = 0; pid < length; ++pid) { PoolInfo storage pool = poolInfo[pid]; pool.lastRewardTimestamp = block.timestamp; } startTimestamp = block.timestamp; } function poolLength() external view returns (uint256) { return poolInfo.length; } // Add a new lp to the pool. Can only be called by the owner. // Can add multiple pool with same lp token without messing up rewards, because each pool's balance is tracked using its own totalLp function add( uint256 _allocPoint, IBoringERC20 _lpToken, uint16 _depositFeeBP, uint256 _harvestInterval, IMultipleRewards[] calldata _rewarders ) public onlyOwner { require(_rewarders.length <= 10, "add: too many rewarders"); require( _depositFeeBP <= MAXIMUM_DEPOSIT_FEE_RATE, "add: deposit fee too high" ); require( _harvestInterval <= MAXIMUM_HARVEST_INTERVAL, "add: invalid harvest interval" ); for ( uint256 rewarderId = 0; rewarderId < _rewarders.length; ++rewarderId ) { require( Address.isContract(address(_rewarders[rewarderId])), "add: rewarder must be contract" ); } _massUpdatePools(); uint256 lastRewardTimestamp = block.timestamp > startTimestamp ? block.timestamp : startTimestamp; totalAllocPoint += _allocPoint; poolInfo.push( PoolInfo({ lpToken: _lpToken, allocPoint: _allocPoint, lastRewardTimestamp: lastRewardTimestamp, accBeamPerShare: 0, depositFeeBP: _depositFeeBP, harvestInterval: _harvestInterval, totalLp: 0, rewarders: _rewarders }) ); emit Add( poolInfo.length - 1, _allocPoint, _lpToken, _depositFeeBP, _harvestInterval, _rewarders ); } // Update the given pool's Beam allocation point and deposit fee. Can only be called by the owner. function set( uint256 _pid, uint256 _allocPoint, uint16 _depositFeeBP, uint256 _harvestInterval, IMultipleRewards[] calldata _rewarders ) public onlyOwner validatePoolByPid(_pid) { require(_rewarders.length <= 10, "set: too many rewarders"); require( _depositFeeBP <= MAXIMUM_DEPOSIT_FEE_RATE, "set: deposit fee too high" ); require( _harvestInterval <= MAXIMUM_HARVEST_INTERVAL, "set: invalid harvest interval" ); for ( uint256 rewarderId = 0; rewarderId < _rewarders.length; ++rewarderId ) { require( Address.isContract(address(_rewarders[rewarderId])), "set: rewarder must be contract" ); } _massUpdatePools(); totalAllocPoint = totalAllocPoint - poolInfo[_pid].allocPoint + _allocPoint; poolInfo[_pid].allocPoint = _allocPoint; poolInfo[_pid].depositFeeBP = _depositFeeBP; poolInfo[_pid].harvestInterval = _harvestInterval; poolInfo[_pid].rewarders = _rewarders; emit Set( _pid, _allocPoint, _depositFeeBP, _harvestInterval, _rewarders ); } // View function to see pending rewards on frontend. function pendingTokens(uint256 _pid, address _user) external view validatePoolByPid(_pid) returns ( address[] memory addresses, string[] memory symbols, uint256[] memory decimals, uint256[] memory amounts ) { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][_user]; uint256 accBeamPerShare = pool.accBeamPerShare; uint256 lpSupply = pool.totalLp; if (block.timestamp > pool.lastRewardTimestamp && lpSupply != 0) { uint256 multiplier = block.timestamp - pool.lastRewardTimestamp; uint256 total = 1000; uint256 lpPercent = total - beamSharePercent; uint256 beamReward = (multiplier * beamPerSec * pool.allocPoint * lpPercent) / totalAllocPoint / total; accBeamPerShare += ( ((beamReward * ACC_TOKEN_PRECISION) / lpSupply) ); } uint256 pendingBeam = (((user.amount * accBeamPerShare) / ACC_TOKEN_PRECISION) - user.rewardDebt) + user.rewardLockedUp; addresses = new address[](pool.rewarders.length + 1); symbols = new string[](pool.rewarders.length + 1); amounts = new uint256[](pool.rewarders.length + 1); decimals = new uint256[](pool.rewarders.length + 1); addresses[0] = address(beam); symbols[0] = IBoringERC20(beam).safeSymbol(); decimals[0] = IBoringERC20(beam).safeDecimals(); amounts[0] = pendingBeam; for ( uint256 rewarderId = 0; rewarderId < pool.rewarders.length; ++rewarderId ) { addresses[rewarderId + 1] = address( pool.rewarders[rewarderId].rewardToken() ); symbols[rewarderId + 1] = IBoringERC20( pool.rewarders[rewarderId].rewardToken() ).safeSymbol(); decimals[rewarderId + 1] = IBoringERC20( pool.rewarders[rewarderId].rewardToken() ).safeDecimals(); amounts[rewarderId + 1] = pool.rewarders[rewarderId].pendingTokens( _pid, _user ); } } /// @notice View function to see pool rewards per sec function poolRewardsPerSec(uint256 _pid) external view validatePoolByPid(_pid) returns ( address[] memory addresses, string[] memory symbols, uint256[] memory decimals, uint256[] memory rewardsPerSec ) { PoolInfo storage pool = poolInfo[_pid]; addresses = new address[](pool.rewarders.length + 1); symbols = new string[](pool.rewarders.length + 1); decimals = new uint256[](pool.rewarders.length + 1); rewardsPerSec = new uint256[](pool.rewarders.length + 1); addresses[0] = address(beam); symbols[0] = IBoringERC20(beam).safeSymbol(); decimals[0] = IBoringERC20(beam).safeDecimals(); uint256 total = 1000; uint256 lpPercent = total - beamSharePercent; rewardsPerSec[0] = (pool.allocPoint * beamPerSec * lpPercent) / totalAllocPoint / total; for ( uint256 rewarderId = 0; rewarderId < pool.rewarders.length; ++rewarderId ) { addresses[rewarderId + 1] = address( pool.rewarders[rewarderId].rewardToken() ); symbols[rewarderId + 1] = IBoringERC20( pool.rewarders[rewarderId].rewardToken() ).safeSymbol(); decimals[rewarderId + 1] = IBoringERC20( pool.rewarders[rewarderId].rewardToken() ).safeDecimals(); rewardsPerSec[rewarderId + 1] = pool .rewarders[rewarderId] .poolRewardsPerSec(_pid); } } // View function to see rewarders for a pool function poolRewarders(uint256 _pid) external view validatePoolByPid(_pid) returns (address[] memory rewarders) { PoolInfo storage pool = poolInfo[_pid]; rewarders = new address[](pool.rewarders.length); for ( uint256 rewarderId = 0; rewarderId < pool.rewarders.length; ++rewarderId ) { rewarders[rewarderId] = address(pool.rewarders[rewarderId]); } } // View function to see if user can harvest Beam. function canHarvest(uint256 _pid, address _user) public view validatePoolByPid(_pid) returns (bool) { UserInfo storage user = userInfo[_pid][_user]; return block.timestamp >= startTimestamp && block.timestamp >= user.nextHarvestUntil; } // Update reward vairables for all pools. Be careful of gas spending! function massUpdatePools() external nonReentrant { _massUpdatePools(); } // Internal method for massUpdatePools function _massUpdatePools() internal { for (uint256 pid = 0; pid < poolInfo.length; ++pid) { _updatePool(pid); } } // Update reward variables of the given pool to be up-to-date. function updatePool(uint256 _pid) external nonReentrant { _updatePool(_pid); } // Internal method for _updatePool function _updatePool(uint256 _pid) internal validatePoolByPid(_pid) { PoolInfo storage pool = poolInfo[_pid]; if (block.timestamp <= pool.lastRewardTimestamp) { return; } uint256 lpSupply = pool.totalLp; if (lpSupply == 0 || pool.allocPoint == 0) { pool.lastRewardTimestamp = block.timestamp; return; } uint256 multiplier = block.timestamp - pool.lastRewardTimestamp; uint256 beamReward = ((multiplier * beamPerSec) * pool.allocPoint) / totalAllocPoint; uint256 total = 1000; uint256 lpPercent = total - beamSharePercent; beam.mint(beamShareAddress, (beamReward * beamSharePercent) / total); beam.mint(address(this), (beamReward * lpPercent) / total); pool.accBeamPerShare += (beamReward * ACC_TOKEN_PRECISION * lpPercent) / pool.totalLp / total; pool.lastRewardTimestamp = block.timestamp; emit UpdatePool( _pid, pool.lastRewardTimestamp, lpSupply, pool.accBeamPerShare ); } function depositWithPermit( uint256 pid, uint256 amount, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) public nonReentrant validatePoolByPid(pid) { PoolInfo storage pool = poolInfo[pid]; IBeamSwapPair pair = IBeamSwapPair(address(pool.lpToken)); pair.permit(msg.sender, address(this), amount, deadline, v, r, s); _deposit(pid, amount); } // Deposit tokens for Beam allocation. function deposit(uint256 _pid, uint256 _amount) public nonReentrant { _deposit(_pid, _amount); } // Deposit tokens for Beam allocation. function _deposit(uint256 _pid, uint256 _amount) internal validatePoolByPid(_pid) { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; _updatePool(_pid); payOrLockupPendingBeam(_pid); if (_amount > 0) { uint256 beforeDeposit = pool.lpToken.balanceOf(address(this)); pool.lpToken.safeTransferFrom(msg.sender, address(this), _amount); uint256 afterDeposit = pool.lpToken.balanceOf(address(this)); _amount = afterDeposit - beforeDeposit; if (pool.depositFeeBP > 0) { uint256 depositFee = (_amount * pool.depositFeeBP) / 10000; pool.lpToken.safeTransfer(feeAddress, depositFee); _amount = _amount - depositFee; } user.amount += _amount; if (address(pool.lpToken) == address(beam)) { totalBeamInPools += _amount; } } user.rewardDebt = (user.amount * pool.accBeamPerShare) / ACC_TOKEN_PRECISION; for ( uint256 rewarderId = 0; rewarderId < pool.rewarders.length; ++rewarderId ) { pool.rewarders[rewarderId].onBeamReward( _pid, msg.sender, user.amount ); } if (_amount > 0) { pool.totalLp += _amount; } emit Deposit(msg.sender, _pid, _amount); } //withdraw tokens function withdraw(uint256 _pid, uint256 _amount) public nonReentrant validatePoolByPid(_pid) { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; //this will make sure that user can only withdraw from his pool require(user.amount >= _amount, "withdraw: user amount not enough"); //cannot withdraw more than pool's balance require(pool.totalLp >= _amount, "withdraw: pool total not enough"); _updatePool(_pid); payOrLockupPendingBeam(_pid); if (_amount > 0) { user.amount -= _amount; if (address(pool.lpToken) == address(beam)) { totalBeamInPools -= _amount; } pool.lpToken.safeTransfer(msg.sender, _amount); } user.rewardDebt = (user.amount * pool.accBeamPerShare) / ACC_TOKEN_PRECISION; for ( uint256 rewarderId = 0; rewarderId < pool.rewarders.length; ++rewarderId ) { pool.rewarders[rewarderId].onBeamReward( _pid, msg.sender, user.amount ); } if (_amount > 0) { pool.totalLp -= _amount; } emit Withdraw(msg.sender, _pid, _amount); } // Withdraw without caring about rewards. EMERGENCY ONLY. function emergencyWithdraw(uint256 _pid) public nonReentrant { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; uint256 amount = user.amount; //Cannot withdraw more than pool's balance require( pool.totalLp >= amount, "emergency withdraw: pool total not enough" ); user.amount = 0; user.rewardDebt = 0; user.rewardLockedUp = 0; user.nextHarvestUntil = 0; pool.totalLp -= amount; for ( uint256 rewarderId = 0; rewarderId < pool.rewarders.length; ++rewarderId ) { pool.rewarders[rewarderId].onBeamReward(_pid, msg.sender, 0); } if (address(pool.lpToken) == address(beam)) { totalBeamInPools -= amount; } pool.lpToken.safeTransfer(msg.sender, amount); emit EmergencyWithdraw(msg.sender, _pid, amount); } // Pay or lockup pending Beam. function payOrLockupPendingBeam(uint256 _pid) internal { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; if (user.nextHarvestUntil == 0 && block.timestamp >= startTimestamp) { user.nextHarvestUntil = block.timestamp + pool.harvestInterval; } uint256 pending = ((user.amount * pool.accBeamPerShare) / ACC_TOKEN_PRECISION) - user.rewardDebt; if (canHarvest(_pid, msg.sender)) { if (pending > 0 || user.rewardLockedUp > 0) { uint256 pendingRewards = pending + user.rewardLockedUp; // reset lockup totalLockedUpRewards -= user.rewardLockedUp; user.rewardLockedUp = 0; user.nextHarvestUntil = block.timestamp + pool.harvestInterval; // send rewards safeBeamTransfer(msg.sender, pendingRewards); } } else if (pending > 0) { totalLockedUpRewards += pending; user.rewardLockedUp += pending; emit RewardLockedUp(msg.sender, _pid, pending); } } // Safe Beam transfer function, just in case if rounding error causes pool do not have enough Beam. function safeBeamTransfer(address _to, uint256 _amount) internal { if (beam.balanceOf(address(this)) > totalBeamInPools) { //beamBal = total Beam in BeamChef - total Beam in Beam pools, this will make sure that BeamDistributor never transfer rewards from deposited Beam pools uint256 beamBal = beam.balanceOf(address(this)) - totalBeamInPools; if (_amount >= beamBal) { beam.safeTransfer(_to, beamBal); } else if (_amount > 0) { beam.safeTransfer(_to, _amount); } } } function updateEmissionRate(uint256 _beamPerSec) public onlyOwner { _massUpdatePools(); emit EmissionRateUpdated(msg.sender, beamPerSec, _beamPerSec); beamPerSec = _beamPerSec; } function updateAllocPoint(uint256 _pid, uint256 _allocPoint) public onlyOwner { _massUpdatePools(); emit AllocPointsUpdated( msg.sender, poolInfo[_pid].allocPoint, _allocPoint ); totalAllocPoint = totalAllocPoint - poolInfo[_pid].allocPoint + _allocPoint; poolInfo[_pid].allocPoint = _allocPoint; } function poolTotalLp(uint256 pid) external view returns (uint256) { return poolInfo[pid].totalLp; } // Function to harvest many pools in a single transaction function harvestMany(uint256[] calldata _pids) public nonReentrant { require(_pids.length <= 30, "harvest many: too many pool ids"); for (uint256 index = 0; index < _pids.length; ++index) { _deposit(_pids[index], 0); } } // Update beamsahre address function setbeamShareAddress(address _beamShareAddress) public onlyOwner { require( _beamShareAddress != address(0), "invalid new beamshare address" ); beamShareAddress = _beamShareAddress; emit SetbeamShareAddress(msg.sender, _beamShareAddress); } function setbeamSharePercent(uint256 _newbeamSharePercent) public onlyOwner { require(_newbeamSharePercent <= 100, "invalid percent value"); emit SetbeamSharePercent(beamSharePercent, _newbeamSharePercent); beamSharePercent = _newbeamSharePercent; } // Update fee address. function setFeeAddress(address _feeAddress) public onlyOwner { require(_feeAddress != address(0), "invalid new fee address"); feeAddress = _feeAddress; emit SetFeeAddress(msg.sender, _feeAddress); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"contract IBoringERC20","name":"_beam","type":"address"},{"internalType":"uint256","name":"_beamPerSec","type":"uint256"},{"internalType":"address","name":"_beamShareAddress","type":"address"},{"internalType":"uint256","name":"_beamSharePercent","type":"uint256"},{"internalType":"address","name":"_feeAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"allocPoint","type":"uint256"},{"indexed":true,"internalType":"contract IBoringERC20","name":"lpToken","type":"address"},{"indexed":false,"internalType":"uint16","name":"depositFeeBP","type":"uint16"},{"indexed":false,"internalType":"uint256","name":"harvestInterval","type":"uint256"},{"indexed":true,"internalType":"contract IMultipleRewards[]","name":"rewarders","type":"address[]"}],"name":"Add","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"AllocPointsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"EmissionRateUpdated","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":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountLockedUp","type":"uint256"}],"name":"RewardLockedUp","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"allocPoint","type":"uint256"},{"indexed":false,"internalType":"uint16","name":"depositFeeBP","type":"uint16"},{"indexed":false,"internalType":"uint256","name":"harvestInterval","type":"uint256"},{"indexed":true,"internalType":"contract IMultipleRewards[]","name":"rewarders","type":"address[]"}],"name":"Set","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"SetFeeAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"SetInvestorAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldPercent","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newPercent","type":"uint256"}],"name":"SetInvestorPercent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldPercent","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newPercent","type":"uint256"}],"name":"SetTreasuryPercent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"SetbeamShareAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldPercent","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newPercent","type":"uint256"}],"name":"SetbeamSharePercent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastRewardTimestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lpSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"accBeamPerShare","type":"uint256"}],"name":"UpdatePool","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"MAXIMUM_DEPOSIT_FEE_RATE","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAXIMUM_HARVEST_INTERVAL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"contract IBoringERC20","name":"_lpToken","type":"address"},{"internalType":"uint16","name":"_depositFeeBP","type":"uint16"},{"internalType":"uint256","name":"_harvestInterval","type":"uint256"},{"internalType":"contract IMultipleRewards[]","name":"_rewarders","type":"address[]"}],"name":"add","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"beam","outputs":[{"internalType":"contract IBoringERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"beamPerSec","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"beamShareAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"beamSharePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"canHarvest","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"depositWithPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_pids","type":"uint256[]"}],"name":"harvestMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"massUpdatePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"pendingTokens","outputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"string[]","name":"symbols","type":"string[]"},{"internalType":"uint256[]","name":"decimals","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"contract IBoringERC20","name":"lpToken","type":"address"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"lastRewardTimestamp","type":"uint256"},{"internalType":"uint256","name":"accBeamPerShare","type":"uint256"},{"internalType":"uint16","name":"depositFeeBP","type":"uint16"},{"internalType":"uint256","name":"harvestInterval","type":"uint256"},{"internalType":"uint256","name":"totalLp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"poolRewarders","outputs":[{"internalType":"address[]","name":"rewarders","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"poolRewardsPerSec","outputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"string[]","name":"symbols","type":"string[]"},{"internalType":"uint256[]","name":"decimals","type":"uint256[]"},{"internalType":"uint256[]","name":"rewardsPerSec","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"}],"name":"poolTotalLp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"uint16","name":"_depositFeeBP","type":"uint16"},{"internalType":"uint256","name":"_harvestInterval","type":"uint256"},{"internalType":"contract IMultipleRewards[]","name":"_rewarders","type":"address[]"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeAddress","type":"address"}],"name":"setFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_beamShareAddress","type":"address"}],"name":"setbeamShareAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newbeamSharePercent","type":"uint256"}],"name":"setbeamSharePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startFarming","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAllocPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBeamInPools","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalLockedUpRewards","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":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"}],"name":"updateAllocPoint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_beamPerSec","type":"uint256"}],"name":"updateEmissionRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"},{"internalType":"uint256","name":"rewardLockedUp","type":"uint256"},{"internalType":"uint256","name":"nextHarvestUntil","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620044a4380380620044a4833981016040819052620000349162000176565b6200003f336200010d565b600180556064821115620000ae5760405162461bcd60e51b815260206004820152602c60248201527f636f6e7374727563746f723a20696e76616c6964206265616d7368617265207060448201526b657263656e742076616c756560a01b606482015260840160405180910390fd5b620000be426301e13380620001de565b600755600280546001600160a01b039687166001600160a01b031991821617909155600394909455600a805493861693851693909317909255600c55600b805491909316911617905562000205565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200017357600080fd5b50565b600080600080600060a086880312156200018f57600080fd5b85516200019c816200015d565b602087015160408801519196509450620001b6816200015d565b606087015160808801519194509250620001d0816200015d565b809150509295509295909350565b600082198211156200020057634e487b7160e01b600052601160045260246000fd5b500190565b61428f80620002156000396000f3fe608060405234801561001057600080fd5b50600436106102775760003560e01c8063654c9ece11610160578063afbcfea1116100d8578063e6fd48bc1161008c578063eff8976b11610071578063eff8976b14610571578063f2fde38b14610591578063ffcd4263146105a457600080fd5b8063e6fd48bc14610555578063eddf96521461055e57600080fd5b8063dc640ac9116100bd578063dc640ac914610525578063de73149d14610538578063e2bbb1581461054257600080fd5b8063afbcfea114610514578063bc4a9f281461051c57600080fd5b80638705fcd41161012f5780639136532311610114578063913653231461049857806393f1a40b146104a1578063a854f0771461050157600080fd5b80638705fcd4146104745780638da5cb5b1461048757600080fd5b8063654c9ece1461042a578063715018a61461043d578063812c64f114610445578063838f66a11461046157600080fd5b8063441a3e70116101f3578063515bc323116101c25780635312ea8e116101a75780635312ea8e1461040657806360e772e114610419578063630b5ba11461042257600080fd5b8063515bc323146103e057806351eb05a6146103f357600080fd5b8063441a3e701461038e578063465e81ec146103a1578063474fa630146103c4578063508593ab146103cd57600080fd5b80631526fe271161024a5780632081ccc41161022f5780632081ccc4146103455780632e6c998d14610358578063412753581461037b57600080fd5b80631526fe27146102e657806317caf6f11461033c57600080fd5b806301e864e51461027c578063081e3eda146102915780630867bacf146102a85780630ba84cd2146102d3575b600080fd5b61028f61028a366004613c49565b6105b7565b005b6004545b6040519081526020015b60405180910390f35b6002546102bb906001600160a01b031681565b6040516001600160a01b03909116815260200161029f565b61028f6102e1366004613c49565b6106a8565b6102f96102f4366004613c49565b61074d565b604080516001600160a01b039098168852602088019690965294860193909352606085019190915261ffff16608084015260a083015260c082015260e00161029f565b61029560065481565b61028f610353366004613cc0565b6107aa565b61036b610366366004613d46565b610b55565b604051901515815260200161029f565b600b546102bb906001600160a01b031681565b61028f61039c366004613d76565b610be2565b6103b46103af366004613c49565b610f11565b60405161029f9493929190613e38565b61029560085481565b61028f6103db366004613eea565b611525565b61028f6103ee366004613f32565b6118d1565b61028f610401366004613c49565b611a53565b61028f610414366004613c49565b611abb565b61029560035481565b61028f611d34565b610295610438366004613c49565b611d9a565b61028f611dc8565b61044e6103e881565b60405161ffff909116815260200161029f565b600a546102bb906001600160a01b031681565b61028f610482366004613f85565b611e2e565b6000546001600160a01b03166102bb565b61029560095481565b6104e16104af366004613d46565b600560209081526000928352604080842090915290825290208054600182015460028301546003909301549192909184565b60408051948552602085019390935291830152606082015260800161029f565b61028f61050f366004613f85565b611f2a565b61028f612026565b610295600c5481565b61028f610533366004613fa2565b612127565b6102956212750081565b61028f610550366004613d76565b612217565b61029560075481565b61028f61056c366004613d76565b612281565b61058461057f366004613c49565b6123c3565b60405161029f9190613fe4565b61028f61059f366004613f85565b612504565b6103b46105b2366004613d46565b6125e6565b6000546001600160a01b031633146106165760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b60648111156106675760405162461bcd60e51b815260206004820152601560248201527f696e76616c69642070657263656e742076616c75650000000000000000000000604482015260640161060d565b600c5460408051918252602082018390527f77d156628aead9f389392cb58cd732d7cc8221f9f559b29495fa2586a20cb393910160405180910390a1600c55565b6000546001600160a01b031633146107025760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161060d565b61070a612bdc565b600354604080519182526020820183905233917feedc6338c9c1ad8f3cd6c90dd09dbe98dbd57e610d3e59a17996d07acb0d9511910160405180910390a2600355565b6004818154811061075d57600080fd5b600091825260209091206008909102018054600182015460028301546003840154600485015460058601546006909601546001600160a01b03909516965092949193909261ffff16919087565b6000546001600160a01b031633146108045760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161060d565b6004548690811061084d5760405162461bcd60e51b8152602060048201526013602482015272141bdbdb08191bd95cc81b9bdd08195e1a5cdd606a1b604482015260640161060d565b600a82111561089e5760405162461bcd60e51b815260206004820152601760248201527f7365743a20746f6f206d616e7920726577617264657273000000000000000000604482015260640161060d565b6103e861ffff861611156108f45760405162461bcd60e51b815260206004820152601960248201527f7365743a206465706f7369742066656520746f6f206869676800000000000000604482015260640161060d565b621275008411156109475760405162461bcd60e51b815260206004820152601d60248201527f7365743a20696e76616c6964206861727665737420696e74657276616c000000604482015260640161060d565b60005b828110156109de5761098284848381811061096757610967613ff7565b905060200201602081019061097c9190613f85565b3b151590565b6109ce5760405162461bcd60e51b815260206004820152601e60248201527f7365743a207265776172646572206d75737420626520636f6e74726163740000604482015260640161060d565b6109d781614023565b905061094a565b506109e7612bdc565b85600488815481106109fb576109fb613ff7565b906000526020600020906008020160010154600654610a1a919061403e565b610a249190614055565b6006819055508560048881548110610a3e57610a3e613ff7565b9060005260206000209060080201600101819055508460048881548110610a6757610a67613ff7565b906000526020600020906008020160040160006101000a81548161ffff021916908361ffff1602179055508360048881548110610aa657610aa6613ff7565b906000526020600020906008020160050181905550828260048981548110610ad057610ad0613ff7565b90600052602060002090600802016007019190610aee929190613b7c565b508282604051610aff92919061406d565b6040805191829003822088835261ffff881660208401529082018690529088907f5ed6f0deef9ab49d02900b40d596df4cd637a2a7fbfa56bbcb377389d3ce8d289060600160405180910390a350505050505050565b60045460009083908110610ba15760405162461bcd60e51b8152602060048201526013602482015272141bdbdb08191bd95cc81b9bdd08195e1a5cdd606a1b604482015260640161060d565b60008481526005602090815260408083206001600160a01b038716845290915290206007544210801590610bd9575080600301544210155b95945050505050565b60026001541415610c355760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161060d565b600260015560045482908110610c835760405162461bcd60e51b8152602060048201526013602482015272141bdbdb08191bd95cc81b9bdd08195e1a5cdd606a1b604482015260640161060d565b600060048481548110610c9857610c98613ff7565b600091825260208083208784526005825260408085203386529092529220805460089092029092019250841115610d115760405162461bcd60e51b815260206004820181905260248201527f77697468647261773a207573657220616d6f756e74206e6f7420656e6f756768604482015260640161060d565b8382600601541015610d655760405162461bcd60e51b815260206004820152601f60248201527f77697468647261773a20706f6f6c20746f74616c206e6f7420656e6f75676800604482015260640161060d565b610d6e85612c02565b610d7785612eee565b8315610ddc5783816000016000828254610d91919061403e565b909155505060025482546001600160a01b0390811691161415610dc6578360096000828254610dc0919061403e565b90915550505b8154610ddc906001600160a01b03163386613088565b6003820154815464e8d4a5100091610df3916140af565b610dfd91906140ce565b600182015560005b6007830154811015610eae57826007018181548110610e2657610e26613ff7565b600091825260209091200154825460405163075bbb7f60e41b81526004810189905233602482015260448101919091526001600160a01b03909116906375bbb7f090606401600060405180830381600087803b158015610e8557600080fd5b505af1158015610e99573d6000803e3d6000fd5b5050505080610ea790614023565b9050610e05565b508315610ecf5783826006016000828254610ec9919061403e565b90915550505b604051848152859033907ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689060200160405180910390a3505060018055505050565b606080606080846004805490508110610f625760405162461bcd60e51b8152602060048201526013602482015272141bdbdb08191bd95cc81b9bdd08195e1a5cdd606a1b604482015260640161060d565b600060048781548110610f7757610f77613ff7565b9060005260206000209060080201905080600701805490506001610f9b9190614055565b67ffffffffffffffff811115610fb357610fb36140f0565b604051908082528060200260200182016040528015610fdc578160200160208202803683370190505b506007820154909650610ff0906001614055565b67ffffffffffffffff811115611008576110086140f0565b60405190808252806020026020018201604052801561103b57816020015b60608152602001906001900390816110265790505b50600782015490955061104f906001614055565b67ffffffffffffffff811115611067576110676140f0565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5060078201549094506110a4906001614055565b67ffffffffffffffff8111156110bc576110bc6140f0565b6040519080825280602002602001820160405280156110e5578160200160208202803683370190505b5060025487519194506001600160a01b031690879060009061110957611109613ff7565b6001600160a01b03928316602091820292909201015260025461112c91166131bc565b8560008151811061113f5761113f613ff7565b602090810291909101015260025461115f906001600160a01b0316613298565b60ff168460008151811061117557611175613ff7565b6020908102919091010152600c546103e890600090611194908361403e565b9050816006548260035486600101546111ad91906140af565b6111b791906140af565b6111c191906140ce565b6111cb91906140ce565b856000815181106111de576111de613ff7565b60200260200101818152505060005b60078401548110156115195783600701818154811061120e5761120e613ff7565b600091825260209182902001546040805163f7c618c160e01b815290516001600160a01b039092169263f7c618c1926004808401938290030181865afa15801561125c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112809190614106565b8961128c836001614055565b8151811061129c5761129c613ff7565b60200260200101906001600160a01b031690816001600160a01b0316815250506113548460070182815481106112d4576112d4613ff7565b600091825260209182902001546040805163f7c618c160e01b815290516001600160a01b039092169263f7c618c1926004808401938290030181865afa158015611322573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113469190614106565b6001600160a01b03166131bc565b88611360836001614055565b8151811061137057611370613ff7565b602002602001018190525061141384600701828154811061139357611393613ff7565b600091825260209182902001546040805163f7c618c160e01b815290516001600160a01b039092169263f7c618c1926004808401938290030181865afa1580156113e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114059190614106565b6001600160a01b0316613298565b60ff1687611422836001614055565b8151811061143257611432613ff7565b60200260200101818152505083600701818154811061145357611453613ff7565b6000918252602090912001546040517f465e81ec000000000000000000000000000000000000000000000000000000008152600481018c90526001600160a01b039091169063465e81ec90602401602060405180830381865afa1580156114be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e29190614123565b866114ee836001614055565b815181106114fe576114fe613ff7565b602090810291909101015261151281614023565b90506111ed565b50505050509193509193565b6000546001600160a01b0316331461157f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161060d565b600a8111156115d05760405162461bcd60e51b815260206004820152601760248201527f6164643a20746f6f206d616e7920726577617264657273000000000000000000604482015260640161060d565b6103e861ffff851611156116265760405162461bcd60e51b815260206004820152601960248201527f6164643a206465706f7369742066656520746f6f206869676800000000000000604482015260640161060d565b621275008311156116795760405162461bcd60e51b815260206004820152601d60248201527f6164643a20696e76616c6964206861727665737420696e74657276616c000000604482015260640161060d565b60005b818110156116f55761169983838381811061096757610967613ff7565b6116e55760405162461bcd60e51b815260206004820152601e60248201527f6164643a207265776172646572206d75737420626520636f6e74726163740000604482015260640161060d565b6116ee81614023565b905061167c565b506116fe612bdc565b6000600754421161171157600754611713565b425b905086600660008282546117279190614055565b925050819055506004604051806101000160405280886001600160a01b03168152602001898152602001838152602001600081526020018761ffff168152602001868152602001600081526020018585808060200260200160405190810160405280939291908181526020018383602002808284376000920182905250939094525050835460018082018655948252602091829020845160089092020180546001600160a01b0319166001600160a01b0390921691909117815583820151948101949094556040830151600285015560608301516003850155608083015160048501805461ffff191661ffff90921691909117905560a0830151600585015560c0830151600685015560e0830151805193949361184e935060078501929190910190613bdf565b505050828260405161186192919061406d565b6040519081900390206004546001600160a01b038816906118849060019061403e565b604080518b815261ffff8a1660208201529081018890527f5ed295c4f5af5aeb1ccd905e1cd55a86ab3bb9fc1fe2346ff64ac47dbef366619060600160405180910390a450505050505050565b600260015414156119245760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161060d565b6002600155600454869081106119725760405162461bcd60e51b8152602060048201526013602482015272141bdbdb08191bd95cc81b9bdd08195e1a5cdd606a1b604482015260640161060d565b60006004888154811061198757611987613ff7565b6000918252602090912060089091020180546040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018a90526064810189905260ff8816608482015260a4810187905260c481018690529192506001600160a01b031690819063d505accf9060e401600060405180830381600087803b158015611a2257600080fd5b505af1158015611a36573d6000803e3d6000fd5b50505050611a448989613369565b50506001805550505050505050565b60026001541415611aa65760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161060d565b6002600155611ab481612c02565b5060018055565b60026001541415611b0e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161060d565b6002600181905550600060048281548110611b2b57611b2b613ff7565b60009182526020808320858452600582526040808520338652909252922080546008929092029092016006810154909350811115611bd15760405162461bcd60e51b815260206004820152602960248201527f656d657267656e63792077697468647261773a20706f6f6c20746f74616c206e60448201527f6f7420656e6f7567680000000000000000000000000000000000000000000000606482015260840161060d565b6000808355600183018190556002830181905560038301819055600684018054839290611bff90849061403e565b90915550600090505b6007840154811015611cac57836007018181548110611c2957611c29613ff7565b600091825260208220015460405163075bbb7f60e41b81526004810188905233602482015260448101929092526001600160a01b0316906375bbb7f090606401600060405180830381600087803b158015611c8357600080fd5b505af1158015611c97573d6000803e3d6000fd5b5050505080611ca590614023565b9050611c08565b5060025483546001600160a01b0390811691161415611cdd578060096000828254611cd7919061403e565b90915550505b8254611cf3906001600160a01b03163383613088565b604051818152849033907fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae05959060200160405180910390a35050600180555050565b60026001541415611d875760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161060d565b6002600155611d94612bdc565b60018055565b600060048281548110611daf57611daf613ff7565b9060005260206000209060080201600601549050919050565b6000546001600160a01b03163314611e225760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161060d565b611e2c60006136e4565b565b6000546001600160a01b03163314611e885760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161060d565b6001600160a01b038116611ede5760405162461bcd60e51b815260206004820152601760248201527f696e76616c6964206e6577206665652061646472657373000000000000000000604482015260640161060d565b600b80546001600160a01b0319166001600160a01b03831690811790915560405133907fd44190acf9d04bdb5d3a1aafff7e6dee8b40b93dfb8c5d3f0eea4b9f4539c3f790600090a350565b6000546001600160a01b03163314611f845760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161060d565b6001600160a01b038116611fda5760405162461bcd60e51b815260206004820152601d60248201527f696e76616c6964206e6577206265616d73686172652061646472657373000000604482015260640161060d565b600a80546001600160a01b0319166001600160a01b03831690811790915560405133907f736e203d68f636addd45749829b5856e056583dc3cd03c2132290db98abcd5b890600090a350565b6000546001600160a01b031633146120805760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161060d565b60075442106120d15760405162461bcd60e51b815260206004820152601460248201527f6661726d20616c72656164792073746172746564000000000000000000000000604482015260640161060d565b60045460005b8181101561211f576000600482815481106120f4576120f4613ff7565b90600052602060002090600802019050428160020181905550508061211890614023565b90506120d7565b505042600755565b6002600154141561217a5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161060d565b6002600155601e8111156121d05760405162461bcd60e51b815260206004820152601f60248201527f68617276657374206d616e793a20746f6f206d616e7920706f6f6c2069647300604482015260640161060d565b60005b8181101561220e576121fe8383838181106121f0576121f0613ff7565b905060200201356000613369565b61220781614023565b90506121d3565b50506001805550565b6002600154141561226a5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161060d565b60026001556122798282613369565b505060018055565b6000546001600160a01b031633146122db5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161060d565b6122e3612bdc565b336001600160a01b03167f802633c8d26237616d81bdac01bc40fcdf36e098832601582ec19d7e431c5ef36004848154811061232157612321613ff7565b9060005260206000209060080201600101548360405161234b929190918252602082015260400190565b60405180910390a2806004838154811061236757612367613ff7565b906000526020600020906008020160010154600654612386919061403e565b6123909190614055565b60068190555080600483815481106123aa576123aa613ff7565b9060005260206000209060080201600101819055505050565b6004546060908290811061240f5760405162461bcd60e51b8152602060048201526013602482015272141bdbdb08191bd95cc81b9bdd08195e1a5cdd606a1b604482015260640161060d565b60006004848154811061242457612424613ff7565b90600052602060002090600802019050806007018054905067ffffffffffffffff811115612454576124546140f0565b60405190808252806020026020018201604052801561247d578160200160208202803683370190505b50925060005b60078201548110156124fc578160070181815481106124a4576124a4613ff7565b9060005260206000200160009054906101000a90046001600160a01b03168482815181106124d4576124d4613ff7565b6001600160a01b03909216602092830291909101909101526124f581614023565b9050612483565b505050919050565b6000546001600160a01b0316331461255e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161060d565b6001600160a01b0381166125da5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161060d565b6125e3816136e4565b50565b6060806060808560048054905081106126375760405162461bcd60e51b8152602060048201526013602482015272141bdbdb08191bd95cc81b9bdd08195e1a5cdd606a1b604482015260640161060d565b60006004888154811061264c5761264c613ff7565b600091825260208083208b84526005825260408085206001600160a01b038d168652909252922060036008909202909201908101546006820154600283015492945090914211801561269d57508015155b1561273c5760008460020154426126b4919061403e565b600c549091506103e8906000906126cb908361403e565b9050600082600654838a60010154600354886126e791906140af565b6126f191906140af565b6126fb91906140af565b61270591906140ce565b61270f91906140ce565b90508461272164e8d4a51000836140af565b61272b91906140ce565b6127359087614055565b9550505050505b60008360020154846001015464e8d4a5100085876000015461275e91906140af565b61276891906140ce565b612772919061403e565b61277c9190614055565b600786015490915061278f906001614055565b67ffffffffffffffff8111156127a7576127a76140f0565b6040519080825280602002602001820160405280156127d0578160200160208202803683370190505b506007860154909a506127e4906001614055565b67ffffffffffffffff8111156127fc576127fc6140f0565b60405190808252806020026020018201604052801561282f57816020015b606081526020019060019003908161281a5790505b506007860154909950612843906001614055565b67ffffffffffffffff81111561285b5761285b6140f0565b604051908082528060200260200182016040528015612884578160200160208202803683370190505b506007860154909750612898906001614055565b67ffffffffffffffff8111156128b0576128b06140f0565b6040519080825280602002602001820160405280156128d9578160200160208202803683370190505b506002548b519199506001600160a01b0316908b906000906128fd576128fd613ff7565b6001600160a01b03928316602091820292909201015260025461292091166131bc565b8960008151811061293357612933613ff7565b6020908102919091010152600254612953906001600160a01b0316613298565b60ff168860008151811061296957612969613ff7565b602002602001018181525050808760008151811061298957612989613ff7565b60200260200101818152505060005b6007860154811015612bcc578560070181815481106129b9576129b9613ff7565b600091825260209182902001546040805163f7c618c160e01b815290516001600160a01b039092169263f7c618c1926004808401938290030181865afa158015612a07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2b9190614106565b8b612a37836001614055565b81518110612a4757612a47613ff7565b60200260200101906001600160a01b031690816001600160a01b031681525050612a7f8660070182815481106112d4576112d4613ff7565b8a612a8b836001614055565b81518110612a9b57612a9b613ff7565b6020026020010181905250612abe86600701828154811061139357611393613ff7565b60ff1689612acd836001614055565b81518110612add57612add613ff7565b602002602001018181525050856007018181548110612afe57612afe613ff7565b6000918252602090912001546040517fffcd4263000000000000000000000000000000000000000000000000000000008152600481018f90526001600160a01b038e811660248301529091169063ffcd426390604401602060405180830381865afa158015612b71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b959190614123565b88612ba1836001614055565b81518110612bb157612bb1613ff7565b6020908102919091010152612bc581614023565b9050612998565b5050505050505092959194509250565b60005b6004548110156125e357612bf281612c02565b612bfb81614023565b9050612bdf565b60045481908110612c4b5760405162461bcd60e51b8152602060048201526013602482015272141bdbdb08191bd95cc81b9bdd08195e1a5cdd606a1b604482015260640161060d565b600060048381548110612c6057612c60613ff7565b9060005260206000209060080201905080600201544211612c8057505050565b6006810154801580612c9457506001820154155b15612ca55750426002909101555050565b6000826002015442612cb7919061403e565b90506000600654846001015460035484612cd191906140af565b612cdb91906140af565b612ce591906140ce565b600c549091506103e890600090612cfc908361403e565b600254600a54600c549293506001600160a01b03918216926340c10f1992909116908590612d2a90886140af565b612d3491906140ce565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015612d9257600080fd5b505af1158015612da6573d6000803e3d6000fd5b50506002546001600160a01b031691506340c10f1990503084612dc985886140af565b612dd391906140ce565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015612e3157600080fd5b505af1158015612e45573d6000803e3d6000fd5b505050600687015483915082612e6064e8d4a51000876140af565b612e6a91906140af565b612e7491906140ce565b612e7e91906140ce565b866003016000828254612e919190614055565b909155505042600287018190556003870154604080519283526020830188905282015288907f3be3541fc42237d611b30329040bfa4569541d156560acdbbae57640d20b8f469060600160405180910390a25050505050505b5050565b600060048281548110612f0357612f03613ff7565b600091825260208083208584526005825260408085203386529092529220600381015460089092029092019250158015612f3f57506007544210155b15612f59576005820154612f539042614055565b60038201555b6000816001015464e8d4a5100084600301548460000154612f7a91906140af565b612f8491906140ce565b612f8e919061403e565b9050612f9a8433610b55565b15613012576000811180612fb2575060008260020154115b1561300d576000826002015482612fc99190614055565b9050826002015460086000828254612fe1919061403e565b9091555050600060028401556005840154612ffc9042614055565b600384015561300b3382613734565b505b613082565b801561308257806008600082825461302a9190614055565b92505081905550808260020160008282546130459190614055565b9091555050604051818152849033907fee470483107f579a55c754fa00613c45a9a3b617a418b39cb0be97e5381ba7c19060200160405180910390a35b50505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b03167fa9059cbb0000000000000000000000000000000000000000000000000000000017905291516000928392908716916130fd919061413c565b6000604051808303816000865af19150503d806000811461313a576040519150601f19603f3d011682016040523d82523d6000602084013e61313f565b606091505b50915091508180156131695750805115806131695750808060200190518101906131699190614158565b6131b55760405162461bcd60e51b815260206004820152601c60248201527f426f72696e6745524332303a205472616e73666572206661696c656400000000604482015260640161060d565b5050505050565b60408051600481526024810182526020810180516001600160e01b03167f95d89b4100000000000000000000000000000000000000000000000000000000179052905160609160009182916001600160a01b0386169161321c919061413c565b600060405180830381855afa9150503d8060008114613257576040519150601f19603f3d011682016040523d82523d6000602084013e61325c565b606091505b50915091508161328757604051806040016040528060038152602001623f3f3f60e81b815250613290565b61329081613866565b949350505050565b60408051600481526024810182526020810180516001600160e01b03167f313ce567000000000000000000000000000000000000000000000000000000001790529051600091829182916001600160a01b038616916132f7919061413c565b600060405180830381855afa9150503d8060008114613332576040519150601f19603f3d011682016040523d82523d6000602084013e613337565b606091505b509150915081801561334a575080516020145b613355576012613290565b80806020019051810190613290919061417a565b600454829081106133b25760405162461bcd60e51b8152602060048201526013602482015272141bdbdb08191bd95cc81b9bdd08195e1a5cdd606a1b604482015260640161060d565b6000600484815481106133c7576133c7613ff7565b600091825260208083208784526005825260408085203386529092529220600890910290910191506133f885612c02565b61340185612eee565b83156135b35781546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561344f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134739190614123565b835490915061348d906001600160a01b0316333088613a3f565b82546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156134d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134f99190614123565b9050613505828261403e565b600485015490965061ffff1615613567576004840154600090612710906135309061ffff16896140af565b61353a91906140ce565b600b548654919250613559916001600160a01b03908116911683613088565b613563818861403e565b9650505b8583600001600082825461357b9190614055565b909155505060025484546001600160a01b03908116911614156135b05785600960008282546135aa9190614055565b90915550505b50505b6003820154815464e8d4a51000916135ca916140af565b6135d491906140ce565b600182015560005b6007830154811015613685578260070181815481106135fd576135fd613ff7565b600091825260209091200154825460405163075bbb7f60e41b81526004810189905233602482015260448101919091526001600160a01b03909116906375bbb7f090606401600060405180830381600087803b15801561365c57600080fd5b505af1158015613670573d6000803e3d6000fd5b505050508061367e90614023565b90506135dc565b5083156136a657838260060160008282546136a09190614055565b90915550505b604051848152859033907f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a159060200160405180910390a35050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6009546002546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561377f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137a39190614123565b1115612eea576009546002546040516370a0823160e01b8152306004820152600092916001600160a01b0316906370a0823190602401602060405180830381865afa1580156137f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061381a9190614123565b613824919061403e565b905080821061384957600254613844906001600160a01b03168483613088565b505050565b811561384457600254613844906001600160a01b03168484613088565b6060604082511061388b57818060200190518101906138859190614197565b92915050565b815160201415613a1b5760005b60208160ff161080156138e55750828160ff16815181106138bb576138bb613ff7565b01602001517fff000000000000000000000000000000000000000000000000000000000000001615155b156138fc57806138f481614239565b915050613898565b60008160ff1667ffffffffffffffff81111561391a5761391a6140f0565b6040519080825280601f01601f191660200182016040528015613944576020820181803683370190505b509050600091505b60208260ff161080156139995750838260ff168151811061396f5761396f613ff7565b01602001517fff000000000000000000000000000000000000000000000000000000000000001615155b15613a1457838260ff16815181106139b3576139b3613ff7565b602001015160f81c60f81b818360ff16815181106139d3576139d3613ff7565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535081613a0c81614239565b92505061394c565b9392505050565b50506040805180820190915260038152623f3f3f60e81b602082015290565b919050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03167f23b872dd000000000000000000000000000000000000000000000000000000001790529151600092839290881691613abc919061413c565b6000604051808303816000865af19150503d8060008114613af9576040519150601f19603f3d011682016040523d82523d6000602084013e613afe565b606091505b5091509150818015613b28575080511580613b28575080806020019051810190613b289190614158565b613b745760405162461bcd60e51b815260206004820181905260248201527f426f72696e6745524332303a205472616e7366657246726f6d206661696c6564604482015260640161060d565b505050505050565b828054828255906000526020600020908101928215613bcf579160200282015b82811115613bcf5781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190613b9c565b50613bdb929150613c34565b5090565b828054828255906000526020600020908101928215613bcf579160200282015b82811115613bcf57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613bff565b5b80821115613bdb5760008155600101613c35565b600060208284031215613c5b57600080fd5b5035919050565b803561ffff81168114613a3a57600080fd5b60008083601f840112613c8657600080fd5b50813567ffffffffffffffff811115613c9e57600080fd5b6020830191508360208260051b8501011115613cb957600080fd5b9250929050565b60008060008060008060a08789031215613cd957600080fd5b8635955060208701359450613cf060408801613c62565b935060608701359250608087013567ffffffffffffffff811115613d1357600080fd5b613d1f89828a01613c74565b979a9699509497509295939492505050565b6001600160a01b03811681146125e357600080fd5b60008060408385031215613d5957600080fd5b823591506020830135613d6b81613d31565b809150509250929050565b60008060408385031215613d8957600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b83811015613dd15781516001600160a01b031687529582019590820190600101613dac565b509495945050505050565b60005b83811015613df7578181015183820152602001613ddf565b838111156130825750506000910152565b600081518084526020808501945080840160005b83811015613dd157815187529582019590820190600101613e1c565b608081526000613e4b6080830187613d98565b6020838203818501528187518084528284019150828160051b850101838a0160005b83811015613eb357601f198088850301865282518051808652613e95818a88018b8501613ddc565b96880196601f01909116939093018601925090850190600101613e6d565b50508681036040880152613ec7818a613e08565b9450505050508281036060840152613edf8185613e08565b979650505050505050565b60008060008060008060a08789031215613f0357600080fd5b863595506020870135613f1581613d31565b9450613cf060408801613c62565b60ff811681146125e357600080fd5b60008060008060008060c08789031215613f4b57600080fd5b8635955060208701359450604087013593506060870135613f6b81613f23565b9598949750929560808101359460a0909101359350915050565b600060208284031215613f9757600080fd5b8135613a1481613d31565b60008060208385031215613fb557600080fd5b823567ffffffffffffffff811115613fcc57600080fd5b613fd885828601613c74565b90969095509350505050565b602081526000613a146020830184613d98565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156140375761403761400d565b5060010190565b6000828210156140505761405061400d565b500390565b600082198211156140685761406861400d565b500190565b60008184825b858110156140a457813561408681613d31565b6001600160a01b031683526020928301929190910190600101614073565b509095945050505050565b60008160001904831182151516156140c9576140c961400d565b500290565b6000826140eb57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561411857600080fd5b8151613a1481613d31565b60006020828403121561413557600080fd5b5051919050565b6000825161414e818460208701613ddc565b9190910192915050565b60006020828403121561416a57600080fd5b81518015158114613a1457600080fd5b60006020828403121561418c57600080fd5b8151613a1481613f23565b6000602082840312156141a957600080fd5b815167ffffffffffffffff808211156141c157600080fd5b818401915084601f8301126141d557600080fd5b8151818111156141e7576141e76140f0565b604051601f8201601f19908116603f0116810190838211818310171561420f5761420f6140f0565b8160405282815287602084870101111561422857600080fd5b613edf836020830160208801613ddc565b600060ff821660ff8114156142505761425061400d565b6001019291505056fea2646970667358221220bce3399dc884390e37c2e40f612b5d00bda3fdcd4a5d8a3453a700a6fcadda9464736f6c634300080b0033000000000000000000000000cd3b51d98478d53f4515a306be565c6eebef1d580000000000000000000000000000000000000000000000031708ae00454400000000000000000000000000004204cad97732282d261fbb7088e07557810a6408000000000000000000000000000000000000000000000000000000000000002f0000000000000000000000000a68f81fe8c23cf19fd0f90be3734f68ff2ef451
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102775760003560e01c8063654c9ece11610160578063afbcfea1116100d8578063e6fd48bc1161008c578063eff8976b11610071578063eff8976b14610571578063f2fde38b14610591578063ffcd4263146105a457600080fd5b8063e6fd48bc14610555578063eddf96521461055e57600080fd5b8063dc640ac9116100bd578063dc640ac914610525578063de73149d14610538578063e2bbb1581461054257600080fd5b8063afbcfea114610514578063bc4a9f281461051c57600080fd5b80638705fcd41161012f5780639136532311610114578063913653231461049857806393f1a40b146104a1578063a854f0771461050157600080fd5b80638705fcd4146104745780638da5cb5b1461048757600080fd5b8063654c9ece1461042a578063715018a61461043d578063812c64f114610445578063838f66a11461046157600080fd5b8063441a3e70116101f3578063515bc323116101c25780635312ea8e116101a75780635312ea8e1461040657806360e772e114610419578063630b5ba11461042257600080fd5b8063515bc323146103e057806351eb05a6146103f357600080fd5b8063441a3e701461038e578063465e81ec146103a1578063474fa630146103c4578063508593ab146103cd57600080fd5b80631526fe271161024a5780632081ccc41161022f5780632081ccc4146103455780632e6c998d14610358578063412753581461037b57600080fd5b80631526fe27146102e657806317caf6f11461033c57600080fd5b806301e864e51461027c578063081e3eda146102915780630867bacf146102a85780630ba84cd2146102d3575b600080fd5b61028f61028a366004613c49565b6105b7565b005b6004545b6040519081526020015b60405180910390f35b6002546102bb906001600160a01b031681565b6040516001600160a01b03909116815260200161029f565b61028f6102e1366004613c49565b6106a8565b6102f96102f4366004613c49565b61074d565b604080516001600160a01b039098168852602088019690965294860193909352606085019190915261ffff16608084015260a083015260c082015260e00161029f565b61029560065481565b61028f610353366004613cc0565b6107aa565b61036b610366366004613d46565b610b55565b604051901515815260200161029f565b600b546102bb906001600160a01b031681565b61028f61039c366004613d76565b610be2565b6103b46103af366004613c49565b610f11565b60405161029f9493929190613e38565b61029560085481565b61028f6103db366004613eea565b611525565b61028f6103ee366004613f32565b6118d1565b61028f610401366004613c49565b611a53565b61028f610414366004613c49565b611abb565b61029560035481565b61028f611d34565b610295610438366004613c49565b611d9a565b61028f611dc8565b61044e6103e881565b60405161ffff909116815260200161029f565b600a546102bb906001600160a01b031681565b61028f610482366004613f85565b611e2e565b6000546001600160a01b03166102bb565b61029560095481565b6104e16104af366004613d46565b600560209081526000928352604080842090915290825290208054600182015460028301546003909301549192909184565b60408051948552602085019390935291830152606082015260800161029f565b61028f61050f366004613f85565b611f2a565b61028f612026565b610295600c5481565b61028f610533366004613fa2565b612127565b6102956212750081565b61028f610550366004613d76565b612217565b61029560075481565b61028f61056c366004613d76565b612281565b61058461057f366004613c49565b6123c3565b60405161029f9190613fe4565b61028f61059f366004613f85565b612504565b6103b46105b2366004613d46565b6125e6565b6000546001600160a01b031633146106165760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b60648111156106675760405162461bcd60e51b815260206004820152601560248201527f696e76616c69642070657263656e742076616c75650000000000000000000000604482015260640161060d565b600c5460408051918252602082018390527f77d156628aead9f389392cb58cd732d7cc8221f9f559b29495fa2586a20cb393910160405180910390a1600c55565b6000546001600160a01b031633146107025760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161060d565b61070a612bdc565b600354604080519182526020820183905233917feedc6338c9c1ad8f3cd6c90dd09dbe98dbd57e610d3e59a17996d07acb0d9511910160405180910390a2600355565b6004818154811061075d57600080fd5b600091825260209091206008909102018054600182015460028301546003840154600485015460058601546006909601546001600160a01b03909516965092949193909261ffff16919087565b6000546001600160a01b031633146108045760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161060d565b6004548690811061084d5760405162461bcd60e51b8152602060048201526013602482015272141bdbdb08191bd95cc81b9bdd08195e1a5cdd606a1b604482015260640161060d565b600a82111561089e5760405162461bcd60e51b815260206004820152601760248201527f7365743a20746f6f206d616e7920726577617264657273000000000000000000604482015260640161060d565b6103e861ffff861611156108f45760405162461bcd60e51b815260206004820152601960248201527f7365743a206465706f7369742066656520746f6f206869676800000000000000604482015260640161060d565b621275008411156109475760405162461bcd60e51b815260206004820152601d60248201527f7365743a20696e76616c6964206861727665737420696e74657276616c000000604482015260640161060d565b60005b828110156109de5761098284848381811061096757610967613ff7565b905060200201602081019061097c9190613f85565b3b151590565b6109ce5760405162461bcd60e51b815260206004820152601e60248201527f7365743a207265776172646572206d75737420626520636f6e74726163740000604482015260640161060d565b6109d781614023565b905061094a565b506109e7612bdc565b85600488815481106109fb576109fb613ff7565b906000526020600020906008020160010154600654610a1a919061403e565b610a249190614055565b6006819055508560048881548110610a3e57610a3e613ff7565b9060005260206000209060080201600101819055508460048881548110610a6757610a67613ff7565b906000526020600020906008020160040160006101000a81548161ffff021916908361ffff1602179055508360048881548110610aa657610aa6613ff7565b906000526020600020906008020160050181905550828260048981548110610ad057610ad0613ff7565b90600052602060002090600802016007019190610aee929190613b7c565b508282604051610aff92919061406d565b6040805191829003822088835261ffff881660208401529082018690529088907f5ed6f0deef9ab49d02900b40d596df4cd637a2a7fbfa56bbcb377389d3ce8d289060600160405180910390a350505050505050565b60045460009083908110610ba15760405162461bcd60e51b8152602060048201526013602482015272141bdbdb08191bd95cc81b9bdd08195e1a5cdd606a1b604482015260640161060d565b60008481526005602090815260408083206001600160a01b038716845290915290206007544210801590610bd9575080600301544210155b95945050505050565b60026001541415610c355760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161060d565b600260015560045482908110610c835760405162461bcd60e51b8152602060048201526013602482015272141bdbdb08191bd95cc81b9bdd08195e1a5cdd606a1b604482015260640161060d565b600060048481548110610c9857610c98613ff7565b600091825260208083208784526005825260408085203386529092529220805460089092029092019250841115610d115760405162461bcd60e51b815260206004820181905260248201527f77697468647261773a207573657220616d6f756e74206e6f7420656e6f756768604482015260640161060d565b8382600601541015610d655760405162461bcd60e51b815260206004820152601f60248201527f77697468647261773a20706f6f6c20746f74616c206e6f7420656e6f75676800604482015260640161060d565b610d6e85612c02565b610d7785612eee565b8315610ddc5783816000016000828254610d91919061403e565b909155505060025482546001600160a01b0390811691161415610dc6578360096000828254610dc0919061403e565b90915550505b8154610ddc906001600160a01b03163386613088565b6003820154815464e8d4a5100091610df3916140af565b610dfd91906140ce565b600182015560005b6007830154811015610eae57826007018181548110610e2657610e26613ff7565b600091825260209091200154825460405163075bbb7f60e41b81526004810189905233602482015260448101919091526001600160a01b03909116906375bbb7f090606401600060405180830381600087803b158015610e8557600080fd5b505af1158015610e99573d6000803e3d6000fd5b5050505080610ea790614023565b9050610e05565b508315610ecf5783826006016000828254610ec9919061403e565b90915550505b604051848152859033907ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689060200160405180910390a3505060018055505050565b606080606080846004805490508110610f625760405162461bcd60e51b8152602060048201526013602482015272141bdbdb08191bd95cc81b9bdd08195e1a5cdd606a1b604482015260640161060d565b600060048781548110610f7757610f77613ff7565b9060005260206000209060080201905080600701805490506001610f9b9190614055565b67ffffffffffffffff811115610fb357610fb36140f0565b604051908082528060200260200182016040528015610fdc578160200160208202803683370190505b506007820154909650610ff0906001614055565b67ffffffffffffffff811115611008576110086140f0565b60405190808252806020026020018201604052801561103b57816020015b60608152602001906001900390816110265790505b50600782015490955061104f906001614055565b67ffffffffffffffff811115611067576110676140f0565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5060078201549094506110a4906001614055565b67ffffffffffffffff8111156110bc576110bc6140f0565b6040519080825280602002602001820160405280156110e5578160200160208202803683370190505b5060025487519194506001600160a01b031690879060009061110957611109613ff7565b6001600160a01b03928316602091820292909201015260025461112c91166131bc565b8560008151811061113f5761113f613ff7565b602090810291909101015260025461115f906001600160a01b0316613298565b60ff168460008151811061117557611175613ff7565b6020908102919091010152600c546103e890600090611194908361403e565b9050816006548260035486600101546111ad91906140af565b6111b791906140af565b6111c191906140ce565b6111cb91906140ce565b856000815181106111de576111de613ff7565b60200260200101818152505060005b60078401548110156115195783600701818154811061120e5761120e613ff7565b600091825260209182902001546040805163f7c618c160e01b815290516001600160a01b039092169263f7c618c1926004808401938290030181865afa15801561125c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112809190614106565b8961128c836001614055565b8151811061129c5761129c613ff7565b60200260200101906001600160a01b031690816001600160a01b0316815250506113548460070182815481106112d4576112d4613ff7565b600091825260209182902001546040805163f7c618c160e01b815290516001600160a01b039092169263f7c618c1926004808401938290030181865afa158015611322573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113469190614106565b6001600160a01b03166131bc565b88611360836001614055565b8151811061137057611370613ff7565b602002602001018190525061141384600701828154811061139357611393613ff7565b600091825260209182902001546040805163f7c618c160e01b815290516001600160a01b039092169263f7c618c1926004808401938290030181865afa1580156113e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114059190614106565b6001600160a01b0316613298565b60ff1687611422836001614055565b8151811061143257611432613ff7565b60200260200101818152505083600701818154811061145357611453613ff7565b6000918252602090912001546040517f465e81ec000000000000000000000000000000000000000000000000000000008152600481018c90526001600160a01b039091169063465e81ec90602401602060405180830381865afa1580156114be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e29190614123565b866114ee836001614055565b815181106114fe576114fe613ff7565b602090810291909101015261151281614023565b90506111ed565b50505050509193509193565b6000546001600160a01b0316331461157f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161060d565b600a8111156115d05760405162461bcd60e51b815260206004820152601760248201527f6164643a20746f6f206d616e7920726577617264657273000000000000000000604482015260640161060d565b6103e861ffff851611156116265760405162461bcd60e51b815260206004820152601960248201527f6164643a206465706f7369742066656520746f6f206869676800000000000000604482015260640161060d565b621275008311156116795760405162461bcd60e51b815260206004820152601d60248201527f6164643a20696e76616c6964206861727665737420696e74657276616c000000604482015260640161060d565b60005b818110156116f55761169983838381811061096757610967613ff7565b6116e55760405162461bcd60e51b815260206004820152601e60248201527f6164643a207265776172646572206d75737420626520636f6e74726163740000604482015260640161060d565b6116ee81614023565b905061167c565b506116fe612bdc565b6000600754421161171157600754611713565b425b905086600660008282546117279190614055565b925050819055506004604051806101000160405280886001600160a01b03168152602001898152602001838152602001600081526020018761ffff168152602001868152602001600081526020018585808060200260200160405190810160405280939291908181526020018383602002808284376000920182905250939094525050835460018082018655948252602091829020845160089092020180546001600160a01b0319166001600160a01b0390921691909117815583820151948101949094556040830151600285015560608301516003850155608083015160048501805461ffff191661ffff90921691909117905560a0830151600585015560c0830151600685015560e0830151805193949361184e935060078501929190910190613bdf565b505050828260405161186192919061406d565b6040519081900390206004546001600160a01b038816906118849060019061403e565b604080518b815261ffff8a1660208201529081018890527f5ed295c4f5af5aeb1ccd905e1cd55a86ab3bb9fc1fe2346ff64ac47dbef366619060600160405180910390a450505050505050565b600260015414156119245760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161060d565b6002600155600454869081106119725760405162461bcd60e51b8152602060048201526013602482015272141bdbdb08191bd95cc81b9bdd08195e1a5cdd606a1b604482015260640161060d565b60006004888154811061198757611987613ff7565b6000918252602090912060089091020180546040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018a90526064810189905260ff8816608482015260a4810187905260c481018690529192506001600160a01b031690819063d505accf9060e401600060405180830381600087803b158015611a2257600080fd5b505af1158015611a36573d6000803e3d6000fd5b50505050611a448989613369565b50506001805550505050505050565b60026001541415611aa65760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161060d565b6002600155611ab481612c02565b5060018055565b60026001541415611b0e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161060d565b6002600181905550600060048281548110611b2b57611b2b613ff7565b60009182526020808320858452600582526040808520338652909252922080546008929092029092016006810154909350811115611bd15760405162461bcd60e51b815260206004820152602960248201527f656d657267656e63792077697468647261773a20706f6f6c20746f74616c206e60448201527f6f7420656e6f7567680000000000000000000000000000000000000000000000606482015260840161060d565b6000808355600183018190556002830181905560038301819055600684018054839290611bff90849061403e565b90915550600090505b6007840154811015611cac57836007018181548110611c2957611c29613ff7565b600091825260208220015460405163075bbb7f60e41b81526004810188905233602482015260448101929092526001600160a01b0316906375bbb7f090606401600060405180830381600087803b158015611c8357600080fd5b505af1158015611c97573d6000803e3d6000fd5b5050505080611ca590614023565b9050611c08565b5060025483546001600160a01b0390811691161415611cdd578060096000828254611cd7919061403e565b90915550505b8254611cf3906001600160a01b03163383613088565b604051818152849033907fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae05959060200160405180910390a35050600180555050565b60026001541415611d875760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161060d565b6002600155611d94612bdc565b60018055565b600060048281548110611daf57611daf613ff7565b9060005260206000209060080201600601549050919050565b6000546001600160a01b03163314611e225760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161060d565b611e2c60006136e4565b565b6000546001600160a01b03163314611e885760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161060d565b6001600160a01b038116611ede5760405162461bcd60e51b815260206004820152601760248201527f696e76616c6964206e6577206665652061646472657373000000000000000000604482015260640161060d565b600b80546001600160a01b0319166001600160a01b03831690811790915560405133907fd44190acf9d04bdb5d3a1aafff7e6dee8b40b93dfb8c5d3f0eea4b9f4539c3f790600090a350565b6000546001600160a01b03163314611f845760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161060d565b6001600160a01b038116611fda5760405162461bcd60e51b815260206004820152601d60248201527f696e76616c6964206e6577206265616d73686172652061646472657373000000604482015260640161060d565b600a80546001600160a01b0319166001600160a01b03831690811790915560405133907f736e203d68f636addd45749829b5856e056583dc3cd03c2132290db98abcd5b890600090a350565b6000546001600160a01b031633146120805760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161060d565b60075442106120d15760405162461bcd60e51b815260206004820152601460248201527f6661726d20616c72656164792073746172746564000000000000000000000000604482015260640161060d565b60045460005b8181101561211f576000600482815481106120f4576120f4613ff7565b90600052602060002090600802019050428160020181905550508061211890614023565b90506120d7565b505042600755565b6002600154141561217a5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161060d565b6002600155601e8111156121d05760405162461bcd60e51b815260206004820152601f60248201527f68617276657374206d616e793a20746f6f206d616e7920706f6f6c2069647300604482015260640161060d565b60005b8181101561220e576121fe8383838181106121f0576121f0613ff7565b905060200201356000613369565b61220781614023565b90506121d3565b50506001805550565b6002600154141561226a5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161060d565b60026001556122798282613369565b505060018055565b6000546001600160a01b031633146122db5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161060d565b6122e3612bdc565b336001600160a01b03167f802633c8d26237616d81bdac01bc40fcdf36e098832601582ec19d7e431c5ef36004848154811061232157612321613ff7565b9060005260206000209060080201600101548360405161234b929190918252602082015260400190565b60405180910390a2806004838154811061236757612367613ff7565b906000526020600020906008020160010154600654612386919061403e565b6123909190614055565b60068190555080600483815481106123aa576123aa613ff7565b9060005260206000209060080201600101819055505050565b6004546060908290811061240f5760405162461bcd60e51b8152602060048201526013602482015272141bdbdb08191bd95cc81b9bdd08195e1a5cdd606a1b604482015260640161060d565b60006004848154811061242457612424613ff7565b90600052602060002090600802019050806007018054905067ffffffffffffffff811115612454576124546140f0565b60405190808252806020026020018201604052801561247d578160200160208202803683370190505b50925060005b60078201548110156124fc578160070181815481106124a4576124a4613ff7565b9060005260206000200160009054906101000a90046001600160a01b03168482815181106124d4576124d4613ff7565b6001600160a01b03909216602092830291909101909101526124f581614023565b9050612483565b505050919050565b6000546001600160a01b0316331461255e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161060d565b6001600160a01b0381166125da5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161060d565b6125e3816136e4565b50565b6060806060808560048054905081106126375760405162461bcd60e51b8152602060048201526013602482015272141bdbdb08191bd95cc81b9bdd08195e1a5cdd606a1b604482015260640161060d565b60006004888154811061264c5761264c613ff7565b600091825260208083208b84526005825260408085206001600160a01b038d168652909252922060036008909202909201908101546006820154600283015492945090914211801561269d57508015155b1561273c5760008460020154426126b4919061403e565b600c549091506103e8906000906126cb908361403e565b9050600082600654838a60010154600354886126e791906140af565b6126f191906140af565b6126fb91906140af565b61270591906140ce565b61270f91906140ce565b90508461272164e8d4a51000836140af565b61272b91906140ce565b6127359087614055565b9550505050505b60008360020154846001015464e8d4a5100085876000015461275e91906140af565b61276891906140ce565b612772919061403e565b61277c9190614055565b600786015490915061278f906001614055565b67ffffffffffffffff8111156127a7576127a76140f0565b6040519080825280602002602001820160405280156127d0578160200160208202803683370190505b506007860154909a506127e4906001614055565b67ffffffffffffffff8111156127fc576127fc6140f0565b60405190808252806020026020018201604052801561282f57816020015b606081526020019060019003908161281a5790505b506007860154909950612843906001614055565b67ffffffffffffffff81111561285b5761285b6140f0565b604051908082528060200260200182016040528015612884578160200160208202803683370190505b506007860154909750612898906001614055565b67ffffffffffffffff8111156128b0576128b06140f0565b6040519080825280602002602001820160405280156128d9578160200160208202803683370190505b506002548b519199506001600160a01b0316908b906000906128fd576128fd613ff7565b6001600160a01b03928316602091820292909201015260025461292091166131bc565b8960008151811061293357612933613ff7565b6020908102919091010152600254612953906001600160a01b0316613298565b60ff168860008151811061296957612969613ff7565b602002602001018181525050808760008151811061298957612989613ff7565b60200260200101818152505060005b6007860154811015612bcc578560070181815481106129b9576129b9613ff7565b600091825260209182902001546040805163f7c618c160e01b815290516001600160a01b039092169263f7c618c1926004808401938290030181865afa158015612a07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2b9190614106565b8b612a37836001614055565b81518110612a4757612a47613ff7565b60200260200101906001600160a01b031690816001600160a01b031681525050612a7f8660070182815481106112d4576112d4613ff7565b8a612a8b836001614055565b81518110612a9b57612a9b613ff7565b6020026020010181905250612abe86600701828154811061139357611393613ff7565b60ff1689612acd836001614055565b81518110612add57612add613ff7565b602002602001018181525050856007018181548110612afe57612afe613ff7565b6000918252602090912001546040517fffcd4263000000000000000000000000000000000000000000000000000000008152600481018f90526001600160a01b038e811660248301529091169063ffcd426390604401602060405180830381865afa158015612b71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b959190614123565b88612ba1836001614055565b81518110612bb157612bb1613ff7565b6020908102919091010152612bc581614023565b9050612998565b5050505050505092959194509250565b60005b6004548110156125e357612bf281612c02565b612bfb81614023565b9050612bdf565b60045481908110612c4b5760405162461bcd60e51b8152602060048201526013602482015272141bdbdb08191bd95cc81b9bdd08195e1a5cdd606a1b604482015260640161060d565b600060048381548110612c6057612c60613ff7565b9060005260206000209060080201905080600201544211612c8057505050565b6006810154801580612c9457506001820154155b15612ca55750426002909101555050565b6000826002015442612cb7919061403e565b90506000600654846001015460035484612cd191906140af565b612cdb91906140af565b612ce591906140ce565b600c549091506103e890600090612cfc908361403e565b600254600a54600c549293506001600160a01b03918216926340c10f1992909116908590612d2a90886140af565b612d3491906140ce565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015612d9257600080fd5b505af1158015612da6573d6000803e3d6000fd5b50506002546001600160a01b031691506340c10f1990503084612dc985886140af565b612dd391906140ce565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015612e3157600080fd5b505af1158015612e45573d6000803e3d6000fd5b505050600687015483915082612e6064e8d4a51000876140af565b612e6a91906140af565b612e7491906140ce565b612e7e91906140ce565b866003016000828254612e919190614055565b909155505042600287018190556003870154604080519283526020830188905282015288907f3be3541fc42237d611b30329040bfa4569541d156560acdbbae57640d20b8f469060600160405180910390a25050505050505b5050565b600060048281548110612f0357612f03613ff7565b600091825260208083208584526005825260408085203386529092529220600381015460089092029092019250158015612f3f57506007544210155b15612f59576005820154612f539042614055565b60038201555b6000816001015464e8d4a5100084600301548460000154612f7a91906140af565b612f8491906140ce565b612f8e919061403e565b9050612f9a8433610b55565b15613012576000811180612fb2575060008260020154115b1561300d576000826002015482612fc99190614055565b9050826002015460086000828254612fe1919061403e565b9091555050600060028401556005840154612ffc9042614055565b600384015561300b3382613734565b505b613082565b801561308257806008600082825461302a9190614055565b92505081905550808260020160008282546130459190614055565b9091555050604051818152849033907fee470483107f579a55c754fa00613c45a9a3b617a418b39cb0be97e5381ba7c19060200160405180910390a35b50505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b03167fa9059cbb0000000000000000000000000000000000000000000000000000000017905291516000928392908716916130fd919061413c565b6000604051808303816000865af19150503d806000811461313a576040519150601f19603f3d011682016040523d82523d6000602084013e61313f565b606091505b50915091508180156131695750805115806131695750808060200190518101906131699190614158565b6131b55760405162461bcd60e51b815260206004820152601c60248201527f426f72696e6745524332303a205472616e73666572206661696c656400000000604482015260640161060d565b5050505050565b60408051600481526024810182526020810180516001600160e01b03167f95d89b4100000000000000000000000000000000000000000000000000000000179052905160609160009182916001600160a01b0386169161321c919061413c565b600060405180830381855afa9150503d8060008114613257576040519150601f19603f3d011682016040523d82523d6000602084013e61325c565b606091505b50915091508161328757604051806040016040528060038152602001623f3f3f60e81b815250613290565b61329081613866565b949350505050565b60408051600481526024810182526020810180516001600160e01b03167f313ce567000000000000000000000000000000000000000000000000000000001790529051600091829182916001600160a01b038616916132f7919061413c565b600060405180830381855afa9150503d8060008114613332576040519150601f19603f3d011682016040523d82523d6000602084013e613337565b606091505b509150915081801561334a575080516020145b613355576012613290565b80806020019051810190613290919061417a565b600454829081106133b25760405162461bcd60e51b8152602060048201526013602482015272141bdbdb08191bd95cc81b9bdd08195e1a5cdd606a1b604482015260640161060d565b6000600484815481106133c7576133c7613ff7565b600091825260208083208784526005825260408085203386529092529220600890910290910191506133f885612c02565b61340185612eee565b83156135b35781546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561344f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134739190614123565b835490915061348d906001600160a01b0316333088613a3f565b82546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156134d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134f99190614123565b9050613505828261403e565b600485015490965061ffff1615613567576004840154600090612710906135309061ffff16896140af565b61353a91906140ce565b600b548654919250613559916001600160a01b03908116911683613088565b613563818861403e565b9650505b8583600001600082825461357b9190614055565b909155505060025484546001600160a01b03908116911614156135b05785600960008282546135aa9190614055565b90915550505b50505b6003820154815464e8d4a51000916135ca916140af565b6135d491906140ce565b600182015560005b6007830154811015613685578260070181815481106135fd576135fd613ff7565b600091825260209091200154825460405163075bbb7f60e41b81526004810189905233602482015260448101919091526001600160a01b03909116906375bbb7f090606401600060405180830381600087803b15801561365c57600080fd5b505af1158015613670573d6000803e3d6000fd5b505050508061367e90614023565b90506135dc565b5083156136a657838260060160008282546136a09190614055565b90915550505b604051848152859033907f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a159060200160405180910390a35050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6009546002546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561377f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137a39190614123565b1115612eea576009546002546040516370a0823160e01b8152306004820152600092916001600160a01b0316906370a0823190602401602060405180830381865afa1580156137f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061381a9190614123565b613824919061403e565b905080821061384957600254613844906001600160a01b03168483613088565b505050565b811561384457600254613844906001600160a01b03168484613088565b6060604082511061388b57818060200190518101906138859190614197565b92915050565b815160201415613a1b5760005b60208160ff161080156138e55750828160ff16815181106138bb576138bb613ff7565b01602001517fff000000000000000000000000000000000000000000000000000000000000001615155b156138fc57806138f481614239565b915050613898565b60008160ff1667ffffffffffffffff81111561391a5761391a6140f0565b6040519080825280601f01601f191660200182016040528015613944576020820181803683370190505b509050600091505b60208260ff161080156139995750838260ff168151811061396f5761396f613ff7565b01602001517fff000000000000000000000000000000000000000000000000000000000000001615155b15613a1457838260ff16815181106139b3576139b3613ff7565b602001015160f81c60f81b818360ff16815181106139d3576139d3613ff7565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535081613a0c81614239565b92505061394c565b9392505050565b50506040805180820190915260038152623f3f3f60e81b602082015290565b919050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03167f23b872dd000000000000000000000000000000000000000000000000000000001790529151600092839290881691613abc919061413c565b6000604051808303816000865af19150503d8060008114613af9576040519150601f19603f3d011682016040523d82523d6000602084013e613afe565b606091505b5091509150818015613b28575080511580613b28575080806020019051810190613b289190614158565b613b745760405162461bcd60e51b815260206004820181905260248201527f426f72696e6745524332303a205472616e7366657246726f6d206661696c6564604482015260640161060d565b505050505050565b828054828255906000526020600020908101928215613bcf579160200282015b82811115613bcf5781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190613b9c565b50613bdb929150613c34565b5090565b828054828255906000526020600020908101928215613bcf579160200282015b82811115613bcf57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613bff565b5b80821115613bdb5760008155600101613c35565b600060208284031215613c5b57600080fd5b5035919050565b803561ffff81168114613a3a57600080fd5b60008083601f840112613c8657600080fd5b50813567ffffffffffffffff811115613c9e57600080fd5b6020830191508360208260051b8501011115613cb957600080fd5b9250929050565b60008060008060008060a08789031215613cd957600080fd5b8635955060208701359450613cf060408801613c62565b935060608701359250608087013567ffffffffffffffff811115613d1357600080fd5b613d1f89828a01613c74565b979a9699509497509295939492505050565b6001600160a01b03811681146125e357600080fd5b60008060408385031215613d5957600080fd5b823591506020830135613d6b81613d31565b809150509250929050565b60008060408385031215613d8957600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b83811015613dd15781516001600160a01b031687529582019590820190600101613dac565b509495945050505050565b60005b83811015613df7578181015183820152602001613ddf565b838111156130825750506000910152565b600081518084526020808501945080840160005b83811015613dd157815187529582019590820190600101613e1c565b608081526000613e4b6080830187613d98565b6020838203818501528187518084528284019150828160051b850101838a0160005b83811015613eb357601f198088850301865282518051808652613e95818a88018b8501613ddc565b96880196601f01909116939093018601925090850190600101613e6d565b50508681036040880152613ec7818a613e08565b9450505050508281036060840152613edf8185613e08565b979650505050505050565b60008060008060008060a08789031215613f0357600080fd5b863595506020870135613f1581613d31565b9450613cf060408801613c62565b60ff811681146125e357600080fd5b60008060008060008060c08789031215613f4b57600080fd5b8635955060208701359450604087013593506060870135613f6b81613f23565b9598949750929560808101359460a0909101359350915050565b600060208284031215613f9757600080fd5b8135613a1481613d31565b60008060208385031215613fb557600080fd5b823567ffffffffffffffff811115613fcc57600080fd5b613fd885828601613c74565b90969095509350505050565b602081526000613a146020830184613d98565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156140375761403761400d565b5060010190565b6000828210156140505761405061400d565b500390565b600082198211156140685761406861400d565b500190565b60008184825b858110156140a457813561408681613d31565b6001600160a01b031683526020928301929190910190600101614073565b509095945050505050565b60008160001904831182151516156140c9576140c961400d565b500290565b6000826140eb57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561411857600080fd5b8151613a1481613d31565b60006020828403121561413557600080fd5b5051919050565b6000825161414e818460208701613ddc565b9190910192915050565b60006020828403121561416a57600080fd5b81518015158114613a1457600080fd5b60006020828403121561418c57600080fd5b8151613a1481613f23565b6000602082840312156141a957600080fd5b815167ffffffffffffffff808211156141c157600080fd5b818401915084601f8301126141d557600080fd5b8151818111156141e7576141e76140f0565b604051601f8201601f19908116603f0116810190838211818310171561420f5761420f6140f0565b8160405282815287602084870101111561422857600080fd5b613edf836020830160208801613ddc565b600060ff821660ff8114156142505761425061400d565b6001019291505056fea2646970667358221220bce3399dc884390e37c2e40f612b5d00bda3fdcd4a5d8a3453a700a6fcadda9464736f6c634300080b0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000cd3b51d98478d53f4515a306be565c6eebef1d580000000000000000000000000000000000000000000000031708ae00454400000000000000000000000000004204cad97732282d261fbb7088e07557810a6408000000000000000000000000000000000000000000000000000000000000002f0000000000000000000000000a68f81fe8c23cf19fd0f90be3734f68ff2ef451
-----Decoded View---------------
Arg [0] : _beam (address): 0xcd3B51D98478D53F4515A306bE565c6EebeF1D58
Arg [1] : _beamPerSec (uint256): 57000000000000000000
Arg [2] : _beamShareAddress (address): 0x4204cAd97732282d261FbB7088e07557810A6408
Arg [3] : _beamSharePercent (uint256): 47
Arg [4] : _feeAddress (address): 0x0a68f81Fe8c23cF19FD0f90be3734F68FF2EF451
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000cd3b51d98478d53f4515a306be565c6eebef1d58
Arg [1] : 0000000000000000000000000000000000000000000000031708ae0045440000
Arg [2] : 0000000000000000000000004204cad97732282d261fbb7088e07557810a6408
Arg [3] : 000000000000000000000000000000000000000000000000000000000000002f
Arg [4] : 0000000000000000000000000a68f81fe8c23cf19fd0f90be3734f68ff2ef451
Deployed Bytecode Sourcemap
20504:24503:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44434:304;;;;;;:::i;:::-;;:::i;:::-;;25785:95;25857:8;:15;25785:95;;;345:25:1;;;333:2;318:18;25785:95:0;;;;;;;;21605:24;;;;;-1:-1:-1;;;;;21605:24:0;;;;;;-1:-1:-1;;;;;565:55:1;;;547:74;;535:2;520:18;21605:24:0;381:246:1;42938:214:0;;;;;;:::i;:::-;;:::i;21943:26::-;;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;983:55:1;;;965:74;;1070:2;1055:18;;1048:34;;;;1098:18;;;1091:34;;;;1156:2;1141:18;;1134:34;;;;1217:6;1205:19;1199:3;1184:19;;1177:48;1256:3;1241:19;;1234:35;1300:3;1285:19;;1278:35;952:3;937:19;21943:26:0;632:687:1;22188:30:0;;;;;;27890:1410;;;;;;:::i;:::-;;:::i;34137:326::-;;;;;;:::i;:::-;;:::i;:::-;;;3284:14:1;;3277:22;3259:41;;3247:2;3232:18;34137:326:0;3119:187:1;22590:25:0;;;;;-1:-1:-1;;;;;22590:25:0;;;38516:1409;;;;;;:::i;:::-;;:::i;31827:1695::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;22344:35::-;;;;;;26093:1685;;;;;;:::i;:::-;;:::i;36245:441::-;;;;;;:::i;:::-;;:::i;34910:92::-;;;;;;:::i;:::-;;:::i;39996:1013::-;;;;;;:::i;:::-;;:::i;21677:25::-;;;;;;34546:86;;;:::i;43621:113::-;;;;;;:::i;:::-;;:::i;2713:103::-;;;:::i;21854:54::-;;21904:4;21854:54;;;;;8293:6:1;8281:19;;;8263:38;;8251:2;8236:18;21854:54:0;8119:188:1;22512:31:0;;;;;-1:-1:-1;;;;;22512:31:0;;;44774:230;;;;;;:::i;:::-;;:::i;2062:87::-;2108:7;2135:6;-1:-1:-1;;;;;2135:6:0;2062:87;;22445:31;;;;;;22027:64;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8795:25:1;;;8851:2;8836:18;;8829:34;;;;8879:18;;;8872:34;8937:2;8922:18;;8915:34;8782:3;8767:19;22027:64:0;8564:391:1;44111:315:0;;;;;;:::i;:::-;;:::i;25388:389::-;;;:::i;22679:31::-;;;;;;43805:265;;;;;;:::i;:::-;;:::i;21749:58::-;;21800:7;21749:58;;36738:110;;;;;;:::i;:::-;;:::i;22274:29::-;;;;;;43160:453;;;;;;:::i;:::-;;:::i;33580:494::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2971:201::-;;;;;;:::i;:::-;;:::i;29366:2394::-;;;;;;:::i;:::-;;:::i;44434:304::-;2108:7;2135:6;-1:-1:-1;;;;;2135:6:0;860:10;2282:23;2274:68;;;;-1:-1:-1;;;2274:68:0;;9888:2:1;2274:68:0;;;9870:21:1;;;9907:18;;;9900:30;9966:34;9946:18;;;9939:62;10018:18;;2274:68:0;;;;;;;;;44576:3:::1;44552:20;:27;;44544:61;;;::::0;-1:-1:-1;;;44544:61:0;;10249:2:1;44544:61:0::1;::::0;::::1;10231:21:1::0;10288:2;10268:18;;;10261:30;10327:23;10307:18;;;10300:51;10368:18;;44544:61:0::1;10047:345:1::0;44544:61:0::1;44641:16;::::0;44621:59:::1;::::0;;10571:25:1;;;10627:2;10612:18;;10605:34;;;44621:59:0::1;::::0;10544:18:1;44621:59:0::1;;;;;;;44691:16;:39:::0;44434:304::o;42938:214::-;2108:7;2135:6;-1:-1:-1;;;;;2135:6:0;860:10;2282:23;2274:68;;;;-1:-1:-1;;;2274:68:0;;9888:2:1;2274:68:0;;;9870:21:1;;;9907:18;;;9900:30;9966:34;9946:18;;;9939:62;10018:18;;2274:68:0;9686:356:1;2274:68:0;43015:18:::1;:16;:18::i;:::-;43083:10;::::0;43051:56:::1;::::0;;10571:25:1;;;10627:2;10612:18;;10605:34;;;43071:10:0::1;::::0;43051:56:::1;::::0;10544:18:1;43051:56:0::1;;;;;;;43120:10;:24:::0;42938:214::o;21943:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21943:26:0;;;;-1:-1:-1;21943:26:0;;;;;;;;;;;:::o;27890:1410::-;2108:7;2135:6;-1:-1:-1;;;;;2135:6:0;860:10;2282:23;2274:68;;;;-1:-1:-1;;;2274:68:0;;9888:2:1;2274:68:0;;;9870:21:1;;;9907:18;;;9900:30;9966:34;9946:18;;;9939:62;10018:18;;2274:68:0;9686:356:1;2274:68:0;22875:8:::1;:15:::0;28113:4;;22868:22;::::1;22860:54;;;::::0;-1:-1:-1;;;22860:54:0;;10852:2:1;22860:54:0::1;::::0;::::1;10834:21:1::0;10891:2;10871:18;;;10864:30;-1:-1:-1;;;10910:18:1;;;10903:49;10969:18;;22860:54:0::1;10650:343:1::0;22860:54:0::1;28159:2:::2;28138:23:::0;::::2;;28130:59;;;::::0;-1:-1:-1;;;28130:59:0;;11200:2:1;28130:59:0::2;::::0;::::2;11182:21:1::0;11239:2;11219:18;;;11212:30;11278:25;11258:18;;;11251:53;11321:18;;28130:59:0::2;10998:347:1::0;28130:59:0::2;21904:4;28224:41;::::0;::::2;;;28202:116;;;::::0;-1:-1:-1;;;28202:116:0;;11552:2:1;28202:116:0::2;::::0;::::2;11534:21:1::0;11591:2;11571:18;;;11564:30;11630:27;11610:18;;;11603:55;11675:18;;28202:116:0::2;11350:349:1::0;28202:116:0::2;21800:7;28351:16;:44;;28329:123;;;::::0;-1:-1:-1;;;28329:123:0;;11906:2:1;28329:123:0::2;::::0;::::2;11888:21:1::0;11945:2;11925:18;;;11918:30;11984:31;11964:18;;;11957:59;12033:18;;28329:123:0::2;11704:353:1::0;28329:123:0::2;28484:18;28465:295;28521:30:::0;;::::2;28465:295;;;28631:51;28658:10;;28669;28658:22;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;7448:20:::0;7496:8;;;7125:387;28631:51:::2;28605:143;;;::::0;-1:-1:-1;;;28605:143:0;;12729:2:1;28605:143:0::2;::::0;::::2;12711:21:1::0;12768:2;12748:18;;;12741:30;12807:32;12787:18;;;12780:60;12857:18;;28605:143:0::2;12527:354:1::0;28605:143:0::2;28566:12;::::0;::::2;:::i;:::-;;;28465:295;;;;28772:18;:16;:18::i;:::-;28906:11;28865:8;28874:4;28865:14;;;;;;;;:::i;:::-;;;;;;;;;;;:25;;;28834:15;;:56;;;;:::i;:::-;:83;;;;:::i;:::-;28803:15;:114;;;;28958:11;28930:8;28939:4;28930:14;;;;;;;;:::i;:::-;;;;;;;;;;;:25;;:39;;;;29010:13;28980:8;28989:4;28980:14;;;;;;;;:::i;:::-;;;;;;;;;;;:27;;;:43;;;;;;;;;;;;;;;;;;29067:16;29034:8;29043:4;29034:14;;;;;;;;:::i;:::-;;;;;;;;;;;:30;;:49;;;;29121:10;;29094:8;29103:4;29094:14;;;;;;;;:::i;:::-;;;;;;;;;;;:24;;:37;;;;;;;:::i;:::-;;29271:10;;29149:143;;;;;;;:::i;:::-;;::::0;;;;;::::2;::::0;;14350:25:1;;;14423:6;14411:19;;14406:2;14391:18;;14384:47;14447:18;;;14440:34;;;29149:143:0;29167:4;;29149:143:::2;::::0;14338:2:1;14323:18;29149:143:0::2;;;;;;;2353:1:::1;27890:1410:::0;;;;;;:::o;34137:326::-;22875:8;:15;34267:4;;34243;;22868:22;;22860:54;;;;-1:-1:-1;;;22860:54:0;;10852:2:1;22860:54:0;;;10834:21:1;10891:2;10871:18;;;10864:30;-1:-1:-1;;;10910:18:1;;;10903:49;10969:18;;22860:54:0;10650:343:1;22860:54:0;34289:21:::1;34313:14:::0;;;:8:::1;:14;::::0;;;;;;;-1:-1:-1;;;;;34313:21:0;::::1;::::0;;;;;;;34384:14:::1;::::0;34365:15:::1;:33;::::0;::::1;::::0;:90:::1;;;34434:4;:21;;;34415:15;:40;;34365:90;34345:110:::0;34137:326;-1:-1:-1;;;;;34137:326:0:o;38516:1409::-;5350:1;5948:7;;:19;;5940:63;;;;-1:-1:-1;;;5940:63:0;;14687:2:1;5940:63:0;;;14669:21:1;14726:2;14706:18;;;14699:30;14765:33;14745:18;;;14738:61;14816:18;;5940:63:0;14485:355:1;5940:63:0;5350:1;6081:7;:18;22875:8:::1;:15:::0;38630:4;;22868:22;::::1;22860:54;;;::::0;-1:-1:-1;;;22860:54:0;;10852:2:1;22860:54:0::1;::::0;::::1;10834:21:1::0;10891:2;10871:18;;;10864:30;-1:-1:-1;;;10910:18:1;;;10903:49;10969:18;;22860:54:0::1;10650:343:1::0;22860:54:0::1;38652:21:::2;38676:8;38685:4;38676:14;;;;;;;;:::i;:::-;;::::0;;;::::2;::::0;;;38725;;;:8:::2;:14:::0;;;;;;38740:10:::2;38725:26:::0;;;;;;;38845:11;;38676:14:::2;::::0;;::::2;::::0;;::::2;::::0;-1:-1:-1;38845:22:0;-1:-1:-1;38845:22:0::2;38837:67;;;::::0;-1:-1:-1;;;38837:67:0;;15047:2:1;38837:67:0::2;::::0;::::2;15029:21:1::0;;;15066:18;;;15059:30;15125:34;15105:18;;;15098:62;15177:18;;38837:67:0::2;14845:356:1::0;38837:67:0::2;38993:7;38977:4;:12;;;:23;;38969:67;;;::::0;-1:-1:-1;;;38969:67:0;;15408:2:1;38969:67:0::2;::::0;::::2;15390:21:1::0;15447:2;15427:18;;;15420:30;15486:33;15466:18;;;15459:61;15537:18;;38969:67:0::2;15206:355:1::0;38969:67:0::2;39049:17;39061:4;39049:11;:17::i;:::-;39079:28;39102:4;39079:22;:28::i;:::-;39124:11:::0;;39120:247:::2;;39167:7;39152:4;:11;;;:22;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;39226:4:0::2;::::0;39201:12;;-1:-1:-1;;;;;39201:12:0;;::::2;39226:4:::0;::::2;39193:38;39189:106;;;39272:7;39252:16;;:27;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;39189:106:0::2;39309:12:::0;;:46:::2;::::0;-1:-1:-1;;;;;39309:12:0::2;39335:10;39347:7:::0;39309:25:::2;:46::i;:::-;39425:20;::::0;::::2;::::0;39411:11;;22795:4:::2;::::0;39411:34:::2;::::0;::::2;:::i;:::-;39410:71;;;;:::i;:::-;39379:15;::::0;::::2;:102:::0;39513:18:::2;39494:292;39563:14;::::0;::::2;:21:::0;39550:34;::::2;39494:292;;;39638:4;:14;;39653:10;39638:26;;;;;;;;:::i;:::-;;::::0;;;::::2;::::0;;;::::2;::::0;39748:11;;39638:136:::2;::::0;-1:-1:-1;;;39638:136:0;;::::2;::::0;::::2;16220:25:1::0;;;39719:10:0::2;16261:18:1::0;;;16254:83;16353:18;;;16346:34;;;;-1:-1:-1;;;;;39638:26:0;;::::2;::::0;:39:::2;::::0;16193:18:1;;39638:136:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;39599:12;;;;:::i;:::-;;;39494:292;;;-1:-1:-1::0;39802:11:0;;39798:67:::2;;39846:7;39830:4;:12;;;:23;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;39798:67:0::2;39882:35;::::0;345:25:1;;;39903:4:0;;39891:10:::2;::::0;39882:35:::2;::::0;333:2:1;318:18;39882:35:0::2;;;;;;;-1:-1:-1::0;;5306:1:0;6260:22;;-1:-1:-1;;;38516:1409:0:o;31827:1695::-;31965:26;32006:23;32044:25;32084:30;31927:4;22875:8;:15;;;;22868:4;:22;22860:54;;;;-1:-1:-1;;;22860:54:0;;10852:2:1;22860:54:0;;;10834:21:1;10891:2;10871:18;;;10864:30;-1:-1:-1;;;10910:18:1;;;10903:49;10969:18;;22860:54:0;10650:343:1;22860:54:0;32142:21:::1;32166:8;32175:4;32166:14;;;;;;;;:::i;:::-;;;;;;;;;;;32142:38;;32219:4;:14;;:21;;;;32243:1;32219:25;;;;:::i;:::-;32205:40;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;32205:40:0::1;-1:-1:-1::0;32279:14:0::1;::::0;::::1;:21:::0;32193:52;;-1:-1:-1;32279:25:0::1;::::0;32303:1:::1;32279:25;:::i;:::-;32266:39;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;32341:14:0::1;::::0;::::1;:21:::0;32256:49;;-1:-1:-1;32341:25:0::1;::::0;32365:1:::1;32341:25;:::i;:::-;32327:40;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;32327:40:0::1;-1:-1:-1::0;32408:14:0::1;::::0;::::1;:21:::0;32316:51;;-1:-1:-1;32408:25:0::1;::::0;32432:1:::1;32408:25;:::i;:::-;32394:40;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;32394:40:0::1;-1:-1:-1::0;32470:4:0::1;::::0;32447:12;;32378:56;;-1:-1:-1;;;;;;32470:4:0::1;::::0;32447:9;;32470:4:::1;::::0;32447:12:::1;;;;:::i;:::-;-1:-1:-1::0;;;;;32447:28:0;;::::1;:12;::::0;;::::1;::::0;;;;;:28;32512:4:::1;::::0;32499:31:::1;::::0;32512:4:::1;32499:29;:31::i;:::-;32486:7;32494:1;32486:10;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;:44;32568:4:::1;::::0;32555:33:::1;::::0;-1:-1:-1;;;;;32568:4:0::1;32555:31;:33::i;:::-;32541:47;;:8;32550:1;32541:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;:47;32660:16:::1;::::0;32617:4:::1;::::0;32601:13:::1;::::0;32652:24:::1;::::0;32617:4;32652:24:::1;:::i;:::-;32632:44;;32810:5;32779:15;;32753:9;32740:10;;32722:4;:15;;;:28;;;;:::i;:::-;:40;;;;:::i;:::-;32721:73;;;;:::i;:::-;:94;;;;:::i;:::-;32689:13;32703:1;32689:16;;;;;;;;:::i;:::-;;;;;;:126;;;::::0;::::1;32847:18;32828:687;32897:14;::::0;::::1;:21:::0;32884:34;::::1;32828:687;;;33026:4;:14;;33041:10;33026:26;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;::::1;::::0;:40:::1;::::0;;-1:-1:-1;;;33026:40:0;;;;-1:-1:-1;;;;;33026:26:0;;::::1;::::0;:38:::1;::::0;:40:::1;::::0;;::::1;::::0;;;;;;:26;:40:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32972:9:::0;32982:14:::1;:10:::0;32995:1:::1;32982:14;:::i;:::-;32972:25;;;;;;;;:::i;:::-;;;;;;:109;-1:-1:-1::0;;;;;32972:109:0::1;;;-1:-1:-1::0;;;;;32972:109:0::1;;;::::0;::::1;33124:99;33155:4;:14;;33170:10;33155:26;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;::::1;::::0;:40:::1;::::0;;-1:-1:-1;;;33155:40:0;;;;-1:-1:-1;;;;;33155:26:0;;::::1;::::0;:38:::1;::::0;:40:::1;::::0;;::::1;::::0;;;;;;:26;:40:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33124:97:0::1;;:99::i;:::-;33098:7:::0;33106:14:::1;:10:::0;33119:1:::1;33106:14;:::i;:::-;33098:23;;;;;;;;:::i;:::-;;;;;;:125;;;;33267:101;33298:4;:14;;33313:10;33298:26;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;::::1;::::0;:40:::1;::::0;;-1:-1:-1;;;33298:40:0;;;;-1:-1:-1;;;;;33298:26:0;;::::1;::::0;:38:::1;::::0;:40:::1;::::0;;::::1;::::0;;;;;;:26;:40:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33267:99:0::1;;:101::i;:::-;33240:128;;:8:::0;33249:14:::1;:10:::0;33262:1:::1;33249:14;:::i;:::-;33240:24;;;;;;;;:::i;:::-;;;;;;:128;;;::::0;::::1;33417:4;:32;;33450:10;33417:44;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;:86:::1;::::0;;;;::::1;::::0;::::1;345:25:1::0;;;-1:-1:-1;;;;;33417:44:0;;::::1;::::0;:80:::1;::::0;318:18:1;;33417:86:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33385:13:::0;33399:14:::1;:10:::0;33412:1:::1;33399:14;:::i;:::-;33385:29;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;:118;32933:12:::1;::::0;::::1;:::i;:::-;;;32828:687;;;;32131:1391;;;31827:1695:::0;;;;;;:::o;26093:1685::-;2108:7;2135:6;-1:-1:-1;;;;;2135:6:0;860:10;2282:23;2274:68;;;;-1:-1:-1;;;2274:68:0;;9888:2:1;2274:68:0;;;9870:21:1;;;9907:18;;;9900:30;9966:34;9946:18;;;9939:62;10018:18;;2274:68:0;9686:356:1;2274:68:0;26347:2:::1;26326:23:::0;::::1;;26318:59;;;::::0;-1:-1:-1;;;26318:59:0;;17247:2:1;26318:59:0::1;::::0;::::1;17229:21:1::0;17286:2;17266:18;;;17259:30;17325:25;17305:18;;;17298:53;17368:18;;26318:59:0::1;17045:347:1::0;26318:59:0::1;21904:4;26410:41;::::0;::::1;;;26388:116;;;::::0;-1:-1:-1;;;26388:116:0;;17599:2:1;26388:116:0::1;::::0;::::1;17581:21:1::0;17638:2;17618:18;;;17611:30;17677:27;17657:18;;;17650:55;17722:18;;26388:116:0::1;17397:349:1::0;26388:116:0::1;21800:7;26537:16;:44;;26515:123;;;::::0;-1:-1:-1;;;26515:123:0;;17953:2:1;26515:123:0::1;::::0;::::1;17935:21:1::0;17992:2;17972:18;;;17965:30;18031:31;18011:18;;;18004:59;18080:18;;26515:123:0::1;17751:353:1::0;26515:123:0::1;26668:18;26649:295;26705:30:::0;;::::1;26649:295;;;26815:51;26842:10;;26853;26842:22;;;;;;;:::i;26815:51::-;26789:143;;;::::0;-1:-1:-1;;;26789:143:0;;18311:2:1;26789:143:0::1;::::0;::::1;18293:21:1::0;18350:2;18330:18;;;18323:30;18389:32;18369:18;;;18362:60;18439:18;;26789:143:0::1;18109:354:1::0;26789:143:0::1;26750:12;::::0;::::1;:::i;:::-;;;26649:295;;;;26956:18;:16;:18::i;:::-;26987:27;27035:14;;27017:15;:32;:93;;27096:14;;27017:93;;;27065:15;27017:93;26987:123;;27142:11;27123:15;;:30;;;;;;;:::i;:::-;;;;;;;;27166:8;27194:366;;;;;;;;27231:8;-1:-1:-1::0;;;;;27194:366:0::1;;;;;27270:11;27194:366;;;;27321:19;27194:366;;;;27376:1;27194:366;;;;27410:13;27194:366;;;;;;27459:16;27194:366;;;;27503:1;27194:366;;;;27534:10;;27194:366;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;-1:-1:-1;27194:366:0;;;;-1:-1:-1;;27166:405:0;;::::1;::::0;;::::1;::::0;;;;;::::1;::::0;;;;;;::::1;::::0;;::::1;;::::0;;-1:-1:-1;;;;;;27166:405:0::1;-1:-1:-1::0;;;;;27166:405:0;;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;-1:-1:-1;;27166:405:0::1;;::::0;;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;-1:-1:-1;27166:405:0::1;::::0;::::1;::::0;;;;::::1;::::0;::::1;:::i;:::-;;;;27749:10;;27589:181;;;;;;;:::i;:::-;;::::0;;;;::::1;::::0;;27607:8:::1;:15:::0;-1:-1:-1;;;;;27589:181:0;::::1;::::0;27607:19:::1;::::0;27625:1:::1;::::0;27607:19:::1;:::i;:::-;27589:181;::::0;;14350:25:1;;;14423:6;14411:19;;14406:2;14391:18;;14384:47;14447:18;;;14440:34;;;27589:181:0::1;::::0;14338:2:1;14323:18;27589:181:0::1;;;;;;;26307:1471;26093:1685:::0;;;;;;:::o;36245:441::-;5350:1;5948:7;;:19;;5940:63;;;;-1:-1:-1;;;5940:63:0;;14687:2:1;5940:63:0;;;14669:21:1;14726:2;14706:18;;;14699:30;14765:33;14745:18;;;14738:61;14816:18;;5940:63:0;14485:355:1;5940:63:0;5350:1;6081:7;:18;22875:8:::1;:15:::0;36449:3;;22868:22;::::1;22860:54;;;::::0;-1:-1:-1;;;22860:54:0;;10852:2:1;22860:54:0::1;::::0;::::1;10834:21:1::0;10891:2;10871:18;;;10864:30;-1:-1:-1;;;10910:18:1;;;10903:49;10969:18;;22860:54:0::1;10650:343:1::0;22860:54:0::1;36465:21:::2;36489:8;36498:3;36489:13;;;;;;;;:::i;:::-;;::::0;;;::::2;::::0;;;::::2;::::0;;::::2;;36556:12:::0;;36581:65:::2;::::0;;;;36593:10:::2;36581:65;::::0;::::2;18840:34:1::0;36613:4:0::2;18890:18:1::0;;;18883:43;18942:18;;;18935:34;;;18985:18;;;18978:34;;;19061:4;19049:17;;19028:19;;;19021:46;19083:19;;;19076:35;;;19127:19;;;19120:35;;;36489:13:0;;-1:-1:-1;;;;;;36556:12:0::2;::::0;;;36581:11:::2;::::0;18751:19:1;;36581:65:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;36657:21;36666:3;36671:6;36657:8;:21::i;:::-;-1:-1:-1::0;;5306:1:0;6260:22;;-1:-1:-1;;;;;;;36245:441:0:o;34910:92::-;5350:1;5948:7;;:19;;5940:63;;;;-1:-1:-1;;;5940:63:0;;14687:2:1;5940:63:0;;;14669:21:1;14726:2;14706:18;;;14699:30;14765:33;14745:18;;;14738:61;14816:18;;5940:63:0;14485:355:1;5940:63:0;5350:1;6081:7;:18;34977:17:::1;34989:4:::0;34977:11:::1;:17::i;:::-;-1:-1:-1::0;5306:1:0;6260:22;;34910:92::o;39996:1013::-;5350:1;5948:7;;:19;;5940:63;;;;-1:-1:-1;;;5940:63:0;;14687:2:1;5940:63:0;;;14669:21:1;14726:2;14706:18;;;14699:30;14765:33;14745:18;;;14738:61;14816:18;;5940:63:0;14485:355:1;5940:63:0;5350:1;6081:7;:18;;;;40068:21:::1;40092:8;40101:4;40092:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;40141;;;:8:::1;:14:::0;;;;;;40156:10:::1;40141:26:::0;;;;;;;40195:11;;40092:14:::1;::::0;;;::::1;::::0;;::::1;40293:12;::::0;::::1;::::0;40092:14;;-1:-1:-1;;;40293:22:0::1;40271:113;;;::::0;-1:-1:-1;;;40271:113:0;;19368:2:1;40271:113:0::1;::::0;::::1;19350:21:1::0;19407:2;19387:18;;;19380:30;19446:34;19426:18;;;19419:62;19517:11;19497:18;;;19490:39;19546:19;;40271:113:0::1;19166:405:1::0;40271:113:0::1;40411:1;40397:15:::0;;;40423::::1;::::0;::::1;:19:::0;;;40453::::1;::::0;::::1;:23:::0;;;40487:21:::1;::::0;::::1;:25:::0;;;40523:12:::1;::::0;::::1;:22:::0;;40539:6;;40411:1;40523:22:::1;::::0;40539:6;;40523:22:::1;:::i;:::-;::::0;;;-1:-1:-1;40577:18:0::1;::::0;-1:-1:-1;40558:216:0::1;40627:14;::::0;::::1;:21:::0;40614:34;::::1;40558:216;;;40702:4;:14;;40717:10;40702:26;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;::::1;::::0;:60:::1;::::0;-1:-1:-1;;;40702:60:0;;::::1;::::0;::::1;16220:25:1::0;;;40748:10:0::1;16261:18:1::0;;;16254:83;16353:18;;;16346:34;;;;-1:-1:-1;;;;;40702:26:0::1;::::0;:39:::1;::::0;16193:18:1;;40702:60:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;40663:12;;;;:::i;:::-;;;40558:216;;;-1:-1:-1::0;40823:4:0::1;::::0;40798:12;;-1:-1:-1;;;;;40798:12:0;;::::1;40823:4:::0;::::1;40790:38;40786:97;;;40865:6;40845:16;;:26;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;40786:97:0::1;40895:12:::0;;:45:::1;::::0;-1:-1:-1;;;;;40895:12:0::1;40921:10;40933:6:::0;40895:25:::1;:45::i;:::-;40958:43;::::0;345:25:1;;;40988:4:0;;40976:10:::1;::::0;40958:43:::1;::::0;333:2:1;318:18;40958:43:0::1;;;;;;;-1:-1:-1::0;;5306:1:0;6260:22;;-1:-1:-1;;39996:1013:0:o;34546:86::-;5350:1;5948:7;;:19;;5940:63;;;;-1:-1:-1;;;5940:63:0;;14687:2:1;5940:63:0;;;14669:21:1;14726:2;14706:18;;;14699:30;14765:33;14745:18;;;14738:61;14816:18;;5940:63:0;14485:355:1;5940:63:0;5350:1;6081:7;:18;34606::::1;:16;:18::i;:::-;5306:1:::0;6260:22;;34546:86::o;43621:113::-;43678:7;43705:8;43714:3;43705:13;;;;;;;;:::i;:::-;;;;;;;;;;;:21;;;43698:28;;43621:113;;;:::o;2713:103::-;2108:7;2135:6;-1:-1:-1;;;;;2135:6:0;860:10;2282:23;2274:68;;;;-1:-1:-1;;;2274:68:0;;9888:2:1;2274:68:0;;;9870:21:1;;;9907:18;;;9900:30;9966:34;9946:18;;;9939:62;10018:18;;2274:68:0;9686:356:1;2274:68:0;2778:30:::1;2805:1;2778:18;:30::i;:::-;2713:103::o:0;44774:230::-;2108:7;2135:6;-1:-1:-1;;;;;2135:6:0;860:10;2282:23;2274:68;;;;-1:-1:-1;;;2274:68:0;;9888:2:1;2274:68:0;;;9870:21:1;;;9907:18;;;9900:30;9966:34;9946:18;;;9939:62;10018:18;;2274:68:0;9686:356:1;2274:68:0;-1:-1:-1;;;;;44854:25:0;::::1;44846:61;;;::::0;-1:-1:-1;;;44846:61:0;;20159:2:1;44846:61:0::1;::::0;::::1;20141:21:1::0;20198:2;20178:18;;;20171:30;20237:25;20217:18;;;20210:53;20280:18;;44846:61:0::1;19957:347:1::0;44846:61:0::1;44918:10;:24:::0;;-1:-1:-1;;;;;;44918:24:0::1;-1:-1:-1::0;;;;;44918:24:0;::::1;::::0;;::::1;::::0;;;44958:38:::1;::::0;44972:10:::1;::::0;44958:38:::1;::::0;-1:-1:-1;;44958:38:0::1;44774:230:::0;:::o;44111:315::-;2108:7;2135:6;-1:-1:-1;;;;;2135:6:0;860:10;2282:23;2274:68;;;;-1:-1:-1;;;2274:68:0;;9888:2:1;2274:68:0;;;9870:21:1;;;9907:18;;;9900:30;9966:34;9946:18;;;9939:62;10018:18;;2274:68:0;9686:356:1;2274:68:0;-1:-1:-1;;;;;44217:31:0;::::1;44195:110;;;::::0;-1:-1:-1;;;44195:110:0;;20511:2:1;44195:110:0::1;::::0;::::1;20493:21:1::0;20550:2;20530:18;;;20523:30;20589:31;20569:18;;;20562:59;20638:18;;44195:110:0::1;20309:353:1::0;44195:110:0::1;44316:16;:36:::0;;-1:-1:-1;;;;;;44316:36:0::1;-1:-1:-1::0;;;;;44316:36:0;::::1;::::0;;::::1;::::0;;;44368:50:::1;::::0;44388:10:::1;::::0;44368:50:::1;::::0;-1:-1:-1;;44368:50:0::1;44111:315:::0;:::o;25388:389::-;2108:7;2135:6;-1:-1:-1;;;;;2135:6:0;860:10;2282:23;2274:68;;;;-1:-1:-1;;;2274:68:0;;9888:2:1;2274:68:0;;;9870:21:1;;;9907:18;;;9900:30;9966:34;9946:18;;;9939:62;10018:18;;2274:68:0;9686:356:1;2274:68:0;25466:14:::1;;25448:15;:32;25440:65;;;::::0;-1:-1:-1;;;25440:65:0;;20869:2:1;25440:65:0::1;::::0;::::1;20851:21:1::0;20908:2;20888:18;;;20881:30;20947:22;20927:18;;;20920:50;20987:18;;25440:65:0::1;20667:344:1::0;25440:65:0::1;25535:8;:15:::0;25518:14:::1;25561:164;25589:6;25583:3;:12;25561:164;;;25619:21;25643:8;25652:3;25643:13;;;;;;;;:::i;:::-;;;;;;;;;;;25619:37;;25698:15;25671:4;:24;;:42;;;;25604:121;25597:5;;;;:::i;:::-;;;25561:164;;;-1:-1:-1::0;;25754:15:0::1;25737:14;:32:::0;25388:389::o;43805:265::-;5350:1;5948:7;;:19;;5940:63;;;;-1:-1:-1;;;5940:63:0;;14687:2:1;5940:63:0;;;14669:21:1;14726:2;14706:18;;;14699:30;14765:33;14745:18;;;14738:61;14816:18;;5940:63:0;14485:355:1;5940:63:0;5350:1;6081:7;:18;43907:2:::1;43891:18:::0;::::1;;43883:62;;;::::0;-1:-1:-1;;;43883:62:0;;21218:2:1;43883:62:0::1;::::0;::::1;21200:21:1::0;21257:2;21237:18;;;21230:30;21296:33;21276:18;;;21269:61;21347:18;;43883:62:0::1;21016:355:1::0;43883:62:0::1;43961:13;43956:107;43980:20:::0;;::::1;43956:107;;;44026:25;44035:5;;44041;44035:12;;;;;;;:::i;:::-;;;;;;;44049:1;44026:8;:25::i;:::-;44002:7;::::0;::::1;:::i;:::-;;;43956:107;;;-1:-1:-1::0;;5306:1:0;6260:22;;-1:-1:-1;43805:265:0:o;36738:110::-;5350:1;5948:7;;:19;;5940:63;;;;-1:-1:-1;;;5940:63:0;;14687:2:1;5940:63:0;;;14669:21:1;14726:2;14706:18;;;14699:30;14765:33;14745:18;;;14738:61;14816:18;;5940:63:0;14485:355:1;5940:63:0;5350:1;6081:7;:18;36817:23:::1;36826:4:::0;36832:7;36817:8:::1;:23::i;:::-;-1:-1:-1::0;;5306:1:0;6260:22;;36738:110::o;43160:453::-;2108:7;2135:6;-1:-1:-1;;;;;2135:6:0;860:10;2282:23;2274:68;;;;-1:-1:-1;;;2274:68:0;;9888:2:1;2274:68:0;;;9870:21:1;;;9907:18;;;9900:30;9966:34;9946:18;;;9939:62;10018:18;;2274:68:0;9686:356:1;2274:68:0;43272:18:::1;:16;:18::i;:::-;43341:10;-1:-1:-1::0;;;;;43308:120:0::1;;43366:8;43375:4;43366:14;;;;;;;;:::i;:::-;;;;;;;;;;;:25;;;43406:11;43308:120;;;;;;10571:25:1::0;;;10627:2;10612:18;;10605:34;10559:2;10544:18;;10397:248;43308:120:0::1;;;;;;;;43544:11;43503:8;43512:4;43503:14;;;;;;;;:::i;:::-;;;;;;;;;;;:25;;;43472:15;;:56;;;;:::i;:::-;:83;;;;:::i;:::-;43441:15;:114;;;;43594:11;43566:8;43575:4;43566:14;;;;;;;;:::i;:::-;;;;;;;;;;;:25;;:39;;;;43160:453:::0;;:::o;33580:494::-;22875:8;:15;33700:26;;33676:4;;22868:22;;22860:54;;;;-1:-1:-1;;;22860:54:0;;10852:2:1;22860:54:0;;;10834:21:1;10891:2;10871:18;;;10864:30;-1:-1:-1;;;10910:18:1;;;10903:49;10969:18;;22860:54:0;10650:343:1;22860:54:0;33744:21:::1;33768:8;33777:4;33768:14;;;;;;;;:::i;:::-;;;;;;;;;;;33744:38;;33819:4;:14;;:21;;;;33805:36;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;33805:36:0::1;;33793:48;;33871:18;33852:215;33921:14;::::0;::::1;:21:::0;33908:34;::::1;33852:215;;;34028:4;:14;;34043:10;34028:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;34028:26:0::1;33996:9;34006:10;33996:21;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33996:59:0;;::::1;:21;::::0;;::::1;::::0;;;;;;;:59;33957:12:::1;::::0;::::1;:::i;:::-;;;33852:215;;;;33733:341;33580:494:::0;;;;:::o;2971:201::-;2108:7;2135:6;-1:-1:-1;;;;;2135:6:0;860:10;2282:23;2274:68;;;;-1:-1:-1;;;2274:68:0;;9888:2:1;2274:68:0;;;9870:21:1;;;9907:18;;;9900:30;9966:34;9946:18;;;9939:62;10018:18;;2274:68:0;9686:356:1;2274:68:0;-1:-1:-1;;;;;3060:22:0;::::1;3052:73;;;::::0;-1:-1:-1;;;3052:73:0;;21578:2:1;3052:73:0::1;::::0;::::1;21560:21:1::0;21617:2;21597:18;;;21590:30;21656:34;21636:18;;;21629:62;21727:8;21707:18;;;21700:36;21753:19;;3052:73:0::1;21376:402:1::0;3052:73:0::1;3136:28;3155:8;3136:18;:28::i;:::-;2971:201:::0;:::o;29366:2394::-;29515:26;29556:23;29594:25;29634:24;29477:4;22875:8;:15;;;;22868:4;:22;22860:54;;;;-1:-1:-1;;;22860:54:0;;10852:2:1;22860:54:0;;;10834:21:1;10891:2;10871:18;;;10864:30;-1:-1:-1;;;10910:18:1;;;10903:49;10969:18;;22860:54:0;10650:343:1;22860:54:0;29686:21:::1;29710:8;29719:4;29710:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;29759;;;:8:::1;:14:::0;;;;;;-1:-1:-1;;;;;29759:21:0;::::1;::::0;;;;;;;29817:20:::1;29710:14;::::0;;::::1;::::0;;::::1;29817:20:::0;;::::1;::::0;29867:12:::1;::::0;::::1;::::0;29914:24:::1;::::0;::::1;::::0;29710:14;;-1:-1:-1;29817:20:0;;29896:15:::1;:42;:59:::0;::::1;;;-1:-1:-1::0;29942:13:0;;::::1;29896:59;29892:570;;;29972:18;30011:4;:24;;;29993:15;:42;;;;:::i;:::-;30113:16;::::0;29972:63;;-1:-1:-1;30066:4:0::1;::::0;30050:13:::1;::::0;30105:24:::1;::::0;30066:4;30105:24:::1;:::i;:::-;30085:44;;30146:18;30328:5;30293:15;;30263:9;30228:4;:15;;;30198:10;;30168;:40;;;;:::i;:::-;:75;;;;:::i;:::-;:104;;;;:::i;:::-;30167:141;;;;:::i;:::-;:166;;;;:::i;:::-;30146:187:::0;-1:-1:-1;30426:8:0;30390:32:::1;22795:4;30146:187:::0;30390:32:::1;:::i;:::-;30389:45;;;;:::i;:::-;30350:100;::::0;;::::1;:::i;:::-;;;29957:505;;;;29892:570;30474:19;30587:4;:19;;;30568:4;:15;;;22795:4;30513:15;30499:4;:11;;;:29;;;;:::i;:::-;30498:66;;;;:::i;:::-;30497:86;;;;:::i;:::-;30496:110;;;;:::i;:::-;30645:14;::::0;::::1;:21:::0;30474:132;;-1:-1:-1;30645:25:0::1;::::0;30669:1:::1;30645:25;:::i;:::-;30631:40;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;30631:40:0::1;-1:-1:-1::0;30705:14:0::1;::::0;::::1;:21:::0;30619:52;;-1:-1:-1;30705:25:0::1;::::0;30729:1:::1;30705:25;:::i;:::-;30692:39;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;30766:14:0::1;::::0;::::1;:21:::0;30682:49;;-1:-1:-1;30766:25:0::1;::::0;30790:1:::1;30766:25;:::i;:::-;30752:40;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;30752:40:0::1;-1:-1:-1::0;30828:14:0::1;::::0;::::1;:21:::0;30742:50;;-1:-1:-1;30828:25:0::1;::::0;30852:1:::1;30828:25;:::i;:::-;30814:40;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;30814:40:0::1;-1:-1:-1::0;30890:4:0::1;::::0;30867:12;;30803:51;;-1:-1:-1;;;;;;30890:4:0::1;::::0;30867:9;;30890:4:::1;::::0;30867:12:::1;;;;:::i;:::-;-1:-1:-1::0;;;;;30867:28:0;;::::1;:12;::::0;;::::1;::::0;;;;;:28;30932:4:::1;::::0;30919:31:::1;::::0;30932:4:::1;30919:29;:31::i;:::-;30906:7;30914:1;30906:10;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;:44;30988:4:::1;::::0;30975:33:::1;::::0;-1:-1:-1;;;;;30988:4:0::1;30975:31;:33::i;:::-;30961:47;;:8;30970:1;30961:11;;;;;;;;:::i;:::-;;;;;;:47;;;::::0;::::1;31032:11;31019:7;31027:1;31019:10;;;;;;;;:::i;:::-;;;;;;:24;;;::::0;::::1;31075:18;31056:697;31125:14;::::0;::::1;:21:::0;31112:34;::::1;31056:697;;;31254:4;:14;;31269:10;31254:26;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;::::1;::::0;:40:::1;::::0;;-1:-1:-1;;;31254:40:0;;;;-1:-1:-1;;;;;31254:26:0;;::::1;::::0;:38:::1;::::0;:40:::1;::::0;;::::1;::::0;;;;;;:26;:40:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31200:9:::0;31210:14:::1;:10:::0;31223:1:::1;31210:14;:::i;:::-;31200:25;;;;;;;;:::i;:::-;;;;;;:109;-1:-1:-1::0;;;;;31200:109:0::1;;;-1:-1:-1::0;;;;;31200:109:0::1;;;::::0;::::1;31352:99;31383:4;:14;;31398:10;31383:26;;;;;;;;:::i;31352:99::-;31326:7:::0;31334:14:::1;:10:::0;31347:1:::1;31334:14;:::i;:::-;31326:23;;;;;;;;:::i;:::-;;;;;;:125;;;;31495:101;31526:4;:14;;31541:10;31526:26;;;;;;;;:::i;31495:101::-;31468:128;;:8:::0;31477:14:::1;:10:::0;31490:1:::1;31477:14;:::i;:::-;31468:24;;;;;;;;:::i;:::-;;;;;;:128;;;::::0;::::1;31639:4;:14;;31654:10;31639:26;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;:102:::1;::::0;;;;::::1;::::0;::::1;21957:25:1::0;;;-1:-1:-1;;;;;22018:55:1;;;21998:18;;;21991:83;31639:26:0;;::::1;::::0;:40:::1;::::0;21930:18:1;;31639:102:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31613:7:::0;31621:14:::1;:10:::0;31634:1:::1;31621:14;:::i;:::-;31613:23;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;:128;31161:12:::1;::::0;::::1;:::i;:::-;;;31056:697;;;;29675:2085;;;;;29366:2394:::0;;;;;;;;:::o;34684:150::-;34737:11;34732:95;34760:8;:15;34754:21;;34732:95;;;34799:16;34811:3;34799:11;:16::i;:::-;34777:5;;;:::i;:::-;;;34732:95;;35050:1187;22875:8;:15;35112:4;;22868:22;;22860:54;;;;-1:-1:-1;;;22860:54:0;;10852:2:1;22860:54:0;;;10834:21:1;10891:2;10871:18;;;10864:30;-1:-1:-1;;;10910:18:1;;;10903:49;10969:18;;22860:54:0;10650:343:1;22860:54:0;35129:21:::1;35153:8;35162:4;35153:14;;;;;;;;:::i;:::-;;;;;;;;;;;35129:38;;35203:4;:24;;;35184:15;:43;35180:82;;35244:7;35050:1187:::0;;:::o;35180:82::-:1;35293:12;::::0;::::1;::::0;35322:13;;;:37:::1;;-1:-1:-1::0;35339:15:0::1;::::0;::::1;::::0;:20;35322:37:::1;35318:133;;;-1:-1:-1::0;35403:15:0::1;35376:24;::::0;;::::1;:42:::0;35050:1187;;:::o;35318:133::-:1;35463:18;35502:4;:24;;;35484:15;:42;;;;:::i;:::-;35463:63;;35539:18;35621:15;;35589:4;:15;;;35575:10;;35562;:23;;;;:::i;:::-;35561:43;;;;:::i;:::-;35560:76;;;;:::i;:::-;35708:16;::::0;35539:97;;-1:-1:-1;35665:4:0::1;::::0;35649:13:::1;::::0;35700:24:::1;::::0;35665:4;35700:24:::1;:::i;:::-;35737:4;::::0;35747:16:::1;::::0;35779::::1;::::0;35680:44;;-1:-1:-1;;;;;;35737:4:0;;::::1;::::0;:9:::1;::::0;35747:16;;::::1;::::0;35799:5;;35766:29:::1;::::0;:10;:29:::1;:::i;:::-;35765:39;;;;:::i;:::-;35737:68;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;22277:55:1;;;35737:68:0::1;::::0;::::1;22259:74:1::0;22349:18;;;22342:34;22232:18;;35737:68:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;35816:4:0::1;::::0;-1:-1:-1;;;;;35816:4:0::1;::::0;-1:-1:-1;35816:9:0::1;::::0;-1:-1:-1;35834:4:0::1;35868:5:::0;35842:22:::1;35855:9:::0;35842:10;:22:::1;:::i;:::-;35841:32;;;;:::i;:::-;35816:58;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;22277:55:1;;;35816:58:0::1;::::0;::::1;22259:74:1::0;22349:18;;;22342:34;22232:18;;35816:58:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;;35986:12:0::1;::::0;::::1;::::0;36014:5;;-1:-1:-1;35960:9:0;35925:32:::1;22795:4;35925:10:::0;:32:::1;:::i;:::-;:44;;;;:::i;:::-;35924:74;;;;:::i;:::-;:95;;;;:::i;:::-;35887:4;:20;;;:132;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;36059:15:0::1;36032:24;::::0;::::1;:42:::0;;;36198:20:::1;::::0;::::1;::::0;36092:137:::1;::::0;;22589:25:1;;;22645:2;22630:18;;22623:34;;;22673:18;;22666:34;36117:4:0;;36092:137:::1;::::0;22577:2:1;22562:18;36092:137:0::1;;;;;;;35118:1119;;;;;;22925:1;35050:1187:::0;;:::o;41053:1175::-;41119:21;41143:8;41152:4;41143:14;;;;;;;;:::i;:::-;;;;;;;;;41192;;;:8;:14;;;;;;41207:10;41192:26;;;;;;;41235:21;;;;41143:14;;;;;;;;-1:-1:-1;41235:26:0;:63;;;;;41284:14;;41265:15;:33;;41235:63;41231:158;;;41357:20;;;;41339:38;;:15;:38;:::i;:::-;41315:21;;;:62;41231:158;41401:15;41495:4;:15;;;22795:4;41435;:20;;;41421:4;:11;;;:34;;;;:::i;:::-;41420:71;;;;:::i;:::-;41419:91;;;;:::i;:::-;41401:109;;41527:28;41538:4;41544:10;41527;:28::i;:::-;41523:698;;;41586:1;41576:7;:11;:38;;;;41613:1;41591:4;:19;;;:23;41576:38;41572:451;;;41635:22;41670:4;:19;;;41660:7;:29;;;;:::i;:::-;41635:54;;41767:4;:19;;;41743:20;;:43;;;;;;;:::i;:::-;;;;-1:-1:-1;;41827:1:0;41805:19;;;:23;41889:20;;;;41871:38;;:15;:38;:::i;:::-;41847:21;;;:62;41963:44;41980:10;41992:14;41963:16;:44::i;:::-;41616:407;41572:451;41523:698;;;42044:11;;42040:181;;42096:7;42072:20;;:31;;;;;;;:::i;:::-;;;;;;;;42141:7;42118:4;:19;;;:30;;;;;;;:::i;:::-;;;;-1:-1:-1;;42168:41:0;;345:25:1;;;42195:4:0;;42183:10;;42168:41;;333:2:1;318:18;42168:41:0;;;;;;;42040:181;41108:1120;;;41053:1175;:::o;18879:407::-;19073:48;;;-1:-1:-1;;;;;22277:55:1;;;19073:48:0;;;22259:74:1;22349:18;;;;22342:34;;;19073:48:0;;;;;;;;;;22232:18:1;;;;19073:48:0;;;;;;;-1:-1:-1;;;;;19073:48:0;19096:12;19073:48;;;19039:93;;-1:-1:-1;;;;19039:19:0;;;;:93;;19073:48;19039:93;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19003:129;;;;19165:7;:57;;;;-1:-1:-1;19177:11:0;;:16;;:44;;;19208:4;19197:24;;;;;;;;;;;;:::i;:::-;19143:135;;;;-1:-1:-1;;;19143:135:0;;23474:2:1;19143:135:0;;;23456:21:1;23513:2;23493:18;;;23486:30;23552;23532:18;;;23525:58;23600:18;;19143:135:0;23272:352:1;19143:135:0;18992:294;;18879:407;;;:::o;17285:310::-;17482:34;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17482:34:0;17505:10;17482:34;;;17442:85;;17375:13;;17407:12;;;;-1:-1:-1;;;;;17442:25:0;;;:85;;17482:34;17442:85;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17406:121;;;;17545:7;:42;;;;;;;;;;;;;;;-1:-1:-1;;;17545:42:0;;;;;;17555:24;17574:4;17555:18;:24::i;:::-;17538:49;17285:310;-1:-1:-1;;;;17285:310:0:o;18310:293::-;18469:36;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18469:36:0;18492:12;18469:36;;;18429:87;;18375:5;;;;;;-1:-1:-1;;;;;18429:25:0;;;:87;;18469:36;18429:87;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18393:123;;;;18534:7;:28;;;;;18545:4;:11;18560:2;18545:17;18534:28;:61;;18593:2;18534:61;;;18576:4;18565:25;;;;;;;;;;;;:::i;36900:1585::-;22875:8;:15;36994:4;;22868:22;;22860:54;;;;-1:-1:-1;;;22860:54:0;;10852:2:1;22860:54:0;;;10834:21:1;10891:2;10871:18;;;10864:30;-1:-1:-1;;;10910:18:1;;;10903:49;10969:18;;22860:54:0;10650:343:1;22860:54:0;37016:21:::1;37040:8;37049:4;37040:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;37089;;;:8:::1;:14:::0;;;;;;37104:10:::1;37089:26:::0;;;;;;;37040:14:::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;37128:17:0::1;37098:4:::0;37128:11:::1;:17::i;:::-;37158:28;37181:4;37158:22;:28::i;:::-;37203:11:::0;;37199:731:::1;;37255:12:::0;;:37:::1;::::0;-1:-1:-1;;;37255:37:0;;37286:4:::1;37255:37;::::0;::::1;547:74:1::0;37231:21:0::1;::::0;-1:-1:-1;;;;;37255:12:0::1;::::0;:22:::1;::::0;520:18:1;;37255:37:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37307:12:::0;;37231:61;;-1:-1:-1;37307:65:0::1;::::0;-1:-1:-1;;;;;37307:12:0::1;37337:10;37357:4;37364:7:::0;37307:29:::1;:65::i;:::-;37410:12:::0;;:37:::1;::::0;-1:-1:-1;;;37410:37:0;;37441:4:::1;37410:37;::::0;::::1;547:74:1::0;37387:20:0::1;::::0;-1:-1:-1;;;;;37410:12:0::1;::::0;:22:::1;::::0;520:18:1;;37410:37:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37387:60:::0;-1:-1:-1;37474:28:0::1;37489:13:::0;37387:60;37474:28:::1;:::i;:::-;37523:17;::::0;::::1;::::0;37464:38;;-1:-1:-1;37523:17:0::1;;:21:::0;37519:239:::1;;37597:17;::::0;::::1;::::0;37565:18:::1;::::0;37618:5:::1;::::0;37587:27:::1;::::0;37597:17:::1;;37587:7:::0;:27:::1;:::i;:::-;37586:37;;;;:::i;:::-;37668:10;::::0;37642:12;;37565:58;;-1:-1:-1;37642:49:0::1;::::0;-1:-1:-1;;;;;37642:12:0;;::::1;::::0;37668:10:::1;37565:58:::0;37642:25:::1;:49::i;:::-;37722:20;37732:10:::0;37722:7;:20:::1;:::i;:::-;37712:30;;37546:212;37519:239;37789:7;37774:4;:11;;;:22;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;37850:4:0::1;::::0;37825:12;;-1:-1:-1;;;;;37825:12:0;;::::1;37850:4:::0;::::1;37817:38;37813:106;;;37896:7;37876:16;;:27;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;37813:106:0::1;37216:714;;37199:731;37986:20;::::0;::::1;::::0;37972:11;;22795:4:::1;::::0;37972:34:::1;::::0;::::1;:::i;:::-;37971:71;;;;:::i;:::-;37940:15;::::0;::::1;:102:::0;38074:18:::1;38055:292;38124:14;::::0;::::1;:21:::0;38111:34;::::1;38055:292;;;38199:4;:14;;38214:10;38199:26;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;38309:11;;38199:136:::1;::::0;-1:-1:-1;;;38199:136:0;;::::1;::::0;::::1;16220:25:1::0;;;38280:10:0::1;16261:18:1::0;;;16254:83;16353:18;;;16346:34;;;;-1:-1:-1;;;;;38199:26:0;;::::1;::::0;:39:::1;::::0;16193:18:1;;38199:136:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;38160:12;;;;:::i;:::-;;;38055:292;;;-1:-1:-1::0;38363:11:0;;38359:67:::1;;38407:7;38391:4;:12;;;:23;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;38359:67:0::1;38443:34;::::0;345:25:1;;;38463:4:0;;38451:10:::1;::::0;38443:34:::1;::::0;333:2:1;318:18;38443:34:0::1;;;;;;;37005:1480;;36900:1585:::0;;;:::o;3332:191::-;3406:16;3425:6;;-1:-1:-1;;;;;3442:17:0;;;-1:-1:-1;;;;;;3442:17:0;;;;;;3475:40;;3425:6;;;;;;;3475:40;;3406:16;3475:40;3395:128;3332:191;:::o;42341:589::-;42453:16;;42421:4;;:29;;-1:-1:-1;;;42421:29:0;;42444:4;42421:29;;;547:74:1;-1:-1:-1;;;;;42421:4:0;;;;:14;;520:18:1;;42421:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:48;42417:506;;;42702:16;;42670:4;;:29;;-1:-1:-1;;;42670:29:0;;42693:4;42670:29;;;547:74:1;42652:15:0;;42702:16;-1:-1:-1;;;;;42670:4:0;;:14;;520:18:1;;42670:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:48;;;;:::i;:::-;42652:66;;42748:7;42737;:18;42733:179;;42776:4;;:31;;-1:-1:-1;;;;;42776:4:0;42794:3;42799:7;42776:17;:31::i;:::-;42471:452;42341:589;;:::o;42733:179::-;42833:11;;42829:83;;42865:4;;:31;;-1:-1:-1;;;;;42865:4:0;42883:3;42888:7;42865:17;:31::i;16460:619::-;16557:13;16607:2;16592:4;:11;:17;16588:484;;16644:4;16633:26;;;;;;;;;;;;:::i;:::-;16626:33;16460:619;-1:-1:-1;;16460:619:0:o;16588:484::-;16681:4;:11;16696:2;16681:17;16677:395;;;16715:7;16741:69;16752:2;16748:1;:6;;;:22;;;;;16758:4;16763:1;16758:7;;;;;;;;;;:::i;:::-;;;;;;;:12;;16748:22;16741:69;;;16791:3;;;;:::i;:::-;;;;16741:69;;;16824:23;16860:1;16850:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16850:12:0;;16824:38;;16886:1;16882:5;;16877:99;16893:2;16889:1;:6;;;:22;;;;;16899:4;16904:1;16899:7;;;;;;;;;;:::i;:::-;;;;;;;:12;;16889:22;16877:99;;;16953:4;16958:1;16953:7;;;;;;;;;;:::i;:::-;;;;;;;;;16937:10;16948:1;16937:13;;;;;;;;;;:::i;:::-;;;;:23;;;;;;;;;;-1:-1:-1;16913:3:0;;;;:::i;:::-;;;;16877:99;;;17004:10;16460:619;-1:-1:-1;;;16460:619:0:o;16677:395::-;-1:-1:-1;;17048:12:0;;;;;;;;;;;;-1:-1:-1;;;17048:12:0;;;;;16460:619::o;16677:395::-;16460:619;;;:::o;19609:449::-;19830:59;;;-1:-1:-1;;;;;25231:15:1;;;19830:59:0;;;25213:34:1;25283:15;;;25263:18;;;25256:43;25315:18;;;;25308:34;;;19830:59:0;;;;;;;;;;25125:18:1;;;;19830:59:0;;;;;;;-1:-1:-1;;;;;19830:59:0;19853:17;19830:59;;;19796:104;;-1:-1:-1;;;;19796:19:0;;;;:104;;19830:59;19796:104;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19760:140;;;;19933:7;:57;;;;-1:-1:-1;19945:11:0;;:16;;:44;;;19976:4;19965:24;;;;;;;;;;;;:::i;:::-;19911:139;;;;-1:-1:-1;;;19911:139:0;;25555:2:1;19911:139:0;;;25537:21:1;;;25574:18;;;25567:30;25633:34;25613:18;;;25606:62;25685:18;;19911:139:0;25353:356:1;19911:139:0;19749:309;;19609:449;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:180:1;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;1324:159::-;1391:20;;1451:6;1440:18;;1430:29;;1420:57;;1473:1;1470;1463:12;1488:385;1569:8;1579:6;1633:3;1626:4;1618:6;1614:17;1610:27;1600:55;;1651:1;1648;1641:12;1600:55;-1:-1:-1;1674:20:1;;1717:18;1706:30;;1703:50;;;1749:1;1746;1739:12;1703:50;1786:4;1778:6;1774:17;1762:29;;1846:3;1839:4;1829:6;1826:1;1822:14;1814:6;1810:27;1806:38;1803:47;1800:67;;;1863:1;1860;1853:12;1800:67;1488:385;;;;;:::o;1878:757::-;2023:6;2031;2039;2047;2055;2063;2116:3;2104:9;2095:7;2091:23;2087:33;2084:53;;;2133:1;2130;2123:12;2084:53;2169:9;2156:23;2146:33;;2226:2;2215:9;2211:18;2198:32;2188:42;;2249:37;2282:2;2271:9;2267:18;2249:37;:::i;:::-;2239:47;;2333:2;2322:9;2318:18;2305:32;2295:42;;2388:3;2377:9;2373:19;2360:33;2416:18;2408:6;2405:30;2402:50;;;2448:1;2445;2438:12;2402:50;2487:88;2567:7;2558:6;2547:9;2543:22;2487:88;:::i;:::-;1878:757;;;;-1:-1:-1;1878:757:1;;-1:-1:-1;1878:757:1;;2594:8;;1878:757;-1:-1:-1;;;1878:757:1:o;2640:154::-;-1:-1:-1;;;;;2719:5:1;2715:54;2708:5;2705:65;2695:93;;2784:1;2781;2774:12;2799:315;2867:6;2875;2928:2;2916:9;2907:7;2903:23;2899:32;2896:52;;;2944:1;2941;2934:12;2896:52;2980:9;2967:23;2957:33;;3040:2;3029:9;3025:18;3012:32;3053:31;3078:5;3053:31;:::i;:::-;3103:5;3093:15;;;2799:315;;;;;:::o;3542:248::-;3610:6;3618;3671:2;3659:9;3650:7;3646:23;3642:32;3639:52;;;3687:1;3684;3677:12;3639:52;-1:-1:-1;;3710:23:1;;;3780:2;3765:18;;;3752:32;;-1:-1:-1;3542:248:1:o;3795:484::-;3848:3;3886:5;3880:12;3913:6;3908:3;3901:19;3939:4;3968:2;3963:3;3959:12;3952:19;;4005:2;3998:5;3994:14;4026:1;4036:218;4050:6;4047:1;4044:13;4036:218;;;4115:13;;-1:-1:-1;;;;;4111:62:1;4099:75;;4194:12;;;;4229:15;;;;4072:1;4065:9;4036:218;;;-1:-1:-1;4270:3:1;;3795:484;-1:-1:-1;;;;;3795:484:1:o;4284:258::-;4356:1;4366:113;4380:6;4377:1;4374:13;4366:113;;;4456:11;;;4450:18;4437:11;;;4430:39;4402:2;4395:10;4366:113;;;4497:6;4494:1;4491:13;4488:48;;;-1:-1:-1;;4532:1:1;4514:16;;4507:27;4284:258::o;4547:435::-;4600:3;4638:5;4632:12;4665:6;4660:3;4653:19;4691:4;4720:2;4715:3;4711:12;4704:19;;4757:2;4750:5;4746:14;4778:1;4788:169;4802:6;4799:1;4796:13;4788:169;;;4863:13;;4851:26;;4897:12;;;;4932:15;;;;4824:1;4817:9;4788:169;;4987:1568;5420:3;5409:9;5402:22;5383:4;5447:57;5499:3;5488:9;5484:19;5476:6;5447:57;:::i;:::-;5523:2;5573:9;5565:6;5561:22;5556:2;5545:9;5541:18;5534:50;5604:6;5639;5633:13;5670:6;5662;5655:22;5705:2;5697:6;5693:15;5686:22;;5764:2;5754:6;5751:1;5747:14;5739:6;5735:27;5731:36;5802:2;5794:6;5790:15;5823:1;5833:470;5847:6;5844:1;5841:13;5833:470;;;5910:2;5906:7;5963:2;5954:6;5946;5942:19;5938:28;5933:3;5926:41;5996:6;5990:13;6038:2;6032:9;6069:8;6061:6;6054:24;6091:61;6143:8;6138:2;6130:6;6126:15;6121:2;6117;6113:11;6091:61;:::i;:::-;6281:12;;;;6209:2;6195:17;6191:26;;;6179:39;;;;6175:48;;;-1:-1:-1;6246:15:1;;;;5869:1;5862:9;5833:470;;;5837:3;;6351:9;6343:6;6339:22;6334:2;6323:9;6319:18;6312:50;6385:44;6422:6;6414;6385:44;:::i;:::-;6371:58;;;;;;6477:9;6469:6;6465:22;6460:2;6449:9;6445:18;6438:50;6505:44;6542:6;6534;6505:44;:::i;:::-;6497:52;4987:1568;-1:-1:-1;;;;;;;4987:1568:1:o;6560:844::-;6725:6;6733;6741;6749;6757;6765;6818:3;6806:9;6797:7;6793:23;6789:33;6786:53;;;6835:1;6832;6825:12;6786:53;6871:9;6858:23;6848:33;;6931:2;6920:9;6916:18;6903:32;6944:31;6969:5;6944:31;:::i;:::-;6994:5;-1:-1:-1;7018:37:1;7051:2;7036:18;;7018:37;:::i;7409:114::-;7493:4;7486:5;7482:16;7475:5;7472:27;7462:55;;7513:1;7510;7503:12;7528:586;7630:6;7638;7646;7654;7662;7670;7723:3;7711:9;7702:7;7698:23;7694:33;7691:53;;;7740:1;7737;7730:12;7691:53;7776:9;7763:23;7753:33;;7833:2;7822:9;7818:18;7805:32;7795:42;;7884:2;7873:9;7869:18;7856:32;7846:42;;7938:2;7927:9;7923:18;7910:32;7951:29;7974:5;7951:29;:::i;:::-;7528:586;;;;-1:-1:-1;7528:586:1;;8051:3;8036:19;;8023:33;;8103:3;8088:19;;;8075:33;;-1:-1:-1;7528:586:1;-1:-1:-1;;7528:586:1:o;8312:247::-;8371:6;8424:2;8412:9;8403:7;8399:23;8395:32;8392:52;;;8440:1;8437;8430:12;8392:52;8479:9;8466:23;8498:31;8523:5;8498:31;:::i;8960:455::-;9046:6;9054;9107:2;9095:9;9086:7;9082:23;9078:32;9075:52;;;9123:1;9120;9113:12;9075:52;9163:9;9150:23;9196:18;9188:6;9185:30;9182:50;;;9228:1;9225;9218:12;9182:50;9267:88;9347:7;9338:6;9327:9;9323:22;9267:88;:::i;:::-;9374:8;;9241:114;;-1:-1:-1;8960:455:1;-1:-1:-1;;;;8960:455:1:o;9420:261::-;9599:2;9588:9;9581:21;9562:4;9619:56;9671:2;9660:9;9656:18;9648:6;9619:56;:::i;12062:184::-;-1:-1:-1;;;12111:1:1;12104:88;12211:4;12208:1;12201:15;12235:4;12232:1;12225:15;12886:184;-1:-1:-1;;;12935:1:1;12928:88;13035:4;13032:1;13025:15;13059:4;13056:1;13049:15;13075:135;13114:3;-1:-1:-1;;13135:17:1;;13132:43;;;13155:18;;:::i;:::-;-1:-1:-1;13202:1:1;13191:13;;13075:135::o;13215:125::-;13255:4;13283:1;13280;13277:8;13274:34;;;13288:18;;:::i;:::-;-1:-1:-1;13325:9:1;;13215:125::o;13345:128::-;13385:3;13416:1;13412:6;13409:1;13406:13;13403:39;;;13422:18;;:::i;:::-;-1:-1:-1;13458:9:1;;13345:128::o;13478:667::-;13673:3;13704;13751:6;13673:3;13785:333;13799:6;13796:1;13793:13;13785:333;;;13874:6;13861:20;13894:31;13919:5;13894:31;:::i;:::-;-1:-1:-1;;;;;13952:54:1;13938:69;;14030:4;14056:14;;;;14093:15;;;;;13821:1;13814:9;13785:333;;;-1:-1:-1;14134:5:1;;13478:667;-1:-1:-1;;;;;13478:667:1:o;15566:168::-;15606:7;15672:1;15668;15664:6;15660:14;15657:1;15654:21;15649:1;15642:9;15635:17;15631:45;15628:71;;;15679:18;;:::i;:::-;-1:-1:-1;15719:9:1;;15566:168::o;15739:274::-;15779:1;15805;15795:189;;-1:-1:-1;;;15837:1:1;15830:88;15941:4;15938:1;15931:15;15969:4;15966:1;15959:15;15795:189;-1:-1:-1;15998:9:1;;15739:274::o;16391:184::-;-1:-1:-1;;;16440:1:1;16433:88;16540:4;16537:1;16530:15;16564:4;16561:1;16554:15;16580:271;16670:6;16723:2;16711:9;16702:7;16698:23;16694:32;16691:52;;;16739:1;16736;16729:12;16691:52;16771:9;16765:16;16790:31;16815:5;16790:31;:::i;16856:184::-;16926:6;16979:2;16967:9;16958:7;16954:23;16950:32;16947:52;;;16995:1;16992;16985:12;16947:52;-1:-1:-1;17018:16:1;;16856:184;-1:-1:-1;16856:184:1:o;22711:274::-;22840:3;22878:6;22872:13;22894:53;22940:6;22935:3;22928:4;22920:6;22916:17;22894:53;:::i;:::-;22963:16;;;;;22711:274;-1:-1:-1;;22711:274:1:o;22990:277::-;23057:6;23110:2;23098:9;23089:7;23085:23;23081:32;23078:52;;;23126:1;23123;23116:12;23078:52;23158:9;23152:16;23211:5;23204:13;23197:21;23190:5;23187:32;23177:60;;23233:1;23230;23223:12;23629:247;23697:6;23750:2;23738:9;23729:7;23725:23;23721:32;23718:52;;;23766:1;23763;23756:12;23718:52;23798:9;23792:16;23817:29;23840:5;23817:29;:::i;23881:884::-;23961:6;24014:2;24002:9;23993:7;23989:23;23985:32;23982:52;;;24030:1;24027;24020:12;23982:52;24063:9;24057:16;24092:18;24133:2;24125:6;24122:14;24119:34;;;24149:1;24146;24139:12;24119:34;24187:6;24176:9;24172:22;24162:32;;24232:7;24225:4;24221:2;24217:13;24213:27;24203:55;;24254:1;24251;24244:12;24203:55;24283:2;24277:9;24305:2;24301;24298:10;24295:36;;;24311:18;;:::i;:::-;24386:2;24380:9;24354:2;24440:13;;-1:-1:-1;;24436:22:1;;;24460:2;24432:31;24428:40;24416:53;;;24484:18;;;24504:22;;;24481:46;24478:72;;;24530:18;;:::i;:::-;24570:10;24566:2;24559:22;24605:2;24597:6;24590:18;24645:7;24640:2;24635;24631;24627:11;24623:20;24620:33;24617:53;;;24666:1;24663;24656:12;24617:53;24679:55;24731:2;24726;24718:6;24714:15;24709:2;24705;24701:11;24679:55;:::i;24770:175::-;24807:3;24851:4;24844:5;24840:16;24880:4;24871:7;24868:17;24865:43;;;24888:18;;:::i;:::-;24937:1;24924:15;;24770:175;-1:-1:-1;;24770:175:1:o
Swarm Source
ipfs://bce3399dc884390e37c2e40f612b5d00bda3fdcd4a5d8a3453a700a6fcadda94
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.