Overview
MATIC Balance
0 MATIC
MATIC Value
$0.00More Info
Private Name Tags
ContractCreator:
Sponsored
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
0x60c06040 | 21487587 | 861 days ago | IN | Create: XVMCfarms | 0 MATIC | 0.13192713 |
Loading...
Loading
Contract Name:
XVMCfarms
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2021-11-17 */ /** *Submitted for verification at polygonscan.com on 2021-11-01 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/Context.sol pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: newo.sol pragma solidity 0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @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"); } } } interface IXVMCgovernor { function costToVote() external returns (uint256); function maximumVoteTokens() external returns (uint256); function delayBeforeEnforce() external returns (uint256); function setPool(uint256 _pid, uint256 _allocPoint, uint16 _depositFeeBP, bool _withUpdate) external; function changeGovernorEnforced() external returns (bool); function eligibleNewGovernor() external returns (address); function setDurationForCalculation(uint256 _newDuration) external; function updateAllPools() external; } interface IMasterChef { function totalAllocPoint() external returns (uint256); function poolInfo(uint256) external returns (address, uint256, uint256, uint256, uint16); function XVMCPerBlock() external returns (uint256); } //contract that regulates the farms for XVMC contract XVMCfarms is Ownable { using SafeERC20 for IERC20; struct ProposalFarm { bool valid; uint256 poolid; uint256 newAllocation; uint256 tokensSacrificedForVoting; uint256 firstCallTimestamp; uint16 newDepositFee; } struct ProposalDurationForCalculation { bool valid; uint256 duration; uint256 tokensSacrificedForVoting; uint256 firstCallTimestamp; } struct ProposalDecreaseLeaks { bool valid; uint256 farmMultiplier; uint256 memeMultiplier; uint256 tokensSacrificedForVoting; uint256 firstCallTimestamp; } ProposalFarm[] public proposalFarmUpdate; ProposalDurationForCalculation[] public proposeDurationCalculation; ProposalDecreaseLeaks[] public proposeRewardReduction; //masterchef address address public immutable masterchef = 0x9BD741F077241b594EBdD745945B577d59C8768e; address public immutable token = 0x6d0c966c8A09e354Df9C48b446A474CE3343D912; //XVMC token uint256 maxRewards = 26000000000000000000; //maximum reward/block when boosts inactivated //farms and meme pools rewards have no lock //reduce the rewards during inflation boost //to prevent tokens reaching the market uint256 farmMultiplierDuringBoost = 500; uint256 memeMultiplierDuringBoost = 500; bool isReductionEnforced; event InitiateFarmProposal( uint256 proposalID, uint256 depositingTokens, uint256 poolid, uint256 newAllocation, uint16 depositFee, address indexed enforcer ); event VetoFarmProposal(uint256 proposalID, address indexed enforcer); event UpdateFarm(uint256 proposalID, uint256 poolid, address indexed enforcer); event InitiateProposalDurationForCalculation(uint256 proposalID, uint256 duration, uint256 tokensSacrificedForVoting, address enforcer); event VetoProposalDurationForCalculation(uint256 proposalID, address enforcer); event ExecuteProposalDurationForCalculation(uint256 proposalID, address enforcer); //reward reduction for farms and meme pools during reward boosts event ProposeRewardReduction(address enforcer, uint256 proposalID, uint256 farmMultiplier, uint256 memeMultiplier, uint256 depositingTokens, uint256 firstCallTimestamp); event VetoRewardReduction(uint256 proposalID, address enforcer); event ExecuteRewardReduction(uint256 proposalID, address enforcer); modifier whenReady() { require(block.timestamp > 1638535053, "after 3 dec"); _; } /** * Regulatory process to regulate farm rewards (maximum 5% of total allocation collectively) * And Meme pools */ function initiateFarmProposal( uint256 depositingTokens, uint256 poolid, uint256 newAllocation, uint16 depositFee ) external whenReady { require(IMasterChef(masterchef).XVMCPerBlock() < maxRewards, "reward boost is active"); //only when reward boosts are NOT running require(depositingTokens <= IXVMCgovernor(owner()).maximumVoteTokens(), "preventing tyranny, maximum 0.05% of tokens"); require(depositingTokens >= IXVMCgovernor(owner()).costToVote(), "there is a minimum cost to vote"); require(poolid == 0 || poolid == 1 || poolid == 11 || poolid == 34 || poolid == 35, "only allowed for these pools"); //cumulative allocation for pool 0 and 1 can be max 5% //you can propose any amount, but it can not be enforced if(poolid == 0 || poolid == 1) { require( newAllocation <= (IMasterChef(masterchef).totalAllocPoint() * 25 / 1000), "Maximum 2.5% of total allocation" ); } else { require( newAllocation <= (IMasterChef(masterchef).totalAllocPoint() * 15 / 1000), "Maximum 1.5% of total allocation" ); } IERC20(token).safeTransferFrom(msg.sender, owner(), depositingTokens); proposalFarmUpdate.push( ProposalFarm(true, poolid, newAllocation, depositingTokens, block.timestamp, depositFee) ); emit InitiateFarmProposal(proposalFarmUpdate.length - 1, depositingTokens, poolid, newAllocation, depositFee, msg.sender); } function vetoFarmProposal(uint256 proposalID) external whenReady { require(proposalFarmUpdate[proposalID].valid, "already invalid"); IERC20(token).safeTransferFrom(msg.sender, owner(), proposalFarmUpdate[proposalID].tokensSacrificedForVoting); proposalFarmUpdate[proposalID].valid = false; emit VetoFarmProposal(proposalID, msg.sender); } /** * Updates the rewards for the corresponding farm in the proposal */ function updateFarm(uint256 proposalID) external whenReady { require(IMasterChef(masterchef).XVMCPerBlock() < maxRewards, "reward boost is active"); //only when reward boosts are NOT running require(proposalFarmUpdate[proposalID].valid, "invalid proposal"); require( proposalFarmUpdate[proposalID].firstCallTimestamp + IXVMCgovernor(owner()).delayBeforeEnforce() < block.timestamp, "delay before enforce not met" ); IXVMCgovernor(owner()).setPool(proposalFarmUpdate[proposalID].poolid, proposalFarmUpdate[proposalID].newAllocation, proposalFarmUpdate[proposalID].newDepositFee, true); proposalFarmUpdate[proposalID].valid = false; emit UpdateFarm(proposalID, proposalFarmUpdate[proposalID].poolid, msg.sender); } /** * Regulatory process for determining rewards for * farms and meme pools during inflation boosts * The rewards should be reduced for farms and pool tha toperate without time lock * to prevent tokens from hitting the market */ function initiateRewardsReduction(uint256 depositingTokens, uint256 multiplierFarms, uint256 multiplierMemePools) external whenReady { require(depositingTokens <= IXVMCgovernor(owner()).maximumVoteTokens(), "no tyranny"); IERC20(token).safeTransferFrom(msg.sender, owner(), depositingTokens); proposeRewardReduction.push( ProposalDecreaseLeaks(true, multiplierFarms, multiplierMemePools, depositingTokens, block.timestamp) ); emit ProposeRewardReduction(msg.sender, proposeRewardReduction.length - 1, multiplierFarms, multiplierMemePools, depositingTokens, block.timestamp); } function vetoRewardsReduction(uint256 proposalID) external whenReady { require(proposeRewardReduction[proposalID].valid == true, "Proposal already invalid"); IERC20(token).safeTransferFrom(msg.sender, owner(), proposeRewardReduction[proposalID].tokensSacrificedForVoting); proposeRewardReduction[proposalID].valid = false; emit VetoRewardReduction(proposalID, msg.sender); } function executeRewardsReduction(uint256 proposalID) external whenReady { require( proposeRewardReduction[proposalID].valid && proposeRewardReduction[proposalID].firstCallTimestamp + IXVMCgovernor(owner()).delayBeforeEnforce() < block.timestamp, "Conditions not met" ); farmMultiplierDuringBoost = proposeRewardReduction[proposalID].farmMultiplier; memeMultiplierDuringBoost = proposeRewardReduction[proposalID].memeMultiplier; proposeRewardReduction[proposalID].valid = false; emit ExecuteRewardReduction(proposalID, msg.sender); } /** * When event is active, reduction of rewards must be manually activated * Reduces the rewards by a factor * Call this to enforce and "un-enforce" * NOTE: Must manually update all pools * Made it separate in case tx ran out of gas(is it necessary?) */ function enforceRewardReduction() external whenReady { uint256 allocPoint; uint16 depositFeeBP; if (IMasterChef(masterchef).XVMCPerBlock() > maxRewards && !isReductionEnforced) { (, allocPoint, , , depositFeeBP) = IMasterChef(masterchef).poolInfo(0); IXVMCgovernor(owner()).setPool( 0, allocPoint * farmMultiplierDuringBoost / 10000, depositFeeBP, false ); (, allocPoint, , , depositFeeBP) = IMasterChef(masterchef).poolInfo(1); IXVMCgovernor(owner()).setPool( 1, allocPoint * farmMultiplierDuringBoost / 10000, depositFeeBP, false ); (, allocPoint, , , depositFeeBP) = IMasterChef(masterchef).poolInfo(11); IXVMCgovernor(owner()).setPool( 11, allocPoint * memeMultiplierDuringBoost / 10000, depositFeeBP, false ); (, allocPoint, , , depositFeeBP) = IMasterChef(masterchef).poolInfo(34); IXVMCgovernor(owner()).setPool( 34, allocPoint * memeMultiplierDuringBoost / 10000, depositFeeBP, false ); (, allocPoint, , , depositFeeBP) = IMasterChef(masterchef).poolInfo(35); IXVMCgovernor(owner()).setPool( 35, allocPoint * memeMultiplierDuringBoost / 10000, depositFeeBP, false ); isReductionEnforced = true; } else if(IMasterChef(masterchef).XVMCPerBlock() < maxRewards && isReductionEnforced) { //inverses the formula... perhaps should keep last Reward //the mutliplier shall not change during event! (, allocPoint, , , depositFeeBP) = IMasterChef(masterchef).poolInfo(0); IXVMCgovernor(owner()).setPool( 0, allocPoint * 10000 / farmMultiplierDuringBoost, depositFeeBP, false ); (, allocPoint, , , depositFeeBP) = IMasterChef(masterchef).poolInfo(1); IXVMCgovernor(owner()).setPool( 1, allocPoint * 10000 / farmMultiplierDuringBoost, depositFeeBP, false ); (, allocPoint, , , depositFeeBP) = IMasterChef(masterchef).poolInfo(11); IXVMCgovernor(owner()).setPool( 11, allocPoint * 10000 / memeMultiplierDuringBoost, depositFeeBP, false ); (, allocPoint, , , depositFeeBP) = IMasterChef(masterchef).poolInfo(34); IXVMCgovernor(owner()).setPool( 34, allocPoint * 10000 / memeMultiplierDuringBoost, depositFeeBP, false ); (, allocPoint, , , depositFeeBP) = IMasterChef(masterchef).poolInfo(35); IXVMCgovernor(owner()).setPool( 35, allocPoint * 10000 / memeMultiplierDuringBoost, depositFeeBP, false ); isReductionEnforced = false; } } function updateAllPools() external { IXVMCgovernor(owner()).updateAllPools(); } /** * Regulatory process for determining "durationForCalculation" * Not of great Use * Bitcoin difficulty adjusts to create new blocks every 10minutes * Our inflation is tied to the block production of Polygon network * In case the average block time changes significantly on the Polygon network * the durationForCalculation is a period that we use to calculate * average block time and consequentially use it to rebalance inflation */ function initiateProposalDurationForCalculation(uint256 depositingTokens, uint256 duration) external whenReady { require(depositingTokens <= IXVMCgovernor(owner()).maximumVoteTokens(), "No tyranny"); require(depositingTokens >= IXVMCgovernor(owner()).costToVote(), "minimum cost to vote"); IERC20(token).safeTransferFrom(msg.sender, owner(), depositingTokens); proposeDurationCalculation.push( ProposalDurationForCalculation(true, duration, depositingTokens, block.timestamp) ); emit InitiateProposalDurationForCalculation(proposeDurationCalculation.length - 1, duration, depositingTokens, msg.sender); } function vetoProposalDurationForCalculation(uint256 proposalID) external whenReady { require(proposeDurationCalculation[proposalID].valid, "already invalid"); IERC20(token).safeTransferFrom(msg.sender, owner(), proposeDurationCalculation[proposalID].tokensSacrificedForVoting); proposeDurationCalculation[proposalID].valid = false; emit VetoProposalDurationForCalculation(proposalID, msg.sender); } function executeProposalDurationForCalculation(uint256 proposalID) external whenReady { require( proposeDurationCalculation[proposalID].valid && proposeDurationCalculation[proposalID].firstCallTimestamp + IXVMCgovernor(owner()).delayBeforeEnforce() < block.timestamp, "conditions not met" ); IXVMCgovernor(owner()).setDurationForCalculation(proposeDurationCalculation[proposalID].duration); proposeDurationCalculation[proposalID].valid = false; emit ExecuteProposalDurationForCalculation(proposalID, msg.sender); } //transfers ownership of this contract to new governor(if eligible) function changeGovernor() external { require(IXVMCgovernor(owner()).changeGovernorEnforced()); transferOwnership(IXVMCgovernor(owner()).eligibleNewGovernor()); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"proposalID","type":"uint256"},{"indexed":false,"internalType":"address","name":"enforcer","type":"address"}],"name":"ExecuteProposalDurationForCalculation","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"proposalID","type":"uint256"},{"indexed":false,"internalType":"address","name":"enforcer","type":"address"}],"name":"ExecuteRewardReduction","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"proposalID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"depositingTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"poolid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newAllocation","type":"uint256"},{"indexed":false,"internalType":"uint16","name":"depositFee","type":"uint16"},{"indexed":true,"internalType":"address","name":"enforcer","type":"address"}],"name":"InitiateFarmProposal","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"proposalID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"duration","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensSacrificedForVoting","type":"uint256"},{"indexed":false,"internalType":"address","name":"enforcer","type":"address"}],"name":"InitiateProposalDurationForCalculation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"enforcer","type":"address"},{"indexed":false,"internalType":"uint256","name":"proposalID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"farmMultiplier","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"memeMultiplier","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"depositingTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"firstCallTimestamp","type":"uint256"}],"name":"ProposeRewardReduction","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"proposalID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"poolid","type":"uint256"},{"indexed":true,"internalType":"address","name":"enforcer","type":"address"}],"name":"UpdateFarm","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"proposalID","type":"uint256"},{"indexed":true,"internalType":"address","name":"enforcer","type":"address"}],"name":"VetoFarmProposal","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"proposalID","type":"uint256"},{"indexed":false,"internalType":"address","name":"enforcer","type":"address"}],"name":"VetoProposalDurationForCalculation","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"proposalID","type":"uint256"},{"indexed":false,"internalType":"address","name":"enforcer","type":"address"}],"name":"VetoRewardReduction","type":"event"},{"inputs":[],"name":"changeGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enforceRewardReduction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"}],"name":"executeProposalDurationForCalculation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"}],"name":"executeRewardsReduction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"depositingTokens","type":"uint256"},{"internalType":"uint256","name":"poolid","type":"uint256"},{"internalType":"uint256","name":"newAllocation","type":"uint256"},{"internalType":"uint16","name":"depositFee","type":"uint16"}],"name":"initiateFarmProposal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"depositingTokens","type":"uint256"},{"internalType":"uint256","name":"duration","type":"uint256"}],"name":"initiateProposalDurationForCalculation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"depositingTokens","type":"uint256"},{"internalType":"uint256","name":"multiplierFarms","type":"uint256"},{"internalType":"uint256","name":"multiplierMemePools","type":"uint256"}],"name":"initiateRewardsReduction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"masterchef","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposalFarmUpdate","outputs":[{"internalType":"bool","name":"valid","type":"bool"},{"internalType":"uint256","name":"poolid","type":"uint256"},{"internalType":"uint256","name":"newAllocation","type":"uint256"},{"internalType":"uint256","name":"tokensSacrificedForVoting","type":"uint256"},{"internalType":"uint256","name":"firstCallTimestamp","type":"uint256"},{"internalType":"uint16","name":"newDepositFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposeDurationCalculation","outputs":[{"internalType":"bool","name":"valid","type":"bool"},{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"uint256","name":"tokensSacrificedForVoting","type":"uint256"},{"internalType":"uint256","name":"firstCallTimestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposeRewardReduction","outputs":[{"internalType":"bool","name":"valid","type":"bool"},{"internalType":"uint256","name":"farmMultiplier","type":"uint256"},{"internalType":"uint256","name":"memeMultiplier","type":"uint256"},{"internalType":"uint256","name":"tokensSacrificedForVoting","type":"uint256"},{"internalType":"uint256","name":"firstCallTimestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateAllPools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"}],"name":"updateFarm","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"}],"name":"vetoFarmProposal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"}],"name":"vetoProposalDurationForCalculation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"}],"name":"vetoRewardsReduction","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60c0604052739bd741f077241b594ebdd745945b577d59c8768e73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b815250736d0c966c8a09e354df9c48b446a474ce3343d91273ffffffffffffffffffffffffffffffffffffffff1660a09073ffffffffffffffffffffffffffffffffffffffff1660601b815250680168d28e3f002800006004556101f46005556101f4600655348015620000be57600080fd5b50620000df620000d3620000e560201b60201c565b620000ed60201b60201c565b620001b1565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60805160601c60a05160601c614d67620002776000396000818161049f01528181610b1a01528181610dcf01528181610fe7015281816125120152818161286601526134c801526000818161061c0152818161091601528181610a16015281816114e00152818161159f015281816116f1015281816118430152818161199501528181611ae701528181611c5c01528181611d1a01528181611e6c01528181611fbe015281816121100152818161226201528181612d8b01526134a40152614d676000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80637b944552116100ad578063f26d5d2611610071578063f26d5d26146102d1578063f2fde38b146102db578063fb1db278146102f7578063fc0c546a14610315578063fca47bec146103335761012c565b80637b944552146102555780638da5cb5b14610271578063b9ec7d741461028f578063bbbee4a414610299578063cc430ced146102b55761012c565b80633dc2958a116100f45780633dc2958a146101d45780634ecb7cb1146102095780635de0870114610225578063675525cc1461022f578063715018a61461024b5761012c565b80630f4f24c6146101315780631687fa6c1461014d5780631a21fffd14610180578063307260481461019c578063355514d8146101b8575b600080fd5b61014b60048036038101906101469190613a84565b610367565b005b61016760048036038101906101629190613a84565b610584565b6040516101779493929190614357565b60405180910390f35b61019a60048036038101906101959190613b61565b6105d1565b005b6101b660048036038101906101b19190613a84565b610c97565b005b6101d260048036038101906101cd9190613b12565b610ec9565b005b6101ee60048036038101906101e99190613a84565b611122565b604051610200969594939291906143ef565b60405180910390f35b610223600480360381019061021e9190613a84565b611189565b005b61022d611492565b005b61024960048036038101906102449190613a84565b6123d3565b005b6102536125f7565b005b61026f600480360381019061026a9190613ad6565b61267f565b005b61027961298c565b60405161028691906142a4565b60405180910390f35b6102976129b5565b005b6102b360048036038101906102ae9190613a84565b612a1e565b005b6102cf60048036038101906102ca9190613a84565b612d40565b005b6102d9613289565b005b6102f560048036038101906102f09190613992565b6133aa565b005b6102ff6134a2565b60405161030c91906142a4565b60405180910390f35b61031d6134c6565b60405161032a91906142a4565b60405180910390f35b61034d60048036038101906103489190613a84565b6134ea565b60405161035e95949392919061439c565b60405180910390f35b6361aa0f8d42116103ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a4906146b2565b60405180910390fd5b600281815481106103e7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906004020160000160009054906101000a900460ff16610445576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161043c906148b2565b60405180910390fd5b6104e43361045161298c565b6002848154811061048b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000209060040201600201547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661353d909392919063ffffffff16565b600060028281548110610520577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906004020160000160006101000a81548160ff0219169083151502179055507f8e1fedc4412d91d5e367aa6f051d48157011c1aea1683fcf3ee2324d8088c477813360405161057992919061490d565b60405180910390a150565b6002818154811061059457600080fd5b90600052602060002090600402016000915090508060000160009054906101000a900460ff16908060010154908060020154908060030154905084565b6361aa0f8d4211610617576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060e906146b2565b60405180910390fd5b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663135d31d76040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561068257600080fd5b505af1158015610696573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ba9190613aad565b106106fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f190614712565b60405180910390fd5b61070261298c565b73ffffffffffffffffffffffffffffffffffffffff1663e9a4e6ba6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561074957600080fd5b505af115801561075d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107819190613aad565b8411156107c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ba90614672565b60405180910390fd5b6107cb61298c565b73ffffffffffffffffffffffffffffffffffffffff166351a41dec6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561081257600080fd5b505af1158015610826573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084a9190613aad565b84101561088c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088390614832565b60405180910390fd5b600083148061089b5750600183145b806108a65750600b83145b806108b15750602283145b806108bc5750602383145b6108fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f290614692565b60405180910390fd5b600083148061090a5750600183145b15610a0f576103e860197f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166317caf6f16040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561097c57600080fd5b505af1158015610990573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b49190613aad565b6109be9190614af5565b6109c89190614ac4565b821115610a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0190614652565b60405180910390fd5b610b0b565b6103e8600f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166317caf6f16040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610a7c57600080fd5b505af1158015610a90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab49190613aad565b610abe9190614af5565b610ac89190614ac4565b821115610b0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b01906146d2565b60405180910390fd5b5b610b5f33610b1761298c565b867f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661353d909392919063ffffffff16565b60016040518060c001604052806001151581526020018581526020018481526020018681526020014281526020018361ffff16815250908060018154018082558091505060019003906000526020600020906006020160009091909190915060008201518160000160006101000a81548160ff0219169083151502179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050160006101000a81548161ffff021916908361ffff16021790555050503373ffffffffffffffffffffffffffffffffffffffff167f75749154f26e5a862760da171f3cc623d88749243975e03e6dcf036f9d9abf9e60018080549050610c749190614b4f565b86868686604051610c899594939291906149e9565b60405180910390a250505050565b6361aa0f8d4211610cdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd4906146b2565b60405180910390fd5b60018181548110610d17577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906006020160000160009054906101000a900460ff16610d75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6c906148b2565b60405180910390fd5b610e1433610d8161298c565b60018481548110610dbb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000209060060201600301547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661353d909392919063ffffffff16565b600060018281548110610e50577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906006020160000160006101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff167f532bf6bb70cc1c58b8e91a1ef53e2a78801b5ac49db199297ce73084cb4c0dc182604051610ebe91906148f2565b60405180910390a250565b6361aa0f8d4211610f0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f06906146b2565b60405180910390fd5b610f1761298c565b73ffffffffffffffffffffffffffffffffffffffff1663e9a4e6ba6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610f5e57600080fd5b505af1158015610f72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f969190613aad565b831115610fd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcf90614752565b60405180910390fd5b61102c33610fe461298c565b857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661353d909392919063ffffffff16565b60036040518060a0016040528060011515815260200184815260200183815260200185815260200142815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548160ff0219169083151502179055506020820151816001015560408201518160020155606082015181600301556080820151816004015550507f09c8943550f2ff2631ff789518d81a463498fb8a96fabaad972c69bc647b395f3360016003805490506110ff9190614b4f565b84848742604051611115969594939291906142f6565b60405180910390a1505050565b6001818154811061113257600080fd5b90600052602060002090600602016000915090508060000160009054906101000a900460ff16908060010154908060020154908060030154908060040154908060050160009054906101000a900461ffff16905086565b6361aa0f8d42116111cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c6906146b2565b60405180910390fd5b60038181548110611209577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906005020160000160009054906101000a900460ff16801561130f57504261123861298c565b73ffffffffffffffffffffffffffffffffffffffff166334733cc96040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561127f57600080fd5b505af1158015611293573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b79190613aad565b600383815481106112f1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600502016004015461130d9190614a6e565b105b61134e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134590614872565b60405180910390fd5b60038181548110611388577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906005020160010154600581905550600381815481106113da577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600502016002015460068190555060006003828154811061142e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906005020160000160006101000a81548160ff0219169083151502179055507f7d02aa1d965086e789a0eb438d8c3a6db6db3e3b75cf513ed1021a7a0116d433813360405161148792919061490d565b60405180910390a150565b6361aa0f8d42116114d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cf906146b2565b60405180910390fd5b6000806004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663135d31d76040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561154657600080fd5b505af115801561155a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157e9190613aad565b1180156115985750600760009054906101000a900460ff16155b15611c57577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631526fe2760006040518263ffffffff1660e01b81526004016115f79190614450565b60a060405180830381600087803b15801561161157600080fd5b505af1158015611625573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164991906139e4565b90919293509091509050809250819350505061166361298c565b73ffffffffffffffffffffffffffffffffffffffff16636d557c2e6000612710600554866116919190614af5565b61169b9190614ac4565b8460006040518563ffffffff1660e01b81526004016116bd949392919061446b565b600060405180830381600087803b1580156116d757600080fd5b505af11580156116eb573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631526fe2760016040518263ffffffff1660e01b81526004016117499190614510565b60a060405180830381600087803b15801561176357600080fd5b505af1158015611777573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061179b91906139e4565b9091929350909150905080925081935050506117b561298c565b73ffffffffffffffffffffffffffffffffffffffff16636d557c2e6001612710600554866117e39190614af5565b6117ed9190614ac4565b8460006040518563ffffffff1660e01b815260040161180f949392919061452b565b600060405180830381600087803b15801561182957600080fd5b505af115801561183d573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631526fe27600b6040518263ffffffff1660e01b815260040161189b91906144b0565b60a060405180830381600087803b1580156118b557600080fd5b505af11580156118c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ed91906139e4565b90919293509091509050809250819350505061190761298c565b73ffffffffffffffffffffffffffffffffffffffff16636d557c2e600b612710600654866119359190614af5565b61193f9190614ac4565b8460006040518563ffffffff1660e01b815260040161196194939291906144cb565b600060405180830381600087803b15801561197b57600080fd5b505af115801561198f573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631526fe2760226040518263ffffffff1660e01b81526004016119ed9190614570565b60a060405180830381600087803b158015611a0757600080fd5b505af1158015611a1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3f91906139e4565b909192935090915090508092508193505050611a5961298c565b73ffffffffffffffffffffffffffffffffffffffff16636d557c2e602261271060065486611a879190614af5565b611a919190614ac4565b8460006040518563ffffffff1660e01b8152600401611ab3949392919061458b565b600060405180830381600087803b158015611acd57600080fd5b505af1158015611ae1573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631526fe2760236040518263ffffffff1660e01b8152600401611b3f91906145d0565b60a060405180830381600087803b158015611b5957600080fd5b505af1158015611b6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b9191906139e4565b909192935090915090508092508193505050611bab61298c565b73ffffffffffffffffffffffffffffffffffffffff16636d557c2e602361271060065486611bd99190614af5565b611be39190614ac4565b8460006040518563ffffffff1660e01b8152600401611c0594939291906145eb565b600060405180830381600087803b158015611c1f57600080fd5b505af1158015611c33573d6000803e3d6000fd5b505050506001600760006101000a81548160ff0219169083151502179055506123cf565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663135d31d76040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611cc257600080fd5b505af1158015611cd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cfa9190613aad565b108015611d135750600760009054906101000a900460ff165b156123ce577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631526fe2760006040518263ffffffff1660e01b8152600401611d729190614450565b60a060405180830381600087803b158015611d8c57600080fd5b505af1158015611da0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc491906139e4565b909192935090915090508092508193505050611dde61298c565b73ffffffffffffffffffffffffffffffffffffffff16636d557c2e600060055461271086611e0c9190614af5565b611e169190614ac4565b8460006040518563ffffffff1660e01b8152600401611e38949392919061446b565b600060405180830381600087803b158015611e5257600080fd5b505af1158015611e66573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631526fe2760016040518263ffffffff1660e01b8152600401611ec49190614510565b60a060405180830381600087803b158015611ede57600080fd5b505af1158015611ef2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1691906139e4565b909192935090915090508092508193505050611f3061298c565b73ffffffffffffffffffffffffffffffffffffffff16636d557c2e600160055461271086611f5e9190614af5565b611f689190614ac4565b8460006040518563ffffffff1660e01b8152600401611f8a949392919061452b565b600060405180830381600087803b158015611fa457600080fd5b505af1158015611fb8573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631526fe27600b6040518263ffffffff1660e01b815260040161201691906144b0565b60a060405180830381600087803b15801561203057600080fd5b505af1158015612044573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206891906139e4565b90919293509091509050809250819350505061208261298c565b73ffffffffffffffffffffffffffffffffffffffff16636d557c2e600b600654612710866120b09190614af5565b6120ba9190614ac4565b8460006040518563ffffffff1660e01b81526004016120dc94939291906144cb565b600060405180830381600087803b1580156120f657600080fd5b505af115801561210a573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631526fe2760226040518263ffffffff1660e01b81526004016121689190614570565b60a060405180830381600087803b15801561218257600080fd5b505af1158015612196573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ba91906139e4565b9091929350909150905080925081935050506121d461298c565b73ffffffffffffffffffffffffffffffffffffffff16636d557c2e6022600654612710866122029190614af5565b61220c9190614ac4565b8460006040518563ffffffff1660e01b815260040161222e949392919061458b565b600060405180830381600087803b15801561224857600080fd5b505af115801561225c573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631526fe2760236040518263ffffffff1660e01b81526004016122ba91906145d0565b60a060405180830381600087803b1580156122d457600080fd5b505af11580156122e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230c91906139e4565b90919293509091509050809250819350505061232661298c565b73ffffffffffffffffffffffffffffffffffffffff16636d557c2e6023600654612710866123549190614af5565b61235e9190614ac4565b8460006040518563ffffffff1660e01b815260040161238094939291906145eb565b600060405180830381600087803b15801561239a57600080fd5b505af11580156123ae573d6000803e3d6000fd5b505050506000600760006101000a81548160ff0219169083151502179055505b5b5050565b6361aa0f8d4211612419576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612410906146b2565b60405180910390fd5b6001151560038281548110612457577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906005020160000160009054906101000a900460ff161515146124b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124af906147d2565b60405180910390fd5b612557336124c461298c565b600384815481106124fe577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000209060050201600301547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661353d909392919063ffffffff16565b600060038281548110612593577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906005020160000160006101000a81548160ff0219169083151502179055507fc3b20cd9f77cacfbe64187c454b3af7da8defc5dd20f2006a161cc98ec036f2481336040516125ec92919061490d565b60405180910390a150565b6125ff6135c6565b73ffffffffffffffffffffffffffffffffffffffff1661261d61298c565b73ffffffffffffffffffffffffffffffffffffffff1614612673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266a906147f2565b60405180910390fd5b61267d60006135ce565b565b6361aa0f8d42116126c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126bc906146b2565b60405180910390fd5b6126cd61298c565b73ffffffffffffffffffffffffffffffffffffffff1663e9a4e6ba6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561271457600080fd5b505af1158015612728573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061274c9190613aad565b82111561278e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278590614732565b60405180910390fd5b61279661298c565b73ffffffffffffffffffffffffffffffffffffffff166351a41dec6040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156127dd57600080fd5b505af11580156127f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128159190613aad565b821015612857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284e906148d2565b60405180910390fd5b6128ab3361286361298c565b847f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661353d909392919063ffffffff16565b6002604051806080016040528060011515815260200183815260200184815260200142815250908060018154018082558091505060019003906000526020600020906004020160009091909190915060008201518160000160006101000a81548160ff02191690831515021790555060208201518160010155604082015181600201556060820151816003015550507f9b423cda5c0b499656c6bffb708f07bf94d137fafa0f560b49e297657a94f97d600160028054905061296d9190614b4f565b82843360405161298094939291906149a4565b60405180910390a15050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6129bd61298c565b73ffffffffffffffffffffffffffffffffffffffff1663b9ec7d746040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612a0457600080fd5b505af1158015612a18573d6000803e3d6000fd5b50505050565b6361aa0f8d4211612a64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5b906146b2565b60405180910390fd5b60028181548110612a9e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906004020160000160009054906101000a900460ff168015612ba4575042612acd61298c565b73ffffffffffffffffffffffffffffffffffffffff166334733cc96040518163ffffffff1660e01b8152600401602060405180830381600087803b158015612b1457600080fd5b505af1158015612b28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b4c9190613aad565b60028381548110612b86577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906004020160030154612ba29190614a6e565b105b612be3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bda906147b2565b60405180910390fd5b612beb61298c565b73ffffffffffffffffffffffffffffffffffffffff16631ea7dd5a60028381548110612c40577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000209060040201600101546040518263ffffffff1660e01b8152600401612c6e91906148f2565b600060405180830381600087803b158015612c8857600080fd5b505af1158015612c9c573d6000803e3d6000fd5b50505050600060028281548110612cdc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906004020160000160006101000a81548160ff0219169083151502179055507f171967e02ec59403515d60c33309d6ef85d633d9f583accd02fdb525e0408e928133604051612d3592919061490d565b60405180910390a150565b6361aa0f8d4211612d86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7d906146b2565b60405180910390fd5b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663135d31d76040518163ffffffff1660e01b8152600401602060405180830381600087803b158015612df157600080fd5b505af1158015612e05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e299190613aad565b10612e69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6090614712565b60405180910390fd5b60018181548110612ea3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906006020160000160009054906101000a900460ff16612f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef890614812565b60405180910390fd5b42612f0a61298c565b73ffffffffffffffffffffffffffffffffffffffff166334733cc96040518163ffffffff1660e01b8152600401602060405180830381600087803b158015612f5157600080fd5b505af1158015612f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f899190613aad565b60018381548110612fc3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906006020160040154612fdf9190614a6e565b1061301f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301690614792565b60405180910390fd5b61302761298c565b73ffffffffffffffffffffffffffffffffffffffff16636d557c2e6001838154811061307c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906006020160010154600184815481106130c8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600602016002015460018581548110613114577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906006020160050160009054906101000a900461ffff1660016040518563ffffffff1660e01b8152600401613155949392919061495f565b600060405180830381600087803b15801561316f57600080fd5b505af1158015613183573d6000803e3d6000fd5b505050506000600182815481106131c3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906006020160000160006101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff167f9e30f993d30d9613923defa00a3f669065c5fede98be3e5e37e1d52fc5764589826001848154811061325e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600602016001015460405161327e929190614936565b60405180910390a250565b61329161298c565b73ffffffffffffffffffffffffffffffffffffffff1663ff579b9d6040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156132d857600080fd5b505af11580156132ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133109190613a5b565b61331957600080fd5b6133a861332461298c565b73ffffffffffffffffffffffffffffffffffffffff166366813f636040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561336b57600080fd5b505af115801561337f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133a391906139bb565b6133aa565b565b6133b26135c6565b73ffffffffffffffffffffffffffffffffffffffff166133d061298c565b73ffffffffffffffffffffffffffffffffffffffff1614613426576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161341d906147f2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161348d906146f2565b60405180910390fd5b61349f816135ce565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b600381815481106134fa57600080fd5b90600052602060002090600502016000915090508060000160009054906101000a900460ff16908060010154908060020154908060030154908060040154905085565b6135c0846323b872dd60e01b85858560405160240161355e939291906142bf565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613692565b50505050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006136f4826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166137599092919063ffffffff16565b905060008151111561375457808060200190518101906137149190613a5b565b613753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161374a90614892565b60405180910390fd5b5b505050565b60606137688484600085613771565b90509392505050565b6060824710156137b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137ad90614772565b60405180910390fd5b6137bf85613885565b6137fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137f590614852565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613827919061428d565b60006040518083038185875af1925050503d8060008114613864576040519150601f19603f3d011682016040523d82523d6000602084013e613869565b606091505b5091509150613879828286613898565b92505050949350505050565b600080823b905060008111915050919050565b606083156138a8578290506138f8565b6000835111156138bb5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138ef9190614630565b60405180910390fd5b9392505050565b60008135905061390e81614cd5565b92915050565b60008151905061392381614cd5565b92915050565b60008151905061393881614cec565b92915050565b60008135905061394d81614d03565b92915050565b60008151905061396281614d03565b92915050565b60008135905061397781614d1a565b92915050565b60008151905061398c81614d1a565b92915050565b6000602082840312156139a457600080fd5b60006139b2848285016138ff565b91505092915050565b6000602082840312156139cd57600080fd5b60006139db84828501613914565b91505092915050565b600080600080600060a086880312156139fc57600080fd5b6000613a0a88828901613914565b9550506020613a1b8882890161397d565b9450506040613a2c8882890161397d565b9350506060613a3d8882890161397d565b9250506080613a4e88828901613953565b9150509295509295909350565b600060208284031215613a6d57600080fd5b6000613a7b84828501613929565b91505092915050565b600060208284031215613a9657600080fd5b6000613aa484828501613968565b91505092915050565b600060208284031215613abf57600080fd5b6000613acd8482850161397d565b91505092915050565b60008060408385031215613ae957600080fd5b6000613af785828601613968565b9250506020613b0885828601613968565b9150509250929050565b600080600060608486031215613b2757600080fd5b6000613b3586828701613968565b9350506020613b4686828701613968565b9250506040613b5786828701613968565b9150509250925092565b60008060008060808587031215613b7757600080fd5b6000613b8587828801613968565b9450506020613b9687828801613968565b9350506040613ba787828801613968565b9250506060613bb88782880161393e565b91505092959194509250565b613bcd81614b83565b82525050565b613bdc81614b95565b82525050565b6000613bed82614a3c565b613bf78185614a52565b9350613c07818560208601614c33565b80840191505092915050565b613c1c81614bd9565b82525050565b613c2b81614beb565b82525050565b613c3a81614bfd565b82525050565b613c4981614c0f565b82525050565b613c5881614c21565b82525050565b6000613c6982614a47565b613c738185614a5d565b9350613c83818560208601614c33565b613c8c81614cc4565b840191505092915050565b6000613ca4602083614a5d565b91507f4d6178696d756d20322e3525206f6620746f74616c20616c6c6f636174696f6e6000830152602082019050919050565b6000613ce4602b83614a5d565b91507f70726576656e74696e6720747972616e6e792c206d6178696d756d20302e303560008301527f25206f6620746f6b656e730000000000000000000000000000000000000000006020830152604082019050919050565b6000613d4a601c83614a5d565b91507f6f6e6c7920616c6c6f77656420666f7220746865736520706f6f6c73000000006000830152602082019050919050565b6000613d8a600b83614a5d565b91507f61667465722033206465630000000000000000000000000000000000000000006000830152602082019050919050565b6000613dca602083614a5d565b91507f4d6178696d756d20312e3525206f6620746f74616c20616c6c6f636174696f6e6000830152602082019050919050565b6000613e0a602683614a5d565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613e70601683614a5d565b91507f72657761726420626f6f737420697320616374697665000000000000000000006000830152602082019050919050565b6000613eb0600a83614a5d565b91507f4e6f20747972616e6e79000000000000000000000000000000000000000000006000830152602082019050919050565b6000613ef0600a83614a5d565b91507f6e6f20747972616e6e79000000000000000000000000000000000000000000006000830152602082019050919050565b6000613f30602683614a5d565b91507f416464726573733a20696e73756666696369656e742062616c616e636520666f60008301527f722063616c6c00000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613f96601c83614a5d565b91507f64656c6179206265666f726520656e666f726365206e6f74206d6574000000006000830152602082019050919050565b6000613fd6601283614a5d565b91507f636f6e646974696f6e73206e6f74206d657400000000000000000000000000006000830152602082019050919050565b6000614016601883614a5d565b91507f50726f706f73616c20616c726561647920696e76616c696400000000000000006000830152602082019050919050565b6000614056602083614a5d565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614096601083614a5d565b91507f696e76616c69642070726f706f73616c000000000000000000000000000000006000830152602082019050919050565b60006140d6601f83614a5d565b91507f74686572652069732061206d696e696d756d20636f737420746f20766f7465006000830152602082019050919050565b6000614116601d83614a5d565b91507f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006000830152602082019050919050565b6000614156601283614a5d565b91507f436f6e646974696f6e73206e6f74206d657400000000000000000000000000006000830152602082019050919050565b6000614196602a83614a5d565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b60006141fc600f83614a5d565b91507f616c726561647920696e76616c696400000000000000000000000000000000006000830152602082019050919050565b600061423c601483614a5d565b91507f6d696e696d756d20636f737420746f20766f74650000000000000000000000006000830152602082019050919050565b61427881614ba1565b82525050565b61428781614bcf565b82525050565b60006142998284613be2565b915081905092915050565b60006020820190506142b96000830184613bc4565b92915050565b60006060820190506142d46000830186613bc4565b6142e16020830185613bc4565b6142ee604083018461427e565b949350505050565b600060c08201905061430b6000830189613bc4565b614318602083018861427e565b614325604083018761427e565b614332606083018661427e565b61433f608083018561427e565b61434c60a083018461427e565b979650505050505050565b600060808201905061436c6000830187613bd3565b614379602083018661427e565b614386604083018561427e565b614393606083018461427e565b95945050505050565b600060a0820190506143b16000830188613bd3565b6143be602083018761427e565b6143cb604083018661427e565b6143d8606083018561427e565b6143e5608083018461427e565b9695505050505050565b600060c0820190506144046000830189613bd3565b614411602083018861427e565b61441e604083018761427e565b61442b606083018661427e565b614438608083018561427e565b61444560a083018461426f565b979650505050505050565b60006020820190506144656000830184613c13565b92915050565b60006080820190506144806000830187613c13565b61448d602083018661427e565b61449a604083018561426f565b6144a76060830184613bd3565b95945050505050565b60006020820190506144c56000830184613c22565b92915050565b60006080820190506144e06000830187613c22565b6144ed602083018661427e565b6144fa604083018561426f565b6145076060830184613bd3565b95945050505050565b60006020820190506145256000830184613c31565b92915050565b60006080820190506145406000830187613c31565b61454d602083018661427e565b61455a604083018561426f565b6145676060830184613bd3565b95945050505050565b60006020820190506145856000830184613c40565b92915050565b60006080820190506145a06000830187613c40565b6145ad602083018661427e565b6145ba604083018561426f565b6145c76060830184613bd3565b95945050505050565b60006020820190506145e56000830184613c4f565b92915050565b60006080820190506146006000830187613c4f565b61460d602083018661427e565b61461a604083018561426f565b6146276060830184613bd3565b95945050505050565b6000602082019050818103600083015261464a8184613c5e565b905092915050565b6000602082019050818103600083015261466b81613c97565b9050919050565b6000602082019050818103600083015261468b81613cd7565b9050919050565b600060208201905081810360008301526146ab81613d3d565b9050919050565b600060208201905081810360008301526146cb81613d7d565b9050919050565b600060208201905081810360008301526146eb81613dbd565b9050919050565b6000602082019050818103600083015261470b81613dfd565b9050919050565b6000602082019050818103600083015261472b81613e63565b9050919050565b6000602082019050818103600083015261474b81613ea3565b9050919050565b6000602082019050818103600083015261476b81613ee3565b9050919050565b6000602082019050818103600083015261478b81613f23565b9050919050565b600060208201905081810360008301526147ab81613f89565b9050919050565b600060208201905081810360008301526147cb81613fc9565b9050919050565b600060208201905081810360008301526147eb81614009565b9050919050565b6000602082019050818103600083015261480b81614049565b9050919050565b6000602082019050818103600083015261482b81614089565b9050919050565b6000602082019050818103600083015261484b816140c9565b9050919050565b6000602082019050818103600083015261486b81614109565b9050919050565b6000602082019050818103600083015261488b81614149565b9050919050565b600060208201905081810360008301526148ab81614189565b9050919050565b600060208201905081810360008301526148cb816141ef565b9050919050565b600060208201905081810360008301526148eb8161422f565b9050919050565b6000602082019050614907600083018461427e565b92915050565b6000604082019050614922600083018561427e565b61492f6020830184613bc4565b9392505050565b600060408201905061494b600083018561427e565b614958602083018461427e565b9392505050565b6000608082019050614974600083018761427e565b614981602083018661427e565b61498e604083018561426f565b61499b6060830184613bd3565b95945050505050565b60006080820190506149b9600083018761427e565b6149c6602083018661427e565b6149d3604083018561427e565b6149e06060830184613bc4565b95945050505050565b600060a0820190506149fe600083018861427e565b614a0b602083018761427e565b614a18604083018661427e565b614a25606083018561427e565b614a32608083018461426f565b9695505050505050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b6000614a7982614bcf565b9150614a8483614bcf565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614ab957614ab8614c66565b5b828201905092915050565b6000614acf82614bcf565b9150614ada83614bcf565b925082614aea57614ae9614c95565b5b828204905092915050565b6000614b0082614bcf565b9150614b0b83614bcf565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b4457614b43614c66565b5b828202905092915050565b6000614b5a82614bcf565b9150614b6583614bcf565b925082821015614b7857614b77614c66565b5b828203905092915050565b6000614b8e82614baf565b9050919050565b60008115159050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000614be482614bcf565b9050919050565b6000614bf682614bcf565b9050919050565b6000614c0882614bcf565b9050919050565b6000614c1a82614bcf565b9050919050565b6000614c2c82614bcf565b9050919050565b60005b83811015614c51578082015181840152602081019050614c36565b83811115614c60576000848401525b50505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000601f19601f8301169050919050565b614cde81614b83565b8114614ce957600080fd5b50565b614cf581614b95565b8114614d0057600080fd5b50565b614d0c81614ba1565b8114614d1757600080fd5b50565b614d2381614bcf565b8114614d2e57600080fd5b5056fea2646970667358221220157a90744f56d3279f2235630086d58256f7d2a58e148291eaa2d81f358f887564736f6c63430008000033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061012c5760003560e01c80637b944552116100ad578063f26d5d2611610071578063f26d5d26146102d1578063f2fde38b146102db578063fb1db278146102f7578063fc0c546a14610315578063fca47bec146103335761012c565b80637b944552146102555780638da5cb5b14610271578063b9ec7d741461028f578063bbbee4a414610299578063cc430ced146102b55761012c565b80633dc2958a116100f45780633dc2958a146101d45780634ecb7cb1146102095780635de0870114610225578063675525cc1461022f578063715018a61461024b5761012c565b80630f4f24c6146101315780631687fa6c1461014d5780631a21fffd14610180578063307260481461019c578063355514d8146101b8575b600080fd5b61014b60048036038101906101469190613a84565b610367565b005b61016760048036038101906101629190613a84565b610584565b6040516101779493929190614357565b60405180910390f35b61019a60048036038101906101959190613b61565b6105d1565b005b6101b660048036038101906101b19190613a84565b610c97565b005b6101d260048036038101906101cd9190613b12565b610ec9565b005b6101ee60048036038101906101e99190613a84565b611122565b604051610200969594939291906143ef565b60405180910390f35b610223600480360381019061021e9190613a84565b611189565b005b61022d611492565b005b61024960048036038101906102449190613a84565b6123d3565b005b6102536125f7565b005b61026f600480360381019061026a9190613ad6565b61267f565b005b61027961298c565b60405161028691906142a4565b60405180910390f35b6102976129b5565b005b6102b360048036038101906102ae9190613a84565b612a1e565b005b6102cf60048036038101906102ca9190613a84565b612d40565b005b6102d9613289565b005b6102f560048036038101906102f09190613992565b6133aa565b005b6102ff6134a2565b60405161030c91906142a4565b60405180910390f35b61031d6134c6565b60405161032a91906142a4565b60405180910390f35b61034d60048036038101906103489190613a84565b6134ea565b60405161035e95949392919061439c565b60405180910390f35b6361aa0f8d42116103ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a4906146b2565b60405180910390fd5b600281815481106103e7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906004020160000160009054906101000a900460ff16610445576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161043c906148b2565b60405180910390fd5b6104e43361045161298c565b6002848154811061048b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000209060040201600201547f0000000000000000000000006d0c966c8a09e354df9c48b446a474ce3343d91273ffffffffffffffffffffffffffffffffffffffff1661353d909392919063ffffffff16565b600060028281548110610520577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906004020160000160006101000a81548160ff0219169083151502179055507f8e1fedc4412d91d5e367aa6f051d48157011c1aea1683fcf3ee2324d8088c477813360405161057992919061490d565b60405180910390a150565b6002818154811061059457600080fd5b90600052602060002090600402016000915090508060000160009054906101000a900460ff16908060010154908060020154908060030154905084565b6361aa0f8d4211610617576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060e906146b2565b60405180910390fd5b6004547f0000000000000000000000009bd741f077241b594ebdd745945b577d59c8768e73ffffffffffffffffffffffffffffffffffffffff1663135d31d76040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561068257600080fd5b505af1158015610696573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ba9190613aad565b106106fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f190614712565b60405180910390fd5b61070261298c565b73ffffffffffffffffffffffffffffffffffffffff1663e9a4e6ba6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561074957600080fd5b505af115801561075d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107819190613aad565b8411156107c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ba90614672565b60405180910390fd5b6107cb61298c565b73ffffffffffffffffffffffffffffffffffffffff166351a41dec6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561081257600080fd5b505af1158015610826573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084a9190613aad565b84101561088c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088390614832565b60405180910390fd5b600083148061089b5750600183145b806108a65750600b83145b806108b15750602283145b806108bc5750602383145b6108fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f290614692565b60405180910390fd5b600083148061090a5750600183145b15610a0f576103e860197f0000000000000000000000009bd741f077241b594ebdd745945b577d59c8768e73ffffffffffffffffffffffffffffffffffffffff166317caf6f16040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561097c57600080fd5b505af1158015610990573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b49190613aad565b6109be9190614af5565b6109c89190614ac4565b821115610a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0190614652565b60405180910390fd5b610b0b565b6103e8600f7f0000000000000000000000009bd741f077241b594ebdd745945b577d59c8768e73ffffffffffffffffffffffffffffffffffffffff166317caf6f16040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610a7c57600080fd5b505af1158015610a90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab49190613aad565b610abe9190614af5565b610ac89190614ac4565b821115610b0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b01906146d2565b60405180910390fd5b5b610b5f33610b1761298c565b867f0000000000000000000000006d0c966c8a09e354df9c48b446a474ce3343d91273ffffffffffffffffffffffffffffffffffffffff1661353d909392919063ffffffff16565b60016040518060c001604052806001151581526020018581526020018481526020018681526020014281526020018361ffff16815250908060018154018082558091505060019003906000526020600020906006020160009091909190915060008201518160000160006101000a81548160ff0219169083151502179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050160006101000a81548161ffff021916908361ffff16021790555050503373ffffffffffffffffffffffffffffffffffffffff167f75749154f26e5a862760da171f3cc623d88749243975e03e6dcf036f9d9abf9e60018080549050610c749190614b4f565b86868686604051610c899594939291906149e9565b60405180910390a250505050565b6361aa0f8d4211610cdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd4906146b2565b60405180910390fd5b60018181548110610d17577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906006020160000160009054906101000a900460ff16610d75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6c906148b2565b60405180910390fd5b610e1433610d8161298c565b60018481548110610dbb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000209060060201600301547f0000000000000000000000006d0c966c8a09e354df9c48b446a474ce3343d91273ffffffffffffffffffffffffffffffffffffffff1661353d909392919063ffffffff16565b600060018281548110610e50577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906006020160000160006101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff167f532bf6bb70cc1c58b8e91a1ef53e2a78801b5ac49db199297ce73084cb4c0dc182604051610ebe91906148f2565b60405180910390a250565b6361aa0f8d4211610f0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f06906146b2565b60405180910390fd5b610f1761298c565b73ffffffffffffffffffffffffffffffffffffffff1663e9a4e6ba6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610f5e57600080fd5b505af1158015610f72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f969190613aad565b831115610fd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcf90614752565b60405180910390fd5b61102c33610fe461298c565b857f0000000000000000000000006d0c966c8a09e354df9c48b446a474ce3343d91273ffffffffffffffffffffffffffffffffffffffff1661353d909392919063ffffffff16565b60036040518060a0016040528060011515815260200184815260200183815260200185815260200142815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548160ff0219169083151502179055506020820151816001015560408201518160020155606082015181600301556080820151816004015550507f09c8943550f2ff2631ff789518d81a463498fb8a96fabaad972c69bc647b395f3360016003805490506110ff9190614b4f565b84848742604051611115969594939291906142f6565b60405180910390a1505050565b6001818154811061113257600080fd5b90600052602060002090600602016000915090508060000160009054906101000a900460ff16908060010154908060020154908060030154908060040154908060050160009054906101000a900461ffff16905086565b6361aa0f8d42116111cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c6906146b2565b60405180910390fd5b60038181548110611209577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906005020160000160009054906101000a900460ff16801561130f57504261123861298c565b73ffffffffffffffffffffffffffffffffffffffff166334733cc96040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561127f57600080fd5b505af1158015611293573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b79190613aad565b600383815481106112f1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600502016004015461130d9190614a6e565b105b61134e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134590614872565b60405180910390fd5b60038181548110611388577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906005020160010154600581905550600381815481106113da577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600502016002015460068190555060006003828154811061142e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906005020160000160006101000a81548160ff0219169083151502179055507f7d02aa1d965086e789a0eb438d8c3a6db6db3e3b75cf513ed1021a7a0116d433813360405161148792919061490d565b60405180910390a150565b6361aa0f8d42116114d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cf906146b2565b60405180910390fd5b6000806004547f0000000000000000000000009bd741f077241b594ebdd745945b577d59c8768e73ffffffffffffffffffffffffffffffffffffffff1663135d31d76040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561154657600080fd5b505af115801561155a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157e9190613aad565b1180156115985750600760009054906101000a900460ff16155b15611c57577f0000000000000000000000009bd741f077241b594ebdd745945b577d59c8768e73ffffffffffffffffffffffffffffffffffffffff16631526fe2760006040518263ffffffff1660e01b81526004016115f79190614450565b60a060405180830381600087803b15801561161157600080fd5b505af1158015611625573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164991906139e4565b90919293509091509050809250819350505061166361298c565b73ffffffffffffffffffffffffffffffffffffffff16636d557c2e6000612710600554866116919190614af5565b61169b9190614ac4565b8460006040518563ffffffff1660e01b81526004016116bd949392919061446b565b600060405180830381600087803b1580156116d757600080fd5b505af11580156116eb573d6000803e3d6000fd5b505050507f0000000000000000000000009bd741f077241b594ebdd745945b577d59c8768e73ffffffffffffffffffffffffffffffffffffffff16631526fe2760016040518263ffffffff1660e01b81526004016117499190614510565b60a060405180830381600087803b15801561176357600080fd5b505af1158015611777573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061179b91906139e4565b9091929350909150905080925081935050506117b561298c565b73ffffffffffffffffffffffffffffffffffffffff16636d557c2e6001612710600554866117e39190614af5565b6117ed9190614ac4565b8460006040518563ffffffff1660e01b815260040161180f949392919061452b565b600060405180830381600087803b15801561182957600080fd5b505af115801561183d573d6000803e3d6000fd5b505050507f0000000000000000000000009bd741f077241b594ebdd745945b577d59c8768e73ffffffffffffffffffffffffffffffffffffffff16631526fe27600b6040518263ffffffff1660e01b815260040161189b91906144b0565b60a060405180830381600087803b1580156118b557600080fd5b505af11580156118c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ed91906139e4565b90919293509091509050809250819350505061190761298c565b73ffffffffffffffffffffffffffffffffffffffff16636d557c2e600b612710600654866119359190614af5565b61193f9190614ac4565b8460006040518563ffffffff1660e01b815260040161196194939291906144cb565b600060405180830381600087803b15801561197b57600080fd5b505af115801561198f573d6000803e3d6000fd5b505050507f0000000000000000000000009bd741f077241b594ebdd745945b577d59c8768e73ffffffffffffffffffffffffffffffffffffffff16631526fe2760226040518263ffffffff1660e01b81526004016119ed9190614570565b60a060405180830381600087803b158015611a0757600080fd5b505af1158015611a1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3f91906139e4565b909192935090915090508092508193505050611a5961298c565b73ffffffffffffffffffffffffffffffffffffffff16636d557c2e602261271060065486611a879190614af5565b611a919190614ac4565b8460006040518563ffffffff1660e01b8152600401611ab3949392919061458b565b600060405180830381600087803b158015611acd57600080fd5b505af1158015611ae1573d6000803e3d6000fd5b505050507f0000000000000000000000009bd741f077241b594ebdd745945b577d59c8768e73ffffffffffffffffffffffffffffffffffffffff16631526fe2760236040518263ffffffff1660e01b8152600401611b3f91906145d0565b60a060405180830381600087803b158015611b5957600080fd5b505af1158015611b6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b9191906139e4565b909192935090915090508092508193505050611bab61298c565b73ffffffffffffffffffffffffffffffffffffffff16636d557c2e602361271060065486611bd99190614af5565b611be39190614ac4565b8460006040518563ffffffff1660e01b8152600401611c0594939291906145eb565b600060405180830381600087803b158015611c1f57600080fd5b505af1158015611c33573d6000803e3d6000fd5b505050506001600760006101000a81548160ff0219169083151502179055506123cf565b6004547f0000000000000000000000009bd741f077241b594ebdd745945b577d59c8768e73ffffffffffffffffffffffffffffffffffffffff1663135d31d76040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611cc257600080fd5b505af1158015611cd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cfa9190613aad565b108015611d135750600760009054906101000a900460ff165b156123ce577f0000000000000000000000009bd741f077241b594ebdd745945b577d59c8768e73ffffffffffffffffffffffffffffffffffffffff16631526fe2760006040518263ffffffff1660e01b8152600401611d729190614450565b60a060405180830381600087803b158015611d8c57600080fd5b505af1158015611da0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc491906139e4565b909192935090915090508092508193505050611dde61298c565b73ffffffffffffffffffffffffffffffffffffffff16636d557c2e600060055461271086611e0c9190614af5565b611e169190614ac4565b8460006040518563ffffffff1660e01b8152600401611e38949392919061446b565b600060405180830381600087803b158015611e5257600080fd5b505af1158015611e66573d6000803e3d6000fd5b505050507f0000000000000000000000009bd741f077241b594ebdd745945b577d59c8768e73ffffffffffffffffffffffffffffffffffffffff16631526fe2760016040518263ffffffff1660e01b8152600401611ec49190614510565b60a060405180830381600087803b158015611ede57600080fd5b505af1158015611ef2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1691906139e4565b909192935090915090508092508193505050611f3061298c565b73ffffffffffffffffffffffffffffffffffffffff16636d557c2e600160055461271086611f5e9190614af5565b611f689190614ac4565b8460006040518563ffffffff1660e01b8152600401611f8a949392919061452b565b600060405180830381600087803b158015611fa457600080fd5b505af1158015611fb8573d6000803e3d6000fd5b505050507f0000000000000000000000009bd741f077241b594ebdd745945b577d59c8768e73ffffffffffffffffffffffffffffffffffffffff16631526fe27600b6040518263ffffffff1660e01b815260040161201691906144b0565b60a060405180830381600087803b15801561203057600080fd5b505af1158015612044573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206891906139e4565b90919293509091509050809250819350505061208261298c565b73ffffffffffffffffffffffffffffffffffffffff16636d557c2e600b600654612710866120b09190614af5565b6120ba9190614ac4565b8460006040518563ffffffff1660e01b81526004016120dc94939291906144cb565b600060405180830381600087803b1580156120f657600080fd5b505af115801561210a573d6000803e3d6000fd5b505050507f0000000000000000000000009bd741f077241b594ebdd745945b577d59c8768e73ffffffffffffffffffffffffffffffffffffffff16631526fe2760226040518263ffffffff1660e01b81526004016121689190614570565b60a060405180830381600087803b15801561218257600080fd5b505af1158015612196573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ba91906139e4565b9091929350909150905080925081935050506121d461298c565b73ffffffffffffffffffffffffffffffffffffffff16636d557c2e6022600654612710866122029190614af5565b61220c9190614ac4565b8460006040518563ffffffff1660e01b815260040161222e949392919061458b565b600060405180830381600087803b15801561224857600080fd5b505af115801561225c573d6000803e3d6000fd5b505050507f0000000000000000000000009bd741f077241b594ebdd745945b577d59c8768e73ffffffffffffffffffffffffffffffffffffffff16631526fe2760236040518263ffffffff1660e01b81526004016122ba91906145d0565b60a060405180830381600087803b1580156122d457600080fd5b505af11580156122e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230c91906139e4565b90919293509091509050809250819350505061232661298c565b73ffffffffffffffffffffffffffffffffffffffff16636d557c2e6023600654612710866123549190614af5565b61235e9190614ac4565b8460006040518563ffffffff1660e01b815260040161238094939291906145eb565b600060405180830381600087803b15801561239a57600080fd5b505af11580156123ae573d6000803e3d6000fd5b505050506000600760006101000a81548160ff0219169083151502179055505b5b5050565b6361aa0f8d4211612419576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612410906146b2565b60405180910390fd5b6001151560038281548110612457577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906005020160000160009054906101000a900460ff161515146124b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124af906147d2565b60405180910390fd5b612557336124c461298c565b600384815481106124fe577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000209060050201600301547f0000000000000000000000006d0c966c8a09e354df9c48b446a474ce3343d91273ffffffffffffffffffffffffffffffffffffffff1661353d909392919063ffffffff16565b600060038281548110612593577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906005020160000160006101000a81548160ff0219169083151502179055507fc3b20cd9f77cacfbe64187c454b3af7da8defc5dd20f2006a161cc98ec036f2481336040516125ec92919061490d565b60405180910390a150565b6125ff6135c6565b73ffffffffffffffffffffffffffffffffffffffff1661261d61298c565b73ffffffffffffffffffffffffffffffffffffffff1614612673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266a906147f2565b60405180910390fd5b61267d60006135ce565b565b6361aa0f8d42116126c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126bc906146b2565b60405180910390fd5b6126cd61298c565b73ffffffffffffffffffffffffffffffffffffffff1663e9a4e6ba6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561271457600080fd5b505af1158015612728573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061274c9190613aad565b82111561278e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278590614732565b60405180910390fd5b61279661298c565b73ffffffffffffffffffffffffffffffffffffffff166351a41dec6040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156127dd57600080fd5b505af11580156127f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128159190613aad565b821015612857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284e906148d2565b60405180910390fd5b6128ab3361286361298c565b847f0000000000000000000000006d0c966c8a09e354df9c48b446a474ce3343d91273ffffffffffffffffffffffffffffffffffffffff1661353d909392919063ffffffff16565b6002604051806080016040528060011515815260200183815260200184815260200142815250908060018154018082558091505060019003906000526020600020906004020160009091909190915060008201518160000160006101000a81548160ff02191690831515021790555060208201518160010155604082015181600201556060820151816003015550507f9b423cda5c0b499656c6bffb708f07bf94d137fafa0f560b49e297657a94f97d600160028054905061296d9190614b4f565b82843360405161298094939291906149a4565b60405180910390a15050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6129bd61298c565b73ffffffffffffffffffffffffffffffffffffffff1663b9ec7d746040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612a0457600080fd5b505af1158015612a18573d6000803e3d6000fd5b50505050565b6361aa0f8d4211612a64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5b906146b2565b60405180910390fd5b60028181548110612a9e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906004020160000160009054906101000a900460ff168015612ba4575042612acd61298c565b73ffffffffffffffffffffffffffffffffffffffff166334733cc96040518163ffffffff1660e01b8152600401602060405180830381600087803b158015612b1457600080fd5b505af1158015612b28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b4c9190613aad565b60028381548110612b86577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906004020160030154612ba29190614a6e565b105b612be3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bda906147b2565b60405180910390fd5b612beb61298c565b73ffffffffffffffffffffffffffffffffffffffff16631ea7dd5a60028381548110612c40577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000209060040201600101546040518263ffffffff1660e01b8152600401612c6e91906148f2565b600060405180830381600087803b158015612c8857600080fd5b505af1158015612c9c573d6000803e3d6000fd5b50505050600060028281548110612cdc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906004020160000160006101000a81548160ff0219169083151502179055507f171967e02ec59403515d60c33309d6ef85d633d9f583accd02fdb525e0408e928133604051612d3592919061490d565b60405180910390a150565b6361aa0f8d4211612d86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7d906146b2565b60405180910390fd5b6004547f0000000000000000000000009bd741f077241b594ebdd745945b577d59c8768e73ffffffffffffffffffffffffffffffffffffffff1663135d31d76040518163ffffffff1660e01b8152600401602060405180830381600087803b158015612df157600080fd5b505af1158015612e05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e299190613aad565b10612e69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6090614712565b60405180910390fd5b60018181548110612ea3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906006020160000160009054906101000a900460ff16612f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef890614812565b60405180910390fd5b42612f0a61298c565b73ffffffffffffffffffffffffffffffffffffffff166334733cc96040518163ffffffff1660e01b8152600401602060405180830381600087803b158015612f5157600080fd5b505af1158015612f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f899190613aad565b60018381548110612fc3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906006020160040154612fdf9190614a6e565b1061301f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301690614792565b60405180910390fd5b61302761298c565b73ffffffffffffffffffffffffffffffffffffffff16636d557c2e6001838154811061307c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906006020160010154600184815481106130c8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600602016002015460018581548110613114577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906006020160050160009054906101000a900461ffff1660016040518563ffffffff1660e01b8152600401613155949392919061495f565b600060405180830381600087803b15801561316f57600080fd5b505af1158015613183573d6000803e3d6000fd5b505050506000600182815481106131c3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906006020160000160006101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff167f9e30f993d30d9613923defa00a3f669065c5fede98be3e5e37e1d52fc5764589826001848154811061325e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600602016001015460405161327e929190614936565b60405180910390a250565b61329161298c565b73ffffffffffffffffffffffffffffffffffffffff1663ff579b9d6040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156132d857600080fd5b505af11580156132ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133109190613a5b565b61331957600080fd5b6133a861332461298c565b73ffffffffffffffffffffffffffffffffffffffff166366813f636040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561336b57600080fd5b505af115801561337f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133a391906139bb565b6133aa565b565b6133b26135c6565b73ffffffffffffffffffffffffffffffffffffffff166133d061298c565b73ffffffffffffffffffffffffffffffffffffffff1614613426576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161341d906147f2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161348d906146f2565b60405180910390fd5b61349f816135ce565b50565b7f0000000000000000000000009bd741f077241b594ebdd745945b577d59c8768e81565b7f0000000000000000000000006d0c966c8a09e354df9c48b446a474ce3343d91281565b600381815481106134fa57600080fd5b90600052602060002090600502016000915090508060000160009054906101000a900460ff16908060010154908060020154908060030154908060040154905085565b6135c0846323b872dd60e01b85858560405160240161355e939291906142bf565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613692565b50505050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006136f4826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166137599092919063ffffffff16565b905060008151111561375457808060200190518101906137149190613a5b565b613753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161374a90614892565b60405180910390fd5b5b505050565b60606137688484600085613771565b90509392505050565b6060824710156137b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137ad90614772565b60405180910390fd5b6137bf85613885565b6137fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137f590614852565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613827919061428d565b60006040518083038185875af1925050503d8060008114613864576040519150601f19603f3d011682016040523d82523d6000602084013e613869565b606091505b5091509150613879828286613898565b92505050949350505050565b600080823b905060008111915050919050565b606083156138a8578290506138f8565b6000835111156138bb5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138ef9190614630565b60405180910390fd5b9392505050565b60008135905061390e81614cd5565b92915050565b60008151905061392381614cd5565b92915050565b60008151905061393881614cec565b92915050565b60008135905061394d81614d03565b92915050565b60008151905061396281614d03565b92915050565b60008135905061397781614d1a565b92915050565b60008151905061398c81614d1a565b92915050565b6000602082840312156139a457600080fd5b60006139b2848285016138ff565b91505092915050565b6000602082840312156139cd57600080fd5b60006139db84828501613914565b91505092915050565b600080600080600060a086880312156139fc57600080fd5b6000613a0a88828901613914565b9550506020613a1b8882890161397d565b9450506040613a2c8882890161397d565b9350506060613a3d8882890161397d565b9250506080613a4e88828901613953565b9150509295509295909350565b600060208284031215613a6d57600080fd5b6000613a7b84828501613929565b91505092915050565b600060208284031215613a9657600080fd5b6000613aa484828501613968565b91505092915050565b600060208284031215613abf57600080fd5b6000613acd8482850161397d565b91505092915050565b60008060408385031215613ae957600080fd5b6000613af785828601613968565b9250506020613b0885828601613968565b9150509250929050565b600080600060608486031215613b2757600080fd5b6000613b3586828701613968565b9350506020613b4686828701613968565b9250506040613b5786828701613968565b9150509250925092565b60008060008060808587031215613b7757600080fd5b6000613b8587828801613968565b9450506020613b9687828801613968565b9350506040613ba787828801613968565b9250506060613bb88782880161393e565b91505092959194509250565b613bcd81614b83565b82525050565b613bdc81614b95565b82525050565b6000613bed82614a3c565b613bf78185614a52565b9350613c07818560208601614c33565b80840191505092915050565b613c1c81614bd9565b82525050565b613c2b81614beb565b82525050565b613c3a81614bfd565b82525050565b613c4981614c0f565b82525050565b613c5881614c21565b82525050565b6000613c6982614a47565b613c738185614a5d565b9350613c83818560208601614c33565b613c8c81614cc4565b840191505092915050565b6000613ca4602083614a5d565b91507f4d6178696d756d20322e3525206f6620746f74616c20616c6c6f636174696f6e6000830152602082019050919050565b6000613ce4602b83614a5d565b91507f70726576656e74696e6720747972616e6e792c206d6178696d756d20302e303560008301527f25206f6620746f6b656e730000000000000000000000000000000000000000006020830152604082019050919050565b6000613d4a601c83614a5d565b91507f6f6e6c7920616c6c6f77656420666f7220746865736520706f6f6c73000000006000830152602082019050919050565b6000613d8a600b83614a5d565b91507f61667465722033206465630000000000000000000000000000000000000000006000830152602082019050919050565b6000613dca602083614a5d565b91507f4d6178696d756d20312e3525206f6620746f74616c20616c6c6f636174696f6e6000830152602082019050919050565b6000613e0a602683614a5d565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613e70601683614a5d565b91507f72657761726420626f6f737420697320616374697665000000000000000000006000830152602082019050919050565b6000613eb0600a83614a5d565b91507f4e6f20747972616e6e79000000000000000000000000000000000000000000006000830152602082019050919050565b6000613ef0600a83614a5d565b91507f6e6f20747972616e6e79000000000000000000000000000000000000000000006000830152602082019050919050565b6000613f30602683614a5d565b91507f416464726573733a20696e73756666696369656e742062616c616e636520666f60008301527f722063616c6c00000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613f96601c83614a5d565b91507f64656c6179206265666f726520656e666f726365206e6f74206d6574000000006000830152602082019050919050565b6000613fd6601283614a5d565b91507f636f6e646974696f6e73206e6f74206d657400000000000000000000000000006000830152602082019050919050565b6000614016601883614a5d565b91507f50726f706f73616c20616c726561647920696e76616c696400000000000000006000830152602082019050919050565b6000614056602083614a5d565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614096601083614a5d565b91507f696e76616c69642070726f706f73616c000000000000000000000000000000006000830152602082019050919050565b60006140d6601f83614a5d565b91507f74686572652069732061206d696e696d756d20636f737420746f20766f7465006000830152602082019050919050565b6000614116601d83614a5d565b91507f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006000830152602082019050919050565b6000614156601283614a5d565b91507f436f6e646974696f6e73206e6f74206d657400000000000000000000000000006000830152602082019050919050565b6000614196602a83614a5d565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b60006141fc600f83614a5d565b91507f616c726561647920696e76616c696400000000000000000000000000000000006000830152602082019050919050565b600061423c601483614a5d565b91507f6d696e696d756d20636f737420746f20766f74650000000000000000000000006000830152602082019050919050565b61427881614ba1565b82525050565b61428781614bcf565b82525050565b60006142998284613be2565b915081905092915050565b60006020820190506142b96000830184613bc4565b92915050565b60006060820190506142d46000830186613bc4565b6142e16020830185613bc4565b6142ee604083018461427e565b949350505050565b600060c08201905061430b6000830189613bc4565b614318602083018861427e565b614325604083018761427e565b614332606083018661427e565b61433f608083018561427e565b61434c60a083018461427e565b979650505050505050565b600060808201905061436c6000830187613bd3565b614379602083018661427e565b614386604083018561427e565b614393606083018461427e565b95945050505050565b600060a0820190506143b16000830188613bd3565b6143be602083018761427e565b6143cb604083018661427e565b6143d8606083018561427e565b6143e5608083018461427e565b9695505050505050565b600060c0820190506144046000830189613bd3565b614411602083018861427e565b61441e604083018761427e565b61442b606083018661427e565b614438608083018561427e565b61444560a083018461426f565b979650505050505050565b60006020820190506144656000830184613c13565b92915050565b60006080820190506144806000830187613c13565b61448d602083018661427e565b61449a604083018561426f565b6144a76060830184613bd3565b95945050505050565b60006020820190506144c56000830184613c22565b92915050565b60006080820190506144e06000830187613c22565b6144ed602083018661427e565b6144fa604083018561426f565b6145076060830184613bd3565b95945050505050565b60006020820190506145256000830184613c31565b92915050565b60006080820190506145406000830187613c31565b61454d602083018661427e565b61455a604083018561426f565b6145676060830184613bd3565b95945050505050565b60006020820190506145856000830184613c40565b92915050565b60006080820190506145a06000830187613c40565b6145ad602083018661427e565b6145ba604083018561426f565b6145c76060830184613bd3565b95945050505050565b60006020820190506145e56000830184613c4f565b92915050565b60006080820190506146006000830187613c4f565b61460d602083018661427e565b61461a604083018561426f565b6146276060830184613bd3565b95945050505050565b6000602082019050818103600083015261464a8184613c5e565b905092915050565b6000602082019050818103600083015261466b81613c97565b9050919050565b6000602082019050818103600083015261468b81613cd7565b9050919050565b600060208201905081810360008301526146ab81613d3d565b9050919050565b600060208201905081810360008301526146cb81613d7d565b9050919050565b600060208201905081810360008301526146eb81613dbd565b9050919050565b6000602082019050818103600083015261470b81613dfd565b9050919050565b6000602082019050818103600083015261472b81613e63565b9050919050565b6000602082019050818103600083015261474b81613ea3565b9050919050565b6000602082019050818103600083015261476b81613ee3565b9050919050565b6000602082019050818103600083015261478b81613f23565b9050919050565b600060208201905081810360008301526147ab81613f89565b9050919050565b600060208201905081810360008301526147cb81613fc9565b9050919050565b600060208201905081810360008301526147eb81614009565b9050919050565b6000602082019050818103600083015261480b81614049565b9050919050565b6000602082019050818103600083015261482b81614089565b9050919050565b6000602082019050818103600083015261484b816140c9565b9050919050565b6000602082019050818103600083015261486b81614109565b9050919050565b6000602082019050818103600083015261488b81614149565b9050919050565b600060208201905081810360008301526148ab81614189565b9050919050565b600060208201905081810360008301526148cb816141ef565b9050919050565b600060208201905081810360008301526148eb8161422f565b9050919050565b6000602082019050614907600083018461427e565b92915050565b6000604082019050614922600083018561427e565b61492f6020830184613bc4565b9392505050565b600060408201905061494b600083018561427e565b614958602083018461427e565b9392505050565b6000608082019050614974600083018761427e565b614981602083018661427e565b61498e604083018561426f565b61499b6060830184613bd3565b95945050505050565b60006080820190506149b9600083018761427e565b6149c6602083018661427e565b6149d3604083018561427e565b6149e06060830184613bc4565b95945050505050565b600060a0820190506149fe600083018861427e565b614a0b602083018761427e565b614a18604083018661427e565b614a25606083018561427e565b614a32608083018461426f565b9695505050505050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b6000614a7982614bcf565b9150614a8483614bcf565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614ab957614ab8614c66565b5b828201905092915050565b6000614acf82614bcf565b9150614ada83614bcf565b925082614aea57614ae9614c95565b5b828204905092915050565b6000614b0082614bcf565b9150614b0b83614bcf565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b4457614b43614c66565b5b828202905092915050565b6000614b5a82614bcf565b9150614b6583614bcf565b925082821015614b7857614b77614c66565b5b828203905092915050565b6000614b8e82614baf565b9050919050565b60008115159050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000614be482614bcf565b9050919050565b6000614bf682614bcf565b9050919050565b6000614c0882614bcf565b9050919050565b6000614c1a82614bcf565b9050919050565b6000614c2c82614bcf565b9050919050565b60005b83811015614c51578082015181840152602081019050614c36565b83811115614c60576000848401525b50505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000601f19601f8301169050919050565b614cde81614b83565b8114614ce957600080fd5b50565b614cf581614b95565b8114614d0057600080fd5b50565b614d0c81614ba1565b8114614d1757600080fd5b50565b614d2381614bcf565b8114614d2e57600080fd5b5056fea2646970667358221220157a90744f56d3279f2235630086d58256f7d2a58e148291eaa2d81f358f887564736f6c63430008000033
Deployed Bytecode Sourcemap
18822:13520:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31017:444;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19564:66;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;21627:1548;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23181:380;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24763:640;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19517:40;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;25830:615;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26752:2968;;;:::i;:::-;;25409:415;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2571:103;;;:::i;:::-;;30328:683;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1920:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29732:93;;;:::i;:::-;;31469:601;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23661:830;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32155:184;;;:::i;:::-;;2829:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19729:80;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19816:75;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19637:53;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;31017:444;21429:10;21411:15;:28;21403:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;31116:26:::1;31143:10;31116:38;;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;31108:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;31196:117;31227:10;31239:7;:5;:7::i;:::-;31248:26;31275:10;31248:38;;;;;;;;;;;;;;;;;;;;;;;;;;:64;;;31203:5;31196:30;;;;:117;;;;;;:::i;:::-;31368:5;31321:26;31348:10;31321:38;;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;:52;;;;;;;;;;;;;;;;;;31395:58;31430:10;31442;31395:58;;;;;;;:::i;:::-;;;;;;;;31017:444:::0;:::o;19564:66::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21627:1548::-;21429:10;21411:15;:28;21403:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;21845:10:::1;;21816;21804:36;;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;21796:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;21974:7;:5;:7::i;:::-;21960:40;;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21940:16;:62;;21932:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;22100:7;:5;:7::i;:::-;22086:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22066:16;:55;;22058:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;22183:1;22173:6;:11;:26;;;;22198:1;22188:6;:11;22173:26;:42;;;;22213:2;22203:6;:12;22173:42;:58;;;;22229:2;22219:6;:12;22173:58;:74;;;;22245:2;22235:6;:12;22173:74;22165:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;22424:1;22414:6;:11;:26;;;;22439:1;22429:6;:11;22414:26;22411:400;;;22544:4;22539:2;22507:10;22495:39;;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46;;;;:::i;:::-;:53;;;;:::i;:::-;22477:13;:72;;22454:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;22411:400;;;22731:4;22726:2;22694:10;22682:39;;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46;;;;:::i;:::-;:53;;;;:::i;:::-;22664:13;:72;;22641:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;22411:400;22824:69;22855:10;22867:7;:5;:7::i;:::-;22876:16;22831:5;22824:30;;;;:69;;;;;;:::i;:::-;22902:18;22937:88;;;;;;;;22950:4;22937:88;;;;;;22956:6;22937:88;;;;22964:13;22937:88;;;;22979:16;22937:88;;;;22997:15;22937:88;;;;23014:10;22937:88;;;;::::0;22902:135:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23156:10;23051:116;;;23100:1;23072:18:::0;:25:::1;;;;:29;;;;:::i;:::-;23103:16;23121:6;23129:13;23144:10;23051:116;;;;;;;;;;:::i;:::-;;;;;;;;21627:1548:::0;;;;:::o;23181:380::-;21429:10;21411:15;:28;21403:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;23262:18:::1;23281:10;23262:30;;;;;;;;;;;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;23254:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23330:109;23361:10;23373:7;:5;:7::i;:::-;23382:18;23401:10;23382:30;;;;;;;;;;;;;;;;;;;;;;;;;;:56;;;23337:5;23330:30;;;;:109;;;;;;:::i;:::-;23487:5;23448:18;23467:10;23448:30;;;;;;;;;;;;;;;;;;;;;;;;;;:36;;;:44;;;;;;;;;;;;;;;;;;23542:10;23513:40;;;23530:10;23513:40;;;;;;:::i;:::-;;;;;;;;23181:380:::0;:::o;24763:640::-;21429:10;21411:15;:28;21403:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;24946:7:::1;:5;:7::i;:::-;24932:40;;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24912:16;:62;;24904:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;25001:69;25032:10;25044:7;:5;:7::i;:::-;25053:16;25008:5;25001:30;;;;:69;;;;;;:::i;:::-;25080:22;25120:100;;;;;;;;25142:4;25120:100;;;;;;25148:15;25120:100;;;;25165:19;25120:100;;;;25186:16;25120:100;;;;25204:15;25120:100;;::::0;25080:153:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25253:142;25276:10;25320:1;25288:22;:29;;;;:33;;;;:::i;:::-;25323:15;25340:19;25361:16;25379:15;25253:142;;;;;;;;;;;:::i;:::-;;;;;;;;24763:640:::0;;;:::o;19517:40::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25830:615::-;21429:10;21411:15;:28;21403:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;25929:22:::1;25952:10;25929:34;;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;:171;;;;;26085:15;26053:7;:5;:7::i;:::-;26039:41;;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25983:22;26006:10;25983:34;;;;;;;;;;;;;;;;;;;;;;;;;;:53;;;:99;;;;:::i;:::-;:117;25929:171;25910:233;;;;;;;;;;;;:::i;:::-;;;;;;;;;26181:22;26204:10;26181:34;;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;26153:25;:77;;;;26266:22;26289:10;26266:34;;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;26238:25;:77;;;;26366:5;26323:22;26346:10;26323:34;;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;:48;;;;;;;;;;;;;;;;;;26391:46;26414:10;26426;26391:46;;;;;;;:::i;:::-;;;;;;;;25830:615:::0;:::o;26752:2968::-;21429:10;21411:15;:28;21403:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;26816:18:::1;26836:19:::0;26911:10:::1;;26882;26870:36;;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;:75;;;;;26926:19;;;;;;;;;;;26925:20;26870:75;26866:2847;;;27023:10;27011:32;;;27044:1;27011:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26976:70;;;;;;;;;;;;;;;;;;27075:7;:5;:7::i;:::-;27061:30;;;27110:1;27154:5;27126:25;;27113:10;:38;;;;:::i;:::-;:46;;;;:::i;:::-;27161:12;27175:5;27061:134;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;27271:10;27259:32;;;27292:1;27259:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27224:70;;;;;;;;;;;;;;;;;;27323:7;:5;:7::i;:::-;27309:30;;;27358:1;27402:5;27374:25;;27361:10;:38;;;;:::i;:::-;:46;;;;:::i;:::-;27409:12;27423:5;27309:134;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;27507:10;27495:32;;;27528:2;27495:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27460:71;;;;;;;;;;;;;;;;;;27560:7;:5;:7::i;:::-;27546:30;;;27595:2;27640:5;27612:25;;27599:10;:38;;;;:::i;:::-;:46;;;;:::i;:::-;27647:12;27661:5;27546:135;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;27745:10;27733:32;;;27766:2;27733:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27698:71;;;;;;;;;;;;;;;;;;27798:7;:5;:7::i;:::-;27784:30;;;27833:2;27878:5;27850:25;;27837:10;:38;;;;:::i;:::-;:46;;;;:::i;:::-;27885:12;27899:5;27784:135;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;27983:10;27971:32;;;28004:2;27971:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27936:71;;;;;;;;;;;;;;;;;;28036:7;:5;:7::i;:::-;28022:30;;;28071:2;28116:5;28088:25;;28075:10;:38;;;;:::i;:::-;:46;;;;:::i;:::-;28123:12;28137:5;28022:135;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;28208:4;28186:19;;:26;;;;;;;;;;;;;;;;;;26866:2847;;;28288:10;;28259;28247:36;;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;:74;;;;;28302:19;;;;;;;;;;;28247:74;28244:1469;;;28511:10;28499:32;;;28532:1;28499:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28464:70;;;;;;;;;;;;;;;;;;28563:7;:5;:7::i;:::-;28549:30;;;28598:1;28622:25;;28614:5;28601:10;:18;;;;:::i;:::-;:46;;;;:::i;:::-;28649:12;28663:5;28549:134;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;28759:10;28747:32;;;28780:1;28747:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28712:70;;;;;;;;;;;;;;;;;;28811:7;:5;:7::i;:::-;28797:30;;;28846:1;28870:25;;28862:5;28849:10;:18;;;;:::i;:::-;:46;;;;:::i;:::-;28897:12;28911:5;28797:134;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;28995:10;28983:32;;;29016:2;28983:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28948:71;;;;;;;;;;;;;;;;;;29048:7;:5;:7::i;:::-;29034:30;;;29083:2;29108:25;;29100:5;29087:10;:18;;;;:::i;:::-;:46;;;;:::i;:::-;29135:12;29149:5;29034:135;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;29233:10;29221:32;;;29254:2;29221:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29186:71;;;;;;;;;;;;;;;;;;29286:7;:5;:7::i;:::-;29272:30;;;29321:2;29346:25;;29338:5;29325:10;:18;;;;:::i;:::-;:46;;;;:::i;:::-;29373:12;29387:5;29272:135;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;29471:10;29459:32;;;29492:2;29459:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29424:71;;;;;;;;;;;;;;;;;;29524:7;:5;:7::i;:::-;29510:30;;;29559:2;29584:25;;29576:5;29563:10;:18;;;;:::i;:::-;:46;;;;:::i;:::-;29611:12;29625:5;29510:135;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;29696:5;29674:19;;:27;;;;;;;;;;;;;;;;;;28244:1469;26866:2847;21464:1;;26752:2968::o:0;25409:415::-;21429:10;21411:15;:28;21403:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;25538:4:::1;25494:48;;:22;25517:10;25494:34;;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;:48;;;25486:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;25581:113;25612:10;25624:7;:5;:7::i;:::-;25633:22;25656:10;25633:34;;;;;;;;;;;;;;;;;;;;;;;;;;:60;;;25588:5;25581:30;;;;:113;;;;;;:::i;:::-;25746:5;25703:22;25726:10;25703:34;;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;:48;;;;;;;;;;;;;;;;;;25773:43;25793:10;25805;25773:43;;;;;;;:::i;:::-;;;;;;;;25409:415:::0;:::o;2571:103::-;2151:12;:10;:12::i;:::-;2140:23;;:7;:5;:7::i;:::-;:23;;;2132:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2636:30:::1;2663:1;2636:18;:30::i;:::-;2571:103::o:0;30328:683::-;21429:10;21411:15;:28;21403:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;30490:7:::1;:5;:7::i;:::-;30476:40;;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30456:16;:62;;30448:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;30583:7;:5;:7::i;:::-;30569:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30549:16;:55;;30541:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;30643:69;30674:10;30686:7;:5;:7::i;:::-;30695:16;30650:5;30643:30;;;;:69;;;;;;:::i;:::-;30720:26;30763:81;;;;;;;;30794:4;30763:81;;;;;;30800:8;30763:81;;;;30810:16;30763:81;;;;30828:15;30763:81;;::::0;30720:136:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30885:118;30960:1;30924:26;:33;;;;:37;;;;:::i;:::-;30963:8;30974:16;30992:10;30885:118;;;;;;;;;:::i;:::-;;;;;;;;30328:683:::0;;:::o;1920:87::-;1966:7;1993:6;;;;;;;;;;;1986:13;;1920:87;:::o;29732:93::-;29792:7;:5;:7::i;:::-;29778:37;;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29732:93::o;31469:601::-;21429:10;21411:15;:28;21403:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;31582:26:::1;31609:10;31582:38;;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;:179;;;;;31746:15;31714:7;:5;:7::i;:::-;31700:41;;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31640:26;31667:10;31640:38;;;;;;;;;;;;;;;;;;;;;;;;;;:57;;;:103;;;;:::i;:::-;:121;31582:179;31563:238;;;;;;;;;;;;:::i;:::-;;;;;;;;;31836:7;:5;:7::i;:::-;31822:48;;;31871:26;31898:10;31871:38;;;;;;;;;;;;;;;;;;;;;;;;;;:47;;;31822:97;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;31975:5;31928:26;31955:10;31928:38;;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;:52;;;;;;;;;;;;;;;;;;32001:61;32039:10;32051;32001:61;;;;;;;:::i;:::-;;;;;;;;31469:601:::0;:::o;23661:830::-;21429:10;21411:15;:28;21403:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;23780:10:::1;;23751;23739:36;;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;23731:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;23878:18;23897:10;23878:30;;;;;;;;;;;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;23870:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;24066:15;24034:7;:5;:7::i;:::-;24020:41;;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23968:18;23987:10;23968:30;;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;:95;;;;:::i;:::-;:113;23946:195;;;;;;;;;;;;:::i;:::-;;;;;;;;;24176:7;:5;:7::i;:::-;24162:30;;;24193:18;24212:10;24193:30;;;;;;;;;;;;;;;;;;;;;;;;;;:37;;;24232:18;24251:10;24232:30;;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;24278:18;24297:10;24278:30;;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;24324:4;24162:167;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;24379:5;24340:18;24359:10;24340:30;;;;;;;;;;;;;;;;;;;;;;;;;;:36;;;:44;;;;;;;;;;;;;;;;;;24472:10;24410:73;;;24421:10;24433:18;24452:10;24433:30;;;;;;;;;;;;;;;;;;;;;;;;;;:37;;;24410:73;;;;;;;:::i;:::-;;;;;;;;23661:830:::0;:::o;32155:184::-;32223:7;:5;:7::i;:::-;32209:45;;;:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32201:56;;;;;;32268:63;32300:7;:5;:7::i;:::-;32286:42;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32268:17;:63::i;:::-;32155:184::o;2829:201::-;2151:12;:10;:12::i;:::-;2140:23;;:7;:5;:7::i;:::-;:23;;;2132:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2938:1:::1;2918:22;;:8;:22;;;;2910:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2994:28;3013:8;2994:18;:28::i;:::-;2829:201:::0;:::o;19729:80::-;;;:::o;19816:75::-;;;:::o;19637:53::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14896:248::-;15040:96;15060:5;15090:27;;;15119:4;15125:2;15129:5;15067:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15040:19;:96::i;:::-;14896:248;;;;:::o;734:98::-;787:7;814:10;807:17;;734:98;:::o;3190:191::-;3264:16;3283:6;;;;;;;;;;;3264:25;;3309:8;3300:6;;:17;;;;;;;;;;;;;;;;;;3364:8;3333:40;;3354:8;3333:40;;;;;;;;;;;;3190:191;;:::o;17250:716::-;17674:23;17700:69;17728:4;17700:69;;;;;;;;;;;;;;;;;17708:5;17700:27;;;;:69;;;;;:::i;:::-;17674:95;;17804:1;17784:10;:17;:21;17780:179;;;17881:10;17870:30;;;;;;;;;;;;:::i;:::-;17862:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;17780:179;17250:716;;;:::o;9624:229::-;9761:12;9793:52;9815:6;9823:4;9829:1;9832:12;9793:21;:52::i;:::-;9786:59;;9624:229;;;;;:::o;10744:510::-;10914:12;10972:5;10947:21;:30;;10939:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;11039:18;11050:6;11039:10;:18::i;:::-;11031:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;11105:12;11119:23;11146:6;:11;;11165:5;11172:4;11146:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11104:73;;;;11195:51;11212:7;11221:10;11233:12;11195:16;:51::i;:::-;11188:58;;;;10744:510;;;;;;:::o;6818:387::-;6878:4;7086:12;7153:7;7141:20;7133:28;;7196:1;7189:4;:8;7182:15;;;6818:387;;;:::o;13430:712::-;13580:12;13609:7;13605:530;;;13640:10;13633:17;;;;13605:530;13774:1;13754:10;:17;:21;13750:374;;;13952:10;13946:17;14013:15;14000:10;13996:2;13992:19;13985:44;13900:148;14095:12;14088:20;;;;;;;;;;;:::i;:::-;;;;;;;;13430:712;;;;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:137::-;;386:6;380:13;371:22;;402:30;426:5;402:30;:::i;:::-;361:77;;;;:::o;444:137::-;;527:6;514:20;505:29;;543:32;569:5;543:32;:::i;:::-;495:86;;;;:::o;587:141::-;;674:6;668:13;659:22;;690:32;716:5;690:32;:::i;:::-;649:79;;;;:::o;734:139::-;;818:6;805:20;796:29;;834:33;861:5;834:33;:::i;:::-;786:87;;;;:::o;879:143::-;;967:6;961:13;952:22;;983:33;1010:5;983:33;:::i;:::-;942:80;;;;:::o;1028:262::-;;1136:2;1124:9;1115:7;1111:23;1107:32;1104:2;;;1152:1;1149;1142:12;1104:2;1195:1;1220:53;1265:7;1256:6;1245:9;1241:22;1220:53;:::i;:::-;1210:63;;1166:117;1094:196;;;;:::o;1296:284::-;;1415:2;1403:9;1394:7;1390:23;1386:32;1383:2;;;1431:1;1428;1421:12;1383:2;1474:1;1499:64;1555:7;1546:6;1535:9;1531:22;1499:64;:::i;:::-;1489:74;;1445:128;1373:207;;;;:::o;1586:908::-;;;;;;1772:3;1760:9;1751:7;1747:23;1743:33;1740:2;;;1789:1;1786;1779:12;1740:2;1832:1;1857:64;1913:7;1904:6;1893:9;1889:22;1857:64;:::i;:::-;1847:74;;1803:128;1970:2;1996:64;2052:7;2043:6;2032:9;2028:22;1996:64;:::i;:::-;1986:74;;1941:129;2109:2;2135:64;2191:7;2182:6;2171:9;2167:22;2135:64;:::i;:::-;2125:74;;2080:129;2248:2;2274:64;2330:7;2321:6;2310:9;2306:22;2274:64;:::i;:::-;2264:74;;2219:129;2387:3;2414:63;2469:7;2460:6;2449:9;2445:22;2414:63;:::i;:::-;2404:73;;2358:129;1730:764;;;;;;;;:::o;2500:278::-;;2616:2;2604:9;2595:7;2591:23;2587:32;2584:2;;;2632:1;2629;2622:12;2584:2;2675:1;2700:61;2753:7;2744:6;2733:9;2729:22;2700:61;:::i;:::-;2690:71;;2646:125;2574:204;;;;:::o;2784:262::-;;2892:2;2880:9;2871:7;2867:23;2863:32;2860:2;;;2908:1;2905;2898:12;2860:2;2951:1;2976:53;3021:7;3012:6;3001:9;2997:22;2976:53;:::i;:::-;2966:63;;2922:117;2850:196;;;;:::o;3052:284::-;;3171:2;3159:9;3150:7;3146:23;3142:32;3139:2;;;3187:1;3184;3177:12;3139:2;3230:1;3255:64;3311:7;3302:6;3291:9;3287:22;3255:64;:::i;:::-;3245:74;;3201:128;3129:207;;;;:::o;3342:407::-;;;3467:2;3455:9;3446:7;3442:23;3438:32;3435:2;;;3483:1;3480;3473:12;3435:2;3526:1;3551:53;3596:7;3587:6;3576:9;3572:22;3551:53;:::i;:::-;3541:63;;3497:117;3653:2;3679:53;3724:7;3715:6;3704:9;3700:22;3679:53;:::i;:::-;3669:63;;3624:118;3425:324;;;;;:::o;3755:552::-;;;;3897:2;3885:9;3876:7;3872:23;3868:32;3865:2;;;3913:1;3910;3903:12;3865:2;3956:1;3981:53;4026:7;4017:6;4006:9;4002:22;3981:53;:::i;:::-;3971:63;;3927:117;4083:2;4109:53;4154:7;4145:6;4134:9;4130:22;4109:53;:::i;:::-;4099:63;;4054:118;4211:2;4237:53;4282:7;4273:6;4262:9;4258:22;4237:53;:::i;:::-;4227:63;;4182:118;3855:452;;;;;:::o;4313:696::-;;;;;4471:3;4459:9;4450:7;4446:23;4442:33;4439:2;;;4488:1;4485;4478:12;4439:2;4531:1;4556:53;4601:7;4592:6;4581:9;4577:22;4556:53;:::i;:::-;4546:63;;4502:117;4658:2;4684:53;4729:7;4720:6;4709:9;4705:22;4684:53;:::i;:::-;4674:63;;4629:118;4786:2;4812:53;4857:7;4848:6;4837:9;4833:22;4812:53;:::i;:::-;4802:63;;4757:118;4914:2;4940:52;4984:7;4975:6;4964:9;4960:22;4940:52;:::i;:::-;4930:62;;4885:117;4429:580;;;;;;;:::o;5015:118::-;5102:24;5120:5;5102:24;:::i;:::-;5097:3;5090:37;5080:53;;:::o;5139:109::-;5220:21;5235:5;5220:21;:::i;:::-;5215:3;5208:34;5198:50;;:::o;5254:373::-;;5386:38;5418:5;5386:38;:::i;:::-;5440:88;5521:6;5516:3;5440:88;:::i;:::-;5433:95;;5537:52;5582:6;5577:3;5570:4;5563:5;5559:16;5537:52;:::i;:::-;5614:6;5609:3;5605:16;5598:23;;5362:265;;;;;:::o;5633:147::-;5728:45;5767:5;5728:45;:::i;:::-;5723:3;5716:58;5706:74;;:::o;5786:149::-;5882:46;5922:5;5882:46;:::i;:::-;5877:3;5870:59;5860:75;;:::o;5941:147::-;6036:45;6075:5;6036:45;:::i;:::-;6031:3;6024:58;6014:74;;:::o;6094:149::-;6190:46;6230:5;6190:46;:::i;:::-;6185:3;6178:59;6168:75;;:::o;6249:149::-;6345:46;6385:5;6345:46;:::i;:::-;6340:3;6333:59;6323:75;;:::o;6404:364::-;;6520:39;6553:5;6520:39;:::i;:::-;6575:71;6639:6;6634:3;6575:71;:::i;:::-;6568:78;;6655:52;6700:6;6695:3;6688:4;6681:5;6677:16;6655:52;:::i;:::-;6732:29;6754:6;6732:29;:::i;:::-;6727:3;6723:39;6716:46;;6496:272;;;;;:::o;6774:330::-;;6937:67;7001:2;6996:3;6937:67;:::i;:::-;6930:74;;7034:34;7030:1;7025:3;7021:11;7014:55;7095:2;7090:3;7086:12;7079:19;;6920:184;;;:::o;7110:375::-;;7273:67;7337:2;7332:3;7273:67;:::i;:::-;7266:74;;7370:34;7366:1;7361:3;7357:11;7350:55;7436:13;7431:2;7426:3;7422:12;7415:35;7476:2;7471:3;7467:12;7460:19;;7256:229;;;:::o;7491:326::-;;7654:67;7718:2;7713:3;7654:67;:::i;:::-;7647:74;;7751:30;7747:1;7742:3;7738:11;7731:51;7808:2;7803:3;7799:12;7792:19;;7637:180;;;:::o;7823:309::-;;7986:67;8050:2;8045:3;7986:67;:::i;:::-;7979:74;;8083:13;8079:1;8074:3;8070:11;8063:34;8123:2;8118:3;8114:12;8107:19;;7969:163;;;:::o;8138:330::-;;8301:67;8365:2;8360:3;8301:67;:::i;:::-;8294:74;;8398:34;8394:1;8389:3;8385:11;8378:55;8459:2;8454:3;8450:12;8443:19;;8284:184;;;:::o;8474:370::-;;8637:67;8701:2;8696:3;8637:67;:::i;:::-;8630:74;;8734:34;8730:1;8725:3;8721:11;8714:55;8800:8;8795:2;8790:3;8786:12;8779:30;8835:2;8830:3;8826:12;8819:19;;8620:224;;;:::o;8850:320::-;;9013:67;9077:2;9072:3;9013:67;:::i;:::-;9006:74;;9110:24;9106:1;9101:3;9097:11;9090:45;9161:2;9156:3;9152:12;9145:19;;8996:174;;;:::o;9176:308::-;;9339:67;9403:2;9398:3;9339:67;:::i;:::-;9332:74;;9436:12;9432:1;9427:3;9423:11;9416:33;9475:2;9470:3;9466:12;9459:19;;9322:162;;;:::o;9490:308::-;;9653:67;9717:2;9712:3;9653:67;:::i;:::-;9646:74;;9750:12;9746:1;9741:3;9737:11;9730:33;9789:2;9784:3;9780:12;9773:19;;9636:162;;;:::o;9804:370::-;;9967:67;10031:2;10026:3;9967:67;:::i;:::-;9960:74;;10064:34;10060:1;10055:3;10051:11;10044:55;10130:8;10125:2;10120:3;10116:12;10109:30;10165:2;10160:3;10156:12;10149:19;;9950:224;;;:::o;10180:326::-;;10343:67;10407:2;10402:3;10343:67;:::i;:::-;10336:74;;10440:30;10436:1;10431:3;10427:11;10420:51;10497:2;10492:3;10488:12;10481:19;;10326:180;;;:::o;10512:316::-;;10675:67;10739:2;10734:3;10675:67;:::i;:::-;10668:74;;10772:20;10768:1;10763:3;10759:11;10752:41;10819:2;10814:3;10810:12;10803:19;;10658:170;;;:::o;10834:322::-;;10997:67;11061:2;11056:3;10997:67;:::i;:::-;10990:74;;11094:26;11090:1;11085:3;11081:11;11074:47;11147:2;11142:3;11138:12;11131:19;;10980:176;;;:::o;11162:330::-;;11325:67;11389:2;11384:3;11325:67;:::i;:::-;11318:74;;11422:34;11418:1;11413:3;11409:11;11402:55;11483:2;11478:3;11474:12;11467:19;;11308:184;;;:::o;11498:314::-;;11661:67;11725:2;11720:3;11661:67;:::i;:::-;11654:74;;11758:18;11754:1;11749:3;11745:11;11738:39;11803:2;11798:3;11794:12;11787:19;;11644:168;;;:::o;11818:329::-;;11981:67;12045:2;12040:3;11981:67;:::i;:::-;11974:74;;12078:33;12074:1;12069:3;12065:11;12058:54;12138:2;12133:3;12129:12;12122:19;;11964:183;;;:::o;12153:327::-;;12316:67;12380:2;12375:3;12316:67;:::i;:::-;12309:74;;12413:31;12409:1;12404:3;12400:11;12393:52;12471:2;12466:3;12462:12;12455:19;;12299:181;;;:::o;12486:316::-;;12649:67;12713:2;12708:3;12649:67;:::i;:::-;12642:74;;12746:20;12742:1;12737:3;12733:11;12726:41;12793:2;12788:3;12784:12;12777:19;;12632:170;;;:::o;12808:374::-;;12971:67;13035:2;13030:3;12971:67;:::i;:::-;12964:74;;13068:34;13064:1;13059:3;13055:11;13048:55;13134:12;13129:2;13124:3;13120:12;13113:34;13173:2;13168:3;13164:12;13157:19;;12954:228;;;:::o;13188:313::-;;13351:67;13415:2;13410:3;13351:67;:::i;:::-;13344:74;;13448:17;13444:1;13439:3;13435:11;13428:38;13492:2;13487:3;13483:12;13476:19;;13334:167;;;:::o;13507:318::-;;13670:67;13734:2;13729:3;13670:67;:::i;:::-;13663:74;;13767:22;13763:1;13758:3;13754:11;13747:43;13816:2;13811:3;13807:12;13800:19;;13653:172;;;:::o;13831:115::-;13916:23;13933:5;13916:23;:::i;:::-;13911:3;13904:36;13894:52;;:::o;13952:118::-;14039:24;14057:5;14039:24;:::i;:::-;14034:3;14027:37;14017:53;;:::o;14076:271::-;;14228:93;14317:3;14308:6;14228:93;:::i;:::-;14221:100;;14338:3;14331:10;;14210:137;;;;:::o;14353:222::-;;14484:2;14473:9;14469:18;14461:26;;14497:71;14565:1;14554:9;14550:17;14541:6;14497:71;:::i;:::-;14451:124;;;;:::o;14581:442::-;;14768:2;14757:9;14753:18;14745:26;;14781:71;14849:1;14838:9;14834:17;14825:6;14781:71;:::i;:::-;14862:72;14930:2;14919:9;14915:18;14906:6;14862:72;:::i;:::-;14944;15012:2;15001:9;14997:18;14988:6;14944:72;:::i;:::-;14735:288;;;;;;:::o;15029:775::-;;15300:3;15289:9;15285:19;15277:27;;15314:71;15382:1;15371:9;15367:17;15358:6;15314:71;:::i;:::-;15395:72;15463:2;15452:9;15448:18;15439:6;15395:72;:::i;:::-;15477;15545:2;15534:9;15530:18;15521:6;15477:72;:::i;:::-;15559;15627:2;15616:9;15612:18;15603:6;15559:72;:::i;:::-;15641:73;15709:3;15698:9;15694:19;15685:6;15641:73;:::i;:::-;15724;15792:3;15781:9;15777:19;15768:6;15724:73;:::i;:::-;15267:537;;;;;;;;;:::o;15810:541::-;;16019:3;16008:9;16004:19;15996:27;;16033:65;16095:1;16084:9;16080:17;16071:6;16033:65;:::i;:::-;16108:72;16176:2;16165:9;16161:18;16152:6;16108:72;:::i;:::-;16190;16258:2;16247:9;16243:18;16234:6;16190:72;:::i;:::-;16272;16340:2;16329:9;16325:18;16316:6;16272:72;:::i;:::-;15986:365;;;;;;;:::o;16357:652::-;;16594:3;16583:9;16579:19;16571:27;;16608:65;16670:1;16659:9;16655:17;16646:6;16608:65;:::i;:::-;16683:72;16751:2;16740:9;16736:18;16727:6;16683:72;:::i;:::-;16765;16833:2;16822:9;16818:18;16809:6;16765:72;:::i;:::-;16847;16915:2;16904:9;16900:18;16891:6;16847:72;:::i;:::-;16929:73;16997:3;16986:9;16982:19;16973:6;16929:73;:::i;:::-;16561:448;;;;;;;;:::o;17015:759::-;;17278:3;17267:9;17263:19;17255:27;;17292:65;17354:1;17343:9;17339:17;17330:6;17292:65;:::i;:::-;17367:72;17435:2;17424:9;17420:18;17411:6;17367:72;:::i;:::-;17449;17517:2;17506:9;17502:18;17493:6;17449:72;:::i;:::-;17531;17599:2;17588:9;17584:18;17575:6;17531:72;:::i;:::-;17613:73;17681:3;17670:9;17666:19;17657:6;17613:73;:::i;:::-;17696:71;17762:3;17751:9;17747:19;17738:6;17696:71;:::i;:::-;17245:529;;;;;;;;;:::o;17780:238::-;;17919:2;17908:9;17904:18;17896:26;;17932:79;18008:1;17997:9;17993:17;17984:6;17932:79;:::i;:::-;17886:132;;;;:::o;18024:553::-;;18239:3;18228:9;18224:19;18216:27;;18253:79;18329:1;18318:9;18314:17;18305:6;18253:79;:::i;:::-;18342:72;18410:2;18399:9;18395:18;18386:6;18342:72;:::i;:::-;18424:70;18490:2;18479:9;18475:18;18466:6;18424:70;:::i;:::-;18504:66;18566:2;18555:9;18551:18;18542:6;18504:66;:::i;:::-;18206:371;;;;;;;:::o;18583:240::-;;18723:2;18712:9;18708:18;18700:26;;18736:80;18813:1;18802:9;18798:17;18789:6;18736:80;:::i;:::-;18690:133;;;;:::o;18829:555::-;;19045:3;19034:9;19030:19;19022:27;;19059:80;19136:1;19125:9;19121:17;19112:6;19059:80;:::i;:::-;19149:72;19217:2;19206:9;19202:18;19193:6;19149:72;:::i;:::-;19231:70;19297:2;19286:9;19282:18;19273:6;19231:70;:::i;:::-;19311:66;19373:2;19362:9;19358:18;19349:6;19311:66;:::i;:::-;19012:372;;;;;;;:::o;19390:238::-;;19529:2;19518:9;19514:18;19506:26;;19542:79;19618:1;19607:9;19603:17;19594:6;19542:79;:::i;:::-;19496:132;;;;:::o;19634:553::-;;19849:3;19838:9;19834:19;19826:27;;19863:79;19939:1;19928:9;19924:17;19915:6;19863:79;:::i;:::-;19952:72;20020:2;20009:9;20005:18;19996:6;19952:72;:::i;:::-;20034:70;20100:2;20089:9;20085:18;20076:6;20034:70;:::i;:::-;20114:66;20176:2;20165:9;20161:18;20152:6;20114:66;:::i;:::-;19816:371;;;;;;;:::o;20193:240::-;;20333:2;20322:9;20318:18;20310:26;;20346:80;20423:1;20412:9;20408:17;20399:6;20346:80;:::i;:::-;20300:133;;;;:::o;20439:555::-;;20655:3;20644:9;20640:19;20632:27;;20669:80;20746:1;20735:9;20731:17;20722:6;20669:80;:::i;:::-;20759:72;20827:2;20816:9;20812:18;20803:6;20759:72;:::i;:::-;20841:70;20907:2;20896:9;20892:18;20883:6;20841:70;:::i;:::-;20921:66;20983:2;20972:9;20968:18;20959:6;20921:66;:::i;:::-;20622:372;;;;;;;:::o;21000:240::-;;21140:2;21129:9;21125:18;21117:26;;21153:80;21230:1;21219:9;21215:17;21206:6;21153:80;:::i;:::-;21107:133;;;;:::o;21246:555::-;;21462:3;21451:9;21447:19;21439:27;;21476:80;21553:1;21542:9;21538:17;21529:6;21476:80;:::i;:::-;21566:72;21634:2;21623:9;21619:18;21610:6;21566:72;:::i;:::-;21648:70;21714:2;21703:9;21699:18;21690:6;21648:70;:::i;:::-;21728:66;21790:2;21779:9;21775:18;21766:6;21728:66;:::i;:::-;21429:372;;;;;;;:::o;21807:313::-;;21958:2;21947:9;21943:18;21935:26;;22007:9;22001:4;21997:20;21993:1;21982:9;21978:17;21971:47;22035:78;22108:4;22099:6;22035:78;:::i;:::-;22027:86;;21925:195;;;;:::o;22126:419::-;;22330:2;22319:9;22315:18;22307:26;;22379:9;22373:4;22369:20;22365:1;22354:9;22350:17;22343:47;22407:131;22533:4;22407:131;:::i;:::-;22399:139;;22297:248;;;:::o;22551:419::-;;22755:2;22744:9;22740:18;22732:26;;22804:9;22798:4;22794:20;22790:1;22779:9;22775:17;22768:47;22832:131;22958:4;22832:131;:::i;:::-;22824:139;;22722:248;;;:::o;22976:419::-;;23180:2;23169:9;23165:18;23157:26;;23229:9;23223:4;23219:20;23215:1;23204:9;23200:17;23193:47;23257:131;23383:4;23257:131;:::i;:::-;23249:139;;23147:248;;;:::o;23401:419::-;;23605:2;23594:9;23590:18;23582:26;;23654:9;23648:4;23644:20;23640:1;23629:9;23625:17;23618:47;23682:131;23808:4;23682:131;:::i;:::-;23674:139;;23572:248;;;:::o;23826:419::-;;24030:2;24019:9;24015:18;24007:26;;24079:9;24073:4;24069:20;24065:1;24054:9;24050:17;24043:47;24107:131;24233:4;24107:131;:::i;:::-;24099:139;;23997:248;;;:::o;24251:419::-;;24455:2;24444:9;24440:18;24432:26;;24504:9;24498:4;24494:20;24490:1;24479:9;24475:17;24468:47;24532:131;24658:4;24532:131;:::i;:::-;24524:139;;24422:248;;;:::o;24676:419::-;;24880:2;24869:9;24865:18;24857:26;;24929:9;24923:4;24919:20;24915:1;24904:9;24900:17;24893:47;24957:131;25083:4;24957:131;:::i;:::-;24949:139;;24847:248;;;:::o;25101:419::-;;25305:2;25294:9;25290:18;25282:26;;25354:9;25348:4;25344:20;25340:1;25329:9;25325:17;25318:47;25382:131;25508:4;25382:131;:::i;:::-;25374:139;;25272:248;;;:::o;25526:419::-;;25730:2;25719:9;25715:18;25707:26;;25779:9;25773:4;25769:20;25765:1;25754:9;25750:17;25743:47;25807:131;25933:4;25807:131;:::i;:::-;25799:139;;25697:248;;;:::o;25951:419::-;;26155:2;26144:9;26140:18;26132:26;;26204:9;26198:4;26194:20;26190:1;26179:9;26175:17;26168:47;26232:131;26358:4;26232:131;:::i;:::-;26224:139;;26122:248;;;:::o;26376:419::-;;26580:2;26569:9;26565:18;26557:26;;26629:9;26623:4;26619:20;26615:1;26604:9;26600:17;26593:47;26657:131;26783:4;26657:131;:::i;:::-;26649:139;;26547:248;;;:::o;26801:419::-;;27005:2;26994:9;26990:18;26982:26;;27054:9;27048:4;27044:20;27040:1;27029:9;27025:17;27018:47;27082:131;27208:4;27082:131;:::i;:::-;27074:139;;26972:248;;;:::o;27226:419::-;;27430:2;27419:9;27415:18;27407:26;;27479:9;27473:4;27469:20;27465:1;27454:9;27450:17;27443:47;27507:131;27633:4;27507:131;:::i;:::-;27499:139;;27397:248;;;:::o;27651:419::-;;27855:2;27844:9;27840:18;27832:26;;27904:9;27898:4;27894:20;27890:1;27879:9;27875:17;27868:47;27932:131;28058:4;27932:131;:::i;:::-;27924:139;;27822:248;;;:::o;28076:419::-;;28280:2;28269:9;28265:18;28257:26;;28329:9;28323:4;28319:20;28315:1;28304:9;28300:17;28293:47;28357:131;28483:4;28357:131;:::i;:::-;28349:139;;28247:248;;;:::o;28501:419::-;;28705:2;28694:9;28690:18;28682:26;;28754:9;28748:4;28744:20;28740:1;28729:9;28725:17;28718:47;28782:131;28908:4;28782:131;:::i;:::-;28774:139;;28672:248;;;:::o;28926:419::-;;29130:2;29119:9;29115:18;29107:26;;29179:9;29173:4;29169:20;29165:1;29154:9;29150:17;29143:47;29207:131;29333:4;29207:131;:::i;:::-;29199:139;;29097:248;;;:::o;29351:419::-;;29555:2;29544:9;29540:18;29532:26;;29604:9;29598:4;29594:20;29590:1;29579:9;29575:17;29568:47;29632:131;29758:4;29632:131;:::i;:::-;29624:139;;29522:248;;;:::o;29776:419::-;;29980:2;29969:9;29965:18;29957:26;;30029:9;30023:4;30019:20;30015:1;30004:9;30000:17;29993:47;30057:131;30183:4;30057:131;:::i;:::-;30049:139;;29947:248;;;:::o;30201:419::-;;30405:2;30394:9;30390:18;30382:26;;30454:9;30448:4;30444:20;30440:1;30429:9;30425:17;30418:47;30482:131;30608:4;30482:131;:::i;:::-;30474:139;;30372:248;;;:::o;30626:419::-;;30830:2;30819:9;30815:18;30807:26;;30879:9;30873:4;30869:20;30865:1;30854:9;30850:17;30843:47;30907:131;31033:4;30907:131;:::i;:::-;30899:139;;30797:248;;;:::o;31051:222::-;;31182:2;31171:9;31167:18;31159:26;;31195:71;31263:1;31252:9;31248:17;31239:6;31195:71;:::i;:::-;31149:124;;;;:::o;31279:332::-;;31438:2;31427:9;31423:18;31415:26;;31451:71;31519:1;31508:9;31504:17;31495:6;31451:71;:::i;:::-;31532:72;31600:2;31589:9;31585:18;31576:6;31532:72;:::i;:::-;31405:206;;;;;:::o;31617:332::-;;31776:2;31765:9;31761:18;31753:26;;31789:71;31857:1;31846:9;31842:17;31833:6;31789:71;:::i;:::-;31870:72;31938:2;31927:9;31923:18;31914:6;31870:72;:::i;:::-;31743:206;;;;;:::o;31955:537::-;;32162:3;32151:9;32147:19;32139:27;;32176:71;32244:1;32233:9;32229:17;32220:6;32176:71;:::i;:::-;32257:72;32325:2;32314:9;32310:18;32301:6;32257:72;:::i;:::-;32339:70;32405:2;32394:9;32390:18;32381:6;32339:70;:::i;:::-;32419:66;32481:2;32470:9;32466:18;32457:6;32419:66;:::i;:::-;32129:363;;;;;;;:::o;32498:553::-;;32713:3;32702:9;32698:19;32690:27;;32727:71;32795:1;32784:9;32780:17;32771:6;32727:71;:::i;:::-;32808:72;32876:2;32865:9;32861:18;32852:6;32808:72;:::i;:::-;32890;32958:2;32947:9;32943:18;32934:6;32890:72;:::i;:::-;32972;33040:2;33029:9;33025:18;33016:6;32972:72;:::i;:::-;32680:371;;;;;;;:::o;33057:660::-;;33298:3;33287:9;33283:19;33275:27;;33312:71;33380:1;33369:9;33365:17;33356:6;33312:71;:::i;:::-;33393:72;33461:2;33450:9;33446:18;33437:6;33393:72;:::i;:::-;33475;33543:2;33532:9;33528:18;33519:6;33475:72;:::i;:::-;33557;33625:2;33614:9;33610:18;33601:6;33557:72;:::i;:::-;33639:71;33705:3;33694:9;33690:19;33681:6;33639:71;:::i;:::-;33265:452;;;;;;;;:::o;33723:98::-;;33808:5;33802:12;33792:22;;33781:40;;;:::o;33827:99::-;;33913:5;33907:12;33897:22;;33886:40;;;:::o;33932:147::-;;34070:3;34055:18;;34045:34;;;;:::o;34085:169::-;;34203:6;34198:3;34191:19;34243:4;34238:3;34234:14;34219:29;;34181:73;;;;:::o;34260:305::-;;34319:20;34337:1;34319:20;:::i;:::-;34314:25;;34353:20;34371:1;34353:20;:::i;:::-;34348:25;;34507:1;34439:66;34435:74;34432:1;34429:81;34426:2;;;34513:18;;:::i;:::-;34426:2;34557:1;34554;34550:9;34543:16;;34304:261;;;;:::o;34571:185::-;;34628:20;34646:1;34628:20;:::i;:::-;34623:25;;34662:20;34680:1;34662:20;:::i;:::-;34657:25;;34701:1;34691:2;;34706:18;;:::i;:::-;34691:2;34748:1;34745;34741:9;34736:14;;34613:143;;;;:::o;34762:348::-;;34825:20;34843:1;34825:20;:::i;:::-;34820:25;;34859:20;34877:1;34859:20;:::i;:::-;34854:25;;35047:1;34979:66;34975:74;34972:1;34969:81;34964:1;34957:9;34950:17;34946:105;34943:2;;;35054:18;;:::i;:::-;34943:2;35102:1;35099;35095:9;35084:20;;34810:300;;;;:::o;35116:191::-;;35176:20;35194:1;35176:20;:::i;:::-;35171:25;;35210:20;35228:1;35210:20;:::i;:::-;35205:25;;35249:1;35246;35243:8;35240:2;;;35254:18;;:::i;:::-;35240:2;35299:1;35296;35292:9;35284:17;;35161:146;;;;:::o;35313:96::-;;35379:24;35397:5;35379:24;:::i;:::-;35368:35;;35358:51;;;:::o;35415:90::-;;35492:5;35485:13;35478:21;35467:32;;35457:48;;;:::o;35511:89::-;;35587:6;35580:5;35576:18;35565:29;;35555:45;;;:::o;35606:126::-;;35683:42;35676:5;35672:54;35661:65;;35651:81;;;:::o;35738:77::-;;35804:5;35793:16;;35783:32;;;:::o;35821:121::-;;35912:24;35930:5;35912:24;:::i;:::-;35899:37;;35889:53;;;:::o;35948:122::-;;36040:24;36058:5;36040:24;:::i;:::-;36027:37;;36017:53;;;:::o;36076:121::-;;36167:24;36185:5;36167:24;:::i;:::-;36154:37;;36144:53;;;:::o;36203:122::-;;36295:24;36313:5;36295:24;:::i;:::-;36282:37;;36272:53;;;:::o;36331:122::-;;36423:24;36441:5;36423:24;:::i;:::-;36410:37;;36400:53;;;:::o;36459:307::-;36527:1;36537:113;36551:6;36548:1;36545:13;36537:113;;;36636:1;36631:3;36627:11;36621:18;36617:1;36612:3;36608:11;36601:39;36573:2;36570:1;36566:10;36561:15;;36537:113;;;36668:6;36665:1;36662:13;36659:2;;;36748:1;36739:6;36734:3;36730:16;36723:27;36659:2;36508:258;;;;:::o;36772:180::-;36820:77;36817:1;36810:88;36917:4;36914:1;36907:15;36941:4;36938:1;36931:15;36958:180;37006:77;37003:1;36996:88;37103:4;37100:1;37093:15;37127:4;37124:1;37117:15;37144:102;;37236:2;37232:7;37227:2;37220:5;37216:14;37212:28;37202:38;;37192:54;;;:::o;37252:122::-;37325:24;37343:5;37325:24;:::i;:::-;37318:5;37315:35;37305:2;;37364:1;37361;37354:12;37305:2;37295:79;:::o;37380:116::-;37450:21;37465:5;37450:21;:::i;:::-;37443:5;37440:32;37430:2;;37486:1;37483;37476:12;37430:2;37420:76;:::o;37502:120::-;37574:23;37591:5;37574:23;:::i;:::-;37567:5;37564:34;37554:2;;37612:1;37609;37602:12;37554:2;37544:78;:::o;37628:122::-;37701:24;37719:5;37701:24;:::i;:::-;37694:5;37691:35;37681:2;;37740:1;37737;37730:12;37681:2;37671:79;:::o
Swarm Source
ipfs://157a90744f56d3279f2235630086d58256f7d2a58e148291eaa2d81f358f8875
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.