Contract Overview
Balance:
0 MATIC
MATIC Value:
$0.00
My Name Tag:
Not Available, login to update
Txn Hash |
Method
|
Block
|
From
|
To
|
Value | [Txn Fee] | |||
---|---|---|---|---|---|---|---|---|---|
0xe222915707f63df0c66d8a3ab3fc9b9605ecd35528e0df406340e20e04ba58fd | 0x61042060 | 38036397 | 70 days 12 hrs ago | 0xdbf670f74d66174c9bfe78be748fe28d46a6995a | IN | Create: XVMCgovernor | 0 MATIC | 0.296366421525 |
[ Download CSV Export ]
Contract Name:
XVMCgovernor
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2023-01-13 */ // File: libs/standard/Address.sol pragma solidity >=0.6.12 <=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 * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 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: libs/standard/IERC20.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } // File: libs/standard/SafeERC20.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol) pragma solidity ^0.8.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File: test.sol pragma solidity 0.8.0; interface IacPool { function setCallFee(uint256 _callFee) external; function totalShares() external returns (uint256); function totalVotesFor(uint256 proposalID) external returns (uint256); function setAdmin(address _admin, address _treasury) external; function setTreasury(address _treasury) external; function addAndExtendStake(address _recipientAddr, uint256 _amount, uint256 _stakeID, uint256 _lockUpTokensInSeconds) external; function giftDeposit(uint256 _amount, address _toAddress, uint256 _minToServeInSecs) external; function harvest() external; function calculateHarvestXVMCRewards() external view returns (uint256); } interface IMasterChef { function set(uint256 _pid, uint256 _allocPoint, uint16 _depositFeeBP, bool _withUpdate) external; function updateEmissionRate(uint256 _xvmcPerBlock) external; function setFeeAddress(address _feeAddress) external; function dev(address _devaddr) external; function transferOwnership(address newOwner) external; function XVMCPerBlock() external returns (uint256); function totalAllocPoint() external returns (uint256); function updatePool(uint256 _pid) external; function owner() external returns (address); function setGovernorFee(uint256 _amount) external; } interface IXVMCtreasury { function requestWithdraw(address _token, address _receiver, uint _value) external; } interface IOldChef { function burnTokens(uint256 _amount) external; } interface IConsensus { function totalXVMCStaked() external view returns(uint256); function tokensCastedPerVote(uint256 _forID) external view returns(uint256); function isGovInvalidated(address _failedGov) external view returns(bool, bool); } interface IPolygonMultisig { function isOwner(address) external view returns(bool); } interface IRewardBoost { function updateDelayBetweenEvents(uint256 _delay) external; function updateGrandEventLength(uint256 _length) external; } interface InftStaking { function stopEarning(uint256 _withdrawAmount) external; function setAdmin() external; function withdrawDummy(uint256 _amount) external; function startEarning() external; } interface InftAllocation { function setAllocationContract(address _contract, bool _setting) external; } /** * XVMC governor is a decentralized masterchef governed by it's users * Works as a decentralized cryptocurrency with no third-party control * Effectively creating a DAO through time-deposits * * In order to earn staking rewards, users must lock up their tokens. * Certificates of deposit or time deposit are the biggest market in the world * The longer the lockup period, the higher the rewards(APY) and voting power * The locked up stakers create the governance council, through which * the protocol can be upgraded in a decentralized manner. * * Users are utilized as oracles through on-chain voting regulating the entire system(events, * rewards, APYs, fees, bonuses,...) * The token voting is overpowered by the consensus mechanism(locked up stakers) * * It is a real DAO creating an actual decentralized finance ecosystem * * https://macncheese.finance/ */ contract XVMCgovernor { using SafeERC20 for IERC20; uint256 public immutable goldenRatio = 1618; //1.618 is the golden ratio address public immutable oldToken = 0x6d0c966c8A09e354Df9C48b446A474CE3343D912; address public immutable token = 0x970ccEe657Dd831e9C37511Aa3eb5302C1Eb5EEe; //XVMC token //masterchef address address public immutable masterchef = 0x6ff40a8a1fe16075bD6008A48befB768BE08b4b0; address public immutable oldChefOwner = 0x27771BB243c37B35091b0A1e8b69C816249c2E71; //https://docs.polygon.technology/docs/faq/commit-chain-multisigs/ address public immutable polygonMultisig = 0x355b8E02e7F5301E6fac9b7cAc1D6D9c86C0343f; address public immutable consensusContract = 0xDDd4982e3E9e5C5C489321D2143b8a027f535112; address public immutable farmContract = 0xdf47e7a036A6a85F92898176b5A8B4B4b9fBF25A; address public immutable fibonacceningContract = 0xff5a8072565726A055690bd14924022DE020623A; //reward boost contract address public immutable basicContract = 0xEBD2e542F593d8E03543661BCc70ad2474e6DBad; address public immutable oldNftStakingContract = 0xD7bf9953d090D6Eb5fC8f6707e88Ea057beD08cB; address public immutable nftStakingContract = 0xEc94d2b09aD2b8493718D1edca6EE3c954E7F320; address public immutable nftAllocationContract = 0x765A3045902B164dA1a7619BEc58DE64cf7Bdfe2; //Addresses for treasuryWallet and NFT wallet address public treasuryWallet = 0xC44D3FB20a7fA7eff7437c1C39d34A68A2046BA7; address public nftWallet = 0xcCb906C2233A39aA14f60d2F836EB24492D83713; //addresses for time-locked deposits(autocompounding pools) address public immutable acPool1 = 0xfFB71361dD8Fc3ef0831871Ec8dd51B413ed093C; address public immutable acPool2 = 0x9a9AEF66624C3fa77DaACcA9B51DE307FA09bd50; address public immutable acPool3 = 0x1F8a5D98f1e2F10e93331D27CF22eD7985EF6a12; address public immutable acPool4 = 0x30019481FC501aFa449781ac671103Feb0d6363C; address public immutable acPool5 = 0x8c96105ea574727e94d9C199c632128f1cA584cF; address public immutable acPool6 = 0x605c5AA14BdBf0d50a99836e7909C631cf3C8d46; //pool ID in the masterchef for respective Pool address and dummy token uint256 public immutable acPool1ID = 2; uint256 public immutable acPool2ID = 3; uint256 public immutable acPool3ID = 4; uint256 public immutable acPool4ID = 5; uint256 public immutable acPool5ID = 6; uint256 public immutable acPool6ID = 7; uint256 public immutable nftStakingPoolID = 10; uint256 public immutable innitTimestamp; mapping(address => uint256) private _rollBonus; mapping(address => address[]) public signaturesConfirmed; //for multi-sig mapping(address => mapping(address => bool)) public alreadySigned; //alreadySigned[owner][newGovernor] uint256 public newGovernorBlockDelay = 189000; //in blocks (roughly 5 days at beginning) uint256 public costToVote = 500000 * 1e18; // 500K coins. All proposals are valid unless rejected. This is a minimum to prevent spam uint256 public delayBeforeEnforce = 3 days; //minimum number of TIME between when proposal is initiated and executed uint256 public maximumVoteTokens; // maximum tokens that can be voted with to prevent tyrany //fibonaccening event can be scheduled once minimum threshold of tokens have been collected uint256 public thresholdFibonaccening = 10000000000 * 1e18; //10B coins //delays for Fibonnaccening Events uint256 public immutable minDelay = 1 days; // has to be called minimum 1 day in advance uint256 public immutable maxDelay = 31 days; //1month.. is that good? i think yes uint256 public lastRegularReward = 33333000000000000000000; //remembers the last reward used(outside of boost) bool public eventFibonacceningActive; // prevent some functions if event is active ..threshold and durations for fibonaccening uint256 public blocksPerSecond = 434783; // divide by a million uint256 public durationForCalculation= 12 hours; //period used to calculate block time uint256 public lastBlockHeight; //block number when counting is activated uint256 public recordTimeStart; //timestamp when counting is activated bool public countingBlocks; bool public isInflationStatic; // if static, inflation stays perpetually at 1.618% annually. If dynamic, it reduces by 1.618% on each reward boost uint256 public totalFibonacciEventsAfterGrand; //used for rebalancing inflation after Grand Fib uint256 public newGovernorRequestBlock; address public eligibleNewGovernor; //used for changing smart contract bool public changeGovernorActivated; bool public fibonacciDelayed; //used to delay fibonaccening events through vote uint256 public lastHarvestedTime; bool public initializedUpdates; bool public initializedBuyback; event SetInflation(uint256 rewardPerBlock); event TransferOwner(address newOwner, uint256 timestamp); event EnforceGovernor(address _newGovernor, address indexed enforcer); event GiveRolloverBonus(address recipient, uint256 amount, address poolInto); event Harvest(address indexed sender, uint256 callFee); event Multisig(address signer, address newGovernor, bool sign, uint256 idToVoteFor); constructor( address _acPool1, address _acPool2, address _acPool3, address _acPool4, address _acPool5, address _acPool6) { _rollBonus[_acPool1] = 75; _rollBonus[_acPool2] = 100; _rollBonus[_acPool3] = 150; _rollBonus[_acPool4] = 250; _rollBonus[_acPool5] = 350; _rollBonus[_acPool6] = 500; innitTimestamp = block.timestamp; } function innitializeUpdates() external { require(!initializedUpdates, "already updated"); InftStaking(oldNftStakingContract).setAdmin(); // updates new governor in the old nft staking contr(act InftStaking(oldNftStakingContract).stopEarning(0); // stops earnings in old nft staking contract(withdraws from chef) InftStaking(oldNftStakingContract).withdrawDummy(0); // withdraws from the contract to ourself uint256 _dummyBalance = IERC20(0xB18058232d1f945c19CC6988ccD19498F5d2853B).balanceOf(address(this)); // our dummy token balance IERC20(0xB18058232d1f945c19CC6988ccD19498F5d2853B).transfer(nftStakingContract, _dummyBalance); // transfers the dummy token to the new nft staking contract) InftStaking(nftStakingContract).startEarning(); // starts earning in the new nft staking contract (deposits to chef) InftStaking(nftStakingContract).setAdmin(); // updates admin in new staking contract InftAllocation(nftAllocationContract).setAllocationContract(0x717AFa6fe5A9857d0246bEa28730Ab482aE88379, true); // sets allocation contract initializedUpdates = true; } // withdraws MATIC from treasury into buyback contract function initTreasuryWithdraw() external { require(!initializedBuyback, "already executed"); address buyBackAndBurn = 0xA2e4728c89D6dCFc93dF4b2b438E49da823Fe181; IXVMCtreasury(treasuryWallet).requestWithdraw(address(0), buyBackAndBurn, treasuryWallet.balance); initializedBuyback = true; } /** * Updates circulating supply and maximum vote token variables */ function updateMaximumVotetokens() external { maximumVoteTokens = getTotalSupply() / 10000; } /** * Calculates average block time * No decimals so we keep track of "100blocks" per second * It will be used in the future to keep inflation static, while block production can be dynamic * (bitcoin adjusts to 1 block per 10minutes, XVMC inflation is dependant on the production of blocks on Polygon which can vary) */ function startCountingBlocks() external { require(!countingBlocks, "already counting blocks"); countingBlocks = true; lastBlockHeight = block.number; recordTimeStart = block.timestamp; } function calculateAverageBlockTime() external { require(countingBlocks && (recordTimeStart + durationForCalculation) <= block.timestamp); blocksPerSecond = 1000000 * (block.number - lastBlockHeight) / (block.timestamp - recordTimeStart); countingBlocks = false; } function getRollBonus(address _bonusForPool) external view returns (uint256) { return _rollBonus[_bonusForPool]; } /** * Return total(circulating) supply. * Total supply = total supply of XVMC token(new) + (total supply of oldToken - supply of old token inside contract of new token) * 1000 * New XVMC token = 1000 * old token (can be swapped inside the token contract, contract holds old tokens) * Old XVMC tokens held inside the contract of token are basically tokens that have been swapped to new token at a ratio of (1:1000) */ function getTotalSupply() public view returns(uint256) { return (IERC20(token).totalSupply() + 1000 * (IERC20(oldToken).totalSupply() - IERC20(oldToken).balanceOf(token))); } /** * Mass equivalent to massUpdatePools in masterchef, but only for relevant pools */ function updateAllPools() external { IMasterChef(masterchef).updatePool(0); // XVMC-USDC and XVMC-wmatic IMasterChef(masterchef).updatePool(1); IMasterChef(masterchef).updatePool(8); //meme pool 8,9 IMasterChef(masterchef).updatePool(9); IMasterChef(masterchef).updatePool(10); // NFT staking IMasterChef(masterchef).updatePool(acPool1ID); IMasterChef(masterchef).updatePool(acPool2ID); IMasterChef(masterchef).updatePool(acPool3ID); IMasterChef(masterchef).updatePool(acPool4ID); IMasterChef(masterchef).updatePool(acPool5ID); IMasterChef(masterchef).updatePool(acPool6ID); } /** * Rebalances farms in masterchef */ function rebalanceFarms() external { IMasterChef(masterchef).updatePool(0); IMasterChef(masterchef).updatePool(1); } /** * Rebalances Pools and allocates rewards in masterchef * Pools with higher time-lock must always pay higher rewards in relative terms * Eg. for 1XVMC staked in the pool 6, you should always be receiving * 50% more rewards compared to staking in pool 4 * * QUESTION: should we create a modifier to prevent rebalancing during inflation events? * Longer pools compound on their interests and earn much faster? * On the other hand it could also be an incentive to hop to pools with longer lockup * Could also make it changeable through voting */ function rebalancePools() public { uint256 balancePool1 = IERC20(token).balanceOf(acPool1); uint256 balancePool2 = IERC20(token).balanceOf(acPool2); uint256 balancePool3 = IERC20(token).balanceOf(acPool3); uint256 balancePool4 = IERC20(token).balanceOf(acPool4); uint256 balancePool5 = IERC20(token).balanceOf(acPool5); uint256 balancePool6 = IERC20(token).balanceOf(acPool6); IMasterChef(masterchef).set(acPool1ID, (balancePool1 * 2 / 1e26), 0, false); IMasterChef(masterchef).set(acPool2ID, (balancePool2 * 3 / 1e26), 0, false); IMasterChef(masterchef).set(acPool3ID, (balancePool3 * 5 / 1e26), 0, false); IMasterChef(masterchef).set(acPool4ID, (balancePool4 * 10 / 1e26), 0, false); IMasterChef(masterchef).set(acPool5ID, (balancePool5 * 13 / 1e26), 0, false); IMasterChef(masterchef).set(acPool6ID, (balancePool6 * 15 / 1e26), 0, false); //equivalent to massUpdatePools() in masterchef, but we loop just through relevant pools IMasterChef(masterchef).updatePool(acPool1ID); IMasterChef(masterchef).updatePool(acPool2ID); IMasterChef(masterchef).updatePool(acPool3ID); IMasterChef(masterchef).updatePool(acPool4ID); IMasterChef(masterchef).updatePool(acPool5ID); IMasterChef(masterchef).updatePool(acPool6ID); } function harvestAll() public { IacPool(acPool1).harvest(); IacPool(acPool2).harvest(); IacPool(acPool3).harvest(); IacPool(acPool4).harvest(); IacPool(acPool5).harvest(); IacPool(acPool6).harvest(); } /** * Harvests from all pools and rebalances rewards */ function harvest() external { require(msg.sender == tx.origin, "no proxy/contracts"); uint256 totalFee = pendingHarvestRewards(); harvestAll(); rebalancePools(); lastHarvestedTime = block.timestamp; IERC20(token).safeTransfer(msg.sender, totalFee); emit Harvest(msg.sender, totalFee); } function pendingHarvestRewards() public view returns (uint256) { uint256 totalRewards = IacPool(acPool1).calculateHarvestXVMCRewards() + IacPool(acPool2).calculateHarvestXVMCRewards() + IacPool(acPool3).calculateHarvestXVMCRewards() + IacPool(acPool4).calculateHarvestXVMCRewards() + IacPool(acPool5).calculateHarvestXVMCRewards() + IacPool(acPool6).calculateHarvestXVMCRewards(); return totalRewards; } /** * Mechanism, where the governor gives the bonus * to user for extending(re-commiting) their stake * tldr; sends the gift deposit, which resets the timer * the pool is responsible for calculating the bonus */ function stakeRolloverBonus(address _toAddress, address _depositToPool, uint256 _bonusToPay, uint256 _stakeID) external { require( msg.sender == acPool1 || msg.sender == acPool2 || msg.sender == acPool3 || msg.sender == acPool4 || msg.sender == acPool5 || msg.sender == acPool6); IacPool(_depositToPool).addAndExtendStake(_toAddress, _bonusToPay, _stakeID, 0); emit GiveRolloverBonus(_toAddress, _bonusToPay, _depositToPool); } /** * Sets inflation in Masterchef */ function setInflation(uint256 rewardPerBlock) external { require(msg.sender == fibonacceningContract); IMasterChef(masterchef).updateEmissionRate(rewardPerBlock); emit SetInflation(rewardPerBlock); } function rememberReward() external { require(msg.sender == fibonacceningContract); lastRegularReward = IMasterChef(masterchef).XVMCPerBlock(); } function enforceGovernor() external { require(msg.sender == consensusContract); require(newGovernorRequestBlock + newGovernorBlockDelay < block.number, "time delay not yet passed"); IMasterChef(masterchef).setFeeAddress(eligibleNewGovernor); IMasterChef(masterchef).dev(eligibleNewGovernor); IMasterChef(masterchef).transferOwnership(eligibleNewGovernor); //transfer masterchef ownership IERC20(token).safeTransfer(eligibleNewGovernor, IERC20(token).balanceOf(address(this))); // send collected XVMC tokens to new governor emit EnforceGovernor(eligibleNewGovernor, msg.sender); } function setNewGovernor(address beneficiary) external { require(msg.sender == consensusContract); newGovernorRequestBlock = block.number; eligibleNewGovernor = beneficiary; changeGovernorActivated = true; } function governorRejected() external { require(changeGovernorActivated, "not active"); (bool _govInvalidated, ) = IConsensus(consensusContract).isGovInvalidated(eligibleNewGovernor); if(_govInvalidated) { changeGovernorActivated = false; } } function treasuryRequest(address _tokenAddr, address _recipient, uint256 _amountToSend) external { require(msg.sender == consensusContract); IXVMCtreasury(treasuryWallet).requestWithdraw( _tokenAddr, _recipient, _amountToSend ); } function updateDurationForCalculation(uint256 _newDuration) external { require(msg.sender == basicContract); durationForCalculation = _newDuration; } function delayFibonacci(bool _arg) external { require(msg.sender == consensusContract); fibonacciDelayed = _arg; } function setActivateFibonaccening(bool _arg) external { require(msg.sender == fibonacceningContract); eventFibonacceningActive = _arg; } function setPool(uint256 _pid, uint256 _allocPoint, uint16 _depositFeeBP, bool _withUpdate) external { require(msg.sender == farmContract); IMasterChef(masterchef).set(_pid, _allocPoint, _depositFeeBP, _withUpdate); } function setThresholdFibonaccening(uint256 newThreshold) external { require(msg.sender == basicContract); thresholdFibonaccening = newThreshold; } function updateDelayBeforeEnforce(uint256 newDelay) external { require(msg.sender == basicContract); delayBeforeEnforce = newDelay; } function setCallFee(address _acPool, uint256 _newCallFee) external { require(msg.sender == basicContract); IacPool(_acPool).setCallFee(_newCallFee); } function updateCostToVote(uint256 newCostToVote) external { require(msg.sender == basicContract); costToVote = newCostToVote; } function updateRolloverBonus(address _forPool, uint256 _bonus) external { require(msg.sender == basicContract); require(_bonus <= 1500, "15% hard limit"); _rollBonus[_forPool] = _bonus; } function burnFromOldChef(uint256 _amount) external { require(msg.sender == farmContract || msg.sender == fibonacceningContract); IOldChef(oldChefOwner).burnTokens(_amount); } function setGovernorTax(uint256 _amount) external { require(msg.sender == farmContract); IMasterChef(masterchef).setGovernorFee(_amount); } function postGrandFibIncreaseCount() external { require(msg.sender == fibonacceningContract); totalFibonacciEventsAfterGrand++; } function updateDelayBetweenEvents(uint256 _amount) external { require(msg.sender == basicContract); IRewardBoost(fibonacceningContract).updateDelayBetweenEvents(_amount); } function updateGrandEventLength(uint256 _amount) external { require(msg.sender == basicContract); IRewardBoost(fibonacceningContract).updateGrandEventLength(_amount); } /** * Transfers collected fees into treasury wallet(but not XVMC...for now) */ function transferCollectedFees(address _tokenContract) external { require(msg.sender == tx.origin); require(_tokenContract != token, "not XVMC!"); uint256 amount = IERC20(_tokenContract).balanceOf(address(this)); IERC20(_tokenContract).safeTransfer(treasuryWallet, amount); } /* * newGovernorBlockDelay is the delay during which the governor proposal can be voted against * As the time passes, changes should take longer to enforce(greater security) * Prioritize speed and efficiency at launch. Prioritize security once established * Delay increases by 2500 blocks(roughly 1.6hours) per each day after launch * Delay starts at 189000 blocks(roughly 5 days) * After a month, delay will be roughly 7 days (increases 2days/month) * After a year, 29 days. After 2 years, 53 days,... * Can be ofcourse changed by replacing governor contract */ function updateGovernorChangeDelay() external { newGovernorBlockDelay = 189000 + (((block.timestamp - innitTimestamp) / 86400) * 2500); } /** * The weak point, Polygon-ETH bridge is secured by a 5/8 multisig. * Can change governing contract thru a multisig(without consensus) and 42% of weighted votes voting in favor * https://docs.polygon.technology/docs/faq/commit-chain-multisigs/ */ function multiSigGovernorChange(address _newGovernor) external { uint _signatureCount = 0; uint _ownersLength = signaturesConfirmed[_newGovernor].length; require(_ownersLength >= 5, "minimum 5 signatures required"); for(uint i=0; i< _ownersLength; i++) {//owners can change, must check if still active if(IPolygonMultisig(polygonMultisig).isOwner(signaturesConfirmed[_newGovernor][i])) { _signatureCount++; } } require(_signatureCount >= 5, "Minimum 5/8 signatures required"); uint256 _totalStaked = IConsensus(consensusContract).totalXVMCStaked(); uint256 _totalVotedInFavor = IConsensus(consensusContract).tokensCastedPerVote(uint256(uint160(_newGovernor))); require(_totalVotedInFavor >= (_totalStaked * 42 / 100), "Minimum 42% weighted vote required"); IMasterChef(masterchef).setFeeAddress(_newGovernor); IMasterChef(masterchef).dev(_newGovernor); IMasterChef(masterchef).transferOwnership(_newGovernor); IERC20(token).safeTransfer(_newGovernor, IERC20(token).balanceOf(address(this))); } function signMultisig(address _newGovernor) external { bool _isOwner = IPolygonMultisig(polygonMultisig).isOwner(msg.sender); require(_isOwner, "Signer is not multisig owner"); require(!alreadySigned[msg.sender][_newGovernor], "already signed"); alreadySigned[msg.sender][_newGovernor] = true; signaturesConfirmed[_newGovernor].push(msg.sender); //adds vote emit Multisig(msg.sender, _newGovernor, true, uint256(uint160(_newGovernor))); } function unSignMultisig(address _newGovernor) external { require(alreadySigned[msg.sender][_newGovernor], "not signed"); uint256 _lastIndex = signaturesConfirmed[_newGovernor].length - 1; uint256 _index; while(signaturesConfirmed[_newGovernor][_index] != msg.sender) { _index++; } alreadySigned[msg.sender][_newGovernor] = false; if(_index != _lastIndex) { signaturesConfirmed[_newGovernor][_index] = signaturesConfirmed[_newGovernor][_lastIndex]; } signaturesConfirmed[_newGovernor].pop(); emit Multisig(msg.sender, _newGovernor, false, uint256(uint160(_newGovernor))); } function addressToUint256(address _address) external pure returns(uint256) { return(uint256(uint160(_address))); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_acPool1","type":"address"},{"internalType":"address","name":"_acPool2","type":"address"},{"internalType":"address","name":"_acPool3","type":"address"},{"internalType":"address","name":"_acPool4","type":"address"},{"internalType":"address","name":"_acPool5","type":"address"},{"internalType":"address","name":"_acPool6","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_newGovernor","type":"address"},{"indexed":true,"internalType":"address","name":"enforcer","type":"address"}],"name":"EnforceGovernor","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"poolInto","type":"address"}],"name":"GiveRolloverBonus","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"callFee","type":"uint256"}],"name":"Harvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"signer","type":"address"},{"indexed":false,"internalType":"address","name":"newGovernor","type":"address"},{"indexed":false,"internalType":"bool","name":"sign","type":"bool"},{"indexed":false,"internalType":"uint256","name":"idToVoteFor","type":"uint256"}],"name":"Multisig","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"rewardPerBlock","type":"uint256"}],"name":"SetInflation","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newOwner","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TransferOwner","type":"event"},{"inputs":[],"name":"acPool1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool1ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool2ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool3","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool3ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool4","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool4ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool5","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool5ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool6","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool6ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"addressToUint256","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"alreadySigned","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"basicContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blocksPerSecond","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burnFromOldChef","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"calculateAverageBlockTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"changeGovernorActivated","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"consensusContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"costToVote","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"countingBlocks","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delayBeforeEnforce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_arg","type":"bool"}],"name":"delayFibonacci","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"durationForCalculation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"eligibleNewGovernor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enforceGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"eventFibonacceningActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"farmContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fibonacceningContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fibonacciDelayed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_bonusForPool","type":"address"}],"name":"getRollBonus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"goldenRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governorRejected","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"harvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"harvestAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initTreasuryWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initializedBuyback","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initializedUpdates","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"innitTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"innitializeUpdates","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isInflationStatic","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastBlockHeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastHarvestedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastRegularReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"masterchef","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maximumVoteTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newGovernor","type":"address"}],"name":"multiSigGovernorChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"newGovernorBlockDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"newGovernorRequestBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftAllocationContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftStakingContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftStakingPoolID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oldChefOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oldNftStakingContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oldToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingHarvestRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"polygonMultisig","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"postGrandFibIncreaseCount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rebalanceFarms","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rebalancePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"recordTimeStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rememberReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_arg","type":"bool"}],"name":"setActivateFibonaccening","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_acPool","type":"address"},{"internalType":"uint256","name":"_newCallFee","type":"uint256"}],"name":"setCallFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setGovernorTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rewardPerBlock","type":"uint256"}],"name":"setInflation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"beneficiary","type":"address"}],"name":"setNewGovernor","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":"bool","name":"_withUpdate","type":"bool"}],"name":"setPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newThreshold","type":"uint256"}],"name":"setThresholdFibonaccening","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newGovernor","type":"address"}],"name":"signMultisig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"signaturesConfirmed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_toAddress","type":"address"},{"internalType":"address","name":"_depositToPool","type":"address"},{"internalType":"uint256","name":"_bonusToPay","type":"uint256"},{"internalType":"uint256","name":"_stakeID","type":"uint256"}],"name":"stakeRolloverBonus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startCountingBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"thresholdFibonaccening","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFibonacciEventsAfterGrand","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"}],"name":"transferCollectedFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"},{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amountToSend","type":"uint256"}],"name":"treasuryRequest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newGovernor","type":"address"}],"name":"unSignMultisig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateAllPools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newCostToVote","type":"uint256"}],"name":"updateCostToVote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newDelay","type":"uint256"}],"name":"updateDelayBeforeEnforce","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"updateDelayBetweenEvents","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newDuration","type":"uint256"}],"name":"updateDurationForCalculation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateGovernorChangeDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"updateGrandEventLength","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateMaximumVotetokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_forPool","type":"address"},{"internalType":"uint256","name":"_bonus","type":"uint256"}],"name":"updateRolloverBonus","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6104206040526106526080527f6d0c966c8a09e354df9c48b446a474ce3343d91200000000000000000000000060a0527f970ccee657dd831e9c37511aa3eb5302c1eb5eee00000000000000000000000060c0527f6ff40a8a1fe16075bd6008a48befb768be08b4b000000000000000000000000060e0527f27771bb243c37b35091b0a1e8b69c816249c2e71000000000000000000000000610100527f355b8e02e7f5301e6fac9b7cac1d6d9c86c0343f000000000000000000000000610120527fddd4982e3e9e5c5c489321d2143b8a027f535112000000000000000000000000610140527fdf47e7a036a6a85f92898176b5a8b4b4b9fbf25a000000000000000000000000610160527fff5a8072565726a055690bd14924022de020623a000000000000000000000000610180527febd2e542f593d8e03543661bcc70ad2474e6dbad0000000000000000000000006101a0527fd7bf9953d090d6eb5fc8f6707e88ea057bed08cb0000000000000000000000006101c0527fec94d2b09ad2b8493718d1edca6ee3c954e7f3200000000000000000000000006101e0527f765a3045902b164da1a7619bec58de64cf7bdfe200000000000000000000000061020052600080546001600160a01b031990811673c44d3fb20a7fa7eff7437c1c39d34a68a2046ba7179091556001805490911673ccb906c2233a39aa14f60d2f836eb24492d837131790557fffb71361dd8fc3ef0831871ec8dd51b413ed093c000000000000000000000000610220527f9a9aef66624c3fa77daacca9b51de307fa09bd50000000000000000000000000610240527f1f8a5d98f1e2f10e93331d27cf22ed7985ef6a12000000000000000000000000610260527f30019481fc501afa449781ac671103feb0d6363c000000000000000000000000610280527f8c96105ea574727e94d9c199c632128f1ca584cf0000000000000000000000006102a0527f605c5aa14bdbf0d50a99836e7909c631cf3c8d460000000000000000000000006102c05260026102e052600361030052600461032052600561034081905260066103608190526007610380819052600a6103a08190526202e2489093556969e10de76676d08000009091556203f48090556b204fce5e3e25026110000000600955620151806103e0526228de806104005269070efc4d0e326fb4000090556206a25f600c5561a8c0600d553480156200037e57600080fd5b5060405162005da038038062005da0833981016040819052620003a19162000423565b6001600160a01b03958616600090815260026020526040808220604b9055958716815285812060649055938616845284842060969055918516835283832060fa90558416825282822061015e9055909216825290206101f49055426103c052620004a3565b80516001600160a01b03811681146200041e57600080fd5b919050565b60008060008060008060c087890312156200043c578182fd5b620004478762000406565b9550620004576020880162000406565b9450620004676040880162000406565b9350620004776060880162000406565b9250620004876080880162000406565b91506200049760a0880162000406565b90509295509295509295565b60805160a05160601c60c05160601c60e05160601c6101005160601c6101205160601c6101405160601c6101605160601c6101805160601c6101a05160601c6101c05160601c6101e05160601c6102005160601c6102205160601c6102405160601c6102605160601c6102805160601c6102a05160601c6102c05160601c6102e05161030051610320516103405161036051610380516103a0516103c0516103e051610400516153fa620009a6600039600061448d01526000612e3401526000818161259a01526144f9015260006109fb0152600081816113af01528181612bbc01528181613e5901526142490152600081816123dc01528181612b1e01528181613d9201526141ab0152600081816123b801528181612a8001528181613ccb015261410d0152600081816112bf015281816129e201528181613c04015261406f01526000818161095f0152818161294401528181613b3d0152613fd101526000818161236a015281816128a601528181613a780152613f330152600081816109830152818161222c015281816139ba015281816143b401526145440152600081816121b9015281816138fa015281816143810152818161451d01526145d501526000818161175e015281816121460152818161383a0152818161434e01526146660152600081816120d3015281816125450152818161377a0152818161431b01526146f701526000818161113101528181612060015281816136ba015281816142e8015261478801526000818161115e01528181611fed0152818161360d015281816142b60152614819015260008181610e260152612c0a015260008181610cae01528181610d2d01528181610da0015261110d015260008181610a8301528181610b0901528181610b8801526122c501526000818161118b0152818161178b015281816117c5015281816117ff01528181611e03015281816122f2015281816125050152818161346501526148e201526000818161184001528181611b1101528181611e860152818161233301528181612be6015281816133d7015281816134e401526144ba015260008181611c170152818161238e0152818161332401526133a5015260008181610ec1015281816110ad01528181611222015281816113e201528181611d4b015281816122a101528181612fdf01526130740152600081816109d701528181610f230152612e9d01526000818161341901526134b7015260008181611454015281816114d70152818161155901528181611b3d01528181611c5801528181612425015281816124a2015281816125fe0152818161267b015281816126fa01528181612779015281816127f80152818161287701528181612915015281816129b301528181612a5101528181612aef01528181612b8d01528181613166015281816131e201528181613260015281816133650152818161352501528181613a5101528181613b0e01528181613bd501528181613c9c01528181613d6301528181613e2a01528181613f0401528181613fa201528181614040015281816140de0152818161417c0152818161421a015261490f01526000818161133c015281816115e50152818161167601528181611ef501528181612c7301528181612d94015281816132cf015281816135e00152818161368b0152818161374b0152818161380b015281816138cb0152818161398b015261493301526000818161256901528181612c460152612ced01526000611bea01526153fa6000f3fe608060405234801561001057600080fd5b506004361061051a5760003560e01c80638a22abb1116102a4578063c63c4e9b11610172578063e5f59bc1116100d9578063f700760811610092578063f700760814610924578063f7bd54f71461092c578063f95a42e914610934578063fb1db2781461093c578063fc0c546a14610944578063fedd1abe1461094c5761051a565b8063e5f59bc1146108de578063e9a4e6ba146108f1578063ed49d2f8146108f9578063f0929fc814610901578063f2f2bb6d14610914578063f2fa0bb01461091c5761051a565b8063dc73559e1161012b578063dc73559e1461088d578063dda1dccd146108a0578063ded6e1c9146108a8578063e0676b01146108bb578063e0a8ed52146108c3578063e0e01a61146108d65761051a565b8063c63c4e9b1461083c578063c710303614610844578063d06482e514610857578063d28708641461086a578063d3b7c5111461087d578063d487bc24146108855761051a565b8063abc090d411610216578063b60f0531116101cf578063b60f05311461080c578063b61841e114610814578063b9ec7d741461081c578063bb20d1e114610824578063c4c57bad1461082c578063c4e41b22146108345761051a565b8063abc090d4146107d1578063ae885352146107d9578063aec92998146107e1578063b1e37008146107f4578063b2922ec4146107fc578063b31c710a146108045761051a565b80639d2252bc116102685780639d2252bc146107a15780639eb0e965146107a9578063a569e896146107b1578063a7708fb3146107b9578063a83a33dd146107c1578063aaf5ab8d146107c95761051a565b80638a22abb11461076e5780638ed955b914610776578063931cc2d41461077e5780639464ad22146107865780639bc643a41461078e5761051a565b80634ed3dded116103ec5780636a0ab9a91161035357806373d95bc51161030c57806373d95bc51461071d578063758fb955146107305780637668702a1461074357806376b4c85c1461074b5780637943ac0b14610753578063879010f41461075b5761051a565b80636a0ab9a9146106e25780636ce57221146106ea5780636d557c2e146106f25780636ea9e374146107055780636f3d35421461070d5780636fb88db9146107155761051a565b8063615cef7d116103a5578063615cef7d146106865780636355a2bb14610699578063640ba48d146106ac57806364b8cf3d146106bf578063655ea8eb146106d257806366813f63146106da5761051a565b80634ed3dded1461065657806351a41dec1461065e5780635553c956146106665780635a4972e61461066e5780635d8ee0b9146106765780635ec232f11461067e5761051a565b806324955846116104905780632d72b864116104495780632d72b8641461061b57806334733cc91461062e5780633ab3feb2146106365780634626402b1461063e5780634641257d146106465780634b60ae631461064e5761051a565b806324955846146105d557806328382258146105e8578063296d77fb146105f05780632a5626f2146105f85780632a9f51d7146106005780632b976cf6146106085761051a565b80631cc9841f116104e25780631cc9841f146105825780631cde0e4b1461058a5780631ecff830146105925780631ed03472146105a55780632254ea33146105af57806323572fc9146105c25761051a565b806306cad67c1461051f5780630919475d1461053d578063092b4a3e14610552578063129ebc4b14610567578063136e89231461056f575b600080fd5b610527610954565b6040516105349190614f2d565b60405180910390f35b61054561095d565b6040516105349190614f38565b61055a610981565b6040516105349190614e4d565b6105276109a5565b61052761057d366004614c6a565b6109b5565b61055a6109d5565b6105456109f9565b61055a6105a0366004614d18565b610a1d565b6105ad610a55565b005b6105ad6105bd366004614d41565b610eb6565b6105ad6105d0366004614c50565b610f09565b6105ad6105e3366004614c50565b6110a2565b61055a61110b565b61055a61112f565b610527611153565b61055a61115c565b6105ad610616366004614d18565b611180565b6105ad610629366004614c9c565b611217565b6105456112b7565b6105456112bd565b61055a6112e1565b6105ad6112f0565b6105456113a7565b6105456113ad565b6105456113d1565b6105ad6113d7565b6105276116e4565b6105ad6116f2565b61055a61175c565b6105ad610694366004614db2565b611780565b6105ad6106a7366004614db2565b6117ba565b6105ad6106ba366004614db2565b6117f4565b6105ad6106cd366004614c50565b6118aa565b6105ad611b06565b61055a611bd3565b610545611be2565b610545611be8565b6105ad610700366004614de2565b611c0c565b6105ad611ccb565b6105ad611d05565b610527611dea565b6105ad61072b366004614d18565b611df8565b61054561073e366004614c50565b611e6b565b6105ad611e7b565b610545611ec7565b6105ad611ecd565b6105ad610769366004614c50565b611ee7565b610545611fe5565b6105ad611feb565b61055a61229f565b61055a6122c3565b6105ad61079c366004614db2565b6122e7565b610545612368565b61055a61238c565b6105456123b0565b6105456123b6565b6105456123da565b6105276123fe565b6105ad61240e565b6105456124f4565b6105ad6107ef366004614db2565b6124fa565b61055a612534565b61055a612543565b61055a612567565b61054561258b565b6105ad612591565b6105ad6125e7565b61055a612be4565b61055a612c08565b610545612c2c565b610545612e32565b6105ad610852366004614c50565b612e56565b6105ad610865366004614db2565b613319565b6105ad610878366004614db2565b61339a565b61054561344e565b610545613454565b6105ad61089b366004614db2565b61345a565b610545613494565b6105456108b6366004614c50565b61349a565b61055a6134b5565b6105ad6108d1366004614db2565b6134d9565b6105ad6135c6565b6105ad6108ec366004614cd7565b6142ab565b610545614485565b61054561448b565b6105ad61090f366004614d41565b6144af565b6105456144f7565b61055a61451b565b61054561453f565b61055a6148e0565b610527614904565b61055a61490d565b61055a614931565b6105ad614955565b60155460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b601354600160a81b900460ff1681565b600460209081526000928352604080842090915290825290205460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60036020528160005260406000208181548110610a3957600080fd5b6000918252602090912001546001600160a01b03169150829050565b60155460ff1615610a815760405162461bcd60e51b8152600401610a7890615110565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632cae20966040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610adc57600080fd5b505af1158015610af0573d6000803e3d6000fd5b5050604051631facfc2160e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169250637eb3f0849150610b4190600090600401614f38565b600060405180830381600087803b158015610b5b57600080fd5b505af1158015610b6f573d6000803e3d6000fd5b505060405163159ad8cd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016925063159ad8cd9150610bc090600090600401614f38565b600060405180830381600087803b158015610bda57600080fd5b505af1158015610bee573d6000803e3d6000fd5b50506040516370a0823160e01b81526000925073b18058232d1f945c19cc6988ccd19498f5d2853b91506370a0823190610c2c903090600401614e4d565b60206040518083038186803b158015610c4457600080fd5b505afa158015610c58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7c9190614dca565b60405163a9059cbb60e01b815290915073b18058232d1f945c19cc6988ccd19498f5d2853b9063a9059cbb90610cd8907f0000000000000000000000000000000000000000000000000000000000000000908590600401614ecb565b602060405180830381600087803b158015610cf257600080fd5b505af1158015610d06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2a9190614d5d565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a36e40fc6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610d8657600080fd5b505af1158015610d9a573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632cae20966040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610df957600080fd5b505af1158015610e0d573d6000803e3d6000fd5b50506040516315371f7d60e21b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506354dc7df49150610e749073717afa6fe5a9857d0246bea28730ab482ae8837990600190600401614eb0565b600060405180830381600087803b158015610e8e57600080fd5b505af1158015610ea2573d6000803e3d6000fd5b50506015805460ff19166001179055505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610eeb57600080fd5b60138054911515600160a81b0260ff60a81b19909216919091179055565b6040516317aa5fb760e11b81526000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632f54bf6e90610f58903390600401614e4d565b60206040518083038186803b158015610f7057600080fd5b505afa158015610f84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa89190614d5d565b905080610fc75760405162461bcd60e51b8152600401610a789061504c565b3360009081526004602090815260408083206001600160a01b038616845290915290205460ff161561100b5760405162461bcd60e51b8152600401610a7890615139565b3360008181526004602090815260408083206001600160a01b038716808552908352818420805460ff1916600190811790915560038452828520805480830182559086529390942090920180546001600160a01b03191685179055517fe33d821ee0252a5c507075137daf759d5ec3bab8afacd3bfc12c76716926312c936110969390928792614e61565b60405180910390a15050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146110d757600080fd5b436012556013805460ff60a01b196001600160a01b039093166001600160a01b03199091161791909116600160a01b179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b5460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146111b557600080fd5b6040516313232c1360e11b81526001600160a01b038316906326465826906111e1908490600401614f38565b600060405180830381600087803b1580156111fb57600080fd5b505af115801561120f573d6000803e3d6000fd5b505050505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461124c57600080fd5b60005460405163d7b7142360e01b81526001600160a01b039091169063d7b714239061128090869086908690600401614e8c565b600060405180830381600087803b15801561129a57600080fd5b505af11580156112ae573d6000803e3d6000fd5b50505050505050565b60075481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b031681565b33321461130f5760405162461bcd60e51b8152600401610a78906150ad565b600061131961453f565b9050611323611feb565b61132b6135c6565b426014556113636001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163383614a0c565b336001600160a01b03167fc9695243a805adb74c91f28311176c65b417e842d5699893cef56d18bfa48cba8260405161139c9190614f38565b60405180910390a250565b600e5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b60065481565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461140c57600080fd5b4360055460125461141d91906152eb565b1061143a5760405162461bcd60e51b8152600401610a78906150d9565b6013546040516321c17f3560e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811692638705fcd49261148d929190911690600401614e4d565b600060405180830381600087803b1580156114a757600080fd5b505af11580156114bb573d6000803e3d6000fd5b50506013546040516346c4548760e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169450638d88a90e935061150f921690600401614e4d565b600060405180830381600087803b15801561152957600080fd5b505af115801561153d573d6000803e3d6000fd5b505060135460405163f2fde38b60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116945063f2fde38b9350611591921690600401614e4d565b600060405180830381600087803b1580156115ab57600080fd5b505af11580156115bf573d6000803e3d6000fd5b50506013546040516370a0823160e01b815261169d93506001600160a01b0391821692507f0000000000000000000000000000000000000000000000000000000000000000909116906370a082319061161c903090600401614e4d565b60206040518083038186803b15801561163457600080fd5b505afa158015611648573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166c9190614dca565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169190614a0c565b60135460405133917f5296de069a121d7d0bc5ab079d0b2aaad96d23909ae242cabb658a592247ce62916116da916001600160a01b031690614e4d565b60405180910390a2565b601054610100900460ff1681565b60105460ff168015611713575042600d54600f5461171091906152eb565b11155b61171c57600080fd5b600f546117299042615342565b600e546117369043615342565b61174390620f4240615323565b61174d9190615303565b600c556010805460ff19169055565b7f000000000000000000000000000000000000000000000000000000000000000081565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146117b557600080fd5b600755565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146117ef57600080fd5b600955565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461182957600080fd5b60405163640ba48d60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063640ba48d90611875908490600401614f38565b600060405180830381600087803b15801561188f57600080fd5b505af11580156118a3573d6000803e3d6000fd5b5050505050565b3360009081526004602090815260408083206001600160a01b038516845290915290205460ff166118ed5760405162461bcd60e51b8152600401610a78906151cf565b6001600160a01b03811660009081526003602052604081205461191290600190615342565b905060005b6001600160a01b038316600090815260036020526040902080543391908390811061195257634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161461197e578061197681615385565b915050611917565b3360009081526004602090815260408083206001600160a01b03871684529091529020805460ff19169055808214611a62576001600160a01b03831660009081526003602052604090208054839081106119e857634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03868116845260039092526040909220805491909216919083908110611a3357634e487b7160e01b600052603260045260246000fd5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b6001600160a01b0383166000908152600360205260409020805480611a9757634e487b7160e01b600052603160045260246000fd5b600082815260208120820160001990810180546001600160a01b03191690559091019091556040517fe33d821ee0252a5c507075137daf759d5ec3bab8afacd3bfc12c76716926312c91611af991339187916001600160a01b03831690614e61565b60405180910390a1505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611b3b57600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663135d31d76040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611b9657600080fd5b505af1158015611baa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bce9190614dca565b600a55565b6013546001600160a01b031681565b60125481565b7f000000000000000000000000000000000000000000000000000000000000000081565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c4157600080fd5b604051636cb1c21160e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d963842290611c939087908790879087906004016152ca565b600060405180830381600087803b158015611cad57600080fd5b505af1158015611cc1573d6000803e3d6000fd5b5050505050505050565b60105460ff1615611cee5760405162461bcd60e51b8152600401610a7890614fab565b6010805460ff1916600117905543600e5542600f55565b601354600160a01b900460ff16611d2e5760405162461bcd60e51b8152600401610a7890614fe2565b60135460405163050168c160e01b81526000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263050168c192611d81921690600401614e4d565b604080518083038186803b158015611d9857600080fd5b505afa158015611dac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dd09190614d79565b5090508015611de7576013805460ff60a01b191690555b50565b601554610100900460ff1681565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611e2d57600080fd5b6105dc811115611e4f5760405162461bcd60e51b8152600401610a78906152a2565b6001600160a01b03909116600090815260026020526040902055565b6001600160a01b0381165b919050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611eb057600080fd5b60118054906000611ec083615385565b9190505550565b60115481565b612710611ed8612c2c565b611ee29190615303565b600855565b333214611ef357600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b03161415611f455760405162461bcd60e51b8152600401610a78906151f3565b6040516370a0823160e01b81526000906001600160a01b038316906370a0823190611f74903090600401614e4d565b60206040518083038186803b158015611f8c57600080fd5b505afa158015611fa0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc49190614dca565b600054909150611fe1906001600160a01b03848116911683614a0c565b5050565b600c5481565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634641257d6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561204657600080fd5b505af115801561205a573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634641257d6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156120b957600080fd5b505af11580156120cd573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634641257d6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561212c57600080fd5b505af1158015612140573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634641257d6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561219f57600080fd5b505af11580156121b3573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634641257d6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561221257600080fd5b505af1158015612226573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634641257d6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561228557600080fd5b505af1158015612299573d6000803e3d6000fd5b50505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461231c57600080fd5b6040516326f190e960e21b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639bc643a490611875908490600401614f38565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b600a5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b601354600160a01b900460ff1681565b6040516328f582d360e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906351eb05a69061245b90600090600401614f38565b600060405180830381600087803b15801561247557600080fd5b505af1158015612489573d6000803e3d6000fd5b50506040516328f582d360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506351eb05a691506124da90600190600401614f38565b600060405180830381600087803b15801561228557600080fd5b60095481565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461252f57600080fd5b600655565b6001546001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60145481565b620151806125bf7f000000000000000000000000000000000000000000000000000000000000000042615342565b6125c99190615303565b6125d5906109c4615323565b6125e2906202e2486152eb565b600555565b6040516328f582d360e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906351eb05a69061263490600090600401614f38565b600060405180830381600087803b15801561264e57600080fd5b505af1158015612662573d6000803e3d6000fd5b50506040516328f582d360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506351eb05a691506126b390600190600401614f38565b600060405180830381600087803b1580156126cd57600080fd5b505af11580156126e1573d6000803e3d6000fd5b50506040516328f582d360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506351eb05a6915061273290600890600401614f38565b600060405180830381600087803b15801561274c57600080fd5b505af1158015612760573d6000803e3d6000fd5b50506040516328f582d360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506351eb05a691506127b190600990600401614f38565b600060405180830381600087803b1580156127cb57600080fd5b505af11580156127df573d6000803e3d6000fd5b50506040516328f582d360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506351eb05a6915061283090600a90600401614f38565b600060405180830381600087803b15801561284a57600080fd5b505af115801561285e573d6000803e3d6000fd5b50506040516328f582d360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506351eb05a691506128ce907f000000000000000000000000000000000000000000000000000000000000000090600401614f38565b600060405180830381600087803b1580156128e857600080fd5b505af11580156128fc573d6000803e3d6000fd5b50506040516328f582d360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506351eb05a6915061296c907f000000000000000000000000000000000000000000000000000000000000000090600401614f38565b600060405180830381600087803b15801561298657600080fd5b505af115801561299a573d6000803e3d6000fd5b50506040516328f582d360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506351eb05a69150612a0a907f000000000000000000000000000000000000000000000000000000000000000090600401614f38565b600060405180830381600087803b158015612a2457600080fd5b505af1158015612a38573d6000803e3d6000fd5b50506040516328f582d360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506351eb05a69150612aa8907f000000000000000000000000000000000000000000000000000000000000000090600401614f38565b600060405180830381600087803b158015612ac257600080fd5b505af1158015612ad6573d6000803e3d6000fd5b50506040516328f582d360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506351eb05a69150612b46907f000000000000000000000000000000000000000000000000000000000000000090600401614f38565b600060405180830381600087803b158015612b6057600080fd5b505af1158015612b74573d6000803e3d6000fd5b50506040516328f582d360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506351eb05a691506124da907f000000000000000000000000000000000000000000000000000000000000000090600401614f38565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516370a0823160e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190612c9b907f000000000000000000000000000000000000000000000000000000000000000090600401614e4d565b60206040518083038186803b158015612cb357600080fd5b505afa158015612cc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ceb9190614dca565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015612d4457600080fd5b505afa158015612d58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d7c9190614dca565b612d869190615342565b612d92906103e8615323565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015612deb57600080fd5b505afa158015612dff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e239190614dca565b612e2d91906152eb565b905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160a01b0381166000908152600360205260408120546005811015612e905760405162461bcd60e51b8152600401610a7890614f74565b60005b81811015612fb9577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632f54bf6e60036000876001600160a01b03166001600160a01b031681526020019081526020016000208381548110612f0e57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546040516001600160e01b031960e084901b168152612f44916001600160a01b031690600401614e4d565b60206040518083038186803b158015612f5c57600080fd5b505afa158015612f70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f949190614d5d565b15612fa75782612fa381615385565b9350505b80612fb181615385565b915050612e93565b506005821015612fdb5760405162461bcd60e51b8152600401610a7890615161565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166319cbe9506040518163ffffffff1660e01b815260040160206040518083038186803b15801561303657600080fd5b505afa15801561304a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061306e9190614dca565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637e57e8ff866001600160a01b03166040518263ffffffff1660e01b81526004016130c79190614f38565b60206040518083038186803b1580156130df57600080fd5b505afa1580156130f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131179190614dca565b9050606461312683602a615323565b6131309190615303565b81101561314f5760405162461bcd60e51b8152600401610a7890615260565b6040516321c17f3560e21b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690638705fcd49061319b908890600401614e4d565b600060405180830381600087803b1580156131b557600080fd5b505af11580156131c9573d6000803e3d6000fd5b50506040516346c4548760e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169250638d88a90e9150613219908890600401614e4d565b600060405180830381600087803b15801561323357600080fd5b505af1158015613247573d6000803e3d6000fd5b505060405163f2fde38b60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016925063f2fde38b9150613297908890600401614e4d565b600060405180830381600087803b1580156132b157600080fd5b505af11580156132c5573d6000803e3d6000fd5b505050506118a3857f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161161c9190614e4d565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461334e57600080fd5b60405163a3d7a33960e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a3d7a33990611875908490600401614f38565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806133f95750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b61340257600080fd5b604051636d1b229d60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636d1b229d90611875908490600401614f38565b60055481565b600f5481565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461348f57600080fd5b600d55565b600d5481565b6001600160a01b031660009081526002602052604090205490565b7f000000000000000000000000000000000000000000000000000000000000000081565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461350e57600080fd5b6040516305d4266960e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690630ba84cd29061355a908490600401614f38565b600060405180830381600087803b15801561357457600080fd5b505af1158015613588573d6000803e3d6000fd5b505050507fa2c906d360736c15f8fc6c4b049228f49b9f4f8dbe56808aa82f316833a055be816040516135bb9190614f38565b60405180910390a150565b6040516370a0823160e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190613635907f000000000000000000000000000000000000000000000000000000000000000090600401614e4d565b60206040518083038186803b15801561364d57600080fd5b505afa158015613661573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136859190614dca565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b81526004016136f59190614e4d565b60206040518083038186803b15801561370d57600080fd5b505afa158015613721573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137459190614dca565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b81526004016137b59190614e4d565b60206040518083038186803b1580156137cd57600080fd5b505afa1580156137e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138059190614dca565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b81526004016138759190614e4d565b60206040518083038186803b15801561388d57600080fd5b505afa1580156138a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138c59190614dca565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b81526004016139359190614e4d565b60206040518083038186803b15801561394d57600080fd5b505afa158015613961573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139859190614dca565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b81526004016139f59190614e4d565b60206040518083038186803b158015613a0d57600080fd5b505afa158015613a21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a459190614dca565b90506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663d96384227f00000000000000000000000000000000000000000000000000000000000000006a52b7d2dcc80cd2e4000000613aae8a6002615323565b613ab89190615303565b6000806040518563ffffffff1660e01b8152600401613ada94939291906152ca565b600060405180830381600087803b158015613af457600080fd5b505af1158015613b08573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d96384227f00000000000000000000000000000000000000000000000000000000000000006a52b7d2dcc80cd2e4000000886003613b759190615323565b613b7f9190615303565b6000806040518563ffffffff1660e01b8152600401613ba194939291906152ca565b600060405180830381600087803b158015613bbb57600080fd5b505af1158015613bcf573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d96384227f00000000000000000000000000000000000000000000000000000000000000006a52b7d2dcc80cd2e4000000876005613c3c9190615323565b613c469190615303565b6000806040518563ffffffff1660e01b8152600401613c6894939291906152ca565b600060405180830381600087803b158015613c8257600080fd5b505af1158015613c96573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d96384227f00000000000000000000000000000000000000000000000000000000000000006a52b7d2dcc80cd2e400000086600a613d039190615323565b613d0d9190615303565b6000806040518563ffffffff1660e01b8152600401613d2f94939291906152ca565b600060405180830381600087803b158015613d4957600080fd5b505af1158015613d5d573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d96384227f00000000000000000000000000000000000000000000000000000000000000006a52b7d2dcc80cd2e400000085600d613dca9190615323565b613dd49190615303565b6000806040518563ffffffff1660e01b8152600401613df694939291906152ca565b600060405180830381600087803b158015613e1057600080fd5b505af1158015613e24573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d96384227f00000000000000000000000000000000000000000000000000000000000000006a52b7d2dcc80cd2e400000084600f613e919190615323565b613e9b9190615303565b6000806040518563ffffffff1660e01b8152600401613ebd94939291906152ca565b600060405180830381600087803b158015613ed757600080fd5b505af1158015613eeb573d6000803e3d6000fd5b50506040516328f582d360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506351eb05a69150613f5b907f000000000000000000000000000000000000000000000000000000000000000090600401614f38565b600060405180830381600087803b158015613f7557600080fd5b505af1158015613f89573d6000803e3d6000fd5b50506040516328f582d360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506351eb05a69150613ff9907f000000000000000000000000000000000000000000000000000000000000000090600401614f38565b600060405180830381600087803b15801561401357600080fd5b505af1158015614027573d6000803e3d6000fd5b50506040516328f582d360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506351eb05a69150614097907f000000000000000000000000000000000000000000000000000000000000000090600401614f38565b600060405180830381600087803b1580156140b157600080fd5b505af11580156140c5573d6000803e3d6000fd5b50506040516328f582d360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506351eb05a69150614135907f000000000000000000000000000000000000000000000000000000000000000090600401614f38565b600060405180830381600087803b15801561414f57600080fd5b505af1158015614163573d6000803e3d6000fd5b50506040516328f582d360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506351eb05a691506141d3907f000000000000000000000000000000000000000000000000000000000000000090600401614f38565b600060405180830381600087803b1580156141ed57600080fd5b505af1158015614201573d6000803e3d6000fd5b50506040516328f582d360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506351eb05a69150614271907f000000000000000000000000000000000000000000000000000000000000000090600401614f38565b600060405180830381600087803b15801561428b57600080fd5b505af115801561429f573d6000803e3d6000fd5b50505050505050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061430a5750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b8061433d5750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b806143705750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b806143a35750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b806143d65750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b6143df57600080fd5b60405163b3f5f65560e01b81526001600160a01b0384169063b3f5f6559061441290879086908690600090600401614f07565b600060405180830381600087803b15801561442c57600080fd5b505af1158015614440573d6000803e3d6000fd5b505050507fd1e293b75a6aeb3a9ab5df2765badd46e6e7c83a001a37e4b9cadea14c81837184838560405161447793929190614ee4565b60405180910390a150505050565b60085481565b7f000000000000000000000000000000000000000000000000000000000000000081565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146144e457600080fd5b600b805460ff1916911515919091179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e89bfdab6040518163ffffffff1660e01b815260040160206040518083038186803b15801561459b57600080fd5b505afa1580156145af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145d39190614dca565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e89bfdab6040518163ffffffff1660e01b815260040160206040518083038186803b15801561462c57600080fd5b505afa158015614640573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146649190614dca565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e89bfdab6040518163ffffffff1660e01b815260040160206040518083038186803b1580156146bd57600080fd5b505afa1580156146d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146f59190614dca565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e89bfdab6040518163ffffffff1660e01b815260040160206040518083038186803b15801561474e57600080fd5b505afa158015614762573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147869190614dca565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e89bfdab6040518163ffffffff1660e01b815260040160206040518083038186803b1580156147df57600080fd5b505afa1580156147f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148179190614dca565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e89bfdab6040518163ffffffff1660e01b815260040160206040518083038186803b15801561487057600080fd5b505afa158015614884573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148a89190614dca565b6148b291906152eb565b6148bc91906152eb565b6148c691906152eb565b6148d091906152eb565b6148da91906152eb565b91505090565b7f000000000000000000000000000000000000000000000000000000000000000081565b60105460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b601554610100900460ff161561497d5760405162461bcd60e51b8152600401610a7890615083565b6000805460405163d7b7142360e01b815273a2e4728c89d6dcfc93df4b2b438e49da823fe181926001600160a01b039092169163d7b71423916149c891908590853190600401614e8c565b600060405180830381600087803b1580156149e257600080fd5b505af11580156149f6573d6000803e3d6000fd5b50506015805461ff001916610100179055505050565b614a628363a9059cbb60e01b8484604051602401614a2b929190614ecb565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614a67565b505050565b6000614abc826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614af69092919063ffffffff16565b805190915015614a625780806020019051810190614ada9190614d5d565b614a625760405162461bcd60e51b8152600401610a7890615216565b6060614b058484600085614b0f565b90505b9392505050565b606082471015614b315760405162461bcd60e51b8152600401610a7890615006565b614b3a85614bcf565b614b565760405162461bcd60e51b8152600401610a7890615198565b600080866001600160a01b03168587604051614b729190614e31565b60006040518083038185875af1925050503d8060008114614baf576040519150601f19603f3d011682016040523d82523d6000602084013e614bb4565b606091505b5091509150614bc4828286614c00565b979650505050505050565b600080826001600160a01b0316803b806020016040519081016040528181526000908060200190933c511192915050565b60608315614c0f575081614b08565b825115614c1f5782518084602001fd5b8160405162461bcd60e51b8152600401610a789190614f41565b80356001600160a01b0381168114611e7657600080fd5b600060208284031215614c61578081fd5b614b0882614c39565b60008060408385031215614c7c578081fd5b614c8583614c39565b9150614c9360208401614c39565b90509250929050565b600080600060608486031215614cb0578081fd5b614cb984614c39565b9250614cc760208501614c39565b9150604084013590509250925092565b60008060008060808587031215614cec578081fd5b614cf585614c39565b9350614d0360208601614c39565b93969395505050506040820135916060013590565b60008060408385031215614d2a578182fd5b614d3383614c39565b946020939093013593505050565b600060208284031215614d52578081fd5b8135614b08816153b6565b600060208284031215614d6e578081fd5b8151614b08816153b6565b60008060408385031215614d8b578182fd5b8251614d96816153b6565b6020840151909250614da7816153b6565b809150509250929050565b600060208284031215614dc3578081fd5b5035919050565b600060208284031215614ddb578081fd5b5051919050565b60008060008060808587031215614df7578384fd5b8435935060208501359250604085013561ffff81168114614e16578283fd5b91506060850135614e26816153b6565b939692955090935050565b60008251614e43818460208701615359565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03948516815292909316602083015215156040820152606081019190915260800190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b039290921682521515602082015260400190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0393841681526020810192909252909116604082015260600190565b6001600160a01b0394909416845260208401929092526040830152606082015260800190565b901515815260200190565b90815260200190565b6000602082528251806020840152614f60816040850160208701615359565b601f01601f19169190910160400192915050565b6020808252601d908201527f6d696e696d756d2035207369676e617475726573207265717569726564000000604082015260600190565b60208082526017908201527f616c726561647920636f756e74696e6720626c6f636b73000000000000000000604082015260600190565b6020808252600a90820152696e6f742061637469766560b01b604082015260600190565b60208082526026908201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6040820152651c8818d85b1b60d21b606082015260800190565b6020808252601c908201527f5369676e6572206973206e6f74206d756c7469736967206f776e657200000000604082015260600190565b60208082526010908201526f185b1c9958591e48195e1958dd5d195960821b604082015260600190565b6020808252601290820152716e6f2070726f78792f636f6e74726163747360701b604082015260600190565b60208082526019908201527f74696d652064656c6179206e6f74207965742070617373656400000000000000604082015260600190565b6020808252600f908201526e185b1c9958591e481d5c19185d1959608a1b604082015260600190565b6020808252600e908201526d185b1c9958591e481cda59db995960921b604082015260600190565b6020808252601f908201527f4d696e696d756d20352f38207369676e61747572657320726571756972656400604082015260600190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252600a90820152691b9bdd081cda59db995960b21b604082015260600190565b6020808252600990820152686e6f742058564d432160b81b604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b60208082526022908201527f4d696e696d756d2034322520776569676874656420766f746520726571756972604082015261195960f21b606082015260800190565b6020808252600e908201526d0c4d49481a185c99081b1a5b5a5d60921b604082015260600190565b938452602084019290925261ffff1660408301521515606082015260800190565b600082198211156152fe576152fe6153a0565b500190565b60008261531e57634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561533d5761533d6153a0565b500290565b600082821015615354576153546153a0565b500390565b60005b8381101561537457818101518382015260200161535c565b838111156122995750506000910152565b6000600019821415615399576153996153a0565b5060010190565b634e487b7160e01b600052601160045260246000fd5b8015158114611de757600080fdfea2646970667358221220ea086b028ff59de9ecc8c38a51600953e9c5e097abdaa3be73623d1b3d148c9164736f6c63430008000033000000000000000000000000ffb71361dd8fc3ef0831871ec8dd51b413ed093c0000000000000000000000009a9aef66624c3fa77daacca9b51de307fa09bd500000000000000000000000001f8a5d98f1e2f10e93331d27cf22ed7985ef6a1200000000000000000000000030019481fc501afa449781ac671103feb0d6363c0000000000000000000000008c96105ea574727e94d9c199c632128f1ca584cf000000000000000000000000605c5aa14bdbf0d50a99836e7909c631cf3c8d46
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000ffb71361dd8fc3ef0831871ec8dd51b413ed093c0000000000000000000000009a9aef66624c3fa77daacca9b51de307fa09bd500000000000000000000000001f8a5d98f1e2f10e93331d27cf22ed7985ef6a1200000000000000000000000030019481fc501afa449781ac671103feb0d6363c0000000000000000000000008c96105ea574727e94d9c199c632128f1ca584cf000000000000000000000000605c5aa14bdbf0d50a99836e7909c631cf3c8d46
-----Decoded View---------------
Arg [0] : _acPool1 (address): 0xffb71361dd8fc3ef0831871ec8dd51b413ed093c
Arg [1] : _acPool2 (address): 0x9a9aef66624c3fa77daacca9b51de307fa09bd50
Arg [2] : _acPool3 (address): 0x1f8a5d98f1e2f10e93331d27cf22ed7985ef6a12
Arg [3] : _acPool4 (address): 0x30019481fc501afa449781ac671103feb0d6363c
Arg [4] : _acPool5 (address): 0x8c96105ea574727e94d9c199c632128f1ca584cf
Arg [5] : _acPool6 (address): 0x605c5aa14bdbf0d50a99836e7909c631cf3c8d46
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 000000000000000000000000ffb71361dd8fc3ef0831871ec8dd51b413ed093c
Arg [1] : 0000000000000000000000009a9aef66624c3fa77daacca9b51de307fa09bd50
Arg [2] : 0000000000000000000000001f8a5d98f1e2f10e93331d27cf22ed7985ef6a12
Arg [3] : 00000000000000000000000030019481fc501afa449781ac671103feb0d6363c
Arg [4] : 0000000000000000000000008c96105ea574727e94d9c199c632128f1ca584cf
Arg [5] : 000000000000000000000000605c5aa14bdbf0d50a99836e7909c631cf3c8d46
Deployed ByteCode Sourcemap
19587:23092:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24653:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21961:38;;;:::i;:::-;;;;;;;:::i;21737:77::-;;;:::i;:::-;;;;;;;:::i;24519:28::-;;;:::i;22448:65::-;;;;;;:::i;:::-;;:::i;20211:85::-;;;:::i;22198:46::-;;;:::i;22370:56::-;;;;;;:::i;:::-;;:::i;25604:1192::-;;;:::i;:::-;;36374:134;;;;;;:::i;:::-;;:::i;41394:484::-;;;;;;:::i;:::-;;:::i;35377:257::-;;;;;;:::i;:::-;;:::i;20816:88::-;;;:::i;21393:77::-;;;:::i;23580:36::-;;;:::i;21307:77::-;;;:::i;37263:170::-;;;;;;:::i;:::-;;:::i;35930:255::-;;;;;;:::i;:::-;;:::i;22805:42::-;;;:::i;22008:38::-;;;:::i;21071:74::-;;;:::i;32589:369::-;;;:::i;23887:31::-;;;:::i;22149:38::-;;;:::i;22664:41::-;;;:::i;34703:661::-;;;:::i;24083:29::-;;;:::i;28064:303::-;;;:::i;21565:77::-;;;:::i;37100:153::-;;;;;;:::i;:::-;;:::i;36924:166::-;;;;;;:::i;:::-;;:::i;38336:189::-;;;;;;:::i;:::-;;:::i;41888:645::-;;;;;;:::i;:::-;;:::i;34521:158::-;;;:::i;24396:34::-;;;:::i;24349:38::-;;;:::i;19661:43::-;;;:::i;36677:237::-;;;;;;:::i;:::-;;:::i;27818:::-;;;:::i;35644:277::-;;;:::i;24692:30::-;;;:::i;37600:212::-;;;;;;:::i;:::-;;:::i;42543:123::-;;;;;;:::i;:::-;;:::i;38183:143::-;;;:::i;24237:46::-;;;:::i;27326:111::-;;;:::i;38839:338::-;;;;;;:::i;:::-;;:::i;23722:39::-;;;:::i;32264:234::-;;;:::i;20311:87::-;;;:::i;20719:91::-;;;:::i;38530:185::-;;;;;;:::i;:::-;;:::i;21914:38::-;;;:::i;20407:82::-;;;:::i;23462:58::-;;;:::i;22055:38::-;;;:::i;22102:::-;;;:::i;24474:35::-;;;:::i;30073:140::-;;;:::i;23140:58::-;;;:::i;37443:147::-;;;;;;:::i;:::-;;:::i;21154:69::-;;;:::i;21479:77::-;;;:::i;19738:78::-;;;:::i;24608:32::-;;;:::i;39804:146::-;;;:::i;29313:680::-;;;:::i;20498:91::-;;;:::i;20910:::-;;;:::i;28988:200::-;;;:::i;23269:42::-;;;:::i;40253:1132::-;;;;;;:::i;:::-;;:::i;38020:153::-;;;;;;:::i;:::-;;:::i;37822:188::-;;;;;;:::i;:::-;;:::i;22560:45::-;;;:::i;23969:30::-;;;:::i;36195:169::-;;;;;;:::i;:::-;;:::i;23793:47::-;;;:::i;28383:132::-;;;;;;:::i;:::-;;:::i;20047:82::-;;;:::i;34271:240::-;;;;;;:::i;:::-;;:::i;30860:1394::-;;;:::i;33677:521::-;;;;;;:::i;:::-;;:::i;22933:32::-;;;:::i;23365:43::-;;;:::i;36518:150::-;;;;;;:::i;:::-;;:::i;22257:39::-;;;:::i;21651:77::-;;;:::i;32968:433::-;;;:::i;20622:83::-;;;:::i;24047:26::-;;;:::i;19958:80::-;;;:::i;19825:75::-;;;:::i;26870:344::-;;;:::i;24653:30::-;;;;;;:::o;21961:38::-;;;:::o;21737:77::-;;;:::o;24519:28::-;;;-1:-1:-1;;;24519:28:0;;;;;:::o;22448:65::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20211:85::-;;;:::o;22198:46::-;;;:::o;22370:56::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22370:56:0;;-1:-1:-1;22370:56:0;;-1:-1:-1;22370:56:0:o;25604:1192::-;25665:18;;;;25664:19;25656:47;;;;-1:-1:-1;;;25656:47:0;;;;;;;:::i;:::-;;;;;;;;;25732:21;-1:-1:-1;;;;;25720:43:0;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25836:49:0;;-1:-1:-1;;;25836:49:0;;-1:-1:-1;;;;;25848:21:0;25836:46;;-1:-1:-1;25836:46:0;;-1:-1:-1;25836:49:0;;25883:1;;25836:49;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25965:51:0;;-1:-1:-1;;;25965:51:0;;-1:-1:-1;;;;;25977:21:0;25965:48;;-1:-1:-1;25965:48:0;;-1:-1:-1;25965:51:0;;26014:1;;25965:51;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26095:75:0;;-1:-1:-1;;;26095:75:0;;26071:21;;-1:-1:-1;26102:42:0;;-1:-1:-1;26095:60:0;;:75;;26164:4;;26095:75;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26210:94;;-1:-1:-1;;;26210:94:0;;26071:99;;-1:-1:-1;26217:42:0;;26210:59;;:94;;26270:18;;26071:99;;26210:94;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26391:18;-1:-1:-1;;;;;26379:44:0;;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26519:18;-1:-1:-1;;;;;26507:40:0;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26607:109:0;;-1:-1:-1;;;26607:109:0;;-1:-1:-1;;;;;26622:21:0;26607:59;;-1:-1:-1;26607:59:0;;-1:-1:-1;26607:109:0;;26667:42;;26711:4;;26607:109;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26761:18:0;:25;;-1:-1:-1;;26761:25:0;26782:4;26761:25;;;-1:-1:-1;;;25604:1192:0:o;36374:134::-;36436:10;-1:-1:-1;;;;;36450:17:0;36436:31;;36428:40;;;;;;36478:16;:23;;;;;-1:-1:-1;;;36478:23:0;-1:-1:-1;;;;36478:23:0;;;;;;;;;36374:134::o;41394:484::-;41470:53;;-1:-1:-1;;;41470:53:0;;41454:13;;-1:-1:-1;;;;;41487:15:0;41470:41;;;;:53;;41512:10;;41470:53;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41454:69;;41538:8;41530:49;;;;-1:-1:-1;;;41530:49:0;;;;;;;:::i;:::-;41615:10;41601:25;;;;:13;:25;;;;;;;;-1:-1:-1;;;;;41601:39:0;;;;;;;;;;;;41600:40;41592:67;;;;-1:-1:-1;;;41592:67:0;;;;;;;:::i;:::-;41680:10;41666:25;;;;:13;:25;;;;;;;;-1:-1:-1;;;;;41666:39:0;;;;;;;;;;;:46;;-1:-1:-1;;41666:46:0;41708:4;41666:46;;;;;;41719:19;:33;;;;;:50;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;41719:50:0;;;;;41799:72;;;;;41680:10;;41692:12;;41799:72;:::i;:::-;;;;;;;;41394:484;;:::o;35377:257::-;35452:10;-1:-1:-1;;;;;35466:17:0;35452:31;;35444:40;;;;;;35523:12;35497:23;:38;35548:19;:33;;-1:-1:-1;;;;;;;;;35548:33:0;;;-1:-1:-1;;;;;;35548:33:0;;;;35594:30;;;;-1:-1:-1;;;35594:30:0;;;35377:257::o;20816:88::-;;;:::o;21393:77::-;;;:::o;23580:36::-;;;;;;:::o;21307:77::-;;;:::o;37263:170::-;37348:10;-1:-1:-1;;;;;37362:13:0;37348:27;;37340:36;;;;;;37386:40;;-1:-1:-1;;;37386:40:0;;-1:-1:-1;;;;;37386:27:0;;;;;:40;;37414:11;;37386:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37263:170;;:::o;35930:255::-;36042:10;-1:-1:-1;;;;;36056:17:0;36042:31;;36034:40;;;;;;36095:14;;36081:97;;-1:-1:-1;;;36081:97:0;;-1:-1:-1;;;;;36095:14:0;;;;36081:45;;:97;;36134:10;;36146;;36158:13;;36081:97;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35930:255;;;:::o;22805:42::-;;;;:::o;22008:38::-;;;:::o;21071:74::-;;;-1:-1:-1;;;;;21071:74:0;;:::o;32589:369::-;32638:10;32652:9;32638:23;32630:54;;;;-1:-1:-1;;;32630:54:0;;;;;;;:::i;:::-;32701:16;32720:23;:21;:23::i;:::-;32701:42;;32754:12;:10;:12::i;:::-;32779:16;:14;:16::i;:::-;32828:15;32808:17;:35;32855:48;-1:-1:-1;;;;;32862:5:0;32855:26;32882:10;32894:8;32855:26;:48::i;:::-;32927:10;-1:-1:-1;;;;;32919:29:0;;32939:8;32919:29;;;;;;:::i;:::-;;;;;;;;32589:369;:::o;23887:31::-;;;;:::o;22149:38::-;;;:::o;22664:41::-;;;;:::o;34703:661::-;34760:10;-1:-1:-1;;;;;34774:17:0;34760:31;;34752:40;;;;;;34857:12;34833:21;;34807:23;;:47;;;;:::i;:::-;:62;34799:100;;;;-1:-1:-1;;;34799:100:0;;;;;;;:::i;:::-;34948:19;;34910:58;;-1:-1:-1;;;34910:58:0;;-1:-1:-1;;;;;34922:10:0;34910:37;;;;;:58;;34948:19;;;;;34910:58;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;35009:19:0;;34981:48;;-1:-1:-1;;;34981:48:0;;-1:-1:-1;;;;;34993:10:0;34981:27;;;-1:-1:-1;34981:27:0;;-1:-1:-1;34981:48:0;;35009:19;;34981:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;35084:19:0;;35042:62;;-1:-1:-1;;;35042:62:0;;-1:-1:-1;;;;;35054:10:0;35042:41;;;-1:-1:-1;35042:41:0;;-1:-1:-1;35042:62:0;;35084:19;;35042:62;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;35176:19:0;;35197:38;;-1:-1:-1;;;35197:38:0;;35149:87;;-1:-1:-1;;;;;;35176:19:0;;;;-1:-1:-1;35204:5:0;35197:23;;;;;;:38;;35229:4;;35197:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;35156:5:0;35149:26;;:87;:26;:87::i;:::-;35322:19;;35306:48;;35343:10;;35306:48;;;;-1:-1:-1;;;;;35322:19:0;;35306:48;:::i;:::-;;;;;;;;34703:661::o;24083:29::-;;;;;;;;;:::o;28064:303::-;28131:14;;;;:79;;;;;28195:15;28168:22;;28150:15;;:40;;;;:::i;:::-;28149:61;;28131:79;28123:88;;;;;;28306:15;;28288:33;;:15;:33;:::i;:::-;28268:15;;28253:30;;:12;:30;:::i;:::-;28242:42;;:7;:42;:::i;:::-;:80;;;;:::i;:::-;28224:15;:98;28335:14;:22;;-1:-1:-1;;28335:22:0;;;28064:303::o;21565:77::-;;;:::o;37100:153::-;37179:10;-1:-1:-1;;;;;37193:13:0;37179:27;;37171:36;;;;;;37217:18;:29;37100:153::o;36924:166::-;37008:10;-1:-1:-1;;;;;37022:13:0;37008:27;;37000:36;;;;;;37046:22;:37;36924:166::o;38336:189::-;38414:10;-1:-1:-1;;;;;38428:13:0;38414:27;;38406:36;;;;;;38449:69;;-1:-1:-1;;;38449:69:0;;-1:-1:-1;;;;;38462:21:0;38449:60;;;;:69;;38510:7;;38449:69;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38336:189;:::o;41888:645::-;41972:10;41958:25;;;;:13;:25;;;;;;;;-1:-1:-1;;;;;41958:39:0;;;;;;;;;;;;41950:62;;;;-1:-1:-1;;;41950:62:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42040:33:0;;42019:18;42040:33;;;:19;:33;;;;;:40;:44;;42083:1;;42040:44;:::i;:::-;42019:65;;42091:14;42112:87;-1:-1:-1;;;;;42118:33:0;;;;;;:19;:33;;;;;:41;;42163:10;;42118:33;42152:6;;42118:41;;;;-1:-1:-1;;;42118:41:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;42118:41:0;:55;42112:87;;42183:8;;;;:::i;:::-;;;;42112:87;;;42219:10;42247:5;42205:25;;;:13;:25;;;;;;;;-1:-1:-1;;;;;42205:39:0;;;;;;;;;:47;;-1:-1:-1;;42205:47:0;;;42262:20;;;42259:130;;-1:-1:-1;;;;;42336:33:0;;;;;;:19;:33;;;;;:45;;42370:10;;42336:45;;;;-1:-1:-1;;;42336:45:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;42292:33:0;;;;;:19;:33;;;;;;;:41;;42336:45;;;;;42292:33;42326:6;;42292:41;;;;-1:-1:-1;;;42292:41:0;;;;;;;;;;;;;;;;;:89;;;;;-1:-1:-1;;;;;42292:89:0;;;;;-1:-1:-1;;;;;42292:89:0;;;;;;42259:130;-1:-1:-1;;;;;42396:33:0;;;;;;:19;:33;;;;;:39;;;;;-1:-1:-1;;;42396:39:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;42396:39:0;;;;;-1:-1:-1;;;;;;42396:39:0;;;;;;;;;42453:73;;;;;;42462:10;;42474:12;;-1:-1:-1;;;;;42495:30:0;;;42453:73;:::i;:::-;;;;;;;;41888:645;;;:::o;34521:158::-;34571:10;-1:-1:-1;;;;;34585:21:0;34571:35;;34563:44;;;;;;34646:10;-1:-1:-1;;;;;34634:36:0;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34614:17;:58;34521:158::o;24396:34::-;;;-1:-1:-1;;;;;24396:34:0;;:::o;24349:38::-;;;;:::o;19661:43::-;;;:::o;36677:237::-;36796:10;-1:-1:-1;;;;;36810:12:0;36796:26;;36788:35;;;;;;36833:74;;-1:-1:-1;;;36833:74:0;;-1:-1:-1;;;;;36845:10:0;36833:27;;;;:74;;36861:4;;36867:11;;36880:13;;36895:11;;36833:74;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36677:237;;;;:::o;27818:::-;27880:14;;;;27879:15;27871:51;;;;-1:-1:-1;;;27871:51:0;;;;;;;:::i;:::-;27935:14;:21;;-1:-1:-1;;27935:21:0;27952:4;27935:21;;;27987:12;27969:15;:30;28030:15;28012;:33;27818:237::o;35644:277::-;35696:23;;-1:-1:-1;;;35696:23:0;;;;35688:46;;;;-1:-1:-1;;;35688:46:0;;;;;;;:::i;:::-;35821:19;;35774:67;;-1:-1:-1;;;35774:67:0;;35748:20;;-1:-1:-1;;;;;35785:17:0;35774:46;;;;;:67;;35821:19;;35774:67;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35747:94;;;35851:15;35848:67;;;35876:23;:31;;-1:-1:-1;;;;35876:31:0;;;35848:67;35644:277;:::o;24692:30::-;;;;;;;;;:::o;37600:212::-;37690:10;-1:-1:-1;;;;;37704:13:0;37690:27;;37682:36;;;;;;37743:4;37733:6;:14;;37725:41;;;;-1:-1:-1;;;37725:41:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37776:20:0;;;;;;;:10;:20;;;;;:29;37600:212::o;42543:123::-;-1:-1:-1;;;;;42632:26:0;;42543:123;;;;:::o;38183:143::-;38244:10;-1:-1:-1;;;;;38258:21:0;38244:35;;38236:44;;;;;;38287:30;:32;;;:30;:32;;;:::i;:::-;;;;;;38183:143::o;24237:46::-;;;;:::o;27326:111::-;27422:5;27403:16;:14;:16::i;:::-;:24;;;;:::i;:::-;27383:17;:44;27326:111::o;38839:338::-;38924:10;38938:9;38924:23;38916:32;;;;;;38981:5;-1:-1:-1;;;;;38963:23:0;:14;-1:-1:-1;;;;;38963:23:0;;;38955:45;;;;-1:-1:-1;;;38955:45:0;;;;;;;:::i;:::-;39036:47;;-1:-1:-1;;;39036:47:0;;39019:14;;-1:-1:-1;;;;;39036:32:0;;;;;:47;;39077:4;;39036:47;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39144:14;;39019:64;;-1:-1:-1;39108:59:0;;-1:-1:-1;;;;;39108:35:0;;;;39144:14;39019:64;39108:35;:59::i;:::-;38839:338;;:::o;23722:39::-;;;;:::o;32264:234::-;32308:7;-1:-1:-1;;;;;32300:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32341:7;-1:-1:-1;;;;;32333:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32374:7;-1:-1:-1;;;;;32366:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32407:7;-1:-1:-1;;;;;32399:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32440:7;-1:-1:-1;;;;;32432:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32473:7;-1:-1:-1;;;;;32465:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32264:234::o;20311:87::-;;;:::o;20719:91::-;;;:::o;38530:185::-;38606:10;-1:-1:-1;;;;;38620:13:0;38606:27;;38598:36;;;;;;38641:67;;-1:-1:-1;;;38641:67:0;;-1:-1:-1;;;;;38654:21:0;38641:58;;;;:67;;38700:7;;38641:67;;;:::i;21914:38::-;;;:::o;20407:82::-;;;:::o;23462:58::-;;;;:::o;22055:38::-;;;:::o;22102:::-;;;:::o;24474:35::-;;;-1:-1:-1;;;24474:35:0;;;;;:::o;30073:140::-;30118:37;;-1:-1:-1;;;30118:37:0;;-1:-1:-1;;;;;30130:10:0;30118:34;;;;:37;;30153:1;;30118:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30165:37:0;;-1:-1:-1;;;30165:37:0;;-1:-1:-1;;;;;30177:10:0;30165:34;;-1:-1:-1;30165:34:0;;-1:-1:-1;30165:37:0;;30200:1;;30165:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;23140:58;;;;:::o;37443:147::-;37519:10;-1:-1:-1;;;;;37533:13:0;37519:27;;37511:36;;;;;;37557:10;:26;37443:147::o;21154:69::-;;;-1:-1:-1;;;;;21154:69:0;;:::o;21479:77::-;;;:::o;19738:78::-;;;:::o;24608:32::-;;;;:::o;39804:146::-;39929:5;39893:32;39911:14;39893:15;:32;:::i;:::-;39892:42;;;;:::i;:::-;39891:51;;39938:4;39891:51;:::i;:::-;39881:62;;:6;:62;:::i;:::-;39857:21;:86;39804:146::o;29313:680::-;29361:37;;-1:-1:-1;;;29361:37:0;;-1:-1:-1;;;;;29373:10:0;29361:34;;;;:37;;29396:1;;29361:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29437:37:0;;-1:-1:-1;;;29437:37:0;;-1:-1:-1;;;;;29449:10:0;29437:34;;-1:-1:-1;29437:34:0;;-1:-1:-1;29437:37:0;;29472:1;;29437:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29485:37:0;;-1:-1:-1;;;29485:37:0;;-1:-1:-1;;;;;29497:10:0;29485:34;;-1:-1:-1;29485:34:0;;-1:-1:-1;29485:37:0;;29520:1;;29485:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29548:37:0;;-1:-1:-1;;;29548:37:0;;-1:-1:-1;;;;;29560:10:0;29548:34;;-1:-1:-1;29548:34:0;;-1:-1:-1;29548:37:0;;29583:1;;29548:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29592:38:0;;-1:-1:-1;;;29592:38:0;;-1:-1:-1;;;;;29604:10:0;29592:34;;-1:-1:-1;29592:34:0;;-1:-1:-1;29592:38:0;;29627:2;;29592:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29658:45:0;;-1:-1:-1;;;29658:45:0;;-1:-1:-1;;;;;29670:10:0;29658:34;;-1:-1:-1;29658:34:0;;-1:-1:-1;29658:45:0;;29693:9;;29658:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29713:45:0;;-1:-1:-1;;;29713:45:0;;-1:-1:-1;;;;;29725:10:0;29713:34;;-1:-1:-1;29713:34:0;;-1:-1:-1;29713:45:0;;29748:9;;29713:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29769:45:0;;-1:-1:-1;;;29769:45:0;;-1:-1:-1;;;;;29781:10:0;29769:34;;-1:-1:-1;29769:34:0;;-1:-1:-1;29769:45:0;;29804:9;;29769:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29825:45:0;;-1:-1:-1;;;29825:45:0;;-1:-1:-1;;;;;29837:10:0;29825:34;;-1:-1:-1;29825:34:0;;-1:-1:-1;29825:45:0;;29860:9;;29825:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29881:45:0;;-1:-1:-1;;;29881:45:0;;-1:-1:-1;;;;;29893:10:0;29881:34;;-1:-1:-1;29881:34:0;;-1:-1:-1;29881:45:0;;29916:9;;29881:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29937:45:0;;-1:-1:-1;;;29937:45:0;;-1:-1:-1;;;;;29949:10:0;29937:34;;-1:-1:-1;29937:34:0;;-1:-1:-1;29937:45:0;;29972:9;;29937:45;;;:::i;20498:91::-;;;:::o;20910:::-;;;:::o;28988:200::-;29143:33;;-1:-1:-1;;;29143:33:0;;29034:7;;-1:-1:-1;;;;;29150:8:0;29143:26;;;;:33;;29170:5;;29143:33;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29117:8;-1:-1:-1;;;;;29110:28:0;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:66;;;;:::i;:::-;29102:75;;:4;:75;:::i;:::-;29071:5;-1:-1:-1;;;;;29064:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:113;;;;:::i;:::-;29056:122;;28988:200;:::o;23269:42::-;;;:::o;40253:1132::-;-1:-1:-1;;;;;40375:33:0;;40323:20;40375:33;;;:19;:33;;;;;:40;40447:1;40430:18;;;40422:60;;;;-1:-1:-1;;;40422:60:0;;;;;;;:::i;:::-;40493:6;40489:218;40506:13;40503:1;:16;40489:218;;;40601:15;-1:-1:-1;;;;;40584:41:0;;40626:19;:33;40646:12;-1:-1:-1;;;;;40626:33:0;-1:-1:-1;;;;;40626:33:0;;;;;;;;;;;;40660:1;40626:36;;;;;;-1:-1:-1;;;40626:36:0;;;;;;;;;;;;;;;;;;;40584:79;;-1:-1:-1;;;;;;40584:79:0;;;;;;;;;-1:-1:-1;;;;;40626:36:0;;40584:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40581:119;;;40674:17;;;;:::i;:::-;;;;40581:119;40521:3;;;;:::i;:::-;;;;40489:218;;;;40746:1;40727:15;:20;;40719:64;;;;-1:-1:-1;;;40719:64:0;;;;;;;:::i;:::-;40796:20;40830:17;-1:-1:-1;;;;;40819:45:0;;:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40796:70;;40873:26;40913:17;-1:-1:-1;;;;;40902:49:0;;40968:12;-1:-1:-1;;;;;40952:30:0;40902:81;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40873:110;-1:-1:-1;41047:3:0;41027:17;:12;41042:2;41027:17;:::i;:::-;:23;;;;:::i;:::-;41004:18;:47;;40996:94;;;;-1:-1:-1;;;40996:94:0;;;;;;;:::i;:::-;41115:51;;-1:-1:-1;;;41115:51:0;;-1:-1:-1;;;;;41127:10:0;41115:37;;;;:51;;41153:12;;41115:51;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;41179:41:0;;-1:-1:-1;;;41179:41:0;;-1:-1:-1;;;;;41191:10:0;41179:27;;-1:-1:-1;41179:27:0;;-1:-1:-1;41179:41:0;;41207:12;;41179:41;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;41233:55:0;;-1:-1:-1;;;41233:55:0;;-1:-1:-1;;;;;41245:10:0;41233:41;;-1:-1:-1;41233:41:0;;-1:-1:-1;41233:55:0;;41275:12;;41233:55;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41295:80;41322:12;41343:5;-1:-1:-1;;;;;41336:23:0;;41368:4;41336:38;;;;;;;;;;;;;;;:::i;38020:153::-;38085:10;-1:-1:-1;;;;;38099:12:0;38085:26;;38077:35;;;;;;38119:47;;-1:-1:-1;;;38119:47:0;;-1:-1:-1;;;;;38131:10:0;38119:38;;;;:47;;38158:7;;38119:47;;;:::i;37822:188::-;37888:10;-1:-1:-1;;;;;37902:12:0;37888:26;;;:65;;-1:-1:-1;37918:10:0;-1:-1:-1;;;;;37932:21:0;37918:35;;37888:65;37880:74;;;;;;37961:42;;-1:-1:-1;;;37961:42:0;;-1:-1:-1;;;;;37970:12:0;37961:33;;;;:42;;37995:7;;37961:42;;;:::i;22560:45::-;;;;:::o;23969:30::-;;;;:::o;36195:169::-;36282:10;-1:-1:-1;;;;;36296:13:0;36282:27;;36274:36;;;;;;36320:22;:37;36195:169::o;23793:47::-;;;;:::o;28383:132::-;-1:-1:-1;;;;;28480:25:0;28451:7;28480:25;;;:10;:25;;;;;;;28383:132::o;20047:82::-;;;:::o;34271:240::-;34347:10;-1:-1:-1;;;;;34361:21:0;34347:35;;34339:44;;;;;;34393:58;;-1:-1:-1;;;34393:58:0;;-1:-1:-1;;;;;34405:10:0;34393:42;;;;:58;;34436:14;;34393:58;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34473:28;34486:14;34473:28;;;;;;:::i;:::-;;;;;;;;34271:240;:::o;30860:1394::-;30926:32;;-1:-1:-1;;;30926:32:0;;30903:20;;-1:-1:-1;;;;;30933:5:0;30926:23;;;;:32;;30950:7;;30926:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30903:55;;30968:20;30998:5;-1:-1:-1;;;;;30991:23:0;;31015:7;30991:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30968:55;;31033:20;31063:5;-1:-1:-1;;;;;31056:23:0;;31080:7;31056:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31033:55;;31098:20;31128:5;-1:-1:-1;;;;;31121:23:0;;31145:7;31121:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31098:55;;31163:20;31193:5;-1:-1:-1;;;;;31186:23:0;;31210:7;31186:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31163:55;;31228:20;31258:5;-1:-1:-1;;;;;31251:23:0;;31275:7;31251:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31228:55;-1:-1:-1;;;;;;31311:10:0;31299:27;;31327:9;31358:4;31339:16;:12;31354:1;31339:16;:::i;:::-;:23;;;;:::i;:::-;31365:1;31368:5;31299:75;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31396:10;-1:-1:-1;;;;;31384:27:0;;31412:9;31443:4;31424:12;31439:1;31424:16;;;;:::i;:::-;:23;;;;:::i;:::-;31450:1;31453:5;31384:75;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31481:10;-1:-1:-1;;;;;31469:27:0;;31497:9;31528:4;31509:12;31524:1;31509:16;;;;:::i;:::-;:23;;;;:::i;:::-;31535:1;31538:5;31469:75;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31566:10;-1:-1:-1;;;;;31554:27:0;;31582:9;31614:4;31594:12;31609:2;31594:17;;;;:::i;:::-;:24;;;;:::i;:::-;31621:1;31624:5;31554:76;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31652:10;-1:-1:-1;;;;;31640:27:0;;31668:9;31700:4;31680:12;31695:2;31680:17;;;;:::i;:::-;:24;;;;:::i;:::-;31707:1;31710:5;31640:76;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31738:10;-1:-1:-1;;;;;31726:27:0;;31754:9;31786:4;31766:12;31781:2;31766:17;;;;:::i;:::-;:24;;;;:::i;:::-;31793:1;31796:5;31726:76;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31919:45:0;;-1:-1:-1;;;31919:45:0;;-1:-1:-1;;;;;31931:10:0;31919:34;;-1:-1:-1;31919:34:0;;-1:-1:-1;31919:45:0;;31954:9;;31919:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31974:45:0;;-1:-1:-1;;;31974:45:0;;-1:-1:-1;;;;;31986:10:0;31974:34;;-1:-1:-1;31974:34:0;;-1:-1:-1;31974:45:0;;32009:9;;31974:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;32030:45:0;;-1:-1:-1;;;32030:45:0;;-1:-1:-1;;;;;32042:10:0;32030:34;;-1:-1:-1;32030:34:0;;-1:-1:-1;32030:45:0;;32065:9;;32030:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;32086:45:0;;-1:-1:-1;;;32086:45:0;;-1:-1:-1;;;;;32098:10:0;32086:34;;-1:-1:-1;32086:34:0;;-1:-1:-1;32086:45:0;;32121:9;;32086:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;32142:45:0;;-1:-1:-1;;;32142:45:0;;-1:-1:-1;;;;;32154:10:0;32142:34;;-1:-1:-1;32142:34:0;;-1:-1:-1;32142:45:0;;32177:9;;32142:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;32198:45:0;;-1:-1:-1;;;32198:45:0;;-1:-1:-1;;;;;32210:10:0;32198:34;;-1:-1:-1;32198:34:0;;-1:-1:-1;32198:45:0;;32233:9;;32198:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30860:1394;;;;;;:::o;33677:521::-;33834:10;-1:-1:-1;;;;;33848:7:0;33834:21;;;:46;;-1:-1:-1;33859:10:0;-1:-1:-1;;;;;33873:7:0;33859:21;;33834:46;:71;;;-1:-1:-1;33884:10:0;-1:-1:-1;;;;;33898:7:0;33884:21;;33834:71;:111;;;-1:-1:-1;33924:10:0;-1:-1:-1;;;;;33938:7:0;33924:21;;33834:111;:136;;;-1:-1:-1;33949:10:0;-1:-1:-1;;;;;33963:7:0;33949:21;;33834:136;:161;;;-1:-1:-1;33974:10:0;-1:-1:-1;;;;;33988:7:0;33974:21;;33834:161;33810:186;;;;;;34021:79;;-1:-1:-1;;;34021:79:0;;-1:-1:-1;;;;;34021:41:0;;;;;:79;;34063:10;;34075:11;;34088:8;;34098:1;;34021:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34130:58;34148:10;34160:11;34173:14;34130:58;;;;;;;;:::i;:::-;;;;;;;;33677:521;;;;:::o;22933:32::-;;;;:::o;23365:43::-;;;:::o;36518:150::-;36587:10;-1:-1:-1;;;;;36601:21:0;36587:35;;36579:44;;;;;;36630:24;:31;;-1:-1:-1;;36630:31:0;;;;;;;;;;36518:150::o;22257:39::-;;;:::o;21651:77::-;;;:::o;32968:433::-;33022:7;33038:20;33330:7;-1:-1:-1;;;;;33322:44:0;;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33281:7;-1:-1:-1;;;;;33273:44:0;;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33232:7;-1:-1:-1;;;;;33224:44:0;;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33167:7;-1:-1:-1;;;;;33159:44:0;;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33118:7;-1:-1:-1;;;;;33110:44:0;;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33069:7;-1:-1:-1;;;;;33061:44:0;;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:95;;;;:::i;:::-;:144;;;;:::i;:::-;:209;;;;:::i;:::-;:258;;;;:::i;:::-;:307;;;;:::i;:::-;33038:330;-1:-1:-1;;32968:433:0;:::o;20622:83::-;;;:::o;24047:26::-;;;;;;:::o;19958:80::-;;;:::o;19825:75::-;;;:::o;26870:344::-;26933:18;;;;;;;26932:19;26924:48;;;;-1:-1:-1;;;26924:48:0;;;;;;;:::i;:::-;26985:22;27079:14;;27065:97;;-1:-1:-1;;;27065:97:0;;27010:42;;-1:-1:-1;;;;;27079:14:0;;;;27065:45;;:97;;26985:22;27010:42;;27139:22;;;27065:97;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;27179:18:0;:25;;-1:-1:-1;;27179:25:0;;;;;-1:-1:-1;;;26870:344:0:o;12590:223::-;12717:86;12737:5;12767:23;;;12792:2;12796:5;12744:58;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;12744:58:0;;;;;;;;;;;;;;-1:-1:-1;;;;;12744:58:0;-1:-1:-1;;;;;;12744:58:0;;;;;;;;;;12717:19;:86::i;:::-;12590:223;;;:::o;15297:736::-;15731:23;15757:69;15785:4;15757:69;;;;;;;;;;;;;;;;;15765:5;-1:-1:-1;;;;;15757:27:0;;;:69;;;;;:::i;:::-;15843:17;;15731:95;;-1:-1:-1;15843:21:0;15839:185;;15944:10;15933:30;;;;;;;;;;;;:::i;:::-;15925:85;;;;-1:-1:-1;;;15925:85:0;;;;;;;:::i;4085:241::-;4230:12;4264:52;4286:6;4294:4;4300:1;4303:12;4264:21;:52::i;:::-;4257:59;;4085:241;;;;;;:::o;5271:532::-;5451:12;5511:5;5486:21;:30;;5478:81;;;;-1:-1:-1;;;5478:81:0;;;;;;;:::i;:::-;5580:18;5591:6;5580:10;:18::i;:::-;5572:60;;;;-1:-1:-1;;;5572:60:0;;;;;;;:::i;:::-;5650:12;5664:23;5691:6;-1:-1:-1;;;;;5691:11:0;5710:5;5717:4;5691:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5649:73;;;;5742:51;5759:7;5768:10;5780:12;5742:16;:51::i;:::-;5735:58;5271:532;-1:-1:-1;;;;;;;5271:532:0:o;1222:338::-;1282:4;1549:1;1527:7;-1:-1:-1;;;;;1527:12:0;;;;;;;;;;;;;;;;;;;;;;;;:19;:23;;1222:338;-1:-1:-1;;1222:338:0:o;8103:752::-;8261:12;8292:7;8288:558;;;-1:-1:-1;8325:10:0;8318:17;;8288:558;8445:17;;:21;8441:392;;8651:10;8645:17;8714:15;8701:10;8697:2;8693:19;8686:44;8597:154;8802:12;8795:20;;-1:-1:-1;;;8795:20:0;;;;;;;;:::i;14:175:1:-;84:20;;-1:-1:-1;;;;;133:31:1;;123:42;;113:2;;179:1;176;169:12;194:198;;306:2;294:9;285:7;281:23;277:32;274:2;;;327:6;319;312:22;274:2;355:31;376:9;355:31;:::i;397:274::-;;;526:2;514:9;505:7;501:23;497:32;494:2;;;547:6;539;532:22;494:2;575:31;596:9;575:31;:::i;:::-;565:41;;625:40;661:2;650:9;646:18;625:40;:::i;:::-;615:50;;484:187;;;;;:::o;676:342::-;;;;822:2;810:9;801:7;797:23;793:32;790:2;;;843:6;835;828:22;790:2;871:31;892:9;871:31;:::i;:::-;861:41;;921:40;957:2;946:9;942:18;921:40;:::i;:::-;911:50;;1008:2;997:9;993:18;980:32;970:42;;780:238;;;;;:::o;1023:411::-;;;;;1186:3;1174:9;1165:7;1161:23;1157:33;1154:2;;;1208:6;1200;1193:22;1154:2;1236:31;1257:9;1236:31;:::i;:::-;1226:41;;1286:40;1322:2;1311:9;1307:18;1286:40;:::i;:::-;1144:290;;1276:50;;-1:-1:-1;;;;1373:2:1;1358:18;;1345:32;;1424:2;1409:18;1396:32;;1144:290::o;1439:266::-;;;1568:2;1556:9;1547:7;1543:23;1539:32;1536:2;;;1589:6;1581;1574:22;1536:2;1617:31;1638:9;1617:31;:::i;:::-;1607:41;1695:2;1680:18;;;;1667:32;;-1:-1:-1;;;1526:179:1:o;1710:253::-;;1819:2;1807:9;1798:7;1794:23;1790:32;1787:2;;;1840:6;1832;1825:22;1787:2;1884:9;1871:23;1903:30;1927:5;1903:30;:::i;1968:257::-;;2088:2;2076:9;2067:7;2063:23;2059:32;2056:2;;;2109:6;2101;2094:22;2056:2;2146:9;2140:16;2165:30;2189:5;2165:30;:::i;2230:387::-;;;2364:2;2352:9;2343:7;2339:23;2335:32;2332:2;;;2385:6;2377;2370:22;2332:2;2422:9;2416:16;2441:30;2465:5;2441:30;:::i;:::-;2540:2;2525:18;;2519:25;2490:5;;-1:-1:-1;2553:32:1;2519:25;2553:32;:::i;:::-;2604:7;2594:17;;;2322:295;;;;;:::o;2622:190::-;;2734:2;2722:9;2713:7;2709:23;2705:32;2702:2;;;2755:6;2747;2740:22;2702:2;-1:-1:-1;2783:23:1;;2692:120;-1:-1:-1;2692:120:1:o;2817:194::-;;2940:2;2928:9;2919:7;2915:23;2911:32;2908:2;;;2961:6;2953;2946:22;2908:2;-1:-1:-1;2989:16:1;;2898:113;-1:-1:-1;2898:113:1:o;3016:566::-;;;;;3175:3;3163:9;3154:7;3150:23;3146:33;3143:2;;;3197:6;3189;3182:22;3143:2;3238:9;3225:23;3215:33;;3295:2;3284:9;3280:18;3267:32;3257:42;;3349:2;3338:9;3334:18;3321:32;3393:6;3386:5;3382:18;3375:5;3372:29;3362:2;;3420:6;3412;3405:22;3362:2;3448:5;-1:-1:-1;3505:2:1;3490:18;;3477:32;3518;3477;3518;:::i;:::-;3133:449;;;;-1:-1:-1;3133:449:1;;-1:-1:-1;;3133:449:1:o;3587:274::-;;3754:6;3748:13;3770:53;3816:6;3811:3;3804:4;3796:6;3792:17;3770:53;:::i;:::-;3839:16;;;;;3724:137;-1:-1:-1;;3724:137:1:o;3866:203::-;-1:-1:-1;;;;;4030:32:1;;;;4012:51;;4000:2;3985:18;;3967:102::o;4074:457::-;-1:-1:-1;;;;;4355:15:1;;;4337:34;;4407:15;;;;4402:2;4387:18;;4380:43;4466:14;4459:22;4454:2;4439:18;;4432:50;4513:2;4498:18;;4491:34;;;;4286:3;4271:19;;4253:278::o;4536:375::-;-1:-1:-1;;;;;4794:15:1;;;4776:34;;4846:15;;;;4841:2;4826:18;;4819:43;4893:2;4878:18;;4871:34;;;;4726:2;4711:18;;4693:218::o;4916:284::-;-1:-1:-1;;;;;5102:32:1;;;;5084:51;;5178:14;5171:22;5166:2;5151:18;;5144:50;5072:2;5057:18;;5039:161::o;5205:274::-;-1:-1:-1;;;;;5397:32:1;;;;5379:51;;5461:2;5446:18;;5439:34;5367:2;5352:18;;5334:145::o;5484:375::-;-1:-1:-1;;;;;5742:15:1;;;5724:34;;5789:2;5774:18;;5767:34;;;;5837:15;;;5832:2;5817:18;;5810:43;5674:2;5659:18;;5641:218::o;5864:425::-;-1:-1:-1;;;;;6121:32:1;;;;6103:51;;6185:2;6170:18;;6163:34;;;;6228:2;6213:18;;6206:34;6271:2;6256:18;;6249:34;6090:3;6075:19;;6057:232::o;6294:187::-;6459:14;;6452:22;6434:41;;6422:2;6407:18;;6389:92::o;6486:185::-;6640:25;;;6628:2;6613:18;;6595:76::o;7437:383::-;;7586:2;7575:9;7568:21;7618:6;7612:13;7661:6;7656:2;7645:9;7641:18;7634:34;7677:66;7736:6;7731:2;7720:9;7716:18;7711:2;7703:6;7699:15;7677:66;:::i;:::-;7804:2;7783:15;-1:-1:-1;;7779:29:1;7764:45;;;;7811:2;7760:54;;7558:262;-1:-1:-1;;7558:262:1:o;7825:353::-;8027:2;8009:21;;;8066:2;8046:18;;;8039:30;8105:31;8100:2;8085:18;;8078:59;8169:2;8154:18;;7999:179::o;8183:347::-;8385:2;8367:21;;;8424:2;8404:18;;;8397:30;8463:25;8458:2;8443:18;;8436:53;8521:2;8506:18;;8357:173::o;8535:334::-;8737:2;8719:21;;;8776:2;8756:18;;;8749:30;-1:-1:-1;;;8810:2:1;8795:18;;8788:40;8860:2;8845:18;;8709:160::o;8874:402::-;9076:2;9058:21;;;9115:2;9095:18;;;9088:30;9154:34;9149:2;9134:18;;9127:62;-1:-1:-1;;;9220:2:1;9205:18;;9198:36;9266:3;9251:19;;9048:228::o;9281:352::-;9483:2;9465:21;;;9522:2;9502:18;;;9495:30;9561;9556:2;9541:18;;9534:58;9624:2;9609:18;;9455:178::o;9638:340::-;9840:2;9822:21;;;9879:2;9859:18;;;9852:30;-1:-1:-1;;;9913:2:1;9898:18;;9891:46;9969:2;9954:18;;9812:166::o;9983:342::-;10185:2;10167:21;;;10224:2;10204:18;;;10197:30;-1:-1:-1;;;10258:2:1;10243:18;;10236:48;10316:2;10301:18;;10157:168::o;10330:349::-;10532:2;10514:21;;;10571:2;10551:18;;;10544:30;10610:27;10605:2;10590:18;;10583:55;10670:2;10655:18;;10504:175::o;10684:339::-;10886:2;10868:21;;;10925:2;10905:18;;;10898:30;-1:-1:-1;;;10959:2:1;10944:18;;10937:45;11014:2;10999:18;;10858:165::o;11028:338::-;11230:2;11212:21;;;11269:2;11249:18;;;11242:30;-1:-1:-1;;;11303:2:1;11288:18;;11281:44;11357:2;11342:18;;11202:164::o;11371:355::-;11573:2;11555:21;;;11612:2;11592:18;;;11585:30;11651:33;11646:2;11631:18;;11624:61;11717:2;11702:18;;11545:181::o;11731:353::-;11933:2;11915:21;;;11972:2;11952:18;;;11945:30;12011:31;12006:2;11991:18;;11984:59;12075:2;12060:18;;11905:179::o;12089:334::-;12291:2;12273:21;;;12330:2;12310:18;;;12303:30;-1:-1:-1;;;12364:2:1;12349:18;;12342:40;12414:2;12399:18;;12263:160::o;12428:332::-;12630:2;12612:21;;;12669:1;12649:18;;;12642:29;-1:-1:-1;;;12702:2:1;12687:18;;12680:39;12751:2;12736:18;;12602:158::o;12765:406::-;12967:2;12949:21;;;13006:2;12986:18;;;12979:30;13045:34;13040:2;13025:18;;13018:62;-1:-1:-1;;;13111:2:1;13096:18;;13089:40;13161:3;13146:19;;12939:232::o;13176:398::-;13378:2;13360:21;;;13417:2;13397:18;;;13390:30;13456:34;13451:2;13436:18;;13429:62;-1:-1:-1;;;13522:2:1;13507:18;;13500:32;13564:3;13549:19;;13350:224::o;13579:338::-;13781:2;13763:21;;;13820:2;13800:18;;;13793:30;-1:-1:-1;;;13854:2:1;13839:18;;13832:44;13908:2;13893:18;;13753:164::o;14104:421::-;14336:25;;;14392:2;14377:18;;14370:34;;;;14452:6;14440:19;14435:2;14420:18;;14413:47;14503:14;14496:22;14491:2;14476:18;;14469:50;14323:3;14308:19;;14290:235::o;14947:128::-;;15018:1;15014:6;15011:1;15008:13;15005:2;;;15024:18;;:::i;:::-;-1:-1:-1;15060:9:1;;14995:80::o;15080:217::-;;15146:1;15136:2;;-1:-1:-1;;;15171:31:1;;15225:4;15222:1;15215:15;15253:4;15178:1;15243:15;15136:2;-1:-1:-1;15282:9:1;;15126:171::o;15302:168::-;;15408:1;15404;15400:6;15396:14;15393:1;15390:21;15385:1;15378:9;15371:17;15367:45;15364:2;;;15415:18;;:::i;:::-;-1:-1:-1;15455:9:1;;15354:116::o;15475:125::-;;15543:1;15540;15537:8;15534:2;;;15548:18;;:::i;:::-;-1:-1:-1;15585:9:1;;15524:76::o;15605:258::-;15677:1;15687:113;15701:6;15698:1;15695:13;15687:113;;;15777:11;;;15771:18;15758:11;;;15751:39;15723:2;15716:10;15687:113;;;15818:6;15815:1;15812:13;15809:2;;;-1:-1:-1;;15853:1:1;15835:16;;15828:27;15658:205::o;15868:135::-;;-1:-1:-1;;15928:17:1;;15925:2;;;15948:18;;:::i;:::-;-1:-1:-1;15995:1:1;15984:13;;15915:88::o;16008:127::-;16069:10;16064:3;16060:20;16057:1;16050:31;16100:4;16097:1;16090:15;16124:4;16121:1;16114:15;16140:120;16228:5;16221:13;16214:21;16207:5;16204:32;16194:2;;16250:1;16247;16240:12
Swarm Source
ipfs://ea086b028ff59de9ecc8c38a51600953e9c5e097abdaa3be73623d1b3d148c91
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.