Contract
0xd98d8e458F7aD22DD3C1d7A8B35C74005eb52b0b
1
Contract Overview
Balance:
0 ETH
ETH Value:
$0.00
My Name Tag:
Not Available
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Contract Name:
RewardRouterV2
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Arbiscan on 2022-08-19 */ // Sources flattened with hardhat v2.9.3 https://hardhat.org // File contracts/libraries/math/SafeMath.sol // SPDX-License-Identifier: MIT pragma solidity 0.6.12; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File contracts/libraries/token/IERC20.sol pragma solidity 0.6.12; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File contracts/libraries/utils/Address.sol pragma solidity ^0.6.2; /** * @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; // solhint-disable-next-line no-inline-assembly 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"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (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.3._ */ 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.3._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private 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 // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File contracts/libraries/token/SafeERC20.sol pragma solidity 0.6.12; /** * @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 SafeMath for uint256; 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' // solhint-disable-next-line max-line-length 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).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender).sub( value, "SafeERC20: decreased allowance below zero" ); _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 // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File contracts/libraries/utils/ReentrancyGuard.sol pragma solidity 0.6.12; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() internal { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File contracts/staking/interfaces/IRewardTracker.sol pragma solidity 0.6.12; interface IRewardTracker { function depositBalances(address _account, address _depositToken) external view returns (uint256); function stakedAmounts(address _account) external view returns (uint256); function updateRewards() external; function stake(address _depositToken, uint256 _amount) external; function stakeForAccount( address _fundingAccount, address _account, address _depositToken, uint256 _amount ) external; function unstake(address _depositToken, uint256 _amount) external; function unstakeForAccount( address _account, address _depositToken, uint256 _amount, address _receiver ) external; function tokensPerInterval() external view returns (uint256); function claim(address _receiver) external returns (uint256); function claimForAccount(address _account, address _receiver) external returns (uint256); function claimable(address _account) external view returns (uint256); function averageStakedAmounts(address _account) external view returns (uint256); function cumulativeRewards(address _account) external view returns (uint256); } // File contracts/staking/interfaces/IVester.sol pragma solidity 0.6.12; interface IVester { function rewardTracker() external view returns (address); function claimForAccount(address _account, address _receiver) external returns (uint256); function claimable(address _account) external view returns (uint256); function cumulativeClaimAmounts(address _account) external view returns (uint256); function claimedAmounts(address _account) external view returns (uint256); function pairAmounts(address _account) external view returns (uint256); function getVestedAmount(address _account) external view returns (uint256); function transferredAverageStakedAmounts(address _account) external view returns (uint256); function transferredCumulativeRewards(address _account) external view returns (uint256); function cumulativeRewardDeductions(address _account) external view returns (uint256); function bonusRewards(address _account) external view returns (uint256); function transferStakeValues(address _sender, address _receiver) external; function setTransferredAverageStakedAmounts(address _account, uint256 _amount) external; function setTransferredCumulativeRewards(address _account, uint256 _amount) external; function setCumulativeRewardDeductions(address _account, uint256 _amount) external; function setBonusRewards(address _account, uint256 _amount) external; function getMaxVestableAmount(address _account) external view returns (uint256); function getCombinedAverageStakedAmount(address _account) external view returns (uint256); } // File contracts/tokens/interfaces/IMintable.sol pragma solidity 0.6.12; interface IMintable { function isMinter(address _account) external returns (bool); function setMinter(address _minter, bool _isActive) external; function mint(address _account, uint256 _amount) external; function burn(address _account, uint256 _amount) external; } // File contracts/tokens/interfaces/IWETH.sol pragma solidity 0.6.12; interface IWETH { function deposit() external payable; function transfer(address to, uint256 value) external returns (bool); function withdraw(uint256) external; } // File contracts/core/interfaces/IMlpManager.sol pragma solidity 0.6.12; interface IMlpManager { function cooldownDuration() external returns (uint256); function lastAddedAt(address _account) external returns (uint256); function addLiquidity( address _token, uint256 _amount, uint256 _minUsdg, uint256 _minMlp ) external returns (uint256); function addLiquidityForAccount( address _fundingAccount, address _account, address _token, uint256 _amount, uint256 _minUsdg, uint256 _minMlp ) external returns (uint256); function removeLiquidity( address _tokenOut, uint256 _mlpAmount, uint256 _minOut, address _receiver ) external returns (uint256); function removeLiquidityForAccount( address _account, address _tokenOut, uint256 _MlpAmount, uint256 _minOut, address _receiver ) external returns (uint256); } // File contracts/access/Governable.sol pragma solidity 0.6.12; contract Governable { address public gov; constructor() public { gov = msg.sender; } modifier onlyGov() { require(msg.sender == gov, "Governable: forbidden"); _; } function setGov(address _gov) external onlyGov { gov = _gov; } } // File contracts/staking/RewardRouterV2.sol pragma solidity 0.6.12; contract RewardRouterV2 is ReentrancyGuard, Governable { using SafeMath for uint256; using SafeERC20 for IERC20; using Address for address payable; bool public isInitialized; address public weth; address public myc; address public esMyc; address public bnMyc; address public mlp; // MYC Liquidity Provider token address public stakedMycTracker; address public bonusMycTracker; address public feeMycTracker; address public stakedMlpTracker; address public feeMlpTracker; address public mlpManager; address public mlpVester; address public mycVester; mapping(address => address) public pendingReceivers; event StakeMyc(address account, address token, uint256 amount); event UnstakeMyc(address account, address token, uint256 amount); event StakeMlp(address account, uint256 amount); event UnstakeMlp(address account, uint256 amount); receive() external payable { require(msg.sender == weth, "Router: invalid sender"); } function initialize( address _weth, address _myc, address _esMyc, address _bnMyc, address _mlp, address _stakedMycTracker, address _bonusMycTracker, address _feeMycTracker, address _feeMlpTracker, address _stakedMlpTracker, address _mlpManager, address _mycVester, address _mlpVester ) external onlyGov { require(!isInitialized, "RewardRouter: already initialized"); isInitialized = true; weth = _weth; myc = _myc; esMyc = _esMyc; bnMyc = _bnMyc; mlp = _mlp; stakedMycTracker = _stakedMycTracker; bonusMycTracker = _bonusMycTracker; feeMycTracker = _feeMycTracker; feeMlpTracker = _feeMlpTracker; stakedMlpTracker = _stakedMlpTracker; mlpManager = _mlpManager; mycVester = _mycVester; mlpVester = _mlpVester; } // to help users who accidentally send their tokens to this contract function withdrawToken( address _token, address _account, uint256 _amount ) external onlyGov { IERC20(_token).safeTransfer(_account, _amount); } function batchStakeMycForAccount(address[] memory _accounts, uint256[] memory _amounts) external nonReentrant onlyGov { address _myc = myc; for (uint256 i = 0; i < _accounts.length; i++) { _stakeMyc(msg.sender, _accounts[i], _myc, _amounts[i]); } } function stakeMycForAccount(address _account, uint256 _amount) external nonReentrant onlyGov { _stakeMyc(msg.sender, _account, myc, _amount); } function stakeMyc(uint256 _amount) external nonReentrant { _stakeMyc(msg.sender, msg.sender, myc, _amount); } function stakeEsMyc(uint256 _amount) external nonReentrant { _stakeMyc(msg.sender, msg.sender, esMyc, _amount); } function unstakeMyc(uint256 _amount) external nonReentrant { _unstakeMyc(msg.sender, myc, _amount, true); } function unstakeEsMyc(uint256 _amount) external nonReentrant { _unstakeMyc(msg.sender, esMyc, _amount, true); } function mintAndStakeMlp( address _token, uint256 _amount, uint256 _minUsdg, uint256 _minMlp ) external nonReentrant returns (uint256) { require(_amount > 0, "RewardRouter: invalid _amount"); address account = msg.sender; uint256 mlpAmount = IMlpManager(mlpManager).addLiquidityForAccount( account, account, _token, _amount, _minUsdg, _minMlp ); IRewardTracker(feeMlpTracker).stakeForAccount(account, account, mlp, mlpAmount); IRewardTracker(stakedMlpTracker).stakeForAccount(account, account, feeMlpTracker, mlpAmount); emit StakeMlp(account, mlpAmount); return mlpAmount; } function mintAndStakeMlpETH(uint256 _minUsdg, uint256 _minMlp) external payable nonReentrant returns (uint256) { require(msg.value > 0, "RewardRouter: invalid msg.value"); IWETH(weth).deposit{value: msg.value}(); IERC20(weth).approve(mlpManager, msg.value); address account = msg.sender; uint256 mlpAmount = IMlpManager(mlpManager).addLiquidityForAccount( address(this), account, weth, msg.value, _minUsdg, _minMlp ); IRewardTracker(feeMlpTracker).stakeForAccount(account, account, mlp, mlpAmount); IRewardTracker(stakedMlpTracker).stakeForAccount(account, account, feeMlpTracker, mlpAmount); emit StakeMlp(account, mlpAmount); return mlpAmount; } function unstakeAndRedeemMlp( address _tokenOut, uint256 _mlpAmount, uint256 _minOut, address _receiver ) external nonReentrant returns (uint256) { require(_mlpAmount > 0, "RewardRouter: invalid _mlpAmount"); address account = msg.sender; IRewardTracker(stakedMlpTracker).unstakeForAccount(account, feeMlpTracker, _mlpAmount, account); IRewardTracker(feeMlpTracker).unstakeForAccount(account, mlp, _mlpAmount, account); uint256 amountOut = IMlpManager(mlpManager).removeLiquidityForAccount( account, _tokenOut, _mlpAmount, _minOut, _receiver ); emit UnstakeMlp(account, _mlpAmount); return amountOut; } function unstakeAndRedeemMlpETH( uint256 _mlpAmount, uint256 _minOut, address payable _receiver ) external nonReentrant returns (uint256) { require(_mlpAmount > 0, "RewardRouter: invalid _mlpAmount"); address account = msg.sender; IRewardTracker(stakedMlpTracker).unstakeForAccount(account, feeMlpTracker, _mlpAmount, account); IRewardTracker(feeMlpTracker).unstakeForAccount(account, mlp, _mlpAmount, account); uint256 amountOut = IMlpManager(mlpManager).removeLiquidityForAccount( account, weth, _mlpAmount, _minOut, address(this) ); IWETH(weth).withdraw(amountOut); _receiver.sendValue(amountOut); emit UnstakeMlp(account, _mlpAmount); return amountOut; } function claim() external nonReentrant { address account = msg.sender; IRewardTracker(feeMycTracker).claimForAccount(account, account); IRewardTracker(feeMlpTracker).claimForAccount(account, account); IRewardTracker(stakedMycTracker).claimForAccount(account, account); IRewardTracker(stakedMlpTracker).claimForAccount(account, account); } function claimEsMyc() external nonReentrant { address account = msg.sender; IRewardTracker(stakedMycTracker).claimForAccount(account, account); IRewardTracker(stakedMlpTracker).claimForAccount(account, account); } function claimFees() external nonReentrant { address account = msg.sender; IRewardTracker(feeMycTracker).claimForAccount(account, account); IRewardTracker(feeMlpTracker).claimForAccount(account, account); } function compound() external nonReentrant { _compound(msg.sender); } function compoundForAccount(address _account) external nonReentrant onlyGov { _compound(_account); } function handleRewards( bool _shouldClaimMyc, bool _shouldStakeMyc, bool _shouldClaimEsMyc, bool _shouldStakeEsMyc, bool _shouldStakeMultiplierPoints, bool _shouldClaimWeth, bool _shouldConvertWethToEth, bool _shouldBuyMlpWithWeth ) external nonReentrant { address account = msg.sender; uint256 mycAmount = 0; if (_shouldClaimMyc) { uint256 mycAmount0 = IVester(mycVester).claimForAccount(account, account); uint256 mycAmount1 = IVester(mlpVester).claimForAccount(account, account); mycAmount = mycAmount0.add(mycAmount1); } if (_shouldStakeMyc && mycAmount > 0) { _stakeMyc(account, account, myc, mycAmount); } uint256 esMycAmount = 0; if (_shouldClaimEsMyc) { uint256 esMycAmount0 = IRewardTracker(stakedMycTracker).claimForAccount(account, account); uint256 esMycAmount1 = IRewardTracker(stakedMlpTracker).claimForAccount(account, account); esMycAmount = esMycAmount0.add(esMycAmount1); } if (_shouldStakeEsMyc && esMycAmount > 0) { _stakeMyc(account, account, esMyc, esMycAmount); } if (_shouldStakeMultiplierPoints) { uint256 bnMycAmount = IRewardTracker(bonusMycTracker).claimForAccount(account, account); if (bnMycAmount > 0) { IRewardTracker(feeMycTracker).stakeForAccount(account, account, bnMyc, bnMycAmount); } } if (_shouldClaimWeth) { if (_shouldBuyMlpWithWeth) { uint256 weth0 = IRewardTracker(feeMycTracker).claimForAccount(account, address(this)); uint256 weth1 = IRewardTracker(feeMlpTracker).claimForAccount(account, address(this)); uint256 wethAmount = weth0.add(weth1); // claimed amount can be 0 if (wethAmount > 0) { IERC20(weth).approve(mlpManager, wethAmount); uint256 mlpAmount = IMlpManager(mlpManager).addLiquidityForAccount( address(this), account, weth, wethAmount, 0, 0 ); IRewardTracker(feeMlpTracker).stakeForAccount(account, account, mlp, mlpAmount); IRewardTracker(stakedMlpTracker).stakeForAccount(account, account, feeMlpTracker, mlpAmount); emit StakeMlp(account, mlpAmount); } } else if (_shouldConvertWethToEth) { uint256 weth0 = IRewardTracker(feeMycTracker).claimForAccount(account, address(this)); uint256 weth1 = IRewardTracker(feeMlpTracker).claimForAccount(account, address(this)); uint256 wethAmount = weth0.add(weth1); IWETH(weth).withdraw(wethAmount); payable(account).sendValue(wethAmount); } else { IRewardTracker(feeMycTracker).claimForAccount(account, account); IRewardTracker(feeMlpTracker).claimForAccount(account, account); } } } function batchCompoundForAccounts(address[] memory _accounts) external nonReentrant onlyGov { for (uint256 i = 0; i < _accounts.length; i++) { _compound(_accounts[i]); } } function signalTransfer(address _receiver) external nonReentrant { require(IERC20(mycVester).balanceOf(msg.sender) == 0, "RewardRouter: sender has vested tokens"); require(IERC20(mlpVester).balanceOf(msg.sender) == 0, "RewardRouter: sender has vested tokens"); _validateReceiver(_receiver); pendingReceivers[msg.sender] = _receiver; } function acceptTransfer(address _sender) external nonReentrant { require(IERC20(mycVester).balanceOf(_sender) == 0, "RewardRouter: sender has vested tokens"); require(IERC20(mlpVester).balanceOf(_sender) == 0, "RewardRouter: sender has vested tokens"); address receiver = msg.sender; require(pendingReceivers[_sender] == receiver, "RewardRouter: transfer not signalled"); delete pendingReceivers[_sender]; _validateReceiver(receiver); _compound(_sender); uint256 stakedMyc = IRewardTracker(stakedMycTracker).depositBalances(_sender, myc); if (stakedMyc > 0) { _unstakeMyc(_sender, myc, stakedMyc, false); _stakeMyc(_sender, receiver, myc, stakedMyc); } uint256 stakedEsMyc = IRewardTracker(stakedMycTracker).depositBalances(_sender, esMyc); if (stakedEsMyc > 0) { _unstakeMyc(_sender, esMyc, stakedEsMyc, false); _stakeMyc(_sender, receiver, esMyc, stakedEsMyc); } uint256 stakedBnMyc = IRewardTracker(feeMycTracker).depositBalances(_sender, bnMyc); if (stakedBnMyc > 0) { IRewardTracker(feeMycTracker).unstakeForAccount(_sender, bnMyc, stakedBnMyc, _sender); IRewardTracker(feeMycTracker).stakeForAccount(_sender, receiver, bnMyc, stakedBnMyc); } uint256 esMycBalance = IERC20(esMyc).balanceOf(_sender); if (esMycBalance > 0) { IERC20(esMyc).transferFrom(_sender, receiver, esMycBalance); } uint256 mlpAmount = IRewardTracker(feeMlpTracker).depositBalances(_sender, mlp); if (mlpAmount > 0) { IRewardTracker(stakedMlpTracker).unstakeForAccount(_sender, feeMlpTracker, mlpAmount, _sender); IRewardTracker(feeMlpTracker).unstakeForAccount(_sender, mlp, mlpAmount, _sender); IRewardTracker(feeMlpTracker).stakeForAccount(_sender, receiver, mlp, mlpAmount); IRewardTracker(stakedMlpTracker).stakeForAccount(receiver, receiver, feeMlpTracker, mlpAmount); } IVester(mycVester).transferStakeValues(_sender, receiver); IVester(mlpVester).transferStakeValues(_sender, receiver); } function _validateReceiver(address _receiver) private view { require( IRewardTracker(stakedMycTracker).averageStakedAmounts(_receiver) == 0, "RewardRouter: stakedMycTracker.averageStakedAmounts > 0" ); require( IRewardTracker(stakedMycTracker).cumulativeRewards(_receiver) == 0, "RewardRouter: stakedMycTracker.cumulativeRewards > 0" ); require( IRewardTracker(bonusMycTracker).averageStakedAmounts(_receiver) == 0, "RewardRouter: bonusMycTracker.averageStakedAmounts > 0" ); require( IRewardTracker(bonusMycTracker).cumulativeRewards(_receiver) == 0, "RewardRouter: bonusMycTracker.cumulativeRewards > 0" ); require( IRewardTracker(feeMycTracker).averageStakedAmounts(_receiver) == 0, "RewardRouter: feeMycTracker.averageStakedAmounts > 0" ); require( IRewardTracker(feeMycTracker).cumulativeRewards(_receiver) == 0, "RewardRouter: feeMycTracker.cumulativeRewards > 0" ); require( IVester(mycVester).transferredAverageStakedAmounts(_receiver) == 0, "RewardRouter: mycVester.transferredAverageStakedAmounts > 0" ); require( IVester(mycVester).transferredCumulativeRewards(_receiver) == 0, "RewardRouter: mycVester.transferredCumulativeRewards > 0" ); require( IRewardTracker(stakedMlpTracker).averageStakedAmounts(_receiver) == 0, "RewardRouter: stakedMlpTracker.averageStakedAmounts > 0" ); require( IRewardTracker(stakedMlpTracker).cumulativeRewards(_receiver) == 0, "RewardRouter: stakedMlpTracker.cumulativeRewards > 0" ); require( IRewardTracker(feeMlpTracker).averageStakedAmounts(_receiver) == 0, "RewardRouter: feeMlpTracker.averageStakedAmounts > 0" ); require( IRewardTracker(feeMlpTracker).cumulativeRewards(_receiver) == 0, "RewardRouter: feeMlpTracker.cumulativeRewards > 0" ); require( IVester(mlpVester).transferredAverageStakedAmounts(_receiver) == 0, "RewardRouter: mlpVester.transferredAverageStakedAmounts > 0" ); require( IVester(mlpVester).transferredCumulativeRewards(_receiver) == 0, "RewardRouter: mlpVester.transferredCumulativeRewards > 0" ); require(IERC20(mycVester).balanceOf(_receiver) == 0, "RewardRouter: mycVester.balance > 0"); require(IERC20(mlpVester).balanceOf(_receiver) == 0, "RewardRouter: mlpVester.balance > 0"); } function _compound(address _account) private { _compoundMyc(_account); _compoundMlp(_account); } function _compoundMyc(address _account) private { uint256 esMycAmount = IRewardTracker(stakedMycTracker).claimForAccount(_account, _account); if (esMycAmount > 0) { _stakeMyc(_account, _account, esMyc, esMycAmount); } uint256 bnMycAmount = IRewardTracker(bonusMycTracker).claimForAccount(_account, _account); if (bnMycAmount > 0) { IRewardTracker(feeMycTracker).stakeForAccount(_account, _account, bnMyc, bnMycAmount); } } function _compoundMlp(address _account) private { uint256 esMycAmount = IRewardTracker(stakedMlpTracker).claimForAccount(_account, _account); if (esMycAmount > 0) { _stakeMyc(_account, _account, esMyc, esMycAmount); } } function _stakeMyc( address _fundingAccount, address _account, address _token, uint256 _amount ) private { require(_amount > 0, "RewardRouter: invalid _amount"); IRewardTracker(stakedMycTracker).stakeForAccount(_fundingAccount, _account, _token, _amount); IRewardTracker(bonusMycTracker).stakeForAccount(_account, _account, stakedMycTracker, _amount); IRewardTracker(feeMycTracker).stakeForAccount(_account, _account, bonusMycTracker, _amount); emit StakeMyc(_account, _token, _amount); } function _unstakeMyc( address _account, address _token, uint256 _amount, bool _shouldReduceBnMyc ) private { require(_amount > 0, "RewardRouter: invalid _amount"); uint256 balance = IRewardTracker(stakedMycTracker).stakedAmounts(_account); IRewardTracker(feeMycTracker).unstakeForAccount(_account, bonusMycTracker, _amount, _account); IRewardTracker(bonusMycTracker).unstakeForAccount(_account, stakedMycTracker, _amount, _account); IRewardTracker(stakedMycTracker).unstakeForAccount(_account, _token, _amount, _account); if (_shouldReduceBnMyc) { uint256 bnMycAmount = IRewardTracker(bonusMycTracker).claimForAccount(_account, _account); if (bnMycAmount > 0) { IRewardTracker(feeMycTracker).stakeForAccount(_account, _account, bnMyc, bnMycAmount); } uint256 stakedBnMyc = IRewardTracker(feeMycTracker).depositBalances(_account, bnMyc); if (stakedBnMyc > 0) { uint256 reductionAmount = stakedBnMyc.mul(_amount).div(balance); IRewardTracker(feeMycTracker).unstakeForAccount(_account, bnMyc, reductionAmount, _account); IMintable(bnMyc).burn(_account, reductionAmount); } } emit UnstakeMyc(_account, _token, _amount); } }
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"StakeMlp","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"StakeMyc","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"UnstakeMlp","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"UnstakeMyc","type":"event"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"}],"name":"acceptTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_accounts","type":"address[]"}],"name":"batchCompoundForAccounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_accounts","type":"address[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"batchStakeMycForAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"bnMyc","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bonusMycTracker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimEsMyc","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"compound","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"compoundForAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"esMyc","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeMlpTracker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeMycTracker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gov","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_shouldClaimMyc","type":"bool"},{"internalType":"bool","name":"_shouldStakeMyc","type":"bool"},{"internalType":"bool","name":"_shouldClaimEsMyc","type":"bool"},{"internalType":"bool","name":"_shouldStakeEsMyc","type":"bool"},{"internalType":"bool","name":"_shouldStakeMultiplierPoints","type":"bool"},{"internalType":"bool","name":"_shouldClaimWeth","type":"bool"},{"internalType":"bool","name":"_shouldConvertWethToEth","type":"bool"},{"internalType":"bool","name":"_shouldBuyMlpWithWeth","type":"bool"}],"name":"handleRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_weth","type":"address"},{"internalType":"address","name":"_myc","type":"address"},{"internalType":"address","name":"_esMyc","type":"address"},{"internalType":"address","name":"_bnMyc","type":"address"},{"internalType":"address","name":"_mlp","type":"address"},{"internalType":"address","name":"_stakedMycTracker","type":"address"},{"internalType":"address","name":"_bonusMycTracker","type":"address"},{"internalType":"address","name":"_feeMycTracker","type":"address"},{"internalType":"address","name":"_feeMlpTracker","type":"address"},{"internalType":"address","name":"_stakedMlpTracker","type":"address"},{"internalType":"address","name":"_mlpManager","type":"address"},{"internalType":"address","name":"_mycVester","type":"address"},{"internalType":"address","name":"_mlpVester","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isInitialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_minUsdg","type":"uint256"},{"internalType":"uint256","name":"_minMlp","type":"uint256"}],"name":"mintAndStakeMlp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minUsdg","type":"uint256"},{"internalType":"uint256","name":"_minMlp","type":"uint256"}],"name":"mintAndStakeMlpETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mlp","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mlpManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mlpVester","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"myc","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mycVester","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"pendingReceivers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_gov","type":"address"}],"name":"setGov","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"}],"name":"signalTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"stakeEsMyc","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"stakeMyc","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"stakeMycForAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakedMlpTracker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakedMycTracker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenOut","type":"address"},{"internalType":"uint256","name":"_mlpAmount","type":"uint256"},{"internalType":"uint256","name":"_minOut","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"unstakeAndRedeemMlp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mlpAmount","type":"uint256"},{"internalType":"uint256","name":"_minOut","type":"uint256"},{"internalType":"address payable","name":"_receiver","type":"address"}],"name":"unstakeAndRedeemMlpETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"unstakeEsMyc","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"unstakeMyc","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405234801561001057600080fd5b506001600081905580546001600160a01b03191633179055615792806100376000396000f3fe6080604052600436106101b95760003560e01c806301e336671461021d57806312d43a511461026057806312ebd5b11461029157806319c6c0cf146103c15780631af276a6146103fa5780632a9f4083146104a85780632fdd983d146104db5780633864c4fa14610576578063392e53cd146105db57806339a60b80146106045780633e49e2131461062e5780633fc8cef314610643578063415b8afc1461065857806342e9cd9b1461066d5780634e71d92d146106975780635387701e146106ac57806353f33a55146106fd578063655603a41461074457806369368154146107775780637b4c3da6146107a157806385df1b1f146107b65780638a98e96a146107cb578063944b4e5f146107e0578063b2a39a2a14610803578063c816d88114610818578063cbb91c5e14610842578063cfad57a214610857578063d294f0931461088a578063d4d933f01461089f578063d7fc085f146108b4578063df5e4f61146108c9578063e1b9db89146108de578063e709847814610911578063ef9aacfd14610926578063f5e3587914610959578063f69e20461461099e578063f851d692146109b3578063fc8b6fc1146109c857610218565b36610218576002546001600160a01b03163314610216576040805162461bcd60e51b81526020600482015260166024820152752937baba32b91d1034b73b30b634b21039b2b73232b960511b604482015290519081900360640190fd5b005b600080fd5b34801561022957600080fd5b506102166004803603606081101561024057600080fd5b506001600160a01b038135811691602081013590911690604001356109dd565b34801561026c57600080fd5b50610275610a43565b604080516001600160a01b039092168252519081900360200190f35b34801561029d57600080fd5b50610216600480360360408110156102b457600080fd5b810190602081018135600160201b8111156102ce57600080fd5b8201836020820111156102e057600080fd5b803590602001918460208302840111600160201b8311171561030157600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561035057600080fd5b82018360208201111561036257600080fd5b803590602001918460208302840111600160201b8311171561038357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610a52945050505050565b3480156103cd57600080fd5b50610216600480360360408110156103e457600080fd5b506001600160a01b038135169060200135610b47565b34801561040657600080fd5b506102166004803603602081101561041d57600080fd5b810190602081018135600160201b81111561043757600080fd5b82018360208201111561044957600080fd5b803590602001918460208302840111600160201b8311171561046a57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610c02945050505050565b3480156104b457600080fd5b50610216600480360360208110156104cb57600080fd5b50356001600160a01b0316610cca565b3480156104e757600080fd5b5061021660048036036101a08110156104ff57600080fd5b506001600160a01b038135811691602081013582169160408201358116916060810135821691608082013581169160a081013582169160c082013581169160e08101358216916101008201358116916101208101358216916101408201358116916101608101358216916101809091013516610d73565b34801561058257600080fd5b50610216600480360361010081101561059a57600080fd5b508035151590602081013515159060408101351515906060810135151590608081013515159060a081013515159060c081013515159060e001351515610f00565b3480156105e757600080fd5b506105f0611946565b604080519115158252519081900360200190f35b34801561061057600080fd5b506102166004803603602081101561062757600080fd5b5035611956565b34801561063a57600080fd5b506102756119bb565b34801561064f57600080fd5b506102756119ca565b34801561066457600080fd5b506102756119d9565b34801561067957600080fd5b506102166004803603602081101561069057600080fd5b50356119e8565b3480156106a357600080fd5b50610216611a4d565b3480156106b857600080fd5b506106eb600480360360608110156106cf57600080fd5b50803590602081013590604001356001600160a01b0316611cac565b60408051918252519081900360200190f35b34801561070957600080fd5b506106eb6004803603608081101561072057600080fd5b506001600160a01b0381358116916020810135916040820135916060013516611f95565b34801561075057600080fd5b506102166004803603602081101561076757600080fd5b50356001600160a01b0316612205565b34801561078357600080fd5b506102166004803603602081101561079a57600080fd5b5035612bfc565b3480156107ad57600080fd5b50610275612c61565b3480156107c257600080fd5b50610275612c70565b3480156107d757600080fd5b50610275612c7f565b6106eb600480360360408110156107f657600080fd5b5080359060200135612c8e565b34801561080f57600080fd5b50610275612ff9565b34801561082457600080fd5b506102166004803603602081101561083b57600080fd5b5035613008565b34801561084e57600080fd5b5061027561306d565b34801561086357600080fd5b506102166004803603602081101561087a57600080fd5b50356001600160a01b031661307c565b34801561089657600080fd5b506102166130eb565b3480156108ab57600080fd5b50610275613212565b3480156108c057600080fd5b50610275613221565b3480156108d557600080fd5b50610275613230565b3480156108ea57600080fd5b506102756004803603602081101561090157600080fd5b50356001600160a01b031661323f565b34801561091d57600080fd5b5061021661325a565b34801561093257600080fd5b506102166004803603602081101561094957600080fd5b50356001600160a01b03166132ff565b34801561096557600080fd5b506106eb6004803603608081101561097c57600080fd5b506001600160a01b0381351690602081013590604081013590606001356134ed565b3480156109aa57600080fd5b5061021661375b565b3480156109bf57600080fd5b506102756137b6565b3480156109d457600080fd5b506102756137c5565b6001546001600160a01b03163314610a2a576040805162461bcd60e51b81526020600482015260156024820152600080516020615309833981519152604482015290519081900360640190fd5b610a3e6001600160a01b03841683836137d4565b505050565b6001546001600160a01b031681565b60026000541415610a98576040805162461bcd60e51b815260206004820152601f60248201526000805160206152a3833981519152604482015290519081900360640190fd5b60026000556001546001600160a01b03163314610aea576040805162461bcd60e51b81526020600482015260156024820152600080516020615309833981519152604482015290519081900360640190fd5b6003546001600160a01b031660005b8351811015610b3c57610b3433858381518110610b1257fe5b602002602001015184868581518110610b2757fe5b6020026020010151613826565b600101610af9565b505060016000555050565b60026000541415610b8d576040805162461bcd60e51b815260206004820152601f60248201526000805160206152a3833981519152604482015290519081900360640190fd5b60026000556001546001600160a01b03163314610bdf576040805162461bcd60e51b81526020600482015260156024820152600080516020615309833981519152604482015290519081900360640190fd5b600354610bf990339084906001600160a01b031684613826565b50506001600055565b60026000541415610c48576040805162461bcd60e51b815260206004820152601f60248201526000805160206152a3833981519152604482015290519081900360640190fd5b60026000556001546001600160a01b03163314610c9a576040805162461bcd60e51b81526020600482015260156024820152600080516020615309833981519152604482015290519081900360640190fd5b60005b8151811015610bf957610cc2828281518110610cb557fe5b6020026020010151613a35565b600101610c9d565b60026000541415610d10576040805162461bcd60e51b815260206004820152601f60248201526000805160206152a3833981519152604482015290519081900360640190fd5b60026000556001546001600160a01b03163314610d62576040805162461bcd60e51b81526020600482015260156024820152600080516020615309833981519152604482015290519081900360640190fd5b610d6b81613a35565b506001600055565b6001546001600160a01b03163314610dc0576040805162461bcd60e51b81526020600482015260156024820152600080516020615309833981519152604482015290519081900360640190fd5b600154600160a01b900460ff1615610e095760405162461bcd60e51b81526004018080602001828103825260218152602001806154636021913960400191505060405180910390fd5b6001805460ff60a01b1916600160a01b179055600280546001600160a01b039e8f166001600160a01b031991821617909155600380549d8f169d82169d909d17909c55600480549b8e169b8d169b909b17909a5560058054998d16998c169990991790985560068054978c16978b169790971790965560078054958b16958a169590951790945560088054938a169389169390931790925560098054918916918816919091179055600b8054918816918716919091179055600a8054918716918616919091179055600c8054918616918516919091179055600e8054918516918416919091179055600d8054919093169116179055565b60026000541415610f46576040805162461bcd60e51b815260206004820152601f60248201526000805160206152a3833981519152604482015290519081900360640190fd5b600260009081553390891561107257600e54604080516309f4173d60e11b81526001600160a01b03858116600483018190526024830152915160009392909216916313e82e7a9160448082019260209290919082900301818787803b158015610fae57600080fd5b505af1158015610fc2573d6000803e3d6000fd5b505050506040513d6020811015610fd857600080fd5b5051600d54604080516309f4173d60e11b81526001600160a01b03878116600483018190526024830152915193945060009391909216916313e82e7a91604480830192602092919082900301818787803b15801561103557600080fd5b505af1158015611049573d6000803e3d6000fd5b505050506040513d602081101561105f57600080fd5b5051905061106d8282613a4a565b925050505b88801561107f5750600081115b1561109e5760035461109e90839081906001600160a01b031684613826565b600088156111c357600754604080516309f4173d60e11b81526001600160a01b03868116600483018190526024830152915160009392909216916313e82e7a9160448082019260209290919082900301818787803b1580156110ff57600080fd5b505af1158015611113573d6000803e3d6000fd5b505050506040513d602081101561112957600080fd5b5051600a54604080516309f4173d60e11b81526001600160a01b03888116600483018190526024830152915193945060009391909216916313e82e7a91604480830192602092919082900301818787803b15801561118657600080fd5b505af115801561119a573d6000803e3d6000fd5b505050506040513d60208110156111b057600080fd5b505190506111be8282613a4a565b925050505b8780156111d05750600081115b156111ef576004546111ef90849081906001600160a01b031684613826565b861561130457600854604080516309f4173d60e11b81526001600160a01b03868116600483018190526024830152915160009392909216916313e82e7a9160448082019260209290919082900301818787803b15801561124e57600080fd5b505af1158015611262573d6000803e3d6000fd5b505050506040513d602081101561127857600080fd5b5051905080156113025760095460055460408051631e42d69b60e21b81526001600160a01b038881166004830181905260248301529283166044820152606481018590529051919092169163790b5a6c91608480830192600092919082900301818387803b1580156112e957600080fd5b505af11580156112fd573d6000803e3d6000fd5b505050505b505b851561193457831561169557600954604080516309f4173d60e11b81526001600160a01b038681166004830152306024830152915160009392909216916313e82e7a9160448082019260209290919082900301818787803b15801561136857600080fd5b505af115801561137c573d6000803e3d6000fd5b505050506040513d602081101561139257600080fd5b5051600b54604080516309f4173d60e11b81526001600160a01b038881166004830152306024830152915193945060009391909216916313e82e7a91604480830192602092919082900301818787803b1580156113ee57600080fd5b505af1158015611402573d6000803e3d6000fd5b505050506040513d602081101561141857600080fd5b5051905060006114288383613a4a565b9050801561168d57600254600c546040805163095ea7b360e01b81526001600160a01b039283166004820152602481018590529051919092169163095ea7b39160448083019260209291908290030181600087803b15801561148957600080fd5b505af115801561149d573d6000803e3d6000fd5b505050506040513d60208110156114b357600080fd5b5050600c54600254604080516317eb2a1560e01b81523060048201526001600160a01b038a8116602483015292831660448201526064810185905260006084820181905260a482018190529151919392909216916317eb2a159160c480830192602092919082900301818787803b15801561152d57600080fd5b505af1158015611541573d6000803e3d6000fd5b505050506040513d602081101561155757600080fd5b5051600b5460065460408051631e42d69b60e21b81526001600160a01b038c8116600483018190526024830152928316604482015260648101859052905193945091169163790b5a6c9160848082019260009290919082900301818387803b1580156115c257600080fd5b505af11580156115d6573d6000803e3d6000fd5b5050600a54600b5460408051631e42d69b60e21b81526001600160a01b038d8116600483018190526024830152928316604482015260648101879052905191909216935063790b5a6c9250608480830192600092919082900301818387803b15801561164157600080fd5b505af1158015611655573d6000803e3d6000fd5b5050604080516001600160a01b038b1681526020810185905281516000805160206152c38339815191529450908190039091019150a1505b505050611934565b841561182f57600954604080516309f4173d60e11b81526001600160a01b038681166004830152306024830152915160009392909216916313e82e7a9160448082019260209290919082900301818787803b1580156116f357600080fd5b505af1158015611707573d6000803e3d6000fd5b505050506040513d602081101561171d57600080fd5b5051600b54604080516309f4173d60e11b81526001600160a01b038881166004830152306024830152915193945060009391909216916313e82e7a91604480830192602092919082900301818787803b15801561177957600080fd5b505af115801561178d573d6000803e3d6000fd5b505050506040513d60208110156117a357600080fd5b5051905060006117b38383613a4a565b60025460408051632e1a7d4d60e01b81526004810184905290519293506001600160a01b0390911691632e1a7d4d9160248082019260009290919082900301818387803b15801561180357600080fd5b505af1158015611817573d6000803e3d6000fd5b5061168d925050506001600160a01b03871682613aab565b600954604080516309f4173d60e11b81526001600160a01b03868116600483018190526024830152915191909216916313e82e7a9160448083019260209291908290030181600087803b15801561188557600080fd5b505af1158015611899573d6000803e3d6000fd5b505050506040513d60208110156118af57600080fd5b5050600b54604080516309f4173d60e11b81526001600160a01b03868116600483018190526024830152915191909216916313e82e7a9160448083019260209291908290030181600087803b15801561190757600080fd5b505af115801561191b573d6000803e3d6000fd5b505050506040513d602081101561193157600080fd5b50505b50506001600055505050505050505050565b600154600160a01b900460ff1681565b6002600054141561199c576040805162461bcd60e51b815260206004820152601f60248201526000805160206152a3833981519152604482015290519081900360640190fd5b6002600055600354610d6b9033906001600160a01b0316836001613b90565b6006546001600160a01b031681565b6002546001600160a01b031681565b600e546001600160a01b031681565b60026000541415611a2e576040805162461bcd60e51b815260206004820152601f60248201526000805160206152a3833981519152604482015290519081900360640190fd5b6002600055600354610d6b90339081906001600160a01b031684613826565b60026000541415611a93576040805162461bcd60e51b815260206004820152601f60248201526000805160206152a3833981519152604482015290519081900360640190fd5b60026000908155600954604080516309f4173d60e11b8152336004820181905260248201819052915191936001600160a01b03909316926313e82e7a926044808401936020939083900390910190829087803b158015611af257600080fd5b505af1158015611b06573d6000803e3d6000fd5b505050506040513d6020811015611b1c57600080fd5b5050600b54604080516309f4173d60e11b81526001600160a01b03848116600483018190526024830152915191909216916313e82e7a9160448083019260209291908290030181600087803b158015611b7457600080fd5b505af1158015611b88573d6000803e3d6000fd5b505050506040513d6020811015611b9e57600080fd5b5050600754604080516309f4173d60e11b81526001600160a01b03848116600483018190526024830152915191909216916313e82e7a9160448083019260209291908290030181600087803b158015611bf657600080fd5b505af1158015611c0a573d6000803e3d6000fd5b505050506040513d6020811015611c2057600080fd5b5050600a54604080516309f4173d60e11b81526001600160a01b03848116600483018190526024830152915191909216916313e82e7a9160448083019260209291908290030181600087803b158015611c7857600080fd5b505af1158015611c8c573d6000803e3d6000fd5b505050506040513d6020811015611ca257600080fd5b5050600160005550565b600060026000541415611cf4576040805162461bcd60e51b815260206004820152601f60248201526000805160206152a3833981519152604482015290519081900360640190fd5b600260005583611d39576040805162461bcd60e51b81526020600482018190526024820152600080516020615283833981519152604482015290519081900360640190fd5b600a54600b546040805163098bf59d60e01b815233600482018190526001600160a01b039384166024830152604482018990526064820181905291519193929092169163098bf59d91608480830192600092919082900301818387803b158015611da257600080fd5b505af1158015611db6573d6000803e3d6000fd5b5050600b546006546040805163098bf59d60e01b81526001600160a01b03878116600483018190529381166024830152604482018c90526064820193909352905191909216935063098bf59d9250608480830192600092919082900301818387803b158015611e2457600080fd5b505af1158015611e38573d6000803e3d6000fd5b5050600c54600254604080516371d597ad60e01b81526001600160a01b0387811660048301529283166024820152604481018b9052606481018a90523060848201529051600095509190921692506371d597ad9160a48082019260209290919082900301818787803b158015611ead57600080fd5b505af1158015611ec1573d6000803e3d6000fd5b505050506040513d6020811015611ed757600080fd5b505160025460408051632e1a7d4d60e01b81526004810184905290519293506001600160a01b0390911691632e1a7d4d9160248082019260009290919082900301818387803b158015611f2957600080fd5b505af1158015611f3d573d6000803e3d6000fd5b50611f55925050506001600160a01b03851682613aab565b604080516001600160a01b03841681526020810188905281516000805160206156b6833981519152929181900390910190a1600160005595945050505050565b600060026000541415611fdd576040805162461bcd60e51b815260206004820152601f60248201526000805160206152a3833981519152604482015290519081900360640190fd5b600260005583612022576040805162461bcd60e51b81526020600482018190526024820152600080516020615283833981519152604482015290519081900360640190fd5b600a54600b546040805163098bf59d60e01b815233600482018190526001600160a01b039384166024830152604482018990526064820181905291519193929092169163098bf59d91608480830192600092919082900301818387803b15801561208b57600080fd5b505af115801561209f573d6000803e3d6000fd5b5050600b546006546040805163098bf59d60e01b81526001600160a01b03878116600483018190529381166024830152604482018c90526064820193909352905191909216935063098bf59d9250608480830192600092919082900301818387803b15801561210d57600080fd5b505af1158015612121573d6000803e3d6000fd5b5050600c54604080516371d597ad60e01b81526001600160a01b0386811660048301528b81166024830152604482018b9052606482018a905288811660848301529151600095509190921692506371d597ad9160a48082019260209290919082900301818787803b15801561219557600080fd5b505af11580156121a9573d6000803e3d6000fd5b505050506040513d60208110156121bf57600080fd5b5051604080516001600160a01b03851681526020810189905281519293506000805160206156b6833981519152929081900390910190a160016000559695505050505050565b6002600054141561224b576040805162461bcd60e51b815260206004820152601f60248201526000805160206152a3833981519152604482015290519081900360640190fd5b6002600055600e54604080516370a0823160e01b81526001600160a01b038481166004830152915191909216916370a08231916024808301926020929190829003018186803b15801561229d57600080fd5b505afa1580156122b1573d6000803e3d6000fd5b505050506040513d60208110156122c757600080fd5b5051156123055760405162461bcd60e51b81526004018080602001828103825260268152602001806152e36026913960400191505060405180910390fd5b600d54604080516370a0823160e01b81526001600160a01b038481166004830152915191909216916370a08231916024808301926020929190829003018186803b15801561235257600080fd5b505afa158015612366573d6000803e3d6000fd5b505050506040513d602081101561237c57600080fd5b5051156123ba5760405162461bcd60e51b81526004018080602001828103825260268152602001806152e36026913960400191505060405180910390fd5b6001600160a01b038181166000908152600f602052604090205433911681146124145760405162461bcd60e51b81526004018080602001828103825260248152602001806154e16024913960400191505060405180910390fd5b6001600160a01b0382166000908152600f6020526040902080546001600160a01b0319169055612443816140d2565b61244c82613a35565b60075460035460408051637aeceb1f60e11b81526001600160a01b03868116600483015292831660248201529051600093929092169163f5d9d63e91604480820192602092909190829003018186803b1580156124a857600080fd5b505afa1580156124bc573d6000803e3d6000fd5b505050506040513d60208110156124d257600080fd5b505190508015612510576003546124f69084906001600160a01b0316836000613b90565b60035461251090849084906001600160a01b031684613826565b6007546004805460408051637aeceb1f60e11b81526001600160a01b0388811694820194909452918316602483015251600093929092169163f5d9d63e91604480820192602092909190829003018186803b15801561256e57600080fd5b505afa158015612582573d6000803e3d6000fd5b505050506040513d602081101561259857600080fd5b5051905080156125d6576004546125bc9085906001600160a01b0316836000613b90565b6004546125d690859085906001600160a01b031684613826565b60095460055460408051637aeceb1f60e11b81526001600160a01b03888116600483015292831660248201529051600093929092169163f5d9d63e91604480820192602092909190829003018186803b15801561263257600080fd5b505afa158015612646573d6000803e3d6000fd5b505050506040513d602081101561265c57600080fd5b505190508015612769576009546005546040805163098bf59d60e01b81526001600160a01b038981166004830181905293811660248301526044820186905260648201939093529051919092169163098bf59d91608480830192600092919082900301818387803b1580156126d057600080fd5b505af11580156126e4573d6000803e3d6000fd5b505060095460055460408051631e42d69b60e21b81526001600160a01b038b811660048301528a81166024830152928316604482015260648101879052905191909216935063790b5a6c9250608480830192600092919082900301818387803b15801561275057600080fd5b505af1158015612764573d6000803e3d6000fd5b505050505b6000600460009054906101000a90046001600160a01b03166001600160a01b03166370a08231876040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156127cd57600080fd5b505afa1580156127e1573d6000803e3d6000fd5b505050506040513d60208110156127f757600080fd5b5051905080156128905760048054604080516323b872dd60e01b81526001600160a01b038a811694820194909452888416602482015260448101859052905192909116916323b872dd916064808201926020929091908290030181600087803b15801561286357600080fd5b505af1158015612877573d6000803e3d6000fd5b505050506040513d602081101561288d57600080fd5b50505b600b5460065460408051637aeceb1f60e11b81526001600160a01b038a8116600483015292831660248201529051600093929092169163f5d9d63e91604480820192602092909190829003018186803b1580156128ec57600080fd5b505afa158015612900573d6000803e3d6000fd5b505050506040513d602081101561291657600080fd5b505190508015612b2457600a54600b546040805163098bf59d60e01b81526001600160a01b038b81166004830181905293811660248301526044820186905260648201939093529051919092169163098bf59d91608480830192600092919082900301818387803b15801561298a57600080fd5b505af115801561299e573d6000803e3d6000fd5b5050600b546006546040805163098bf59d60e01b81526001600160a01b038d8116600483018190529381166024830152604482018890526064820193909352905191909216935063098bf59d9250608480830192600092919082900301818387803b158015612a0c57600080fd5b505af1158015612a20573d6000803e3d6000fd5b5050600b5460065460408051631e42d69b60e21b81526001600160a01b038d811660048301528c81166024830152928316604482015260648101879052905191909216935063790b5a6c9250608480830192600092919082900301818387803b158015612a8c57600080fd5b505af1158015612aa0573d6000803e3d6000fd5b5050600a54600b5460408051631e42d69b60e21b81526001600160a01b038c8116600483018190526024830152928316604482015260648101879052905191909216935063790b5a6c9250608480830192600092919082900301818387803b158015612b0b57600080fd5b505af1158015612b1f573d6000803e3d6000fd5b505050505b600e5460408051630f713c2360e41b81526001600160a01b038a8116600483015289811660248301529151919092169163f713c23091604480830192600092919082900301818387803b158015612b7a57600080fd5b505af1158015612b8e573d6000803e3d6000fd5b5050600d5460408051630f713c2360e41b81526001600160a01b038c811660048301528b81166024830152915191909216935063f713c2309250604480830192600092919082900301818387803b158015612be857600080fd5b505af1158015611934573d6000803e3d6000fd5b60026000541415612c42576040805162461bcd60e51b815260206004820152601f60248201526000805160206152a3833981519152604482015290519081900360640190fd5b6002600055600454610d6b90339081906001600160a01b031684613826565b6005546001600160a01b031681565b6009546001600160a01b031681565b6003546001600160a01b031681565b600060026000541415612cd6576040805162461bcd60e51b815260206004820152601f60248201526000805160206152a3833981519152604482015290519081900360640190fd5b600260005534612d2d576040805162461bcd60e51b815260206004820152601f60248201527f526577617264526f757465723a20696e76616c6964206d73672e76616c756500604482015290519081900360640190fd5b600260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015612d7d57600080fd5b505af1158015612d91573d6000803e3d6000fd5b5050600254600c546040805163095ea7b360e01b81526001600160a01b039283166004820152346024820152905191909216945063095ea7b39350604480830193506020928290030181600087803b158015612dec57600080fd5b505af1158015612e00573d6000803e3d6000fd5b505050506040513d6020811015612e1657600080fd5b5050600c54600254604080516317eb2a1560e01b815230600482015233602482018190526001600160a01b0393841660448301523460648301526084820188905260a482018790529151919360009316916317eb2a159160c48082019260209290919082900301818787803b158015612e8e57600080fd5b505af1158015612ea2573d6000803e3d6000fd5b505050506040513d6020811015612eb857600080fd5b5051600b5460065460408051631e42d69b60e21b81526001600160a01b03878116600483018190526024830152928316604482015260648101859052905193945091169163790b5a6c9160848082019260009290919082900301818387803b158015612f2357600080fd5b505af1158015612f37573d6000803e3d6000fd5b5050600a54600b5460408051631e42d69b60e21b81526001600160a01b03888116600483018190526024830152928316604482015260648101879052905191909216935063790b5a6c9250608480830192600092919082900301818387803b158015612fa257600080fd5b505af1158015612fb6573d6000803e3d6000fd5b5050604080516001600160a01b03861681526020810185905281516000805160206152c38339815191529450908190039091019150a16001600055949350505050565b600d546001600160a01b031681565b6002600054141561304e576040805162461bcd60e51b815260206004820152601f60248201526000805160206152a3833981519152604482015290519081900360640190fd5b6002600055600454610d6b9033906001600160a01b0316836001613b90565b600c546001600160a01b031681565b6001546001600160a01b031633146130c9576040805162461bcd60e51b81526020600482015260156024820152600080516020615309833981519152604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60026000541415613131576040805162461bcd60e51b815260206004820152601f60248201526000805160206152a3833981519152604482015290519081900360640190fd5b60026000908155600954604080516309f4173d60e11b8152336004820181905260248201819052915191936001600160a01b03909316926313e82e7a926044808401936020939083900390910190829087803b15801561319057600080fd5b505af11580156131a4573d6000803e3d6000fd5b505050506040513d60208110156131ba57600080fd5b5050600b54604080516309f4173d60e11b81526001600160a01b03848116600483018190526024830152915191909216916313e82e7a9160448083019260209291908290030181600087803b158015611c7857600080fd5b600a546001600160a01b031681565b6008546001600160a01b031681565b6004546001600160a01b031681565b600f602052600090815260409020546001600160a01b031681565b600260005414156132a0576040805162461bcd60e51b815260206004820152601f60248201526000805160206152a3833981519152604482015290519081900360640190fd5b60026000908155600754604080516309f4173d60e11b8152336004820181905260248201819052915191936001600160a01b03909316926313e82e7a926044808401936020939083900390910190829087803b158015611bf657600080fd5b60026000541415613345576040805162461bcd60e51b815260206004820152601f60248201526000805160206152a3833981519152604482015290519081900360640190fd5b6002600055600e54604080516370a0823160e01b815233600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561339557600080fd5b505afa1580156133a9573d6000803e3d6000fd5b505050506040513d60208110156133bf57600080fd5b5051156133fd5760405162461bcd60e51b81526004018080602001828103825260268152602001806152e36026913960400191505060405180910390fd5b600d54604080516370a0823160e01b815233600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561344857600080fd5b505afa15801561345c573d6000803e3d6000fd5b505050506040513d602081101561347257600080fd5b5051156134b05760405162461bcd60e51b81526004018080602001828103825260268152602001806152e36026913960400191505060405180910390fd5b6134b9816140d2565b336000908152600f6020526040812080546001600160a01b0319166001600160a01b03939093169290921790915560019055565b600060026000541415613535576040805162461bcd60e51b815260206004820152601f60248201526000805160206152a3833981519152604482015290519081900360640190fd5b60026000558361357a576040805162461bcd60e51b815260206004820152601d60248201526000805160206156d6833981519152604482015290519081900360640190fd5b600c54604080516317eb2a1560e01b81523360048201819052602482018190526001600160a01b038981166044840152606483018990526084830188905260a483018790529251909360009316916317eb2a159160c480830192602092919082900301818787803b1580156135ee57600080fd5b505af1158015613602573d6000803e3d6000fd5b505050506040513d602081101561361857600080fd5b5051600b5460065460408051631e42d69b60e21b81526001600160a01b03878116600483018190526024830152928316604482015260648101859052905193945091169163790b5a6c9160848082019260009290919082900301818387803b15801561368357600080fd5b505af1158015613697573d6000803e3d6000fd5b5050600a54600b5460408051631e42d69b60e21b81526001600160a01b03888116600483018190526024830152928316604482015260648101879052905191909216935063790b5a6c9250608480830192600092919082900301818387803b15801561370257600080fd5b505af1158015613716573d6000803e3d6000fd5b5050604080516001600160a01b03861681526020810185905281516000805160206152c38339815191529450908190039091019150a160016000559695505050505050565b600260005414156137a1576040805162461bcd60e51b815260206004820152601f60248201526000805160206152a3833981519152604482015290519081900360640190fd5b60026000556137af33613a35565b6001600055565b6007546001600160a01b031681565b600b546001600160a01b031681565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610a3e908490614c22565b60008111613869576040805162461bcd60e51b815260206004820152601d60248201526000805160206156d6833981519152604482015290519081900360640190fd5b60075460408051631e42d69b60e21b81526001600160a01b03878116600483015286811660248301528581166044830152606482018590529151919092169163790b5a6c91608480830192600092919082900301818387803b1580156138ce57600080fd5b505af11580156138e2573d6000803e3d6000fd5b505060085460075460408051631e42d69b60e21b81526001600160a01b03898116600483018190526024830152928316604482015260648101879052905191909216935063790b5a6c9250608480830192600092919082900301818387803b15801561394d57600080fd5b505af1158015613961573d6000803e3d6000fd5b505060095460085460408051631e42d69b60e21b81526001600160a01b03898116600483018190526024830152928316604482015260648101879052905191909216935063790b5a6c9250608480830192600092919082900301818387803b1580156139cc57600080fd5b505af11580156139e0573d6000803e3d6000fd5b5050604080516001600160a01b0380881682528616602082015280820185905290517fb2ad2d224e99c91da39bb252ac0fbd284bbd037a10c1e2618c0b69bf8509a66f9350908190036060019150a150505050565b613a3e81614cd3565b613a4781614e8b565b50565b600082820183811015613aa2576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b90505b92915050565b80471015613b00576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015290519081900360640190fd5b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114613b4b576040519150601f19603f3d011682016040523d82523d6000602084013e613b50565b606091505b5050905080610a3e5760405162461bcd60e51b815260040180806020018281038252603a815260200180615429603a913960400191505060405180910390fd5b60008211613bd3576040805162461bcd60e51b815260206004820152601d60248201526000805160206156d6833981519152604482015290519081900360640190fd5b600754604080516310c1c10360e01b81526001600160a01b038781166004830152915160009392909216916310c1c10391602480820192602092909190829003018186803b158015613c2457600080fd5b505afa158015613c38573d6000803e3d6000fd5b505050506040513d6020811015613c4e57600080fd5b50516009546008546040805163098bf59d60e01b81526001600160a01b038a8116600483018190529381166024830152604482018990526064820193909352905193945091169163098bf59d9160848082019260009290919082900301818387803b158015613cbc57600080fd5b505af1158015613cd0573d6000803e3d6000fd5b50506008546007546040805163098bf59d60e01b81526001600160a01b038b8116600483018190529381166024830152604482018a90526064820193909352905191909216935063098bf59d9250608480830192600092919082900301818387803b158015613d3e57600080fd5b505af1158015613d52573d6000803e3d6000fd5b50506007546040805163098bf59d60e01b81526001600160a01b038a8116600483018190528a82166024840152604483018a90526064830152915191909216935063098bf59d9250608480830192600092919082900301818387803b158015613dba57600080fd5b505af1158015613dce573d6000803e3d6000fd5b50505050811561408157600854604080516309f4173d60e11b81526001600160a01b03888116600483018190526024830152915160009392909216916313e82e7a9160448082019260209290919082900301818787803b158015613e3157600080fd5b505af1158015613e45573d6000803e3d6000fd5b505050506040513d6020811015613e5b57600080fd5b505190508015613ee55760095460055460408051631e42d69b60e21b81526001600160a01b038a81166004830181905260248301529283166044820152606481018590529051919092169163790b5a6c91608480830192600092919082900301818387803b158015613ecc57600080fd5b505af1158015613ee0573d6000803e3d6000fd5b505050505b60095460055460408051637aeceb1f60e11b81526001600160a01b038a8116600483015292831660248201529051600093929092169163f5d9d63e91604480820192602092909190829003018186803b158015613f4157600080fd5b505afa158015613f55573d6000803e3d6000fd5b505050506040513d6020811015613f6b57600080fd5b50519050801561407e576000613f8b84613f858489614f36565b90614f8f565b6009546005546040805163098bf59d60e01b81526001600160a01b038d8116600483018190529381166024830152604482018690526064820193909352905193945091169163098bf59d9160848082019260009290919082900301818387803b158015613ff757600080fd5b505af115801561400b573d6000803e3d6000fd5b505060055460408051632770a7eb60e21b81526001600160a01b038d81166004830152602482018790529151919092169350639dc29fac9250604480830192600092919082900301818387803b15801561406457600080fd5b505af1158015614078573d6000803e3d6000fd5b50505050505b50505b604080516001600160a01b0380881682528616602082015280820185905290517f53db4328bb4bf5c5e46932d3ab2da63d3751d824b10d4f1f3f7a652f590956d09181900360600190a15050505050565b6007546040805163a318021760e01b81526001600160a01b0384811660048301529151919092169163a3180217916024808301926020929190829003018186803b15801561411f57600080fd5b505afa158015614133573d6000803e3d6000fd5b505050506040513d602081101561414957600080fd5b5051156141875760405162461bcd60e51b81526004018080602001828103825260378152602001806155286037913960400191505060405180910390fd5b60075460408051633792def360e01b81526001600160a01b03848116600483015291519190921691633792def3916024808301926020929190829003018186803b1580156141d457600080fd5b505afa1580156141e8573d6000803e3d6000fd5b505050506040513d60208110156141fe57600080fd5b50511561423c5760405162461bcd60e51b81526004018080602001828103825260348152602001806156586034913960400191505060405180910390fd5b6008546040805163a318021760e01b81526001600160a01b0384811660048301529151919092169163a3180217916024808301926020929190829003018186803b15801561428957600080fd5b505afa15801561429d573d6000803e3d6000fd5b505050506040513d60208110156142b357600080fd5b5051156142f15760405162461bcd60e51b815260040180806020018281038252603681526020018061535d6036913960400191505060405180910390fd5b60085460408051633792def360e01b81526001600160a01b03848116600483015291519190921691633792def3916024808301926020929190829003018186803b15801561433e57600080fd5b505afa158015614352573d6000803e3d6000fd5b505050506040513d602081101561436857600080fd5b5051156143a65760405162461bcd60e51b815260040180806020018281038252603381526020018061572a6033913960400191505060405180910390fd5b6009546040805163a318021760e01b81526001600160a01b0384811660048301529151919092169163a3180217916024808301926020929190829003018186803b1580156143f357600080fd5b505afa158015614407573d6000803e3d6000fd5b505050506040513d602081101561441d57600080fd5b50511561445b5760405162461bcd60e51b81526004018080602001828103825260348152602001806155806034913960400191505060405180910390fd5b60095460408051633792def360e01b81526001600160a01b03848116600483015291519190921691633792def3916024808301926020929190829003018186803b1580156144a857600080fd5b505afa1580156144bc573d6000803e3d6000fd5b505050506040513d60208110156144d257600080fd5b5051156145105760405162461bcd60e51b81526004018080602001828103825260318152602001806152526031913960400191505060405180910390fd5b600e5460408051631ccdc0d760e21b81526001600160a01b03848116600483015291519190921691637337035c916024808301926020929190829003018186803b15801561455d57600080fd5b505afa158015614571573d6000803e3d6000fd5b505050506040513d602081101561458757600080fd5b5051156145c55760405162461bcd60e51b815260040180806020018281038252603b8152602001806153ee603b913960400191505060405180910390fd5b600e5460408051635b8de71560e11b81526001600160a01b0384811660048301529151919092169163b71bce2a916024808301926020929190829003018186803b15801561461257600080fd5b505afa158015614626573d6000803e3d6000fd5b505050506040513d602081101561463c57600080fd5b50511561467a5760405162461bcd60e51b81526004018080602001828103825260388152602001806155ef6038913960400191505060405180910390fd5b600a546040805163a318021760e01b81526001600160a01b0384811660048301529151919092169163a3180217916024808301926020929190829003018186803b1580156146c757600080fd5b505afa1580156146db573d6000803e3d6000fd5b505050506040513d60208110156146f157600080fd5b50511561472f5760405162461bcd60e51b81526004018080602001828103825260378152602001806154aa6037913960400191505060405180910390fd5b600a5460408051633792def360e01b81526001600160a01b03848116600483015291519190921691633792def3916024808301926020929190829003018186803b15801561477c57600080fd5b505afa158015614790573d6000803e3d6000fd5b505050506040513d60208110156147a657600080fd5b5051156147e45760405162461bcd60e51b81526004018080602001828103825260348152602001806153296034913960400191505060405180910390fd5b600b546040805163a318021760e01b81526001600160a01b0384811660048301529151919092169163a3180217916024808301926020929190829003018186803b15801561483157600080fd5b505afa158015614845573d6000803e3d6000fd5b505050506040513d602081101561485b57600080fd5b5051156148995760405162461bcd60e51b81526004018080602001828103825260348152602001806156f66034913960400191505060405180910390fd5b600b5460408051633792def360e01b81526001600160a01b03848116600483015291519190921691633792def3916024808301926020929190829003018186803b1580156148e657600080fd5b505afa1580156148fa573d6000803e3d6000fd5b505050506040513d602081101561491057600080fd5b50511561494e5760405162461bcd60e51b81526004018080602001828103825260318152602001806156276031913960400191505060405180910390fd5b600d5460408051631ccdc0d760e21b81526001600160a01b03848116600483015291519190921691637337035c916024808301926020929190829003018186803b15801561499b57600080fd5b505afa1580156149af573d6000803e3d6000fd5b505050506040513d60208110156149c557600080fd5b505115614a035760405162461bcd60e51b815260040180806020018281038252603b8152602001806155b4603b913960400191505060405180910390fd5b600d5460408051635b8de71560e11b81526001600160a01b0384811660048301529151919092169163b71bce2a916024808301926020929190829003018186803b158015614a5057600080fd5b505afa158015614a64573d6000803e3d6000fd5b505050506040513d6020811015614a7a57600080fd5b505115614ab85760405162461bcd60e51b81526004018080602001828103825260388152602001806153b66038913960400191505060405180910390fd5b600e54604080516370a0823160e01b81526001600160a01b038481166004830152915191909216916370a08231916024808301926020929190829003018186803b158015614b0557600080fd5b505afa158015614b19573d6000803e3d6000fd5b505050506040513d6020811015614b2f57600080fd5b505115614b6d5760405162461bcd60e51b81526004018080602001828103825260238152602001806155056023913960400191505060405180910390fd5b600d54604080516370a0823160e01b81526001600160a01b038481166004830152915191909216916370a08231916024808301926020929190829003018186803b158015614bba57600080fd5b505afa158015614bce573d6000803e3d6000fd5b505050506040513d6020811015614be457600080fd5b505115613a475760405162461bcd60e51b81526004018080602001828103825260238152602001806153936023913960400191505060405180910390fd5b6060614c77826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614fce9092919063ffffffff16565b805190915015610a3e57808060200190516020811015614c9657600080fd5b5051610a3e5760405162461bcd60e51b815260040180806020018281038252602a81526020018061568c602a913960400191505060405180910390fd5b600754604080516309f4173d60e11b81526001600160a01b03848116600483018190526024830152915160009392909216916313e82e7a9160448082019260209290919082900301818787803b158015614d2c57600080fd5b505af1158015614d40573d6000803e3d6000fd5b505050506040513d6020811015614d5657600080fd5b505190508015614d7a57600454614d7a90839081906001600160a01b031684613826565b600854604080516309f4173d60e11b81526001600160a01b03858116600483018190526024830152915160009392909216916313e82e7a9160448082019260209290919082900301818787803b158015614dd357600080fd5b505af1158015614de7573d6000803e3d6000fd5b505050506040513d6020811015614dfd57600080fd5b505190508015610a3e5760095460055460408051631e42d69b60e21b81526001600160a01b038781166004830181905260248301529283166044820152606481018590529051919092169163790b5a6c91608480830192600092919082900301818387803b158015614e6e57600080fd5b505af1158015614e82573d6000803e3d6000fd5b50505050505050565b600a54604080516309f4173d60e11b81526001600160a01b03848116600483018190526024830152915160009392909216916313e82e7a9160448082019260209290919082900301818787803b158015614ee457600080fd5b505af1158015614ef8573d6000803e3d6000fd5b505050506040513d6020811015614f0e57600080fd5b505190508015614f3257600454614f3290839081906001600160a01b031684613826565b5050565b600082614f4557506000613aa5565b82820282848281614f5257fe5b0414613aa25760405162461bcd60e51b815260040180806020018281038252602181526020018061555f6021913960400191505060405180910390fd5b6000613aa283836040518060400160405280601a815260200179536166654d6174683a206469766973696f6e206279207a65726f60301b815250614fe7565b6060614fdd8484600085615089565b90505b9392505050565b600081836150735760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615038578181015183820152602001615020565b50505050905090810190601f1680156150655780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161507f57fe5b0495945050505050565b6060824710156150ca5760405162461bcd60e51b81526004018080602001828103825260268152602001806154846026913960400191505060405180910390fd5b6150d3856151e5565b615124576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106151635780518252601f199092019160209182019101615144565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146151c5576040519150601f19603f3d011682016040523d82523d6000602084013e6151ca565b606091505b50915091506151da8282866151eb565b979650505050505050565b3b151590565b606083156151fa575081614fe0565b82511561520a5782518084602001fd5b60405162461bcd60e51b815260206004820181815284516024840152845185939192839260440191908501908083836000831561503857818101518382015260200161502056fe526577617264526f757465723a206665654d7963547261636b65722e63756d756c617469766552657761726473203e2030526577617264526f757465723a20696e76616c6964205f6d6c70416d6f756e745265656e7472616e637947756172643a207265656e7472616e742063616c6c007d6d7cfda37a857e91ee28f4cd0b7aa06fe8be7a7f3c4fed676140a76365a542526577617264526f757465723a2073656e646572206861732076657374656420746f6b656e73476f7665726e61626c653a20666f7262696464656e0000000000000000000000526577617264526f757465723a207374616b65644d6c70547261636b65722e63756d756c617469766552657761726473203e2030526577617264526f757465723a20626f6e75734d7963547261636b65722e617665726167655374616b6564416d6f756e7473203e2030526577617264526f757465723a206d6c705665737465722e62616c616e6365203e2030526577617264526f757465723a206d6c705665737465722e7472616e7366657272656443756d756c617469766552657761726473203e2030526577617264526f757465723a206d79635665737465722e7472616e73666572726564417665726167655374616b6564416d6f756e7473203e2030416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564526577617264526f757465723a20616c726561647920696e697469616c697a6564416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c526577617264526f757465723a207374616b65644d6c70547261636b65722e617665726167655374616b6564416d6f756e7473203e2030526577617264526f757465723a207472616e73666572206e6f74207369676e616c6c6564526577617264526f757465723a206d79635665737465722e62616c616e6365203e2030526577617264526f757465723a207374616b65644d7963547261636b65722e617665726167655374616b6564416d6f756e7473203e2030536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77526577617264526f757465723a206665654d7963547261636b65722e617665726167655374616b6564416d6f756e7473203e2030526577617264526f757465723a206d6c705665737465722e7472616e73666572726564417665726167655374616b6564416d6f756e7473203e2030526577617264526f757465723a206d79635665737465722e7472616e7366657272656443756d756c617469766552657761726473203e2030526577617264526f757465723a206665654d6c70547261636b65722e63756d756c617469766552657761726473203e2030526577617264526f757465723a207374616b65644d7963547261636b65722e63756d756c617469766552657761726473203e20305361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564cc7cb940d1fa10f6c95397bd7355aef0bad1b89bfc9cd922162720bff9110094526577617264526f757465723a20696e76616c6964205f616d6f756e74000000526577617264526f757465723a206665654d6c70547261636b65722e617665726167655374616b6564416d6f756e7473203e2030526577617264526f757465723a20626f6e75734d7963547261636b65722e63756d756c617469766552657761726473203e2030a2646970667358221220bca65db260041209710797aa3d03a6b874c75f3723bffc88322953f1b956760564736f6c634300060c0033
Deployed ByteCode Sourcemap
28453:19697:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29484:4;;-1:-1:-1;;;;;29484:4:0;29470:10;:18;29462:53;;;;;-1:-1:-1;;;29462:53:0;;;;;;;;;;;;-1:-1:-1;;;29462:53:0;;;;;;;;;;;;;;;28453:19697;;;;;30599:190;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;30599:190:0;;;;;;;;;;;;;;;;;:::i;28085:18::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;28085:18:0;;;;;;;;;;;;;;30797:325;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30797:325:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30797:325:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30797:325:0;;;;;;;;-1:-1:-1;30797:325:0;;-1:-1:-1;;;;;30797:325:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30797:325:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30797:325:0;;-1:-1:-1;30797:325:0;;-1:-1:-1;;;;;30797:325:0:i;31130:157::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;31130:157:0;;;;;;;;:::i;39570:207::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;39570:207:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;39570:207:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39570:207:0;;-1:-1:-1;39570:207:0;;-1:-1:-1;;;;;39570:207:0:i;36106:114::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36106:114:0;-1:-1:-1;;;;;36106:114:0;;:::i;29531:986::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29531:986:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;36228:3334::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36228:3334:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28623:25::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;31561:121;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31561:121:0;;:::i;28766:18::-;;;;;;;;;;;;;:::i;28657:19::-;;;;;;;;;;;;;:::i;29077:24::-;;;;;;;;;;;;;:::i;31295:123::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31295:123:0;;:::i;35113:392::-;;;;;;;;;;;;;:::i;34245:860::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34245:860:0;;;;;;;;;;;-1:-1:-1;;;;;34245:860:0;;:::i;:::-;;;;;;;;;;;;;;;;33446:791;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;33446:791:0;;;;;;;;;;;;;;;;;;;;:::i;40170:2254::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40170:2254:0;-1:-1:-1;;;;;40170:2254:0;;:::i;31426:127::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31426:127:0;;:::i;28737:20::-;;;;;;;;;;;;;:::i;28900:28::-;;;;;;;;;;;;;:::i;28685:18::-;;;;;;;;;;;;;:::i;32608:830::-;;;;;;;;;;;;;;;;-1:-1:-1;32608:830:0;;;;;;;:::i;29046:24::-;;;;;;;;;;;;;:::i;31690:125::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31690:125:0;;:::i;29012:25::-;;;;;;;;;;;;;:::i;28285:76::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28285:76:0;-1:-1:-1;;;;;28285:76:0;;:::i;35768:240::-;;;;;;;;;;;;;:::i;28937:31::-;;;;;;;;;;;;;:::i;28863:30::-;;;;;;;;;;;;;:::i;28710:20::-;;;;;;;;;;;;;:::i;29110:51::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29110:51:0;-1:-1:-1;;;;;29110:51:0;;:::i;35513:247::-;;;;;;;;;;;;;:::i;39785:377::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39785:377:0;-1:-1:-1;;;;;39785:377:0;;:::i;31823:777::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;31823:777:0;;;;;;;;;;;;;;;;;;:::i;36016:82::-;;;;;;;;;;;;;:::i;28825:31::-;;;;;;;;;;;;;:::i;28975:28::-;;;;;;;;;;;;;:::i;30599:190::-;28228:3;;-1:-1:-1;;;;;28228:3:0;28214:10;:17;28206:51;;;;;-1:-1:-1;;;28206:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;28206:51:0;;;;;;;;;;;;;;;30735:46:::1;-1:-1:-1::0;;;;;30735:27:0;::::1;30763:8:::0;30773:7;30735:27:::1;:46::i;:::-;30599:190:::0;;;:::o;28085:18::-;;;-1:-1:-1;;;;;28085:18:0;;:::o;30797:325::-;22348:1;22953:7;;:19;;22945:63;;;;;-1:-1:-1;;;22945:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22945:63:0;;;;;;;;;;;;;;;22348:1;23086:7;:18;28228:3:::1;::::0;-1:-1:-1;;;;;28228:3:0::1;28214:10;:17;28206:51;;;::::0;;-1:-1:-1;;;28206:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28206:51:0;;;;;;;;;;;;;::::1;;30973:3:::2;::::0;-1:-1:-1;;;;;30973:3:0::2;30958:12;30987:128;31011:9;:16;31007:1;:20;30987:128;;;31049:54;31059:10;31071:9;31081:1;31071:12;;;;;;;;;;;;;;31085:4;31091:8;31100:1;31091:11;;;;;;;;;;;;;;31049:9;:54::i;:::-;31029:3;;30987:128;;;-1:-1:-1::0;;22304:1:0;23265:7;:22;-1:-1:-1;;30797:325:0:o;31130:157::-;22348:1;22953:7;;:19;;22945:63;;;;;-1:-1:-1;;;22945:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22945:63:0;;;;;;;;;;;;;;;22348:1;23086:7;:18;28228:3:::1;::::0;-1:-1:-1;;;;;28228:3:0::1;28214:10;:17;28206:51;;;::::0;;-1:-1:-1;;;28206:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28206:51:0;;;;;;;;;;;;;::::1;;31266:3:::2;::::0;31234:45:::2;::::0;31244:10:::2;::::0;31256:8;;-1:-1:-1;;;;;31266:3:0::2;31271:7:::0;31234:9:::2;:45::i;:::-;-1:-1:-1::0;;22304:1:0;23265:7;:22;31130:157::o;39570:207::-;22348:1;22953:7;;:19;;22945:63;;;;;-1:-1:-1;;;22945:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22945:63:0;;;;;;;;;;;;;;;22348:1;23086:7;:18;28228:3:::1;::::0;-1:-1:-1;;;;;28228:3:0::1;28214:10;:17;28206:51;;;::::0;;-1:-1:-1;;;28206:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28206:51:0;;;;;;;;;;;;;::::1;;39678:9:::2;39673:97;39697:9;:16;39693:1;:20;39673:97;;;39735:23;39745:9;39755:1;39745:12;;;;;;;;;;;;;;39735:9;:23::i;:::-;39715:3;;39673:97;;36106:114:::0;22348:1;22953:7;;:19;;22945:63;;;;;-1:-1:-1;;;22945:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22945:63:0;;;;;;;;;;;;;;;22348:1;23086:7;:18;28228:3:::1;::::0;-1:-1:-1;;;;;28228:3:0::1;28214:10;:17;28206:51;;;::::0;;-1:-1:-1;;;28206:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28206:51:0;;;;;;;;;;;;;::::1;;36193:19:::2;36203:8;36193:9;:19::i;:::-;-1:-1:-1::0;22304:1:0;23265:7;:22;36106:114::o;29531:986::-;28228:3;;-1:-1:-1;;;;;28228:3:0;28214:10;:17;28206:51;;;;;-1:-1:-1;;;28206:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;28206:51:0;;;;;;;;;;;;;;;29976:13:::1;::::0;-1:-1:-1;;;29976:13:0;::::1;;;29975:14;29967:60;;;;-1:-1:-1::0;;;29967:60:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30054:4;30038:20:::0;;-1:-1:-1;;;;30038:20:0::1;-1:-1:-1::0;;;30038:20:0::1;::::0;;30071:4:::1;:12:::0;;-1:-1:-1;;;;;30071:12:0;;::::1;-1:-1:-1::0;;;;;;30071:12:0;;::::1;;::::0;;;30096:3:::1;:10:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;30117:5:::1;:14:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;30142:5:::1;:14:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;30169:3:::1;:10:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;30192:16:::1;:36:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;30239:15:::1;:34:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;30284:13:::1;:30:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;30327:13:::1;:30:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;30368:16:::1;:36:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;30417:10:::1;:24:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;30454:9:::1;:22:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;30487:9:::1;:22:::0;;;;;::::1;::::0;::::1;;::::0;;29531:986::o;36228:3334::-;22348:1;22953:7;;:19;;22945:63;;;;;-1:-1:-1;;;22945:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22945:63:0;;;;;;;;;;;;;;;22348:1;23086:7;:18;;;36589:10:::1;::::0;36644:262;::::1;;;36709:9;::::0;36701:52:::1;::::0;;-1:-1:-1;;;36701:52:0;;-1:-1:-1;;;;;36701:52:0;;::::1;;::::0;::::1;::::0;;;;;;;;;36680:18:::1;::::0;36709:9;;;::::1;::::0;36701:34:::1;::::0;:52;;;;;::::1;::::0;;;;;;;;;36680:18;36709:9;36701:52;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;36701:52:0;36797:9:::1;::::0;36789:52:::1;::::0;;-1:-1:-1;;;36789:52:0;;-1:-1:-1;;;;;36789:52:0;;::::1;;::::0;::::1;::::0;;;;;;;;;36701;;-1:-1:-1;36768:18:0::1;::::0;36797:9;;;::::1;::::0;36789:34:::1;::::0;:52;;;;;36701::::1;::::0;36789;;;;;;;36768:18;36797:9;36789:52;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;36789:52:0;;-1:-1:-1;36868:26:0::1;:10:::0;36789:52;36868:14:::1;:26::i;:::-;36856:38;;36644:262;;;36922:15;:32;;;;;36953:1;36941:9;:13;36922:32;36918:108;;;36999:3;::::0;36971:43:::1;::::0;36981:7;;;;-1:-1:-1;;;;;36999:3:0::1;37004:9:::0;36971::::1;:43::i;:::-;37038:19;37076:17;37072:302;;;37148:16;::::0;37133:66:::1;::::0;;-1:-1:-1;;;37133:66:0;;-1:-1:-1;;;;;37133:66:0;;::::1;;::::0;::::1;::::0;;;;;;;;;37110:20:::1;::::0;37148:16;;;::::1;::::0;37133:48:::1;::::0;:66;;;;;::::1;::::0;;;;;;;;;37110:20;37148:16;37133:66;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;37133:66:0;37252:16:::1;::::0;37237:66:::1;::::0;;-1:-1:-1;;;37237:66:0;;-1:-1:-1;;;;;37237:66:0;;::::1;;::::0;::::1;::::0;;;;;;;;;37133;;-1:-1:-1;37214:20:0::1;::::0;37252:16;;;::::1;::::0;37237:48:::1;::::0;:66;;;;;37133::::1;::::0;37237;;;;;;;37214:20;37252:16;37237:66;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;37237:66:0;;-1:-1:-1;37332:30:0::1;:12:::0;37237:66;37332:16:::1;:30::i;:::-;37318:44;;37072:302;;;37390:17;:36;;;;;37425:1;37411:11;:15;37390:36;37386:116;;;37471:5;::::0;37443:47:::1;::::0;37453:7;;;;-1:-1:-1;;;;;37471:5:0::1;37478:11:::0;37443:9:::1;:47::i;:::-;37518:28;37514:301;;;37600:15;::::0;37585:65:::1;::::0;;-1:-1:-1;;;37585:65:0;;-1:-1:-1;;;;;37585:65:0;;::::1;;::::0;::::1;::::0;;;;;;;;;37563:19:::1;::::0;37600:15;;;::::1;::::0;37585:47:::1;::::0;:65;;;;;::::1;::::0;;;;;;;;;37563:19;37600:15;37585:65;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;37585:65:0;;-1:-1:-1;37669:15:0;;37665:139:::1;;37720:13;::::0;37769:5:::1;::::0;37705:83:::1;::::0;;-1:-1:-1;;;37705:83:0;;-1:-1:-1;;;;;37705:83:0;;::::1;;::::0;::::1;::::0;;;;;;;37769:5;;::::1;37705:83:::0;;;;;;;;;;;;37720:13;;;::::1;::::0;37705:45:::1;::::0;:83;;;;;37720:13:::1;::::0;37705:83;;;;;;;37720:13;;37705:83;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;37665:139;37514:301;;37831:16;37827:1728;;;37868:21;37864:1680;;;37941:13;::::0;37926:69:::1;::::0;;-1:-1:-1;;;37926:69:0;;-1:-1:-1;;;;;37926:69:0;;::::1;;::::0;::::1;::::0;37989:4:::1;37926:69:::0;;;;;;37910:13:::1;::::0;37941;;;::::1;::::0;37926:45:::1;::::0;:69;;;;;::::1;::::0;;;;;;;;;37910:13;37941;37926:69;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;37926:69:0;38045:13:::1;::::0;38030:69:::1;::::0;;-1:-1:-1;;;38030:69:0;;-1:-1:-1;;;;;38030:69:0;;::::1;;::::0;::::1;::::0;38093:4:::1;38030:69:::0;;;;;;37926;;-1:-1:-1;38014:13:0::1;::::0;38045;;;::::1;::::0;38030:45:::1;::::0;:69;;;;;37926::::1;::::0;38030;;;;;;;38014:13;38045;38030:69;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;38030:69:0;;-1:-1:-1;38120:18:0::1;38141:16;:5:::0;38030:69;38141:9:::1;:16::i;:::-;38120:37:::0;-1:-1:-1;38226:14:0;;38222:694:::1;;38272:4;::::0;38286:10:::1;::::0;38265:44:::1;::::0;;-1:-1:-1;;;38265:44:0;;-1:-1:-1;;;;;38286:10:0;;::::1;38265:44;::::0;::::1;::::0;;;;;;;;;38272:4;;;::::1;::::0;38265:20:::1;::::0;:44;;;;;::::1;::::0;;;;;;;;38272:4:::1;::::0;38265:44;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;38364:10:0::1;::::0;38499:4:::1;::::0;38352:267:::1;::::0;;-1:-1:-1;;;38352:267:0;;38433:4:::1;38352:267;::::0;::::1;::::0;-1:-1:-1;;;;;38352:267:0;;::::1;::::0;;;;38499:4;;::::1;38352:267:::0;;;;;;;;;;38332:17:::1;38352:267:::0;;;;;;;;;;;;;;38332:17;;38364:10;;;::::1;::::0;38352:46:::1;::::0;:267;;;;;38265:44:::1;::::0;38352:267;;;;;;;38332:17;38364:10;38352:267;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;38352:267:0;38659:13:::1;::::0;38708:3:::1;::::0;38644:79:::1;::::0;;-1:-1:-1;;;38644:79:0;;-1:-1:-1;;;;;38644:79:0;;::::1;;::::0;::::1;::::0;;;;;;;38708:3;;::::1;38644:79:::0;;;;;;;;;;;;38352:267;;-1:-1:-1;38659:13:0;::::1;::::0;38644:45:::1;::::0;:79;;;;;38659:13:::1;::::0;38644:79;;;;;;;;38659:13;;38644:79;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;38761:16:0::1;::::0;38813:13:::1;::::0;38746:92:::1;::::0;;-1:-1:-1;;;38746:92:0;;-1:-1:-1;;;;;38746:92:0;;::::1;;::::0;::::1;::::0;;;;;;;38813:13;;::::1;38746:92:::0;;;;;;;;;;;;38761:16;;;::::1;::::0;-1:-1:-1;38746:48:0::1;::::0;-1:-1:-1;38746:92:0;;;;;38761:16:::1;::::0;38746:92;;;;;;;38761:16;;38746:92;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;38868:28:0::1;::::0;;-1:-1:-1;;;;;38868:28:0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;;;;;;;;;;;38868:28:0;-1:-1:-1;38868:28:0;;;;;;;;-1:-1:-1;38868:28:0::1;38222:694;;37864:1680;;;;;;38941:23;38937:607;;;39016:13;::::0;39001:69:::1;::::0;;-1:-1:-1;;;39001:69:0;;-1:-1:-1;;;;;39001:69:0;;::::1;;::::0;::::1;::::0;39064:4:::1;39001:69:::0;;;;;;38985:13:::1;::::0;39016;;;::::1;::::0;39001:45:::1;::::0;:69;;;;;::::1;::::0;;;;;;;;;38985:13;39016;39001:69;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;39001:69:0;39120:13:::1;::::0;39105:69:::1;::::0;;-1:-1:-1;;;39105:69:0;;-1:-1:-1;;;;;39105:69:0;;::::1;;::::0;::::1;::::0;39168:4:::1;39105:69:::0;;;;;;39001;;-1:-1:-1;39089:13:0::1;::::0;39120;;;::::1;::::0;39105:45:::1;::::0;:69;;;;;39001::::1;::::0;39105;;;;;;;39089:13;39120;39105:69;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;39105:69:0;;-1:-1:-1;39195:18:0::1;39216:16;:5:::0;39105:69;39216:9:::1;:16::i;:::-;39259:4;::::0;39253:32:::1;::::0;;-1:-1:-1;;;39253:32:0;;::::1;::::0;::::1;::::0;;;;;39195:37;;-1:-1:-1;;;;;;39259:4:0;;::::1;::::0;39253:20:::1;::::0;:32;;;;;39259:4:::1;::::0;39253:32;;;;;;;;39259:4;;39253:32;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;39304:38:0::1;::::0;-1:-1:-1;;;;;;;;39304:26:0;::::1;39331:10:::0;39304:26:::1;:38::i;38937:607::-;39398:13;::::0;39383:63:::1;::::0;;-1:-1:-1;;;39383:63:0;;-1:-1:-1;;;;;39383:63:0;;::::1;;::::0;::::1;::::0;;;;;;;;;39398:13;;;::::1;::::0;39383:45:::1;::::0;:63;;;;;::::1;::::0;;;;;;;;39398:13:::1;::::0;39383:63;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;39480:13:0::1;::::0;39465:63:::1;::::0;;-1:-1:-1;;;39465:63:0;;-1:-1:-1;;;;;39465:63:0;;::::1;;::::0;::::1;::::0;;;;;;;;;39480:13;;;::::1;::::0;39465:45:::1;::::0;:63;;;;;39383::::1;::::0;39465;;;;;;;39480:13:::1;::::0;39465:63;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;38937:607:0::1;-1:-1:-1::0;;22304:1:0;23265:7;:22;-1:-1:-1;;;;;;;;;36228:3334:0:o;28623:25::-;;;-1:-1:-1;;;28623:25:0;;;;;:::o;31561:121::-;22348:1;22953:7;;:19;;22945:63;;;;;-1:-1:-1;;;22945:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22945:63:0;;;;;;;;;;;;;;;22348:1;23086:7;:18;31655:3:::1;::::0;31631:43:::1;::::0;31643:10:::1;::::0;-1:-1:-1;;;;;31655:3:0::1;31660:7:::0;31655:3;31631:11:::1;:43::i;28766:18::-:0;;;-1:-1:-1;;;;;28766:18:0;;:::o;28657:19::-;;;-1:-1:-1;;;;;28657:19:0;;:::o;29077:24::-;;;-1:-1:-1;;;;;29077:24:0;;:::o;31295:123::-;22348:1;22953:7;;:19;;22945:63;;;;;-1:-1:-1;;;22945:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22945:63:0;;;;;;;;;;;;;;;22348:1;23086:7;:18;31397:3:::1;::::0;31363:47:::1;::::0;31373:10:::1;::::0;;;-1:-1:-1;;;;;31397:3:0::1;31402:7:::0;31363:9:::1;:47::i;35113:392::-:0;22348:1;22953:7;;:19;;22945:63;;;;;-1:-1:-1;;;22945:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22945:63:0;;;;;;;;;;;;;;;22348:1;23086:7;:18;;;35219:13:::1;::::0;35204:63:::1;::::0;;-1:-1:-1;;;35204:63:0;;35181:10:::1;35204:63;::::0;::::1;::::0;;;;;;;;;;;35181:10;;-1:-1:-1;;;;;35219:13:0;;::::1;::::0;35204:45:::1;::::0;:63;;;;;::::1;::::0;;;;;;;;;;;35219:13;35204:63;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;35293:13:0::1;::::0;35278:63:::1;::::0;;-1:-1:-1;;;35278:63:0;;-1:-1:-1;;;;;35278:63:0;;::::1;;::::0;::::1;::::0;;;;;;;;;35293:13;;;::::1;::::0;35278:45:::1;::::0;:63;;;;;35204::::1;::::0;35278;;;;;;;35293:13:::1;::::0;35278:63;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;35369:16:0::1;::::0;35354:66:::1;::::0;;-1:-1:-1;;;35354:66:0;;-1:-1:-1;;;;;35354:66:0;;::::1;;::::0;::::1;::::0;;;;;;;;;35369:16;;;::::1;::::0;35354:48:::1;::::0;:66;;;;;35278:63:::1;::::0;35354:66;;;;;;;35369:16:::1;::::0;35354:66;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;35446:16:0::1;::::0;35431:66:::1;::::0;;-1:-1:-1;;;35431:66:0;;-1:-1:-1;;;;;35431:66:0;;::::1;;::::0;::::1;::::0;;;;;;;;;35446:16;;;::::1;::::0;35431:48:::1;::::0;:66;;;;;35354::::1;::::0;35431;;;;;;;35446:16:::1;::::0;35431:66;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;22304:1:0;23265:7;:22;-1:-1:-1;35113:392:0:o;34245:860::-;34406:7;22348:1;22953:7;;:19;;22945:63;;;;;-1:-1:-1;;;22945:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22945:63:0;;;;;;;;;;;;;;;22348:1;23086:7;:18;34434:14;34426:59:::1;;;::::0;;-1:-1:-1;;;34426:59:0;;::::1;;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;;;;;;;34426:59:0;;;;;;;;;;;;;::::1;;34552:16;::::0;34597:13:::1;::::0;34537:95:::1;::::0;;-1:-1:-1;;;34537:95:0;;34516:10:::1;34537:95;::::0;::::1;::::0;;;-1:-1:-1;;;;;34597:13:0;;::::1;34537:95:::0;;;;;;;;;;;;;;;;;;34516:10;;34552:16;;;::::1;::::0;34537:50:::1;::::0;:95;;;;;34498:15:::1;::::0;34537:95;;;;;;;34498:15;34552:16;34537:95;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;34658:13:0::1;::::0;34700:3:::1;::::0;34643:82:::1;::::0;;-1:-1:-1;;;34643:82:0;;-1:-1:-1;;;;;34643:82:0;;::::1;;::::0;::::1;::::0;;;34700:3;;::::1;34643:82:::0;;;;;;;;;;;;;;;;;;;34658:13;;;::::1;::::0;-1:-1:-1;34643:47:0::1;::::0;-1:-1:-1;34643:82:0;;;;;34658:13:::1;::::0;34643:82;;;;;;;34658:13;;34643:82;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;34768:10:0::1;::::0;34842:4:::1;::::0;34756:176:::1;::::0;;-1:-1:-1;;;34756:176:0;;-1:-1:-1;;;;;34756:176:0;;::::1;;::::0;::::1;::::0;34842:4;;::::1;34756:176:::0;;;;;;;;;;;;;;;;34916:4:::1;34756:176:::0;;;;;;34736:17:::1;::::0;-1:-1:-1;34768:10:0;;;::::1;::::0;-1:-1:-1;34756:49:0::1;::::0;:176;;;;;::::1;::::0;;;;;;;;;34736:17;34768:10;34756:176;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;34756:176:0;34951:4:::1;::::0;34945:31:::1;::::0;;-1:-1:-1;;;34945:31:0;;::::1;::::0;::::1;::::0;;;;;34756:176;;-1:-1:-1;;;;;;34951:4:0;;::::1;::::0;34945:20:::1;::::0;:31;;;;;34951:4:::1;::::0;34945:31;;;;;;;;34951:4;;34945:31;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;34989:30:0::1;::::0;-1:-1:-1;;;;;;;;34989:19:0;::::1;35009:9:::0;34989:19:::1;:30::i;:::-;35037:31;::::0;;-1:-1:-1;;;;;35037:31:0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;;;;;;;;;;;35037:31:0;;;;;;;;;::::1;22304:1:::0;23265:7;:22;35088:9;34245:860;-1:-1:-1;;;;;34245:860:0:o;33446:791::-;33624:7;22348:1;22953:7;;:19;;22945:63;;;;;-1:-1:-1;;;22945:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22945:63:0;;;;;;;;;;;;;;;22348:1;23086:7;:18;33652:14;33644:59:::1;;;::::0;;-1:-1:-1;;;33644:59:0;;::::1;;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;;;;;;;33644:59:0;;;;;;;;;;;;;::::1;;33770:16;::::0;33815:13:::1;::::0;33755:95:::1;::::0;;-1:-1:-1;;;33755:95:0;;33734:10:::1;33755:95;::::0;::::1;::::0;;;-1:-1:-1;;;;;33815:13:0;;::::1;33755:95:::0;;;;;;;;;;;;;;;;;;33734:10;;33770:16;;;::::1;::::0;33755:50:::1;::::0;:95;;;;;33716:15:::1;::::0;33755:95;;;;;;;33716:15;33770:16;33755:95;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;33876:13:0::1;::::0;33918:3:::1;::::0;33861:82:::1;::::0;;-1:-1:-1;;;33861:82:0;;-1:-1:-1;;;;;33861:82:0;;::::1;;::::0;::::1;::::0;;;33918:3;;::::1;33861:82:::0;;;;;;;;;;;;;;;;;;;33876:13;;;::::1;::::0;-1:-1:-1;33861:47:0::1;::::0;-1:-1:-1;33861:82:0;;;;;33876:13:::1;::::0;33861:82;;;;;;;33876:13;;33861:82;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;33986:10:0::1;::::0;33974:177:::1;::::0;;-1:-1:-1;;;33974:177:0;;-1:-1:-1;;;;;33974:177:0;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;;;;;;;;;;;::::1;::::0;;;;;;33954:17:::1;::::0;-1:-1:-1;33986:10:0;;;::::1;::::0;-1:-1:-1;33974:49:0::1;::::0;:177;;;;;::::1;::::0;;;;;;;;;33954:17;33986:10;33974:177;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;33974:177:0;34169:31:::1;::::0;;-1:-1:-1;;;;;34169:31:0;::::1;::::0;;33974:177:::1;34169:31:::0;::::1;::::0;;;;;33974:177;;-1:-1:-1;;;;;;;;;;;;34169:31:0;;;;;;;;;::::1;22304:1:::0;23265:7;:22;34220:9;33446:791;-1:-1:-1;;;;;;33446:791:0:o;40170:2254::-;22348:1;22953:7;;:19;;22945:63;;;;;-1:-1:-1;;;22945:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22945:63:0;;;;;;;;;;;;;;;22348:1;23086:7;:18;40259:9:::1;::::0;40252:36:::1;::::0;;-1:-1:-1;;;40252:36:0;;-1:-1:-1;;;;;40252:36:0;;::::1;;::::0;::::1;::::0;;;40259:9;;;::::1;::::0;40252:27:::1;::::0;:36;;;;;::::1;::::0;;;;;;;;40259:9;40252:36;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;40252:36:0;:41;40244:92:::1;;;;-1:-1:-1::0;;;40244:92:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40362:9;::::0;40355:36:::1;::::0;;-1:-1:-1;;;40355:36:0;;-1:-1:-1;;;;;40355:36:0;;::::1;;::::0;::::1;::::0;;;40362:9;;;::::1;::::0;40355:27:::1;::::0;:36;;;;;::::1;::::0;;;;;;;;40362:9;40355:36;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;40355:36:0;:41;40347:92:::1;;;;-1:-1:-1::0;;;40347:92:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;40500:25:0;;::::1;40452:16;40500:25:::0;;;:16:::1;:25;::::0;;;;;40471:10:::1;::::0;40500:25:::1;:37:::0;::::1;40492:86;;;;-1:-1:-1::0;;;40492:86:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;40596:25:0;::::1;;::::0;;;:16:::1;:25;::::0;;;;40589:32;;-1:-1:-1;;;;;;40589:32:0::1;::::0;;40634:27:::1;40652:8:::0;40634:17:::1;:27::i;:::-;40672:18;40682:7;40672:9;:18::i;:::-;40738:16;::::0;40781:3:::1;::::0;40723:62:::1;::::0;;-1:-1:-1;;;40723:62:0;;-1:-1:-1;;;;;40723:62:0;;::::1;;::::0;::::1;::::0;40781:3;;::::1;40723:62:::0;;;;;;40703:17:::1;::::0;40738:16;;;::::1;::::0;40723:48:::1;::::0;:62;;;;;::::1;::::0;;;;;;;;;40738:16;40723:62;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;40723:62:0;;-1:-1:-1;40800:13:0;;40796:148:::1;;40851:3;::::0;40830:43:::1;::::0;40842:7;;-1:-1:-1;;;;;40851:3:0::1;40856:9:::0;40851:3:::1;40830:11;:43::i;:::-;40917:3;::::0;40888:44:::1;::::0;40898:7;;40907:8;;-1:-1:-1;;;;;40917:3:0::1;40922:9:::0;40888::::1;:44::i;:::-;40993:16;::::0;41036:5:::1;::::0;;40978:64:::1;::::0;;-1:-1:-1;;;40978:64:0;;-1:-1:-1;;;;;40978:64:0;;::::1;::::0;;::::1;::::0;;;;41036:5;;::::1;40978:64:::0;;;;;40956:19:::1;::::0;40993:16;;;::::1;::::0;40978:48:::1;::::0;:64;;;;;::::1;::::0;;;;;;;;;40993:16;40978:64;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;40978:64:0;;-1:-1:-1;41057:15:0;;41053:158:::1;;41110:5;::::0;41089:47:::1;::::0;41101:7;;-1:-1:-1;;;;;41110:5:0::1;41117:11:::0;41110:5:::1;41089:11;:47::i;:::-;41180:5;::::0;41151:48:::1;::::0;41161:7;;41170:8;;-1:-1:-1;;;;;41180:5:0::1;41187:11:::0;41151:9:::1;:48::i;:::-;41260:13;::::0;41300:5:::1;::::0;41245:61:::1;::::0;;-1:-1:-1;;;41245:61:0;;-1:-1:-1;;;;;41245:61:0;;::::1;;::::0;::::1;::::0;41300:5;;::::1;41245:61:::0;;;;;;41223:19:::1;::::0;41260:13;;;::::1;::::0;41245:45:::1;::::0;:61;;;;;::::1;::::0;;;;;;;;;41260:13;41245:61;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;41245:61:0;;-1:-1:-1;41321:15:0;;41317:232:::1;;41368:13;::::0;41410:5:::1;::::0;41353:85:::1;::::0;;-1:-1:-1;;;41353:85:0;;-1:-1:-1;;;;;41353:85:0;;::::1;;::::0;::::1;::::0;;;41410:5;;::::1;41353:85:::0;;;;;;;;;;;;;;;;;;;41368:13;;;::::1;::::0;41353:47:::1;::::0;:85;;;;;41368:13:::1;::::0;41353:85;;;;;;;41368:13;;41353:85;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;41468:13:0::1;::::0;41518:5:::1;::::0;41453:84:::1;::::0;;-1:-1:-1;;;41453:84:0;;-1:-1:-1;;;;;41453:84:0;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;41518:5;;::::1;41453:84:::0;;;;;;;;;;;;41468:13;;;::::1;::::0;-1:-1:-1;41453:45:0::1;::::0;-1:-1:-1;41453:84:0;;;;;41468:13:::1;::::0;41453:84;;;;;;;41468:13;;41453:84;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;41317:232;41561:20;41591:5;;;;;;;;;-1:-1:-1::0;;;;;41591:5:0::1;-1:-1:-1::0;;;;;41584:23:0::1;;41608:7;41584:32;;;;;;;;;;;;;-1:-1:-1::0;;;;;41584:32:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;41584:32:0;;-1:-1:-1;41631:16:0;;41627:108:::1;;41671:5;::::0;;41664:59:::1;::::0;;-1:-1:-1;;;41664:59:0;;-1:-1:-1;;;;;41664:59:0;;::::1;::::0;;::::1;::::0;;;;;;::::1;::::0;;;;;;;;;;;;41671:5;;;::::1;::::0;41664:26:::1;::::0;:59;;;;;::::1;::::0;;;;;;;;;41671:5:::1;::::0;41664:59;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;41627:108:0::1;41782:13;::::0;41822:3:::1;::::0;41767:59:::1;::::0;;-1:-1:-1;;;41767:59:0;;-1:-1:-1;;;;;41767:59:0;;::::1;;::::0;::::1;::::0;41822:3;;::::1;41767:59:::0;;;;;;41747:17:::1;::::0;41782:13;;;::::1;::::0;41767:45:::1;::::0;:59;;;;;::::1;::::0;;;;;;;;;41782:13;41767:59;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;41767:59:0;;-1:-1:-1;41841:13:0;;41837:442:::1;;41886:16;::::0;41931:13:::1;::::0;41871:94:::1;::::0;;-1:-1:-1;;;41871:94:0;;-1:-1:-1;;;;;41871:94:0;;::::1;;::::0;::::1;::::0;;;41931:13;;::::1;41871:94:::0;;;;;;;;;;;;;;;;;;;41886:16;;;::::1;::::0;41871:50:::1;::::0;:94;;;;;41886:16:::1;::::0;41871:94;;;;;;;41886:16;;41871:94;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;41995:13:0::1;::::0;42037:3:::1;::::0;41980:81:::1;::::0;;-1:-1:-1;;;41980:81:0;;-1:-1:-1;;;;;41980:81:0;;::::1;;::::0;::::1;::::0;;;42037:3;;::::1;41980:81:::0;;;;;;;;;;;;;;;;;;;41995:13;;;::::1;::::0;-1:-1:-1;41980:47:0::1;::::0;-1:-1:-1;41980:81:0;;;;;41995:13:::1;::::0;41980:81;;;;;;;41995:13;;41980:81;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;42093:13:0::1;::::0;42143:3:::1;::::0;42078:80:::1;::::0;;-1:-1:-1;;;42078:80:0;;-1:-1:-1;;;;;42078:80:0;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;42143:3;;::::1;42078:80:::0;;;;;;;;;;;;42093:13;;;::::1;::::0;-1:-1:-1;42078:45:0::1;::::0;-1:-1:-1;42078:80:0;;;;;42093:13:::1;::::0;42078:80;;;;;;;42093:13;;42078:80;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;42188:16:0::1;::::0;42242:13:::1;::::0;42173:94:::1;::::0;;-1:-1:-1;;;42173:94:0;;-1:-1:-1;;;;;42173:94:0;;::::1;;::::0;::::1;::::0;;;;;;;42242:13;;::::1;42173:94:::0;;;;;;;;;;;;42188:16;;;::::1;::::0;-1:-1:-1;42173:48:0::1;::::0;-1:-1:-1;42173:94:0;;;;;42188:16:::1;::::0;42173:94;;;;;;;42188:16;;42173:94;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;41837:442;42299:9;::::0;42291:57:::1;::::0;;-1:-1:-1;;;42291:57:0;;-1:-1:-1;;;;;42291:57:0;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;;;42299:9;;;::::1;::::0;42291:38:::1;::::0;:57;;;;;42299:9:::1;::::0;42291:57;;;;;;;42299:9;;42291:57;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;42367:9:0::1;::::0;42359:57:::1;::::0;;-1:-1:-1;;;42359:57:0;;-1:-1:-1;;;;;42359:57:0;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;;;42367:9;;;::::1;::::0;-1:-1:-1;42359:38:0::1;::::0;-1:-1:-1;42359:57:0;;;;;42367:9:::1;::::0;42359:57;;;;;;;42367:9;;42359:57;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;31426:127:::0;22348:1;22953:7;;:19;;22945:63;;;;;-1:-1:-1;;;22945:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22945:63:0;;;;;;;;;;;;;;;22348:1;23086:7;:18;31530:5:::1;::::0;31496:49:::1;::::0;31506:10:::1;::::0;;;-1:-1:-1;;;;;31530:5:0::1;31537:7:::0;31496:9:::1;:49::i;28737:20::-:0;;;-1:-1:-1;;;;;28737:20:0;;:::o;28900:28::-;;;-1:-1:-1;;;;;28900:28:0;;:::o;28685:18::-;;;-1:-1:-1;;;;;28685:18:0;;:::o;32608:830::-;32710:7;22348:1;22953:7;;:19;;22945:63;;;;;-1:-1:-1;;;22945:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22945:63:0;;;;;;;;;;;;;;;22348:1;23086:7;:18;32738:9:::1;32730:57;;;::::0;;-1:-1:-1;;;32730:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;32806:4;;;;;;;;;-1:-1:-1::0;;;;;32806:4:0::1;-1:-1:-1::0;;;;;32800:19:0::1;;32827:9;32800:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;32857:4:0::1;::::0;32871:10:::1;::::0;32850:43:::1;::::0;;-1:-1:-1;;;32850:43:0;;-1:-1:-1;;;;;32871:10:0;;::::1;32850:43;::::0;::::1;::::0;32883:9:::1;32850:43:::0;;;;;;32857:4;;;::::1;::::0;-1:-1:-1;32850:20:0::1;::::0;-1:-1:-1;32850:43:0;;;;;-1:-1:-1;32850:43:0::1;::::0;;;;;;32857:4:::1;::::0;32850:43;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;32977:10:0::1;::::0;33076:4:::1;::::0;32965:195:::1;::::0;;-1:-1:-1;;;32965:195:0;;33034:4:::1;32965:195;::::0;::::1;::::0;32924:10:::1;32965:195:::0;;;;;;-1:-1:-1;;;;;33076:4:0;;::::1;32965:195:::0;;;;33095:9:::1;32965:195:::0;;;;;;;;;;;;;;;;;;32924:10;;32906:15:::1;::::0;32977:10:::1;::::0;32965:46:::1;::::0;:195;;;;;32850:43:::1;::::0;32965:195;;;;;;;;32906:15;32977:10;32965:195;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;32965:195:0;33188:13:::1;::::0;33237:3:::1;::::0;33173:79:::1;::::0;;-1:-1:-1;;;33173:79:0;;-1:-1:-1;;;;;33173:79:0;;::::1;;::::0;::::1;::::0;;;;;;;33237:3;;::::1;33173:79:::0;;;;;;;;;;;;32965:195;;-1:-1:-1;33188:13:0;::::1;::::0;33173:45:::1;::::0;:79;;;;;33188:13:::1;::::0;33173:79;;;;;;;;33188:13;;33173:79;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;33278:16:0::1;::::0;33330:13:::1;::::0;33263:92:::1;::::0;;-1:-1:-1;;;33263:92:0;;-1:-1:-1;;;;;33263:92:0;;::::1;;::::0;::::1;::::0;;;;;;;33330:13;;::::1;33263:92:::0;;;;;;;;;;;;33278:16;;;::::1;::::0;-1:-1:-1;33263:48:0::1;::::0;-1:-1:-1;33263:92:0;;;;;33278:16:::1;::::0;33263:92;;;;;;;33278:16;;33263:92;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;33373:28:0::1;::::0;;-1:-1:-1;;;;;33373:28:0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;;;;;;;;;;;33373:28:0;-1:-1:-1;33373:28:0;;;;;;;;-1:-1:-1;33373:28:0::1;22304:1:::0;23265:7;:22;33421:9;32608:830;-1:-1:-1;;;;32608:830:0:o;29046:24::-;;;-1:-1:-1;;;;;29046:24:0;;:::o;31690:125::-;22348:1;22953:7;;:19;;22945:63;;;;;-1:-1:-1;;;22945:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22945:63:0;;;;;;;;;;;;;;;22348:1;23086:7;:18;31786:5:::1;::::0;31762:45:::1;::::0;31774:10:::1;::::0;-1:-1:-1;;;;;31786:5:0::1;31793:7:::0;31786:5;31762:11:::1;:45::i;29012:25::-:0;;;-1:-1:-1;;;;;29012:25:0;;:::o;28285:76::-;28228:3;;-1:-1:-1;;;;;28228:3:0;28214:10;:17;28206:51;;;;;-1:-1:-1;;;28206:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;28206:51:0;;;;;;;;;;;;;;;28343:3:::1;:10:::0;;-1:-1:-1;;;;;;28343:10:0::1;-1:-1:-1::0;;;;;28343:10:0;;;::::1;::::0;;;::::1;::::0;;28285:76::o;35768:240::-;22348:1;22953:7;;:19;;22945:63;;;;;-1:-1:-1;;;22945:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22945:63:0;;;;;;;;;;;;;;;22348:1;23086:7;:18;;;35878:13:::1;::::0;35863:63:::1;::::0;;-1:-1:-1;;;35863:63:0;;35840:10:::1;35863:63;::::0;::::1;::::0;;;;;;;;;;;35840:10;;-1:-1:-1;;;;;35878:13:0;;::::1;::::0;35863:45:::1;::::0;:63;;;;;::::1;::::0;;;;;;;;;;;35878:13;35863:63;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;35952:13:0::1;::::0;35937:63:::1;::::0;;-1:-1:-1;;;35937:63:0;;-1:-1:-1;;;;;35937:63:0;;::::1;;::::0;::::1;::::0;;;;;;;;;35952:13;;;::::1;::::0;35937:45:::1;::::0;:63;;;;;35863::::1;::::0;35937;;;;;;;35952:13:::1;::::0;35937:63;::::1;;::::0;::::1;;;;::::0;::::1;28937:31:::0;;;-1:-1:-1;;;;;28937:31:0;;:::o;28863:30::-;;;-1:-1:-1;;;;;28863:30:0;;:::o;28710:20::-;;;-1:-1:-1;;;;;28710:20:0;;:::o;29110:51::-;;;;;;;;;;;;-1:-1:-1;;;;;29110:51:0;;:::o;35513:247::-;22348:1;22953:7;;:19;;22945:63;;;;;-1:-1:-1;;;22945:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22945:63:0;;;;;;;;;;;;;;;22348:1;23086:7;:18;;;35624:16:::1;::::0;35609:66:::1;::::0;;-1:-1:-1;;;35609:66:0;;35586:10:::1;35609:66;::::0;::::1;::::0;;;;;;;;;;;35586:10;;-1:-1:-1;;;;;35624:16:0;;::::1;::::0;35609:48:::1;::::0;:66;;;;;::::1;::::0;;;;;;;;;;;35624:16;35609:66;::::1;;::::0;::::1;;;;::::0;::::1;39785:377:::0;22348:1;22953:7;;:19;;22945:63;;;;;-1:-1:-1;;;22945:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22945:63:0;;;;;;;;;;;;;;;22348:1;23086:7;:18;39876:9:::1;::::0;39869:39:::1;::::0;;-1:-1:-1;;;39869:39:0;;39897:10:::1;39869:39;::::0;::::1;::::0;;;-1:-1:-1;;;;;39876:9:0;;::::1;::::0;39869:27:::1;::::0;:39;;;;;::::1;::::0;;;;;;;;;39876:9;39869:39;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;39869:39:0;:44;39861:95:::1;;;;-1:-1:-1::0;;;39861:95:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39982:9;::::0;39975:39:::1;::::0;;-1:-1:-1;;;39975:39:0;;40003:10:::1;39975:39;::::0;::::1;::::0;;;-1:-1:-1;;;;;39982:9:0;;::::1;::::0;39975:27:::1;::::0;:39;;;;;::::1;::::0;;;;;;;;;39982:9;39975:39;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;39975:39:0;:44;39967:95:::1;;;;-1:-1:-1::0;;;39967:95:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40075:28;40093:9;40075:17;:28::i;:::-;40131:10;40114:28;::::0;;;:16:::1;:28;::::0;;;;:40;;-1:-1:-1;;;;;;40114:40:0::1;-1:-1:-1::0;;;;;40114:40:0;;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;23265:22:0;;39785:377::o;31823:777::-;31990:7;22348:1;22953:7;;:19;;22945:63;;;;;-1:-1:-1;;;22945:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22945:63:0;;;;;;;;;;;;;;;22348:1;23086:7;:18;32018:11;32010:53:::1;;;::::0;;-1:-1:-1;;;32010:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;32010:53:0;;;;;;;;;;;;;::::1;;32147:10;::::0;32135:189:::1;::::0;;-1:-1:-1;;;32135:189:0;;32094:10:::1;32135:189;::::0;::::1;::::0;;;;;;;;;-1:-1:-1;;;;;32135:189:0;;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;32094:10;;32076:15:::1;::::0;32147:10:::1;::::0;32135:46:::1;::::0;:189;;;;;::::1;::::0;;;;;;;;32076:15;32147:10;32135:189;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;32135:189:0;32350:13:::1;::::0;32399:3:::1;::::0;32335:79:::1;::::0;;-1:-1:-1;;;32335:79:0;;-1:-1:-1;;;;;32335:79:0;;::::1;;::::0;::::1;::::0;;;;;;;32399:3;;::::1;32335:79:::0;;;;;;;;;;;;32135:189;;-1:-1:-1;32350:13:0;::::1;::::0;32335:45:::1;::::0;:79;;;;;32350:13:::1;::::0;32335:79;;;;;;;;32350:13;;32335:79;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;32440:16:0::1;::::0;32492:13:::1;::::0;32425:92:::1;::::0;;-1:-1:-1;;;32425:92:0;;-1:-1:-1;;;;;32425:92:0;;::::1;;::::0;::::1;::::0;;;;;;;32492:13;;::::1;32425:92:::0;;;;;;;;;;;;32440:16;;;::::1;::::0;-1:-1:-1;32425:48:0::1;::::0;-1:-1:-1;32425:92:0;;;;;32440:16:::1;::::0;32425:92;;;;;;;32440:16;;32425:92;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;32535:28:0::1;::::0;;-1:-1:-1;;;;;32535:28:0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;;;;;;;;;;;32535:28:0;-1:-1:-1;32535:28:0;;;;;;;;-1:-1:-1;32535:28:0::1;22304:1:::0;23265:7;:22;32583:9;31823:777;-1:-1:-1;;;;;;31823:777:0:o;36016:82::-;22348:1;22953:7;;:19;;22945:63;;;;;-1:-1:-1;;;22945:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22945:63:0;;;;;;;;;;;;;;;22348:1;23086:7;:18;36069:21:::1;36079:10;36069:9;:21::i;:::-;22304:1:::0;23265:7;:22;36016:82::o;28825:31::-;;;-1:-1:-1;;;;;28825:31:0;;:::o;28975:28::-;;;-1:-1:-1;;;;;28975:28:0;;:::o;17302:211::-;17446:58;;;-1:-1:-1;;;;;17446:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17446:58:0;-1:-1:-1;;;17446:58:0;;;17419:86;;17439:5;;17419:19;:86::i;46165:583::-;46340:1;46330:7;:11;46322:53;;;;;-1:-1:-1;;;46322:53:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;46322:53:0;;;;;;;;;;;;;;;46403:16;;46388:92;;;-1:-1:-1;;;46388:92:0;;-1:-1:-1;;;;;46388:92:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46403:16;;;;;46388:48;;:92;;;;;46403:16;;46388:92;;;;;;;46403:16;;46388:92;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;46506:15:0;;46559:16;;46491:94;;;-1:-1:-1;;;46491:94:0;;-1:-1:-1;;;;;46491:94:0;;;;;;;;;;;;;46559:16;;;46491:94;;;;;;;;;;;;46506:15;;;;;-1:-1:-1;46491:47:0;;-1:-1:-1;46491:94:0;;;;;46506:15;;46491:94;;;;;;;46506:15;;46491:94;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;46611:13:0;;46662:15;;46596:91;;;-1:-1:-1;;;46596:91:0;;-1:-1:-1;;;;;46596:91:0;;;;;;;;;;;;;46662:15;;;46596:91;;;;;;;;;;;;46611:13;;;;;-1:-1:-1;46596:45:0;;-1:-1:-1;46596:91:0;;;;;46611:13;;46596:91;;;;;;;46611:13;;46596:91;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;46705:35:0;;;-1:-1:-1;;;;;46705:35:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46705:35:0;;;;;;;-1:-1:-1;46705:35:0;46165:583;;;;:::o;45249:119::-;45305:22;45318:8;45305:12;:22::i;:::-;45338;45351:8;45338:12;:22::i;:::-;45249:119;:::o;1015:181::-;1073:7;1105:5;;;1129:6;;;;1121:46;;;;;-1:-1:-1;;;1121:46:0;;;;;;;;;;;;-1:-1:-1;;;1121:46:0;;;;;;;;;;;;;;;1187:1;-1:-1:-1;1015:181:0;;;;;:::o;10543:395::-;10658:6;10633:21;:31;;10625:73;;;;;-1:-1:-1;;;10625:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10808:33;;10790:12;;-1:-1:-1;;;;;10808:14:0;;;10830:6;;10790:12;10808:33;10790:12;10808:33;10830:6;10808:14;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10789:52;;;10860:7;10852:78;;;;-1:-1:-1;;;10852:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46756:1391;46933:1;46923:7;:11;46915:53;;;;;-1:-1:-1;;;46915:53:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;46915:53:0;;;;;;;;;;;;;;;47014:16;;46999:56;;;-1:-1:-1;;;46999:56:0;;-1:-1:-1;;;;;46999:56:0;;;;;;;;;46981:15;;47014:16;;;;;46999:46;;:56;;;;;;;;;;;;;;;47014:16;46999:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46999:56:0;47083:13;;47126:15;;47068:93;;;-1:-1:-1;;;47068:93:0;;-1:-1:-1;;;;;47068:93:0;;;;;;;;;47126:15;;;47068:93;;;;;;;;;;;;;;;;;;;46999:56;;-1:-1:-1;47083:13:0;;;47068:47;;:93;;;;;47083:13;;47068:93;;;;;;;;47083:13;;47068:93;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;47187:15:0;;47232:16;;47172:96;;;-1:-1:-1;;;47172:96:0;;-1:-1:-1;;;;;47172:96:0;;;;;;;;;47232:16;;;47172:96;;;;;;;;;;;;;;;;;;;47187:15;;;;;-1:-1:-1;47172:49:0;;-1:-1:-1;47172:96:0;;;;;47187:15;;47172:96;;;;;;;47187:15;;47172:96;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;47294:16:0;;47279:87;;;-1:-1:-1;;;47279:87:0;;-1:-1:-1;;;;;47279:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;47294:16;;;;;-1:-1:-1;47279:50:0;;-1:-1:-1;47279:87:0;;;;;47294:16;;47279:87;;;;;;;47294:16;;47279:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47383:18;47379:706;;;47455:15;;47440:67;;;-1:-1:-1;;;47440:67:0;;-1:-1:-1;;;;;47440:67:0;;;;;;;;;;;;;;;47418:19;;47455:15;;;;;47440:47;;:67;;;;;;;;;;;;;;;47418:19;47455:15;47440:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47440:67:0;;-1:-1:-1;47526:15:0;;47522:141;;47577:13;;47628:5;;47562:85;;;-1:-1:-1;;;47562:85:0;;-1:-1:-1;;;;;47562:85:0;;;;;;;;;;;;;47628:5;;;47562:85;;;;;;;;;;;;47577:13;;;;;47562:45;;:85;;;;;47577:13;;47562:85;;;;;;;47577:13;;47562:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47522:141;47716:13;;47757:5;;47701:62;;;-1:-1:-1;;;47701:62:0;;-1:-1:-1;;;;;47701:62:0;;;;;;;47757:5;;;47701:62;;;;;;47679:19;;47716:13;;;;;47701:45;;:62;;;;;;;;;;;;;;;47716:13;47701:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47701:62:0;;-1:-1:-1;47782:15:0;;47778:296;;47818:23;47844:37;47873:7;47844:24;:11;47860:7;47844:15;:24::i;:::-;:28;;:37::i;:::-;47915:13;;47958:5;;47900:91;;;-1:-1:-1;;;47900:91:0;;-1:-1:-1;;;;;47900:91:0;;;;;;;;;47958:5;;;47900:91;;;;;;;;;;;;;;;;;;;47818:63;;-1:-1:-1;47915:13:0;;;47900:47;;:91;;;;;47915:13;;47900:91;;;;;;;;47915:13;;47900:91;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;48020:5:0;;48010:48;;;-1:-1:-1;;;48010:48:0;;-1:-1:-1;;;;;48010:48:0;;;;;;;;;;;;;;;48020:5;;;;;-1:-1:-1;48010:21:0;;-1:-1:-1;48010:48:0;;;;;48020:5;;48010:48;;;;;;;48020:5;;48010:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47778:296;;47379:706;;;48102:37;;;-1:-1:-1;;;;;48102:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;46756:1391;;;;;:::o;42432:2809::-;42539:16;;42524:64;;;-1:-1:-1;;;42524:64:0;;-1:-1:-1;;;;;42524:64:0;;;;;;;;;42539:16;;;;;42524:53;;:64;;;;;;;;;;;;;;42539:16;42524:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42524:64:0;:69;42502:174;;;;-1:-1:-1;;;42502:174:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42724:16;;42709:61;;;-1:-1:-1;;;42709:61:0;;-1:-1:-1;;;;;42709:61:0;;;;;;;;;42724:16;;;;;42709:50;;:61;;;;;;;;;;;;;;42724:16;42709:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42709:61:0;:66;42687:168;;;;-1:-1:-1;;;42687:168:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42905:15;;42890:63;;;-1:-1:-1;;;42890:63:0;;-1:-1:-1;;;;;42890:63:0;;;;;;;;;42905:15;;;;;42890:52;;:63;;;;;;;;;;;;;;42905:15;42890:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42890:63:0;:68;42868:172;;;;-1:-1:-1;;;42868:172:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43088:15;;43073:60;;;-1:-1:-1;;;43073:60:0;;-1:-1:-1;;;;;43073:60:0;;;;;;;;;43088:15;;;;;43073:49;;:60;;;;;;;;;;;;;;43088:15;43073:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43073:60:0;:65;43051:166;;;;-1:-1:-1;;;43051:166:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43267:13;;43252:61;;;-1:-1:-1;;;43252:61:0;;-1:-1:-1;;;;;43252:61:0;;;;;;;;;43267:13;;;;;43252:50;;:61;;;;;;;;;;;;;;43267:13;43252:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43252:61:0;:66;43230:168;;;;-1:-1:-1;;;43230:168:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43446:13;;43431:58;;;-1:-1:-1;;;43431:58:0;;-1:-1:-1;;;;;43431:58:0;;;;;;;;;43446:13;;;;;43431:47;;:58;;;;;;;;;;;;;;43446:13;43431:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43431:58:0;:63;43409:162;;;;-1:-1:-1;;;43409:162:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43614:9;;43606:61;;;-1:-1:-1;;;43606:61:0;;-1:-1:-1;;;;;43606:61:0;;;;;;;;;43614:9;;;;;43606:50;;:61;;;;;;;;;;;;;;43614:9;43606:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43606:61:0;:66;43584:175;;;;-1:-1:-1;;;43584:175:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43802:9;;43794:58;;;-1:-1:-1;;;43794:58:0;;-1:-1:-1;;;;;43794:58:0;;;;;;;;;43802:9;;;;;43794:47;;:58;;;;;;;;;;;;;;43802:9;43794:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43794:58:0;:63;43772:169;;;;-1:-1:-1;;;43772:169:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43989:16;;43974:64;;;-1:-1:-1;;;43974:64:0;;-1:-1:-1;;;;;43974:64:0;;;;;;;;;43989:16;;;;;43974:53;;:64;;;;;;;;;;;;;;43989:16;43974:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43974:64:0;:69;43952:174;;;;-1:-1:-1;;;43952:174:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44174:16;;44159:61;;;-1:-1:-1;;;44159:61:0;;-1:-1:-1;;;;;44159:61:0;;;;;;;;;44174:16;;;;;44159:50;;:61;;;;;;;;;;;;;;44174:16;44159:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44159:61:0;:66;44137:168;;;;-1:-1:-1;;;44137:168:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44355:13;;44340:61;;;-1:-1:-1;;;44340:61:0;;-1:-1:-1;;;;;44340:61:0;;;;;;;;;44355:13;;;;;44340:50;;:61;;;;;;;;;;;;;;44355:13;44340:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44340:61:0;:66;44318:168;;;;-1:-1:-1;;;44318:168:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44534:13;;44519:58;;;-1:-1:-1;;;44519:58:0;;-1:-1:-1;;;;;44519:58:0;;;;;;;;;44534:13;;;;;44519:47;;:58;;;;;;;;;;;;;;44534:13;44519:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44519:58:0;:63;44497:162;;;;-1:-1:-1;;;44497:162:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44702:9;;44694:61;;;-1:-1:-1;;;44694:61:0;;-1:-1:-1;;;;;44694:61:0;;;;;;;;;44702:9;;;;;44694:50;;:61;;;;;;;;;;;;;;44702:9;44694:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44694:61:0;:66;44672:175;;;;-1:-1:-1;;;44672:175:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44888:9;;44880:58;;;-1:-1:-1;;;44880:58:0;;-1:-1:-1;;;;;44880:58:0;;;;;;;;;44888:9;;;;;44880:47;;:58;;;;;;;;;;;;;;44888:9;44880:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44880:58:0;:63;44858:169;;;;-1:-1:-1;;;44858:169:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45055:9;;45048:38;;;-1:-1:-1;;;45048:38:0;;-1:-1:-1;;;;;45048:38:0;;;;;;;;;45055:9;;;;;45048:27;;:38;;;;;;;;;;;;;;45055:9;45048:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45048:38:0;:43;45040:91;;;;-1:-1:-1;;;45040:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45157:9;;45150:38;;;-1:-1:-1;;;45150:38:0;;-1:-1:-1;;;;;45150:38:0;;;;;;;;;45157:9;;;;;45150:27;;:38;;;;;;;;;;;;;;45157:9;45150:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45150:38:0;:43;45142:91;;;;-1:-1:-1;;;45142:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19837:774;20261:23;20287:69;20315:4;20287:69;;;;;;;;;;;;;;;;;20295:5;-1:-1:-1;;;;;20287:27:0;;;:69;;;;;:::i;:::-;20371:17;;20261:95;;-1:-1:-1;20371:21:0;20367:237;;20526:10;20515:30;;;;;;;;;;;;;;;-1:-1:-1;20515:30:0;20507:85;;;;-1:-1:-1;;;20507:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45376:509;45472:16;;45457:68;;;-1:-1:-1;;;45457:68:0;;-1:-1:-1;;;;;45457:68:0;;;;;;;;;;;;;;;45435:19;;45472:16;;;;;45457:48;;:68;;;;;;;;;;;;;;;45435:19;45472:16;45457:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45457:68:0;;-1:-1:-1;45540:15:0;;45536:97;;45602:5;;45572:49;;45582:8;;;;-1:-1:-1;;;;;45602:5:0;45609:11;45572:9;:49::i;:::-;45682:15;;45667:67;;;-1:-1:-1;;;45667:67:0;;-1:-1:-1;;;;;45667:67:0;;;;;;;;;;;;;;;45645:19;;45682:15;;;;;45667:47;;:67;;;;;;;;;;;;;;;45645:19;45682:15;45667:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45667:67:0;;-1:-1:-1;45749:15:0;;45745:133;;45796:13;;45847:5;;45781:85;;;-1:-1:-1;;;45781:85:0;;-1:-1:-1;;;;;45781:85:0;;;;;;;;;;;;;45847:5;;;45781:85;;;;;;;;;;;;45796:13;;;;;45781:45;;:85;;;;;45796:13;;45781:85;;;;;;;45796:13;;45781:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45376:509;;;:::o;45893:264::-;45989:16;;45974:68;;;-1:-1:-1;;;45974:68:0;;-1:-1:-1;;;;;45974:68:0;;;;;;;;;;;;;;;45952:19;;45989:16;;;;;45974:48;;:68;;;;;;;;;;;;;;;45952:19;45989:16;45974:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45974:68:0;;-1:-1:-1;46057:15:0;;46053:97;;46119:5;;46089:49;;46099:8;;;;-1:-1:-1;;;;;46119:5:0;46126:11;46089:9;:49::i;:::-;45893:264;;:::o;2403:471::-;2461:7;2706:6;2702:47;;-1:-1:-1;2736:1:0;2729:8;;2702:47;2773:5;;;2777:1;2773;:5;:1;2797:5;;;;;:10;2789:56;;;;-1:-1:-1;;;2789:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3350:132;3408:7;3435:39;3439:1;3442;3435:39;;;;;;;;;;;;;-1:-1:-1;;;3435:39:0;;;:3;:39::i;12104:229::-;12241:12;12273:52;12295:6;12303:4;12309:1;12312:12;12273:21;:52::i;:::-;12266:59;;12104:229;;;;;;:::o;3978:312::-;4098:7;4133:12;4126:5;4118:28;;;;-1:-1:-1;;;4118:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4157:9;4173:1;4169;:5;;;;;;;3978:312;-1:-1:-1;;;;;3978:312:0:o;13224:571::-;13394:12;13452:5;13427:21;:30;;13419:81;;;;-1:-1:-1;;;13419:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13519:18;13530:6;13519:10;:18::i;:::-;13511:60;;;;;-1:-1:-1;;;13511:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13645:12;13659:23;13686:6;-1:-1:-1;;;;;13686:11:0;13705:5;13712:4;13686:31;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13686:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13644:73;;;;13735:52;13753:7;13762:10;13774:12;13735:17;:52::i;:::-;13728:59;13224:571;-1:-1:-1;;;;;;;13224:571:0:o;9164:444::-;9544:20;9592:8;;;9164:444::o;15873:777::-;16023:12;16052:7;16048:595;;;-1:-1:-1;16083:10:0;16076:17;;16048:595;16197:17;;:21;16193:439;;16460:10;16454:17;16521:15;16508:10;16504:2;16500:19;16493:44;16408:148;16596:20;;-1:-1:-1;;;16596:20:0;;;;;;;;;;;;;;;;;16603:12;;16596:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Metadata Hash
bca65db260041209710797aa3d03a6b874c75f3723bffc88322953f1b9567605
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.