BscScan - Sponsored slots available. Book your slot here!
Source Code
Latest 25 from a total of 294,196 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Transfer | 92419853 | 17 secs ago | IN | 0.00553 BNB | 0.00001906 | ||||
| Transfer | 92419843 | 21 secs ago | IN | 0 BNB | 0.0000835 | ||||
| Transfer | 92419803 | 39 secs ago | IN | 0 BNB | 0.00009676 | ||||
| Transfer | 92419801 | 40 secs ago | IN | 0.040161 BNB | 0.0000186 | ||||
| Transfer | 92419740 | 1 min ago | IN | 0.041955 BNB | 0.00002478 | ||||
| Transfer | 92419727 | 1 min ago | IN | 0.070771 BNB | 0.00001882 | ||||
| Transfer | 92419685 | 1 min ago | IN | 0 BNB | 0.00007239 | ||||
| Transfer | 92419660 | 1 min ago | IN | 0.050025 BNB | 0.00001832 | ||||
| Transfer | 92419645 | 1 min ago | IN | 0.060557 BNB | 0.00001884 | ||||
| Transfer | 92419604 | 2 mins ago | IN | 0.128988 BNB | 0.0000241 | ||||
| Transfer | 92419597 | 2 mins ago | IN | 0.174039 BNB | 0.00001884 | ||||
| Transfer | 92419578 | 2 mins ago | IN | 0.055067 BNB | 0.00001882 | ||||
| Transfer | 92419544 | 2 mins ago | IN | 0 BNB | 0.00007239 | ||||
| Transfer | 92419544 | 2 mins ago | IN | 0 BNB | 0.00003027 | ||||
| Transfer | 92419539 | 2 mins ago | IN | 0.013528 BNB | 0.00011625 | ||||
| Transfer | 92419507 | 2 mins ago | IN | 0 BNB | 0.00009709 | ||||
| Transfer | 92419495 | 2 mins ago | IN | 0 BNB | 0.00003575 | ||||
| Transfer | 92419461 | 3 mins ago | IN | 0.039521 BNB | 0.00001884 | ||||
| Transfer | 92419384 | 3 mins ago | IN | 0.000004 BNB | 0.00001832 | ||||
| Transfer | 92419358 | 4 mins ago | IN | 0.022992 BNB | 0.00001801 | ||||
| Transfer | 92419357 | 4 mins ago | IN | 0.134372 BNB | 0.00001884 | ||||
| Transfer | 92419350 | 4 mins ago | IN | 0.131735 BNB | 0.00001884 | ||||
| Transfer | 92419319 | 4 mins ago | IN | 0 BNB | 0.00004106 | ||||
| Transfer | 92419281 | 4 mins ago | IN | 0.085497 BNB | 0.0000186 | ||||
| Transfer | 92419243 | 4 mins ago | IN | 0 BNB | 0.00004203 |
Latest 25 internal transactions (View All)
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 92419877 | 6 secs ago | 0.069441 BNB | ||||
| 92419876 | 6 secs ago | 0.052656 BNB | ||||
| 92419853 | 17 secs ago | 0.00553 BNB | ||||
| 92419801 | 40 secs ago | 0.040161 BNB | ||||
| 92419740 | 1 min ago | 0.041955 BNB | ||||
| 92419727 | 1 min ago | 0.070771 BNB | ||||
| 92419660 | 1 min ago | 0.050025 BNB | ||||
| 92419645 | 1 min ago | 0.060557 BNB | ||||
| 92419604 | 2 mins ago | 0.128988 BNB | ||||
| 92419597 | 2 mins ago | 0.174039 BNB | ||||
| 92419578 | 2 mins ago | 0.055067 BNB | ||||
| 92419539 | 2 mins ago | 0.013528 BNB | ||||
| 92419461 | 3 mins ago | 0.039521 BNB | ||||
| 92419384 | 3 mins ago | 0.000004 BNB | ||||
| 92419358 | 4 mins ago | 0.022992 BNB | ||||
| 92419357 | 4 mins ago | 0.134372 BNB | ||||
| 92419350 | 4 mins ago | 0.131735 BNB | ||||
| 92419334 | 4 mins ago | 0.0051 BNB | ||||
| 92419334 | 4 mins ago | 0.0051 BNB | ||||
| 92419281 | 4 mins ago | 0.085497 BNB | ||||
| 92419170 | 5 mins ago | 0.02716 BNB | ||||
| 92419155 | 5 mins ago | 0.043128 BNB | ||||
| 92419059 | 6 mins ago | 0.049024 BNB | ||||
| 92418999 | 6 mins ago | 0.140147 BNB | ||||
| 92418960 | 6 mins ago | 0.020449 BNB |
Cross-Chain Transactions
Loading...
Loading
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0xb1FF7b52...014C262b2 The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
MintPool
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/**
*Submitted for verification at BscScan.com on 2025-10-30
*/
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;
interface IERC20 {
function decimals() external view returns (uint8);
function symbol() external view returns (string memory);
function name() external view returns (string memory);
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(
address recipient,
uint256 amount
) external returns (bool);
function allowance(
address owner,
address spender
) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(
address sender,
address recipient,
uint256 amount
) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
}
abstract contract Ownable {
address internal _owner;
event OwnershipTransferred(
address indexed previousOwner,
address indexed newOwner
);
constructor() {
address msgSender = msg.sender;
_owner = msgSender;
emit OwnershipTransferred(address(0), msgSender);
}
function owner() public view returns (address) {
return _owner;
}
modifier onlyOwner() {
require(_owner == msg.sender, "o");
_;
}
function transferOwnership(address newOwner) public virtual onlyOwner {
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
interface ISwapRouter {
function WETH() external pure returns (address);
function getAmountsOut(
uint amountIn,
address[] calldata path
) external view returns (uint[] memory amounts);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external payable;
function addLiquidity(
address tokenA,
address tokenB,
uint amountADesired,
uint amountBDesired,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB, uint liquidity);
}
interface IToken {
function tokenPrice() external view returns (uint256);
function refreshDayPrice() external;
function checkBurnLP() external;
function getTime() external view returns (uint256);
function getDay(uint256 ts) external pure returns (uint256);
function getToDay() external view returns (uint256);
function dayPrice(uint256 day) external pure returns (uint256);
function checkAddLP() external;
function mint(address to, uint256 amount) external;
}
interface IStakePool {
function payStake(address account) external payable;
}
contract EthReceiver {
address private immutable _stakePool;
constructor(address token) {
_stakePool = msg.sender;
IERC20(token).approve(_stakePool, ~uint256(0));
}
receive() external payable {
IStakePool(_stakePool).payStake{value: msg.value}(msg.sender);
}
}
abstract contract AbsPool is Ownable {
event LevelChange(
address indexed account,
uint256 indexed level,
uint256 oldLevel
);
event LargeChange(
address indexed invitor,
address indexed newLarge,
uint256 newAmount,
address oldLarge,
uint256 oldAmount
);
struct Record {
uint256 amount;
uint256 time;
uint256 category;
uint256 tag;
uint256 reward;
}
struct UserInfo {
uint256 mintAmount;
uint256 lastReleaseTime;
uint256 calReward;
uint256 claimedReward;
}
struct StakeConfig {
uint256 lockDays;
uint256 speedPerDay;
uint256 payRate;
address receiver;
}
struct StakeInfo {
uint256 amount;
uint256 startDay;
uint256 speedDays;
}
ISwapRouter private immutable _swapRouter;
address private immutable _usdt;
mapping(address => UserInfo) public _userInfo;
mapping(address => address) private _invitor;
mapping(address => address[]) public _binder;
uint256 private constant _dailyDuration = 1 days;
uint256 private constant _feeDivFactor = 10000;
address private immutable _token;
mapping(address => bool) public _active;
address private fundAddress;
mapping(uint256 => uint256) private _tokenLevelFee;
address private immutable _weth;
mapping(address => Record[]) private _joinRecords;
mapping(address => Record[]) private _claimRecords;
mapping(address => uint256) private _lastClaimIndex;
mapping(address => uint256) private _teamAmount;
mapping(address => uint256) private _userLevel;
mapping(uint256 => uint256) private _levelCondition;
uint256 private constant _maxLevel = 8;
mapping(uint256 => uint256) private _levelFee;
mapping(address => address) private _largeAddress;
mapping(address => address) private _large2Address;
mapping(address => uint256) private _supplyTeamAmount;
mapping(address => uint256) private _teamToken;
mapping(address => uint256) private _supplyTeamToken;
address private constant _ActiveShop = address(0x1);
mapping(address => uint256) private _shopFee;
uint256 private constant _maxShopFee = 5000;
uint256 private immutable _tokenUnit;
uint256 private constant _shopFeePowRate = 30000;
uint256 private immutable _bindCondition;
uint256 private constant _teamLen = 50;
StakeConfig[] private _stakeConfig;
mapping(address => uint256) private _configIndex;
mapping(address => mapping(uint256 => StakeInfo)) private _stakeInfo;
uint256 private constant _mintReleasePerDay = 10;
uint256 private constant _claimLockTimes = 12 hours;
address private immutable _open;
uint256 public totalMintAmount;
uint256 public mintedAmount;
constructor(
address RouterAddress,
address UsdtAddress,
address Token,
address FundAddress
) {
_usdt = UsdtAddress;
_token = Token;
_swapRouter = ISwapRouter(RouterAddress);
fundAddress = FundAddress;
_weth = _swapRouter.WETH();
_open = msg.sender;
uint256 usdtUnit = 10 ** IERC20(_usdt).decimals();
_levelCondition[1] = 5000 * usdtUnit;
_levelCondition[2] = 15000 * usdtUnit;
_levelCondition[3] = 50000 * usdtUnit;
_levelCondition[4] = 150000 * usdtUnit;
_levelCondition[5] = 500000 * usdtUnit;
_levelCondition[6] = 1500000 * usdtUnit;
_levelCondition[7] = 5000000 * usdtUnit;
_levelCondition[8] = 15000000 * usdtUnit;
_levelFee[1] = 1000;
_levelFee[2] = 2500;
_levelFee[3] = 4000;
_levelFee[4] = 5500;
_levelFee[5] = 7000;
_levelFee[6] = 8000;
_levelFee[7] = 9000;
_levelFee[8] = 10000;
IERC20(_usdt).approve(address(_swapRouter), ~uint256(0));
IERC20(_token).approve(address(_swapRouter), ~uint256(0));
_tokenLevelFee[1] = 300;
_tokenLevelFee[2] = 700;
_tokenLevelFee[3] = 1100;
_tokenLevelFee[4] = 1500;
_tokenLevelFee[5] = 1900;
_tokenLevelFee[6] = 2300;
_tokenLevelFee[7] = 2700;
_tokenLevelFee[8] = 3000;
_tokenUnit = 10 ** IERC20(_token).decimals();
_bindCondition = _tokenUnit / 1000;
address receiver = address(new EthReceiver(_token));
_stakeConfig.push(StakeConfig(0, 0, 0, receiver));
_configIndex[receiver] = 0;
receiver = address(new EthReceiver(_token));
_stakeConfig.push(StakeConfig(30, 100, 9500, receiver));
_configIndex[receiver] = 1;
receiver = address(new EthReceiver(_token));
_stakeConfig.push(StakeConfig(60, 105, 9200, receiver));
_configIndex[receiver] = 2;
receiver = address(new EthReceiver(_token));
_stakeConfig.push(StakeConfig(120, 110, 8900, receiver));
_configIndex[receiver] = 3;
receiver = address(new EthReceiver(_token));
_stakeConfig.push(StakeConfig(240, 115, 8700, receiver));
_configIndex[receiver] = 4;
receiver = address(new EthReceiver(_token));
_stakeConfig.push(StakeConfig(360, 120, 8500, receiver));
_configIndex[receiver] = 5;
receiver = address(new EthReceiver(_token));
_stakeConfig.push(StakeConfig(360, 120, 0, receiver));
_configIndex[receiver] = 6;
_nodeCondition = 10 * _tokenUnit;
}
function _updateLevel(address account, uint256 toDay) private {
uint256 level = _userLevel[account];
uint256 teamAmount = _teamAmount[account];
address largeAddress = _largeAddress[account];
uint256 smallTeamAmount = teamAmount - _supplyTeamAmount[largeAddress];
uint256 newLevel = level;
if (smallTeamAmount > _levelCondition[level]) {
if (_maxLevel == level) {
return;
}
for (uint256 i = level + 1; i <= _maxLevel; ++i) {
if (smallTeamAmount < _levelCondition[i]) {
break;
}
newLevel = i;
}
} else if (smallTeamAmount < _levelCondition[level]) {
for (uint256 i = level - 1; ; --i) {
newLevel = i;
if (smallTeamAmount >= _levelCondition[i]) {
break;
}
}
}
if (newLevel != level) {
emit LevelChange(account, newLevel, level);
_userLevel[account] = newLevel;
}
uint256 teamToken = _teamToken[account];
uint256 smallTeamToken = teamToken - _supplyTeamToken[largeAddress];
_updateNode(account, smallTeamToken, toDay);
}
function _speedByMintAmount(address account, uint256 amount) private {
address current = account;
address invitor;
uint256 lastLevel;
for (uint256 i = 0; i < _teamLen; ++i) {
invitor = _invitor[current];
if (address(0) == invitor) {
break;
}
uint256 level = _userLevel[invitor];
if (level > lastLevel) {
uint256 levelReward = (amount *
(_levelFee[level] - _levelFee[lastLevel])) / _feeDivFactor;
_speedMint(invitor, levelReward, 1, level);
if (level >= _maxLevel) {
break;
}
lastLevel = level;
}
current = invitor;
}
}
function _updateTeamAmount(
address account,
uint256 amount,
bool minus,
uint256 tokenAmount,
bool tokenMinus,
uint256 toDay
) private {
if (minus) {
_stakeUsdt[account] -= amount;
} else {
_stakeUsdt[account] += amount;
}
if (!tokenMinus) {
_stakeToken[account] += tokenAmount;
}
address invitor = _invitor[account];
if (address(0) != invitor) {
address current = account;
for (uint256 i = 0; i < _teamLen; ++i) {
invitor = _invitor[current];
if (address(0) == invitor) {
break;
}
uint256 supplyTeamAmount = _supplyTeamAmount[current];
if (minus) {
_teamAmount[invitor] -= amount;
supplyTeamAmount -= amount;
} else {
_teamAmount[invitor] += amount;
supplyTeamAmount += amount;
}
_supplyTeamAmount[current] = supplyTeamAmount;
uint256 supplyTeamToken = _supplyTeamToken[current];
if (tokenMinus) {
_teamToken[invitor] -= tokenAmount;
supplyTeamToken -= tokenAmount;
} else {
_teamToken[invitor] += tokenAmount;
supplyTeamToken += tokenAmount;
}
_supplyTeamToken[current] = supplyTeamToken;
address largeAddress = _largeAddress[invitor];
address large2Address = _large2Address[invitor];
if (current == largeAddress) {
if (minus) {
uint256 large2Amount = _supplyTeamAmount[large2Address];
if (supplyTeamAmount < large2Amount) {
_largeAddress[invitor] = large2Address;
emit LargeChange(
invitor,
large2Address,
large2Amount,
current,
supplyTeamAmount
);
_large2Address[invitor] = current;
}
}
} else if (supplyTeamAmount > _supplyTeamAmount[largeAddress]) {
emit LargeChange(
invitor,
current,
supplyTeamAmount,
largeAddress,
_supplyTeamAmount[largeAddress]
);
_largeAddress[invitor] = current;
_large2Address[invitor] = largeAddress;
} else if (
supplyTeamAmount > _supplyTeamAmount[large2Address]
) {
_large2Address[invitor] = current;
}
_updateLevel(invitor, toDay);
current = invitor;
}
}
}
function _joinMint(address account, uint256 tokenAmount) private {
uint256 mintAmount = (tokenAmount * _shopFeePowRate) / _feeDivFactor;
_addMintAmount(account, mintAmount, 0, tokenAmount);
}
function _addMintAmount(
address account,
uint256 mintAmount,
uint256 category,
uint256 tag
) private {
totalMintAmount += mintAmount;
uint256 nowTime = IToken(_token).getTime();
_calMintRelease(account, nowTime);
UserInfo storage userInfo = _userInfo[account];
userInfo.mintAmount += mintAmount;
_joinRecords[account].push(
Record({
amount: mintAmount,
tag: tag,
category: category,
time: nowTime,
reward: 0
})
);
}
function _speedByShopFeeAmount(address account, uint256 amount) private {
address current = account;
address invitor;
uint256 lastLevel;
for (uint256 i = 0; i < _teamLen; ++i) {
invitor = _invitor[current];
if (address(0) == invitor) {
break;
}
uint256 level = _userLevel[invitor];
if (level > lastLevel) {
uint256 levelReward = (amount *
(_tokenLevelFee[level] - _tokenLevelFee[lastLevel])) /
_feeDivFactor;
_speedMint(invitor, levelReward, 2, level);
if (level >= _maxLevel) {
break;
}
lastLevel = level;
}
current = invitor;
}
}
function getUsdtAmount(
uint256 tokenAmount
) private view returns (uint256 usdtAmount) {
uint256 tokenPrice = IToken(_token).tokenPrice();
usdtAmount = (tokenPrice * tokenAmount) / _tokenUnit;
}
function _safeTransfer(address token, address to, uint value) internal {
(bool success, ) = token.call(
abi.encodeWithSelector(0xa9059cbb, to, value)
);
require(success, "F");
}
function _safeTransferFrom(
address token,
address from,
address to,
uint value
) internal {
(bool success, bytes memory data) = token.call(
abi.encodeWithSelector(0x23b872dd, from, to, value)
);
require(
success && (data.length == 0 || abi.decode(data, (bool))),
"FF"
);
}
function addMintAmounts(
address[] calldata accounts,
uint256[] calldata amount
) public onlyOwner {
uint256 len = accounts.length;
for (uint256 i = 0; i < len; ++i) {
address account = accounts[i];
_addMintAmount(account, amount[i], 1, 0);
}
}
receive() external payable {
IToken(_token).refreshDayPrice();
address account = msg.sender;
if (tx.origin != account) {
return;
}
_calSelf(account);
uint256 ethAmount = msg.value;
if (0 == ethAmount) {
return;
}
uint256 nowTime = IToken(_token).getTime();
UserInfo storage userInfo = _userInfo[account];
uint256 reward = userInfo.calReward;
require(reward > 0, "0r");
address[] memory path = new address[](3);
path[0] = _weth;
path[1] = _usdt;
path[2] = _token;
uint256 tokenAmount = IERC20(_token).balanceOf(address(this));
_swapRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{
value: ethAmount
}(0, path, address(this), nowTime);
tokenAmount = IERC20(_token).balanceOf(address(this)) - tokenAmount;
_safeTransfer(_token, account, tokenAmount);
if (reward > tokenAmount) {
reward = tokenAmount;
}
userInfo.calReward -= reward;
userInfo.claimedReward += reward;
mintedAmount += reward;
_claimRecords[account].push(
Record({
amount: reward,
category: 0,
time: nowTime,
tag: 0,
reward: 0
})
);
IToken(_token).mint(address(this), reward);
}
function _calMintRelease(address account, uint256 nowTime) private {
UserInfo storage userInfo = _userInfo[account];
if (nowTime == userInfo.lastReleaseTime) {
return;
}
uint256 releaseReward = getReleaseMint(account);
userInfo.lastReleaseTime = nowTime;
if (releaseReward > 0) {
userInfo.calReward += releaseReward;
userInfo.mintAmount -= releaseReward;
_speedRecord[account].push(
Record({
amount: releaseReward,
tag: 0,
category: 0,
time: nowTime,
reward: 0
})
);
}
}
function getReleaseMint(address account) private view returns (uint256) {
UserInfo storage userInfo = _userInfo[account];
uint256 mintAmount = userInfo.mintAmount;
if (0 == mintAmount) {
return 0;
}
uint256 lastReleaseTime = userInfo.lastReleaseTime;
uint256 nowTime = IToken(_token).getTime();
if (nowTime <= lastReleaseTime) {
return 0;
}
uint256 releaseTimes = (nowTime - lastReleaseTime);
uint256 releaseAmount = (((mintAmount * _mintReleasePerDay) /
_feeDivFactor) * releaseTimes) / _dailyDuration;
if (releaseAmount > mintAmount) {
releaseAmount = mintAmount;
}
return releaseAmount;
}
function claimToken(
address token,
uint256 amount,
address to
) external onlyOwner {
_safeTransfer(token, to, amount);
}
function setLevelCondition(uint256 i, uint256 amount) external onlyOwner {
_levelCondition[i] = amount;
}
function _addUser(address account) private {
if (!_active[account]) {
_active[account] = true;
}
}
function _bindInvitor(address account, address invitor) private {
require(address(0) == _invitor[account], "b");
require(!_active[account], "a");
require(0 == _binder[account].length, "t");
if (
account == invitor || address(0) == account || address(0) == invitor
) {
return;
}
_invitor[account] = invitor;
_binder[invitor].push(account);
if (0 == _lastDayReward[invitor]) {
_lastDayReward[invitor] = IToken(_token).getToDay();
}
}
function binds(
address[] memory account,
address[] memory invitor
) public onlyOwner {
uint256 len = account.length;
for (uint256 i = 0; i < len; ++i) {
_bindInvitor(account[i], invitor[i]);
}
}
function getJoinRecords(
address account,
uint256 start,
uint256 length
) external view returns (Record[] memory) {
return _getRecords(_joinRecords[account], start, length);
}
function getClaimRecords(
address account,
uint256 start,
uint256 length
) external view returns (Record[] memory) {
return _getRecords(_claimRecords[account], start, length);
}
function getSpeedRecords(
address account,
uint256 start,
uint256 length
) external view returns (Record[] memory) {
return _getRecords(_speedRecord[account], start, length);
}
function getUnstakeRecords(
address account,
uint256 start,
uint256 length
) external view returns (Record[] memory) {
return _getRecords(_unstakeRecord[account], start, length);
}
function _getRecords(
Record[] storage tmpRecords,
uint256 start,
uint256 length
) private view returns (Record[] memory records) {
if (start > tmpRecords.length) {
start = tmpRecords.length;
}
if (0 == length || length > tmpRecords.length - start) {
length = tmpRecords.length - start;
}
records = new Record[](length);
uint256 index = 0;
for (uint256 i = start; i < start + length; ++i) {
records[index] = tmpRecords[i];
++index;
}
}
function onTokenTransfer(
address from,
address to,
uint256 amount
) external {
require(msg.sender == _token);
if (_bindCondition == amount) {
_bindInvitor(from, to);
return;
}
if (to == _ActiveShop) {
uint256 newFee = (amount * _feeDivFactor) / _tokenUnit;
if (newFee > _maxShopFee) {
newFee = _maxShopFee;
}
_shopFee[from] = newFee;
return;
}
if (0 == amount) {
if (from == to) {
_calSelf(from);
} else if (address(this) == to) {
_claimRecord(from);
} else {
uint256 stakeConfigIndex = _configIndex[to];
StakeConfig storage config = _stakeConfig[stakeConfigIndex];
if (to == config.receiver) {
if (0 == stakeConfigIndex) {
_claimUnstake(from);
}
}
}
return;
}
if (_stakeConfig[0].receiver == to) {
_stake(
from,
0,
amount,
getUsdtAmount(amount),
IToken(_token).getToDay()
);
return;
}
uint256 shopFee = _shopFee[to];
if (shopFee > 0) {
uint256 shopFeeAmount = (amount * shopFee) / _feeDivFactor;
_joinMint(from, shopFeeAmount);
_speedByShopFeeAmount(to, shopFeeAmount);
return;
}
}
function getShopFee(
address to,
uint256 amount
) public view returns (uint256) {
if (_bindCondition == amount) {
return 0;
}
return _shopFee[to];
}
mapping(uint256 => uint256) private dayPrice;
mapping(uint256 => uint256) private dayReleaseRate;
uint256 private _startDay;
uint256 private constant _dayMinReleaseRate = 70;
uint256 private constant _dayMaxReleaseRate = 110;
function setDayPrice(uint256 day, uint256 price) public {
require(msg.sender == _token);
if (0 == price) {
return;
}
if (dayPrice[day] > 0) {
return;
}
dayPrice[day] = price;
uint256 preDay = day - 1;
_updateDayStake(preDay, _totalStakeAmount);
if (0 == _startDay) {
_startDay = day;
dayReleaseRate[day + 1] = 90;
} else if (0 == dayReleaseRate[day]) {
uint256 prePrice = dayPrice[preDay];
uint256 preRate = dayReleaseRate[preDay];
if (price > prePrice) {
if (preRate > _dayMinReleaseRate) {
preRate -= 10;
}
} else if (price < prePrice) {
if (preRate < _dayMaxReleaseRate) {
preRate += 10;
}
}
dayReleaseRate[day] = preRate;
uint256 preDayNodeReward = _dayNodeReward[preDay];
if (preDayNodeReward > 0) {
_dayNodeReward[preDay] = 0;
_addNodeReward(preDay, preDayNodeReward);
}
}
}
mapping(address => Record[]) private _unstakeRecord;
mapping(address => uint256) private _stakeUsdt;
mapping(address => uint256) private _stakeToken;
mapping(address => uint256) private _lastUnstakeIndex;
function payStake(address account) external payable {
uint256 index = _configIndex[msg.sender];
require(tx.origin == account, "or");
StakeConfig storage config = _stakeConfig[index];
require(config.receiver == msg.sender);
uint256 nowTime = IToken(_token).getTime();
uint256 ethAmount = msg.value;
uint256 toDay = IToken(_token).getDay(nowTime);
if (0 == ethAmount) {
_stakeSpeed(account, index, toDay);
return;
}
address[] memory path;
uint256 tokenAmount;
uint256 stakeAmount;
uint256 usdtAmount;
if (0 == index) {
StakeInfo storage info = _stakeInfo[account][0];
stakeAmount = info.amount;
require(stakeAmount > 0, "st");
path = new address[](3);
path[0] = _weth;
path[1] = _usdt;
path[2] = _token;
tokenAmount = IERC20(_token).balanceOf(address(this));
_swapRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{
value: ethAmount
}(0, path, address(this), nowTime);
tokenAmount = IERC20(_token).balanceOf(address(this)) - tokenAmount;
_safeTransfer(_token, account, tokenAmount);
_stakeSpeed(account, 0, toDay);
require(info.startDay + info.speedDays >= toDay, "rw");
uint256 unstakeAmount = stakeAmount;
if (unstakeAmount > tokenAmount) {
unstakeAmount = tokenAmount;
}
_unstakeRecord[account].push(
Record({
amount: unstakeAmount,
category: 0,
time: nowTime,
tag: 0,
reward: 0
})
);
stakeAmount -= unstakeAmount;
info.amount = stakeAmount;
_stakeToken[account] -= unstakeAmount;
usdtAmount = getUsdtAmount(_stakeToken[account]);
uint256 stakeUsdt = _stakeUsdt[account];
if (stakeUsdt > usdtAmount) {
_updateTeamAmount(
account,
stakeUsdt - usdtAmount,
true,
unstakeAmount,
true,
toDay
);
} else {
_updateTeamAmount(
account,
usdtAmount - stakeUsdt,
false,
unstakeAmount,
true,
toDay
);
}
_totalStakeAmount -= unstakeAmount;
return;
}
stakeAmount =
(getEthBuyTokenAmount(ethAmount) * _feeDivFactor) /
config.payRate;
IToken(_token).mint(config.receiver, stakeAmount);
path = new address[](2);
path[0] = _weth;
path[1] = _usdt;
usdtAmount = IERC20(_usdt).balanceOf(address(this));
_swapRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{
value: ethAmount
}(0, path, address(this), nowTime);
usdtAmount = IERC20(_usdt).balanceOf(address(this)) - usdtAmount;
path[0] = _usdt;
path[1] = _token;
if (IToken(_token).tokenPrice() >= IToken(_token).dayPrice(toDay)) {
uint256 lpUsdt = usdtAmount / 2;
tokenAmount = IERC20(_token).balanceOf(address(this));
_swapRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(
lpUsdt,
0,
path,
address(this),
nowTime
);
tokenAmount = IERC20(_token).balanceOf(address(this)) - tokenAmount;
_swapRouter.addLiquidity(
_token,
_usdt,
tokenAmount,
lpUsdt,
0,
0,
address(0xdead),
block.timestamp + 600
);
} else {
_swapRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(
usdtAmount,
0,
path,
address(0xdead),
nowTime
);
}
_stake(account, index, stakeAmount, usdtAmount, toDay);
}
function addStakeAmounts(
address[] calldata accounts,
uint256[] calldata amount,
uint256[] calldata usdtAmount,
uint256 stakeIndex
) public onlyOwner {
IToken(_token).refreshDayPrice();
uint256 len = accounts.length;
StakeConfig storage config = _stakeConfig[stakeIndex];
uint256 toDay = IToken(_token).getToDay();
for (uint256 i = 0; i < len; ++i) {
address account = accounts[i];
IToken(_token).mint(config.receiver, amount[i]);
_stake(account, stakeIndex, amount[i], usdtAmount[i], toDay);
}
}
function _stake(
address account,
uint256 index,
uint256 tokenAmount,
uint256 usdtAmount,
uint256 toDay
) private {
_stakeSpeed(account, index, toDay);
_addUser(account);
StakeInfo storage info = _stakeInfo[account][index];
if (0 == index) {
require(
0 == info.startDay || info.startDay + info.speedDays >= toDay,
"rw"
);
}
info.startDay = toDay;
info.speedDays = 0;
info.amount += tokenAmount;
if (usdtAmount > 0) {
_updateTeamAmount(
account,
usdtAmount,
false,
tokenAmount,
false,
toDay
);
_totalStakeAmount += tokenAmount;
}
}
function _stakeSpeed(
address account,
uint256 index,
uint256 toDay
) private {
StakeInfo storage info = _stakeInfo[account][index];
uint256 tokenAmount = info.amount;
if (0 == tokenAmount) {
return;
}
uint256 startDay = info.startDay;
if (0 == startDay || startDay == toDay) {
return;
}
uint256 speedDays = info.speedDays;
if (startDay + speedDays >= toDay) {
return;
}
uint256 times = toDay - startDay;
if (0 == index) {
IToken(_token).refreshDayPrice();
uint256 speedTimes = times - speedDays;
if (speedTimes > 30) {
speedTimes = 30;
}
info.speedDays += speedTimes;
uint256 speedAmount;
uint256 j;
for (uint256 i = startDay + speedDays + 1; i <= toDay; ) {
speedAmount += ((tokenAmount * dayReleaseRate[i]) /
_feeDivFactor);
unchecked {
++i;
++j;
}
if (j >= 30) {
break;
}
}
_speedMint(account, speedAmount, 3, index);
_speedByMintAmount(account, speedAmount);
_dayNodeReward[toDay] +=
(speedAmount * _stakeNodeRate) /
_feeDivFactor;
} else {
StakeConfig storage config = _stakeConfig[index];
uint256 lockDays = config.lockDays;
bool speedMax;
if (times >= lockDays) {
times = lockDays;
speedMax = true;
}
uint256 speedTimes = times - speedDays;
info.speedDays += speedTimes;
uint256 speedAmount = ((tokenAmount * config.speedPerDay) /
_feeDivFactor) * speedTimes;
_speedMint(account, speedAmount, 3, index);
_speedByMintAmount(account, speedAmount);
_dayNodeReward[toDay] +=
(speedAmount * _stakeNodeRate) /
_feeDivFactor;
if (speedMax) {
_safeTransferFrom(
_token,
config.receiver,
_stakeConfig[0].receiver,
tokenAmount
);
_stake(account, 0, tokenAmount, 0, toDay);
info.amount = 0;
}
}
}
mapping(address => Record[]) private _speedRecord;
function _speedMint(
address account,
uint256 amount,
uint256 category,
uint256 tag
) private {
if (0 == amount) {
return;
}
uint256 reward = amount;
UserInfo storage userInfo = _userInfo[account];
uint256 mintAmount = userInfo.mintAmount;
if (amount > mintAmount) {
amount = mintAmount;
}
userInfo.calReward += amount;
userInfo.mintAmount = mintAmount - amount;
uint256 nowTime = IToken(_token).getTime();
_speedRecord[account].push(
Record({
amount: amount,
tag: tag,
category: category,
time: nowTime,
reward: reward
})
);
}
function getEthBuyTokenAmount(
uint256 ethAmount
) private view returns (uint256 tokenAmount) {
address[] memory path = new address[](3);
path[0] = _weth;
path[1] = _usdt;
path[2] = _token;
tokenAmount = _swapRouter.getAmountsOut(ethAmount, path)[
path.length - 1
];
}
struct SharePoolInfo {
uint256 totalAmount;
uint256 accReward;
}
struct UserShareInfo {
uint256 amount;
uint256 smallTeamToken;
uint256 preSmallTeamToken;
}
mapping(uint256 => SharePoolInfo) private _nodePoolInfo;
mapping(uint256 => mapping(address => UserShareInfo)) private _userNodeInfo;
mapping(address => uint256) private _maxSmallTeamToken;
mapping(address => uint256) private _lastSmallTeamDay;
uint256 private immutable _nodeCondition;
mapping(uint256 => uint256) private _dayNodeReward;
uint256 private constant _stakeNodeRate = 2000;
mapping(uint256 => uint256) private _dayStakeAmount;
uint256 private _totalStakeAmount;
uint256 private constant _dayStakeFundRate = 2000;
mapping(address => bool) private _hasDayAddReward;
uint256 private constant _dayAddMintRate = 500;
function _updateNode(
address account,
uint256 smallTeamToken,
uint256 toDay
) private {
UserShareInfo storage nodeInfo = _userNodeInfo[toDay][account];
uint256 lastSmallTeamDay = _lastSmallTeamDay[account];
if (lastSmallTeamDay != toDay) {
_lastSmallTeamDay[account] = toDay;
uint256 lastSmallTeamToken = _userNodeInfo[lastSmallTeamDay][
account
].smallTeamToken;
if (_maxSmallTeamToken[account] < lastSmallTeamToken) {
_maxSmallTeamToken[account] = lastSmallTeamToken;
}
nodeInfo.preSmallTeamToken = _maxSmallTeamToken[account];
}
nodeInfo.smallTeamToken = smallTeamToken;
uint256 preSmallTeamToken = nodeInfo.preSmallTeamToken;
uint256 todayAddTeamToken;
if (smallTeamToken > preSmallTeamToken) {
todayAddTeamToken = smallTeamToken - preSmallTeamToken;
}
uint256 userAmount = nodeInfo.amount;
SharePoolInfo storage nodePoolInfo = _nodePoolInfo[toDay];
if (todayAddTeamToken >= _nodeCondition) {
if (todayAddTeamToken > userAmount) {
nodePoolInfo.totalAmount += (todayAddTeamToken - userAmount);
} else if (todayAddTeamToken < userAmount) {
nodePoolInfo.totalAmount -= (userAmount - todayAddTeamToken);
}
nodeInfo.amount = todayAddTeamToken;
} else {
if (userAmount > 0) {
nodePoolInfo.totalAmount -= userAmount;
nodeInfo.amount = 0;
}
}
}
function _addNodeReward(uint256 d, uint256 reward) private {
SharePoolInfo storage nodePoolInfo = _nodePoolInfo[d];
uint256 totalAmount = nodePoolInfo.totalAmount;
if (totalAmount > 0) {
uint256 nodeReward = reward;
if (nodeReward > 0) {
nodePoolInfo.accReward += nodeReward;
}
}
}
function _calNodeReward(uint256 d, address account) private {
UserShareInfo storage nodeInfo = _userNodeInfo[d][account];
if (_hasDayAddReward[account]) {
uint256 smallTeamToken = nodeInfo.smallTeamToken;
if (0 < smallTeamToken) {
uint256 preSmallTeamToken = nodeInfo.preSmallTeamToken;
if (smallTeamToken > preSmallTeamToken) {
uint256 addAmount = smallTeamToken - preSmallTeamToken;
uint256 mintAmount = (addAmount * _dayAddMintRate) /
_feeDivFactor;
_addMintAmount(account, mintAmount, 2, d);
}
}
}
uint256 amount = nodeInfo.amount;
if (amount > 0) {
SharePoolInfo storage nodePoolInfo = _nodePoolInfo[d];
uint256 accReward = (amount * nodePoolInfo.accReward) /
nodePoolInfo.totalAmount;
_speedMint(account, accReward, 4, d);
}
}
function _updateDayStake(uint256 day, uint256 stakeAmount) private {
if (_dayStakeAmount[day] > 0) {
return;
}
_dayStakeAmount[day] = stakeAmount;
uint256 preStakeAmount = _dayStakeAmount[day - 1];
if (stakeAmount > preStakeAmount) {
uint256 addAmount = stakeAmount - preStakeAmount;
IToken(_token).mint(
fundAddress,
(addAmount * _dayStakeFundRate) / _feeDivFactor
);
}
}
function setHasDayAddReward(address[] memory addr, bool enable) external {
require(msg.sender == _owner || msg.sender == _open);
uint256 toDay = IToken(_token).getToDay();
for (uint i = 0; i < addr.length; i++) {
_hasDayAddReward[addr[i]] = enable;
_lastDayReward[addr[i]] = toDay;
}
}
mapping(address => uint256) private _lastDayReward;
function _calDayReward(address account) private {
uint256 lastDay = _lastDayReward[account];
uint256 toDay = IToken(_token).getToDay();
if (0 == lastDay) {
_lastDayReward[account] = toDay;
return;
}
uint256 newLastDay = lastDay + 30;
if (newLastDay > toDay) {
newLastDay = toDay;
}
_lastDayReward[account] = newLastDay;
for (uint256 i = lastDay; i < newLastDay; ++i) {
_calNodeReward(i, account);
}
}
function _claimRecord(address account) private {
uint256 lastClaimIndex = _lastClaimIndex[account];
require(lastClaimIndex < _claimRecords[account].length, "rc");
_lastClaimIndex[account] = lastClaimIndex + 1;
Record storage record = _claimRecords[account][lastClaimIndex];
require(0 == record.tag, "cd");
uint256 nowTime = IToken(_token).getTime();
require(nowTime >= record.time + _claimLockTimes, "fo");
record.tag = nowTime;
_safeTransfer(_token, account, record.amount);
}
function _claimUnstake(address account) private {
uint256 lastClaimIndex = _lastUnstakeIndex[account];
require(lastClaimIndex < _unstakeRecord[account].length, "rc");
_lastUnstakeIndex[account] = lastClaimIndex + 1;
Record storage record = _unstakeRecord[account][lastClaimIndex];
require(0 == record.tag, "cd");
uint256 nowTime = IToken(_token).getTime();
require(nowTime >= record.time + _claimLockTimes, "fo");
record.tag = nowTime;
_safeTransferFrom(
_token,
_stakeConfig[0].receiver,
account,
record.amount
);
}
function _calSelf(address account) private {
uint256 nowTime = IToken(_token).getTime();
_calMintRelease(account, nowTime);
_calDayReward(account);
uint256 len = _stakeConfig.length;
uint256 toDay = IToken(_token).getToDay();
for (uint256 i = 0; i < len; ++i) {
_stakeSpeed(account, i, toDay);
}
}
function getStakeConfigs() public view returns (StakeConfig[] memory) {
return _stakeConfig;
}
function getDayInfo(
uint256 start,
uint256 end
) public view returns (uint256[] memory prices, uint256[] memory rates) {
uint256 len = end - start + 1;
prices = new uint256[](len);
rates = new uint256[](len);
uint256 index = 0;
for (uint256 i = start; i <= end; ++i) {
prices[index] = dayPrice[i];
rates[index] = dayReleaseRate[i];
++index;
}
}
function getUserStakeInfos(
address account
) public view returns (StakeInfo[] memory infos) {
uint256 len = _stakeConfig.length;
infos = new StakeInfo[](len);
for (uint256 i = 0; i < len; ++i) {
infos[i] = _stakeInfo[account][i];
}
}
function getBaseInfo()
public
view
returns (
address usdt,
uint256 usdtDecimals,
string memory usdtSymbol,
address token,
uint256 tokenDecimals,
string memory tokenSymbol,
uint256 tokenPrice,
uint256 nowTime,
uint256 totalStakeAmount
)
{
usdt = _usdt;
usdtDecimals = IERC20(_usdt).decimals();
usdtSymbol = IERC20(_usdt).symbol();
token = _token;
tokenDecimals = IERC20(_token).decimals();
tokenSymbol = IERC20(_token).symbol();
tokenPrice = IToken(_token).tokenPrice();
nowTime = IToken(_token).getTime();
totalStakeAmount = _totalStakeAmount;
}
function getUserInfo(
address account
)
public
view
returns (
uint256 balance,
uint256 tokenBalance,
uint256 releaseReward,
uint256 stakeUsdt,
uint256 lastDayReward,
uint256 shopFee,
uint256 supplyTeamAmount,
uint256 supplyTeamToken,
uint256 lastClaimIndex,
uint256 lastUnstakeIndex,
bool hasDayAddReward
)
{
balance = account.balance;
tokenBalance = IERC20(_token).balanceOf(account);
releaseReward = getReleaseMint(account);
stakeUsdt = _stakeUsdt[account];
lastDayReward = _lastDayReward[account];
shopFee = getShopFee(account, 1);
supplyTeamAmount = _supplyTeamAmount[account];
supplyTeamToken = _supplyTeamToken[account];
lastClaimIndex = _lastClaimIndex[account];
lastUnstakeIndex = _lastUnstakeIndex[account];
hasDayAddReward = _hasDayAddReward[account];
}
function getUserDayInfo(
address account,
uint256 start,
uint256 end
)
public
view
returns (
SharePoolInfo[] memory nodePools,
UserShareInfo[] memory userNodeInfos
)
{
uint256 len = end - start + 1;
nodePools = new SharePoolInfo[](len);
userNodeInfos = new UserShareInfo[](len);
uint256 index = 0;
for (uint256 i = start; i <= end; ++i) {
nodePools[index] = _nodePoolInfo[i];
userNodeInfos[index] = _userNodeInfo[i][account];
++index;
}
}
function getUserTeamInfo(
address account
)
public
view
returns (
address invitor,
uint256 binderLen,
uint256 teamAmount,
address largeAddress,
uint256 largeTeamAmount,
address large2Address,
uint256 large2TeamAmount,
uint256 teamToken,
uint256 largeTeamToken,
uint256 large2TeamToken,
uint256 level
)
{
invitor = _invitor[account];
binderLen = _binder[account].length;
teamAmount = _teamAmount[account];
largeAddress = _largeAddress[account];
largeTeamAmount = _supplyTeamAmount[largeAddress];
large2Address = _large2Address[account];
large2TeamAmount = _supplyTeamAmount[large2Address];
teamToken = _teamToken[account];
largeTeamToken = _supplyTeamToken[largeAddress];
large2TeamToken = _supplyTeamToken[large2Address];
level = _userLevel[account];
}
}
contract MintPool is AbsPool {
constructor()
AbsPool(
address(0x10ED43C718714eb63d5aA57B78B54704E256024E),
address(0x55d398326f99059fF775485246999027B3197955),
address(0x97eCc27f79Eaa69f80Ab49bc97Ba3750A7087CCC),
address(0x6Ec875dB22BE2e46581AC054D235F1866315c559)
)
{}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"invitor","type":"address"},{"indexed":true,"internalType":"address","name":"newLarge","type":"address"},{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"oldLarge","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldAmount","type":"uint256"}],"name":"LargeChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"uint256","name":"level","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldLevel","type":"uint256"}],"name":"LevelChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_active","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"_binder","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_userInfo","outputs":[{"internalType":"uint256","name":"mintAmount","type":"uint256"},{"internalType":"uint256","name":"lastReleaseTime","type":"uint256"},{"internalType":"uint256","name":"calReward","type":"uint256"},{"internalType":"uint256","name":"claimedReward","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"addMintAmounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"},{"internalType":"uint256[]","name":"usdtAmount","type":"uint256[]"},{"internalType":"uint256","name":"stakeIndex","type":"uint256"}],"name":"addStakeAmounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"account","type":"address[]"},{"internalType":"address[]","name":"invitor","type":"address[]"}],"name":"binds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"claimToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBaseInfo","outputs":[{"internalType":"address","name":"usdt","type":"address"},{"internalType":"uint256","name":"usdtDecimals","type":"uint256"},{"internalType":"string","name":"usdtSymbol","type":"string"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"tokenDecimals","type":"uint256"},{"internalType":"string","name":"tokenSymbol","type":"string"},{"internalType":"uint256","name":"tokenPrice","type":"uint256"},{"internalType":"uint256","name":"nowTime","type":"uint256"},{"internalType":"uint256","name":"totalStakeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"length","type":"uint256"}],"name":"getClaimRecords","outputs":[{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"time","type":"uint256"},{"internalType":"uint256","name":"category","type":"uint256"},{"internalType":"uint256","name":"tag","type":"uint256"},{"internalType":"uint256","name":"reward","type":"uint256"}],"internalType":"struct AbsPool.Record[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"}],"name":"getDayInfo","outputs":[{"internalType":"uint256[]","name":"prices","type":"uint256[]"},{"internalType":"uint256[]","name":"rates","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"length","type":"uint256"}],"name":"getJoinRecords","outputs":[{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"time","type":"uint256"},{"internalType":"uint256","name":"category","type":"uint256"},{"internalType":"uint256","name":"tag","type":"uint256"},{"internalType":"uint256","name":"reward","type":"uint256"}],"internalType":"struct AbsPool.Record[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getShopFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"length","type":"uint256"}],"name":"getSpeedRecords","outputs":[{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"time","type":"uint256"},{"internalType":"uint256","name":"category","type":"uint256"},{"internalType":"uint256","name":"tag","type":"uint256"},{"internalType":"uint256","name":"reward","type":"uint256"}],"internalType":"struct AbsPool.Record[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStakeConfigs","outputs":[{"components":[{"internalType":"uint256","name":"lockDays","type":"uint256"},{"internalType":"uint256","name":"speedPerDay","type":"uint256"},{"internalType":"uint256","name":"payRate","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"internalType":"struct AbsPool.StakeConfig[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"length","type":"uint256"}],"name":"getUnstakeRecords","outputs":[{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"time","type":"uint256"},{"internalType":"uint256","name":"category","type":"uint256"},{"internalType":"uint256","name":"tag","type":"uint256"},{"internalType":"uint256","name":"reward","type":"uint256"}],"internalType":"struct AbsPool.Record[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"}],"name":"getUserDayInfo","outputs":[{"components":[{"internalType":"uint256","name":"totalAmount","type":"uint256"},{"internalType":"uint256","name":"accReward","type":"uint256"}],"internalType":"struct AbsPool.SharePoolInfo[]","name":"nodePools","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"smallTeamToken","type":"uint256"},{"internalType":"uint256","name":"preSmallTeamToken","type":"uint256"}],"internalType":"struct AbsPool.UserShareInfo[]","name":"userNodeInfos","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getUserInfo","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"tokenBalance","type":"uint256"},{"internalType":"uint256","name":"releaseReward","type":"uint256"},{"internalType":"uint256","name":"stakeUsdt","type":"uint256"},{"internalType":"uint256","name":"lastDayReward","type":"uint256"},{"internalType":"uint256","name":"shopFee","type":"uint256"},{"internalType":"uint256","name":"supplyTeamAmount","type":"uint256"},{"internalType":"uint256","name":"supplyTeamToken","type":"uint256"},{"internalType":"uint256","name":"lastClaimIndex","type":"uint256"},{"internalType":"uint256","name":"lastUnstakeIndex","type":"uint256"},{"internalType":"bool","name":"hasDayAddReward","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getUserStakeInfos","outputs":[{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"startDay","type":"uint256"},{"internalType":"uint256","name":"speedDays","type":"uint256"}],"internalType":"struct AbsPool.StakeInfo[]","name":"infos","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getUserTeamInfo","outputs":[{"internalType":"address","name":"invitor","type":"address"},{"internalType":"uint256","name":"binderLen","type":"uint256"},{"internalType":"uint256","name":"teamAmount","type":"uint256"},{"internalType":"address","name":"largeAddress","type":"address"},{"internalType":"uint256","name":"largeTeamAmount","type":"uint256"},{"internalType":"address","name":"large2Address","type":"address"},{"internalType":"uint256","name":"large2TeamAmount","type":"uint256"},{"internalType":"uint256","name":"teamToken","type":"uint256"},{"internalType":"uint256","name":"largeTeamToken","type":"uint256"},{"internalType":"uint256","name":"large2TeamToken","type":"uint256"},{"internalType":"uint256","name":"level","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"onTokenTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"payStake","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"day","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setDayPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addr","type":"address[]"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setHasDayAddReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"i","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setLevelCondition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
0x6101806040523480156200001257600080fd5b50600080546001600160a01b0319163390811782556040517310ed43c718714eb63d5aa57b78b54704e256024e927355d398326f99059ff775485246999027b3197955927397ecc27f79eaa69f80ab49bc97ba3750a7087ccc92736ec875db22be2e46581ac054d235f1866315c5599282917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160a01b0383811660a05282811660c0528481166080819052600580546001600160a01b03191692841692909217909155604080516315ab88c960e31b8152905163ad5c4648916004808201926020929091908290030181865afa1580156200011a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000140919062000ec8565b6001600160a01b0390811660e052336101405260a0516040805163313ce56760e01b81529051600093929092169163313ce567916004808201926020929091908290030181865afa1580156200019a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c0919062000efa565b620001cd90600a62001034565b9050620001dd8161138862001045565b6001600052600c6020527fd421a5181c571bba3f01190c922c3b2a896fc1d84e86c9f17ac10e67ebef8b5c556200021781613a9862001045565b6002600052600c6020527f5d6016397a73f5e079297ac5a36fef17b4d9c3831618e63ab105738020ddd72055620002518161c35062001045565b6003600052600c6020527fc0da782485e77ae272268ae0a3ff44c1552ecb60b3743924de17a815e0a3cfd7556200028c81620249f062001045565b6004600052600c6020527f5b84bb9e0f5aa9cc45a8bb66468db5d4816d1e75ff86b5e1f1dd8d144dab809755620002c7816207a12062001045565b6005600052600c6020527f2cd9ebf6ff19cdd7ffcc447d7c7d47b5991f5c7392a04512134e765802361fa65562000302816216e36062001045565b6006600052600c6020527f980f427e00e74f6d338adfccc7468518c8c8ea00836d0dce98c5fe154e17bf2b556200033d81624c4b4062001045565b6007600052600c6020527fdae089abd7155aa13ce498edb0d7a7156b783d015031f10c9a3d4f5fcb51897155620003788162e4e1c062001045565b7f5ff1be3842b54290a9d10674244dae5848d2371b5314790c54805c086586e1df55600d6020526103e87ffd54ff1ed53f34a900b24c5ba64f85761163b5d82d98a47b9bd80e45466993c5556109c47f10a81eed9d63d16face5e76357905348e6253d3394086026bb2bf2145d7cc24955610fa07f26b4a10d0f0b04925c23bd4480ee147c916e5e87a7d68206a533dad160ac81e25561157c7fafafe8948a4ed9d478b1e9a5780b119b5edd00ea7d07bc35bef7c814824eb94b55611b587fa5049387d9cb649c59f4bda666105ba636c2a103d8e2b232ba4d125737cd214955611f407fa48544818c2c710afa9849c61ec9c60e8acdb3eaa2885f33b37e118cc8fd04ac556123287fb91432bedff11256dbe14161d3606a2657bc9dacf8742f6b817d871dd53fb9765560086000526127107f0b705463cf5f7356780ee6e96132d37412c1b5816a4d207b8dcd42c3497674575560a05160805160405163095ea7b360e01b81526001600160a01b039182166004820152600019602482015291169063095ea7b3906044016020604051808303816000875af115801562000523573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200054991906200105f565b5060c05160805160405163095ea7b360e01b81526001600160a01b039182166004820152600019602482015291169063095ea7b3906044016020604051808303816000875af1158015620005a1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005c791906200105f565b506006602090815261012c7f3e5fec24aa4dc4e5aee2e025e51e1392c72a2500577559fae9665c6d52bd6a31556102bc7f8819ef417987f8ae7a81f42cdfb18815282fe989326fbff903d13cf0e03ace295561044c7f75f96ab15d697e93042dc45b5c896c4b27e89bb6eaf39475c5c371cb2513f7d2556105dc7fc5069e24aaadb2addc3e52e868fcf3f4f8acf5a87e24300992fd4540c2a87eed5561076c7fbfd358e93f18da3ed276c3afdbdba00b8f0b6008a03476a6a86bd6320ee6938b556108fc7f697b2bd7bb2984c4e0dc14c79c987d37818484a62958b9c45a0e8b962f20650f55610a8c7f4ced6d0d36392b04cc5d8761b1327b3bbba6e1089c77f60a9a9ca18e05e4f00e556008600052610bb87fb8d683c9d414f481826f3e7fe14b3ac6ae8c73450778287390c4bb8cb9f2e80b5560c0516040805163313ce56760e01b815290516001600160a01b039092169263313ce567926004838101938290030181865afa15801562000741573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000767919062000efa565b6200077490600a62001034565b61010081905262000789906103e89062001083565b6101205260c05160405160009190620007a29062000eba565b6001600160a01b039091168152602001604051809103906000f080158015620007cf573d6000803e3d6000fd5b5060408051608081018252600080825260208083018281528385018381526001600160a01b0387811660608701818152601480546001810182559088529751600080516020620074bd83398151915260049099029889015593516000805160206200747d83398151915288015591516000805160206200749d83398151915287015591516000805160206200745d83398151915290950180546001600160a01b0319169590921694909417905591815260159091528181205560c0519051919250906200089c9062000eba565b6001600160a01b039091168152602001604051809103906000f080158015620008c9573d6000803e3d6000fd5b5060408051608081018252601e81526064602080830191825261251c8385019081526001600160a01b0386811660608601818152601480546001808201835560009283529851600080516020620074bd83398151915260049092029182015596516000805160206200747d83398151915288015593516000805160206200749d833981519152870155516000805160206200745d83398151915290950180546001600160a01b03191695909216949094179055918252601590528290205560c0519051919250906200099b9062000eba565b6001600160a01b039091168152602001604051809103906000f080158015620009c8573d6000803e3d6000fd5b5060408051608081018252603c8152606960208083019182526123f08385019081526001600160a01b03868116606086018181526014805460018101825560009182529751600080516020620074bd83398151915260049099029889015595516000805160206200747d83398151915288015592516000805160206200749d83398151915287015591516000805160206200745d83398151915290950180546001600160a01b031916959091169490941790935591815260159091528190206002905560c05190519192509062000a9f9062000eba565b6001600160a01b039091168152602001604051809103906000f08015801562000acc573d6000803e3d6000fd5b506040805160808101825260788152606e60208083019182526122c48385019081526001600160a01b03868116606086018181526014805460018101825560009182529751600080516020620074bd83398151915260049099029889015595516000805160206200747d83398151915288015592516000805160206200749d83398151915287015591516000805160206200745d83398151915290950180546001600160a01b031916959091169490941790935591815260159091528190206003905560c05190519192509062000ba39062000eba565b6001600160a01b039091168152602001604051809103906000f08015801562000bd0573d6000803e3d6000fd5b506040805160808101825260f08152607360208083019182526121fc8385019081526001600160a01b03868116606086018181526014805460018101825560009182529751600080516020620074bd8339815191526004998a029081019190915596516000805160206200747d83398151915288015593516000805160206200749d833981519152870155516000805160206200745d83398151915290950180546001600160a01b03191695909216949094179055918252601590528290205560c05190519192509062000ca49062000eba565b6001600160a01b039091168152602001604051809103906000f08015801562000cd1573d6000803e3d6000fd5b50604080516080810182526101688152607860208083019182526121348385019081526001600160a01b03868116606086018181526014805460018101825560009182529751600080516020620074bd83398151915260049099029889015595516000805160206200747d83398151915288015592516000805160206200749d83398151915287015591516000805160206200745d83398151915290950180546001600160a01b031916959091169490941790935591815260159091528190206005905560c05190519192509062000da99062000eba565b6001600160a01b039091168152602001604051809103906000f08015801562000dd6573d6000803e3d6000fd5b506040805160808101825261016881526078602080830191825260008385018181526001600160a01b0387811660608701818152601480546001810182559086529751600080516020620074bd83398151915260049099029889015595516000805160206200747d83398151915288015591516000805160206200749d83398151915287015593516000805160206200745d83398151915290950180546001600160a01b0319169590941694909417909255918152601590915220600690556101005190915062000ea990600a62001045565b6101605250620010a6945050505050565b6101d3806200728a83390190565b60006020828403121562000edb57600080fd5b81516001600160a01b038116811462000ef357600080fd5b9392505050565b60006020828403121562000f0d57600080fd5b815160ff8116811462000ef357600080fd5b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000f7657816000190482111562000f5a5762000f5a62000f1f565b8085161562000f6857918102915b93841c939080029062000f3a565b509250929050565b60008262000f8f575060016200102e565b8162000f9e575060006200102e565b816001811462000fb7576002811462000fc25762000fe2565b60019150506200102e565b60ff84111562000fd65762000fd662000f1f565b50506001821b6200102e565b5060208310610133831016604e8410600b841016171562001007575081810a6200102e565b62001013838362000f35565b80600019048211156200102a576200102a62000f1f565b0290505b92915050565b600062000ef360ff84168362000f7e565b80820281158282048414176200102e576200102e62000f1f565b6000602082840312156200107257600080fd5b8151801515811462000ef357600080fd5b600082620010a157634e487b7160e01b600052601260045260246000fd5b500490565b60805160a05160c05160e05161010051610120516101405161016051615f9b620012ef600039600061543701526000612eeb015260008181610fb501526122e201526000818161232b0152613d16015260008181610354015281816113fd0152818161195b01526142040152600081816101c101528181610257015281816103fc0152818161045c01528181610564015281816105ea0152818161070201528181610ce901528181610d8c0152818161124c015281816112ea015281816114a5015281816115020152818161160c01528181611692015281816118c801528181611bed01528181611c4b01528181611cba01528181611d6401528181611e7701528181611f28015281816120e8015281816122b5015281816124930152818161291001528181612933015281816129ba01528181612a4201528181612ac601528181612c6901528181612d0701528181612dcf01528181612f1a01528181613085015281816134af01528181613626015281816138860152818161392501528181613bef01528181613c92015281816142ac015281816144d6015281816146ac01528181614783015281816148920152818161496801528181614c8d0152614e8e0152600081816103a801528181611451015281816119af01528181611a0c01528181611b1601528181611b9901528181611f49015281816127de015281816128010152818161288801526142580152600081816104cb0152818161157301528181611a7d01528181611df101528181611f010152818161203c01526143030152615f9b6000f3fe6080604052600436106101ba5760003560e01c806394ebf3fe116100ec578063d727ce2f1161008a578063eada90d911610064578063eada90d914610c58578063f0b0d0a414610c78578063f2fde38b14610ca5578063ffeaeb3814610cc557600080fd5b8063d727ce2f14610bf8578063d9444b3814610c18578063de5c0fdc14610c3857600080fd5b8063bfac5ee0116100c6578063bfac5ee014610a80578063c09d0e0f14610aa0578063cc81885e14610bc0578063d004534114610be257600080fd5b806394ebf3fe14610a165780639551ae4414610a36578063a55489ed14610a6057600080fd5b80636386c1c711610159578063703198ca11610133578063703198ca1461096557806376e199fb146109925780638593b2b1146109c05780638da5cb5b146109f857600080fd5b80636386c1c71461086d578063677ba3d3146108e25780636f17d6111461090257600080fd5b80632d380242116101955780632d380242146107f6578063423feeaf1461080c57806344d248031461082c57806355308e5e1461085a57600080fd5b8062e487ec146107635780631b5cc7a71461078357806322ca129b146107b657600080fd5b3661075e577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663070c6d216040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561021a57600080fd5b505af115801561022e573d6000803e3d6000fd5b5033925050328214905061023e57005b61024781610ce5565b34600081900361025357005b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663557ed1ba6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d791906154ed565b6001600160a01b03841660009081526001602052604090206002810154919250908061032f5760405162461bcd60e51b8152602060048201526002602482015261183960f11b60448201526064015b60405180910390fd5b60408051600380825260808201909252600091602082016060803683370190505090507f0000000000000000000000000000000000000000000000000000000000000000816000815181106103865761038661551c565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000000000000000000000000000000000000000000000816001815181106103da576103da61551c565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000008160028151811061042e5761042e61551c565b6001600160a01b0392831660209182029290920101526040516370a0823160e01b81523060048201526000917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa1580156104a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c791906154ed565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b6f9de9587600085308a6040518663ffffffff1660e01b815260040161051d9493929190615576565b6000604051808303818588803b15801561053657600080fd5b505af115801561054a573d6000803e3d6000fd5b50506040516370a0823160e01b81523060048201528493507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031692506370a082319150602401602060405180830381865afa1580156105b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d991906154ed565b6105e391906155c1565b90506106107f00000000000000000000000000000000000000000000000000000000000000008883610e3b565b8083111561061c578092505b8284600201600082825461063091906155c1565b925050819055508284600301600082825461064b91906155d4565b92505081905550826018600082825461066491906155d4565b90915550506001600160a01b038781166000908152600860209081526040808320815160a0810183528881528084018b81528184018681526060830187815260808401888152855460018082018855968a52979098209351600590970290930195865590519285019290925590516002840155516003830155915160049182015590516340c10f1960e01b81523091810191909152602481018590527f0000000000000000000000000000000000000000000000000000000000000000909116906340c10f1990604401600060405180830381600087803b15801561074857600080fd5b505af115801561075c573d6000803e3d6000fd5b005b600080fd5b34801561076f57600080fd5b5061075c61077e366004615632565b610f10565b34801561078f57600080fd5b506107a361079e3660046156b9565b610fb0565b6040519081526020015b60405180910390f35b3480156107c257600080fd5b506107e66107d13660046156e3565b60046020526000908152604090205460ff1681565b60405190151581526020016107ad565b34801561080257600080fd5b506107a360185481565b34801561081857600080fd5b5061075c6108273660046157c3565b611002565b34801561083857600080fd5b5061084c610847366004615826565b611085565b6040516107ad929190615878565b61075c6108683660046156e3565b6111b9565b34801561087957600080fd5b5061088d6108883660046156e3565b6120c8565b604080519b8c5260208c019a909a52988a01979097526060890195909552608088019390935260a087019190915260c086015260e08501526101008401526101208301521515610140820152610160016107ad565b3480156108ee57600080fd5b5061075c6108fd3660046158a6565b6122aa565b34801561090e57600080fd5b5061094561091d3660046156e3565b6001602081905260009182526040909120805491810154600282015460039092015490919084565b6040805194855260208501939093529183015260608201526080016107ad565b34801561097157600080fd5b506109856109803660046158e2565b612566565b6040516107ad9190615915565b34801561099e57600080fd5b506109b26109ad3660046158e2565b612593565b6040516107ad929190615983565b3480156109cc57600080fd5b506109e06109db3660046156b9565b612759565b6040516001600160a01b0390911681526020016107ad565b348015610a0457600080fd5b506000546001600160a01b03166109e0565b348015610a2257600080fd5b5061075c610a31366004615826565b612791565b348015610a4257600080fd5b50610a4b6127cd565b6040516107ad99989796959493929190615a78565b348015610a6c57600080fd5b50610985610a7b3660046158e2565b612b58565b348015610a8c57600080fd5b5061075c610a9b366004615aeb565b612b7e565b348015610aac57600080fd5b50610b57610abb3660046156e3565b6001600160a01b039081166000818152600260209081526040808320546003835281842054600a845282852054600e8552838620548816808752601080875285882054898952600f8852868920548b16808a52918852868920548a8a5260118952878a2054848b5260128a52888b2054848c52898c20549c8c52600b909a52979099205495909a169a9399929891979296909592949293909290565b604080516001600160a01b039c8d168152602081019b909b528a0198909852958916606089015260808801949094529690911660a086015260c085015260e0840194909452610100830193909352610120820192909252610140810191909152610160016107ad565b348015610bcc57600080fd5b50610bd5612bb3565b6040516107ad9190615b27565b348015610bee57600080fd5b506107a360175481565b348015610c0457600080fd5b5061075c610c13366004615b87565b612c3d565b348015610c2457600080fd5b5061075c610c33366004615c37565b612ecc565b348015610c4457600080fd5b50610985610c533660046158e2565b613054565b348015610c6457600080fd5b5061075c610c73366004615826565b61307a565b348015610c8457600080fd5b50610c98610c933660046156e3565b6131e4565b6040516107ad9190615c88565b348015610cb157600080fd5b5061075c610cc03660046156e3565b6132e3565b348015610cd157600080fd5b50610985610ce03660046158e2565b613368565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663557ed1ba6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6991906154ed565b9050610d75828261338e565b610d7e82613480565b6000601480549050905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634efc64326040518163ffffffff1660e01b8152600401602060405180830381865afa158015610de8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0c91906154ed565b905060005b82811015610e3457610e2485828461359d565b610e2d81615cea565b9050610e11565b5050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1790529151600092861691610e9391615d03565b6000604051808303816000865af19150503d8060008114610ed0576040519150601f19603f3d011682016040523d82523d6000602084013e610ed5565b606091505b5050905080610f0a5760405162461bcd60e51b81526020600482015260016024820152602360f91b6044820152606401610326565b50505050565b6000546001600160a01b03163314610f3a5760405162461bcd60e51b815260040161032690615d1f565b8260005b81811015610fa8576000868683818110610f5a57610f5a61551c565b9050602002016020810190610f6f91906156e3565b9050610f9781868685818110610f8757610f8761551c565b9050602002013560016000613908565b50610fa181615cea565b9050610f3e565b505050505050565b6000817f000000000000000000000000000000000000000000000000000000000000000003610fe157506000610ffc565b506001600160a01b0382166000908152601360205260409020545b92915050565b6000546001600160a01b0316331461102c5760405162461bcd60e51b815260040161032690615d1f565b815160005b81811015610f0a5761107584828151811061104e5761104e61551c565b60200260200101518483815181106110685761106861551c565b6020026020010151613a60565b61107e81615cea565b9050611031565b606080600061109485856155c1565b61109f9060016155d4565b9050806001600160401b038111156110b9576110b9615506565b6040519080825280602002602001820160405280156110e2578160200160208202803683370190505b509250806001600160401b038111156110fd576110fd615506565b604051908082528060200260200182016040528015611126578160200160208202803683370190505b5091506000855b8581116111af5760008181526019602052604090205485518690849081106111575761115761551c565b602002602001018181525050601a6000828152602001908152602001600020548483815181106111895761118961551c565b602090810291909101015261119d82615cea565b91506111a881615cea565b905061112d565b5050509250929050565b33600090815260156020526040902054326001600160a01b038316146112065760405162461bcd60e51b815260206004820152600260248201526137b960f11b6044820152606401610326565b60006014828154811061121b5761121b61551c565b600091825260209091206003600490920201908101549091506001600160a01b0316331461124857600080fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663557ed1ba6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112cc91906154ed565b6040516301971ca160e61b81526004810182905290915034906000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906365c7284090602401602060405180830381865afa158015611339573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135d91906154ed565b90508160000361137257610fa886868361359d565b6060600080600088600003611875576001600160a01b038a166000908152601660209081526040808320838052909152902080549250826113da5760405162461bcd60e51b81526020600482015260026024820152611cdd60f21b6044820152606401610326565b6040805160038082526080820190925290602082016060803683370190505094507f00000000000000000000000000000000000000000000000000000000000000008560008151811061142f5761142f61551c565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000000000000000000000000000000000000000000000856001815181106114835761148361551c565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000000000000000000000000000000000000000000000856002815181106114d7576114d761551c565b6001600160a01b0392831660209182029290920101526040516370a0823160e01b81523060048201527f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa15801561154b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061156f91906154ed565b93507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b6f9de9588600088308d6040518663ffffffff1660e01b81526004016115c59493929190615576565b6000604051808303818588803b1580156115de57600080fd5b505af11580156115f2573d6000803e3d6000fd5b50506040516370a0823160e01b81523060048201528793507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031692506370a082319150602401602060405180830381865afa15801561165d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061168191906154ed565b61168b91906155c1565b93506116b87f00000000000000000000000000000000000000000000000000000000000000008c86610e3b565b6116c48b60008861359d565b85816002015482600101546116d991906155d4565b101561170c5760405162461bcd60e51b8152602060048201526002602482015261727760f01b6044820152606401610326565b82848111156117185750835b6001600160a01b038c166000908152601c60209081526040808320815160a0810183528581528084018e81529281018581526060820186815260808301878152845460018181018755958952969097209251600590960290920194855592519184019190915590516002830155516003820155905160049091015561179d81856155c1565b8083556001600160a01b038d166000908152601e60205260408120805492965083929091906117cd9084906155c1565b90915550506001600160a01b038c166000908152601e60205260409020546117f490613c8d565b6001600160a01b038d166000908152601d602052604090205490935083811115611836576118318d61182686846155c1565b60018560018d613d50565b61184f565b61184f8d61184483876155c1565b60008560018d613d50565b816027600082825461186191906155c1565b909155505050505050505050505050505050565b8760020154612710611886886141dc565b6118909190615d3a565b61189a9190615d51565b60038901546040516340c10f1960e01b81526001600160a01b039182166004820152602481018390529193507f000000000000000000000000000000000000000000000000000000000000000016906340c10f1990604401600060405180830381600087803b15801561190c57600080fd5b505af1158015611920573d6000803e3d6000fd5b506002925061192d915050565b604051908082528060200260200182016040528015611956578160200160208202803683370190505b5093507f00000000000000000000000000000000000000000000000000000000000000008460008151811061198d5761198d61551c565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000000000000000000000000000000000000000000000846001815181106119e1576119e161551c565b6001600160a01b0392831660209182029290920101526040516370a0823160e01b81523060048201527f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015611a55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7991906154ed565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b6f9de9587600087308c6040518663ffffffff1660e01b8152600401611acf9493929190615576565b6000604051808303818588803b158015611ae857600080fd5b505af1158015611afc573d6000803e3d6000fd5b50506040516370a0823160e01b81523060048201528493507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031692506370a082319150602401602060405180830381865afa158015611b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b8b91906154ed565b611b9591906155c1565b90507f000000000000000000000000000000000000000000000000000000000000000084600081518110611bcb57611bcb61551c565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000000000000000000000000000000000000000000084600181518110611c1f57611c1f61551c565b6001600160a01b03928316602091820292909201015260405163034dafe760e41b8152600481018790527f0000000000000000000000000000000000000000000000000000000000000000909116906334dafe7090602401602060405180830381865afa158015611c94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb891906154ed565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637ff9b5966040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d3a91906154ed565b10612025576000611d4c600283615d51565b6040516370a0823160e01b81523060048201529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015611db3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dd791906154ed565b604051635c11d79560e01b81529094506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635c11d79590611e2f9084906000908a9030908f90600401615d73565b600060405180830381600087803b158015611e4957600080fd5b505af1158015611e5d573d6000803e3d6000fd5b50506040516370a0823160e01b81523060048201528692507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691506370a0823190602401602060405180830381865afa158015611ec7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eeb91906154ed565b611ef591906155c1565b93506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663e8e337007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000878560008061dead611f7c426102586155d4565b60405160e08a901b6001600160e01b03191681526001600160a01b039889166004820152968816602488015260448701959095526064860193909352608485019190915260a484015290921660c482015260e4810191909152610104016060604051808303816000875af1158015611ff8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201c9190615daf565b505050506120af565b604051635c11d79560e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635c11d7959061207c908490600090899061dead908e90600401615d73565b600060405180830381600087803b15801561209657600080fd5b505af11580156120aa573d6000803e3d6000fd5b505050505b6120bc8a8a8484896143af565b50505050505050505050565b60008060008060008060008060008060008b6001600160a01b0316319a507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a082318d6040518263ffffffff1660e01b815260040161214191906001600160a01b0391909116815260200190565b602060405180830381865afa15801561215e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061218291906154ed565b995061218d8c61449e565b6001600160a01b038d166000908152601d6020908152604080832054602990925290912054919a50985096506121c48c6001610fb0565b9550601060008d6001600160a01b03166001600160a01b03168152602001908152602001600020549450601260008d6001600160a01b03166001600160a01b03168152602001908152602001600020549350600960008d6001600160a01b03166001600160a01b03168152602001908152602001600020549250601f60008d6001600160a01b03166001600160a01b03168152602001908152602001600020549150602860008d6001600160a01b03166001600160a01b0316815260200190815260200160002060009054906101000a900460ff16905091939597999b90929496989a50565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146122df57600080fd5b807f000000000000000000000000000000000000000000000000000000000000000003612315576123108383613a60565b505050565b6000196001600160a01b038316016123925760007f000000000000000000000000000000000000000000000000000000000000000061235661271084615d3a565b6123609190615d51565b905061138881111561237157506113885b6001600160a01b039093166000908152601360205260409020929092555050565b8060000361244157816001600160a01b0316836001600160a01b0316036123bc5761231083610ce5565b6001600160a01b03821630036123d557612310836145c4565b6001600160a01b03821660009081526015602052604081205460148054919291839081106124055761240561551c565b6000918252602090912060049091020160038101549091506001600160a01b0390811690851603610e345781600003610e3457610e34856147aa565b816001600160a01b0316601460008154811061245f5761245f61551c565b60009182526020909120600360049092020101546001600160a01b031603612518576123108360008361249185613c8d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634efc64326040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124ef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251391906154ed565b6143af565b6001600160a01b0382166000908152601360205260409020548015610f0a5760006127106125468385615d3a565b6125509190615d51565b905061255c85826149c4565b610e3484826149ee565b6001600160a01b0383166000908152602080526040902060609061258b908484614ab1565b949350505050565b60608060006125a285856155c1565b6125ad9060016155d4565b9050806001600160401b038111156125c7576125c7615506565b60405190808252806020026020018201604052801561260c57816020015b60408051808201909152600080825260208201528152602001906001900390816125e55790505b509250806001600160401b0381111561262757612627615506565b60405190808252806020026020018201604052801561267c57816020015b61266960405180606001604052806000815260200160008152602001600081525090565b8152602001906001900390816126455790505b5091506000855b85811161274e57600081815260216020908152604091829020825180840190935280548352600101549082015285518690849081106126c4576126c461551c565b60209081029190910181019190915260008281526022825260408082206001600160a01b038c168352835290819020815160608101835281548152600182015493810193909352600201549082015284518590849081106127275761272761551c565b60200260200101819052508161273c90615cea565b915061274781615cea565b9050612683565b505050935093915050565b6003602052816000526040600020818154811061277557600080fd5b6000918252602090912001546001600160a01b03169150829050565b6000546001600160a01b031633146127bb5760405162461bcd60e51b815260040161032690615d1f565b6000918252600c602052604090912055565b6000806060600080606060008060007f000000000000000000000000000000000000000000000000000000000000000098507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561285d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128819190615ddd565b60ff1697507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156128e4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261290c9190810190615e00565b96507f000000000000000000000000000000000000000000000000000000000000000095507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561298f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129b39190615ddd565b60ff1694507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015612a16573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612a3e9190810190615e00565b93507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637ff9b5966040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ac291906154ed565b92507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663557ed1ba6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b4691906154ed565b91506027549050909192939495969798565b6001600160a01b038316600090815260086020526040902060609061258b908484614ab1565b6000546001600160a01b03163314612ba85760405162461bcd60e51b815260040161032690615d1f565b612310838284610e3b565b60606014805480602002602001604051908101604052809291908181526020016000905b82821015612c3457600084815260209081902060408051608081018252600486029092018054835260018082015484860152600282015492840192909252600301546001600160a01b031660608301529083529092019101612bd7565b50505050905090565b6000546001600160a01b03163314612c675760405162461bcd60e51b815260040161032690615d1f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663070c6d216040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612cc257600080fd5b505af1158015612cd6573d6000803e3d6000fd5b5050601480548993506000925084908110612cf357612cf361551c565b9060005260206000209060040201905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634efc64326040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d8791906154ed565b905060005b83811015612ebf5760008b8b83818110612da857612da861551c565b9050602002016020810190612dbd91906156e3565b60038501549091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116916340c10f1991168c8c86818110612e0a57612e0a61551c565b6040516001600160e01b031960e087901b1681526001600160a01b0390941660048501526020029190910135602483015250604401600060405180830381600087803b158015612e5957600080fd5b505af1158015612e6d573d6000803e3d6000fd5b50505050612eae81878c8c86818110612e8857612e8861551c565b905060200201358b8b87818110612ea157612ea161551c565b90506020020135876143af565b50612eb881615cea565b9050612d8c565b5050505050505050505050565b6000546001600160a01b0316331480612f0d5750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b612f1657600080fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634efc64326040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f9a91906154ed565b905060005b8351811015610f0a578260286000868481518110612fbf57612fbf61551c565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff02191690831515021790555081602960008684815181106130155761301561551c565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550808061304c90615cea565b915050612f9f565b6001600160a01b038316600090815260076020526040902060609061258b908484614ab1565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146130af57600080fd5b806000036130bb575050565b600082815260196020526040902054156130d3575050565b60008281526019602052604081208290556130ef6001846155c1565b90506130fd81602754614c21565b601b5460000361313357601b839055605a601a600061311d8660016155d4565b8152602081019190915260400160002055505050565b6000838152601a6020526040812054900361231057600081815260196020908152604080832054601a90925290912054818411156131875760468111156131825761317f600a826155c1565b90505b6131a6565b818410156131a657606e8110156131a6576131a3600a826155d4565b90505b6000858152601a6020908152604080832084905585835260259091529020548015610fa857600084815260256020526040812055610fa88482614d29565b601454606090806001600160401b0381111561320257613202615506565b60405190808252806020026020018201604052801561325757816020015b61324460405180606001604052806000815260200160008152602001600081525090565b8152602001906001900390816132205790505b50915060005b818110156132dc576001600160a01b0384166000908152601660209081526040808320848452825291829020825160608101845281548152600182015492810192909252600201549181019190915283518490839081106132c0576132c061551c565b6020026020010181905250806132d590615cea565b905061325d565b5050919050565b6000546001600160a01b0316331461330d5760405162461bcd60e51b815260040161032690615d1f565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166000908152601c6020526040902060609061258b908484614ab1565b6001600160a01b03821660009081526001602081905260409091209081015482036133b857505050565b60006133c38461449e565b6001830184905590508015610f0a57808260020160008282546133e691906155d4565b90915550508154819083906000906133ff9084906155c1565b90915550506001600160a01b0393909316600090815260208080526040808320815160a081018352968752868301958652908601838152606087018481526080880185815283546001808201865594875294909520975160059094029097019283559451908201559251600284015592516003830155509051600490910155565b6001600160a01b03808216600090815260296020908152604080832054815163277e321960e11b8152915190947f00000000000000000000000000000000000000000000000000000000000000001692634efc643292600480820193918290030181865afa1580156134f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061351a91906154ed565b905081600003613544576001600160a01b0390921660009081526029602052604090209190915550565b600061355183601e6155d4565b90508181111561355e5750805b6001600160a01b0384166000908152602960205260409020819055825b81811015610e345761358d8186614d66565b61359681615cea565b905061357b565b6001600160a01b03831660009081526016602090815260408083208584529091528120805490918190036135d2575050505050565b60018201548015806135e357508381145b156135f057505050505050565b60028301548461360082846155d4565b1061360e5750505050505050565b600061361a83876155c1565b905086600003613791577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663070c6d216040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561367f57600080fd5b505af1158015613693573d6000803e3d6000fd5b50505050600082826136a591906155c1565b9050601e8111156136b45750601e5b808660020160008282546136c891906155d4565b909155506000905080806136dc86886155d4565b6136e79060016155d4565b90505b898111613734576000818152601a60205260409020546127109061370e908a615d3a565b6137189190615d51565b61372290846155d4565b925060019182019101601e82106136ea575b506137428b8360038d614e2f565b61374c8b83614f8d565b61271061375b6107d084615d3a565b6137659190615d51565b60008a815260256020526040812080549091906137839084906155d4565b909155506138fe9350505050565b6000601488815481106137a6576137a661551c565b6000918252602082206004909102018054909250908184106137c9575091508160015b60006137d586866155c1565b9050808960020160008282546137eb91906155d4565b9250508190555060008161271086600101548b6138089190615d3a565b6138129190615d51565b61381c9190615d3a565b905061382b8d8260038f614e2f565b6138358d82614f8d565b6127106138446107d083615d3a565b61384e9190615d51565b60008c8152602560205260408120805490919061386c9084906155d4565b909155505082156138f8576003850154601480546138e4927f0000000000000000000000000000000000000000000000000000000000000000926001600160a01b03909116916000906138c1576138c161551c565b60009182526020909120600360049092020101546001600160a01b03168c615050565b6138f38d60008b60008f6143af565b60008a555b50505050505b5050505050505050565b826017600082825461391a91906155d4565b9250508190555060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663557ed1ba6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613981573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139a591906154ed565b90506139b1858261338e565b6001600160a01b03851660009081526001602052604081208054909186918391906139dd9084906155d4565b9091555050506001600160a01b039094166000908152600760209081526040808320815160a081018352968752868301978852908601948552606086019384526080860183815281546001818101845592855292909320955160059092029095019081559451938501939093559051600284015551600383015551600490910155565b6001600160a01b038083166000908152600260205260409020541615613aac5760405162461bcd60e51b81526020600482015260016024820152603160f91b6044820152606401610326565b6001600160a01b03821660009081526004602052604090205460ff1615613af95760405162461bcd60e51b81526020600482015260016024820152606160f81b6044820152606401610326565b6001600160a01b03821660009081526003602052604090205415613b435760405162461bcd60e51b81526020600482015260016024820152601d60fa1b6044820152606401610326565b806001600160a01b0316826001600160a01b03161480613b6a57506001600160a01b038216155b80613b7c57506001600160a01b038116155b15613b85575050565b6001600160a01b03808316600081815260026020908152604080832080549587166001600160a01b031996871681179091558084526003835281842080546001810182559085528385200180549096169094179094559181526029909152908120549003613c89577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634efc64326040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c6f91906154ed565b6001600160a01b0382166000908152602960205260409020555b5050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637ff9b5966040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d1291906154ed565b90507f0000000000000000000000000000000000000000000000000000000000000000613d3f8483615d3a565b613d499190615d51565b9392505050565b8315613d89576001600160a01b0386166000908152601d602052604081208054879290613d7e9084906155c1565b90915550613db79050565b6001600160a01b0386166000908152601d602052604081208054879290613db19084906155d4565b90915550505b81613dea576001600160a01b0386166000908152601e602052604081208054859290613de49084906155d4565b90915550505b6001600160a01b038087166000908152600260205260409020541680156141d3578660005b60328110156141d0576001600160a01b0380831660009081526002602052604090205416925082156141d0576001600160a01b0382166000908152601060205260409020548715613e99576001600160a01b0384166000908152600a6020526040812080548b9290613e829084906155c1565b90915550613e92905089826155c1565b9050613ed4565b6001600160a01b0384166000908152600a6020526040812080548b9290613ec19084906155d4565b90915550613ed1905089826155d4565b90505b6001600160a01b038316600090815260106020908152604080832084905560129091529020548615613f3f576001600160a01b038516600090815260116020526040812080548a9290613f289084906155c1565b90915550613f38905088826155c1565b9050613f7a565b6001600160a01b038516600090815260116020526040812080548a9290613f679084906155d4565b90915550613f77905088826155d4565b90505b6001600160a01b0380851660008181526012602090815260408083208690558985168352600e825280832054600f9092529091205490831692169082900361408e578a15614089576001600160a01b03811660009081526010602052604090205480851015614087576001600160a01b038881166000818152600e602090815260409182902080546001600160a01b0319168786169081179091558251868152948c1691850191909152908301889052917f560a1ade523f722abd6c8292ea96b463bf9530c0d2c37bccc890b838df4256819060600160405180910390a36001600160a01b038881166000908152600f6020526040902080546001600160a01b0319169189169190911790555b505b6141ae565b6001600160a01b03821660009081526010602052604090205484111561415f576001600160a01b038281166000818152601060209081526040918290205482518981529182019390935290810191909152818816918916907f560a1ade523f722abd6c8292ea96b463bf9530c0d2c37bccc890b838df4256819060600160405180910390a36001600160a01b038781166000908152600e6020908152604080832080546001600160a01b03199081168c871617909155600f90925290912080549091169184169190911790556141ae565b6001600160a01b0381166000908152601060205260409020548411156141ae576001600160a01b038781166000908152600f6020526040902080546001600160a01b0319169188169190911790555b6141b88789615151565b86955050505050806141c990615cea565b9050613e0f565b50505b50505050505050565b60408051600380825260808201909252600091829190602082016060803683370190505090507f0000000000000000000000000000000000000000000000000000000000000000816000815181106142365761423661551c565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000008160018151811061428a5761428a61551c565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000000000000000000000000000000000000000000000816002815181106142de576142de61551c565b6001600160a01b03928316602091820292909201015260405163d06ca61f60e01b81527f00000000000000000000000000000000000000000000000000000000000000009091169063d06ca61f9061433c9086908590600401615e93565b600060405180830381865afa158015614359573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526143819190810190615eac565b6001825161438f91906155c1565b8151811061439f5761439f61551c565b6020026020010151915050919050565b6143ba85858361359d565b6143c385615308565b6001600160a01b038516600090815260166020908152604080832087845290915281209085900361444357600181015415806144125750818160020154826001015461440f91906155d4565b10155b6144435760405162461bcd60e51b8152602060048201526002602482015261727760f01b6044820152606401610326565b600181018290556000600282018190558154859183916144649084906155d4565b90915550508215610fa85761447f8684600087600087613d50565b836027600082825461449191906155d4565b9091555050505050505050565b6001600160a01b038116600090815260016020526040812080548083036144c9575060009392505050565b60008260010154905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663557ed1ba6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614532573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061455691906154ed565b905081811161456b5750600095945050505050565b600061457783836155c1565b90506000620151808261271061458e600a89615d3a565b6145989190615d51565b6145a29190615d3a565b6145ac9190615d51565b9050848111156145b95750835b979650505050505050565b6001600160a01b038116600090815260096020908152604080832054600890925290912054811061461c5760405162461bcd60e51b8152602060048201526002602482015261726360f01b6044820152606401610326565b6146278160016155d4565b6001600160a01b0383166000908152600960209081526040808320939093556008905290812080548390811061465f5761465f61551c565b9060005260206000209060050201905080600301546000146146a85760405162461bcd60e51b815260206004820152600260248201526118d960f21b6044820152606401610326565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663557ed1ba6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614708573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061472c91906154ed565b905061a8c0826001015461474091906155d4565b8110156147745760405162461bcd60e51b8152602060048201526002602482015261666f60f01b6044820152606401610326565b600382018190558154610f0a907f0000000000000000000000000000000000000000000000000000000000000000908690610e3b565b6001600160a01b0381166000908152601f6020908152604080832054601c9092529091205481106148025760405162461bcd60e51b8152602060048201526002602482015261726360f01b6044820152606401610326565b61480d8160016155d4565b6001600160a01b0383166000908152601f6020908152604080832093909355601c90529081208054839081106148455761484561551c565b90600052602060002090600502019050806003015460001461488e5760405162461bcd60e51b815260206004820152600260248201526118d960f21b6044820152606401610326565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663557ed1ba6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156148ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061491291906154ed565b905061a8c0826001015461492691906155d4565b81101561495a5760405162461bcd60e51b8152602060048201526002602482015261666f60f01b6044820152606401610326565b808260030181905550610f0a7f0000000000000000000000000000000000000000000000000000000000000000601460008154811061499b5761499b61551c565b600091825260209091206003600490920201015484546001600160a01b03909116908790615050565b60006127106149d561753084615d3a565b6149df9190615d51565b90506123108382600085613908565b81600080805b6032811015610fa8576001600160a01b038085166000908152600260205260409020541692508215610fa8576001600160a01b0383166000908152600b602052604090205482811115614a9c57600083815260066020526040808220548383529082205461271091614a65916155c1565b614a6f9089615d3a565b614a799190615d51565b9050614a888582600285614e2f565b60088210614a97575050610fa8565b819350505b8394505080614aaa90615cea565b90506149f4565b8254606090831115614ac257835492505b811580614ada57508354614ad79084906155c1565b82115b15614aef578354614aec9084906155c1565b91505b816001600160401b03811115614b0757614b07615506565b604051908082528060200260200182016040528015614b6a57816020015b614b576040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b815260200190600190039081614b255790505b5090506000835b614b7b84866155d4565b811015614c1857858181548110614b9457614b9461551c565b90600052602060002090600502016040518060a001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481525050838381518110614bf157614bf161551c565b602002602001018190525081614c0690615cea565b9150614c1181615cea565b9050614b71565b50509392505050565b60008281526026602052604090205415614c39575050565b6000828152602660208190526040822083905581614c586001866155c1565b815260200190815260200160002054905080821115612310576000614c7d82846155c1565b6005549091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116916340c10f199116612710614cc56107d086615d3a565b614ccf9190615d51565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015614d1557600080fd5b505af11580156138fe573d6000803e3d6000fd5b600082815260216020526040902080548015610f0a57828015610e345780836001016000828254614d5a91906155d4565b90915550505050505050565b60008281526022602090815260408083206001600160a01b0385168452825280832060289092529091205460ff1615614df05760018101548015614dee57600282015480821115614dec576000614dbd82846155c1565b90506000612710614dd06101f484615d3a565b614dda9190615d51565b9050614de9868260028a613908565b50505b505b505b80548015610f0a57600084815260216020526040812080546001820154919291614e1a9085615d3a565b614e249190615d51565b9050610fa885826004895b8215610f0a576001600160a01b0384166000908152600160205260409020805484919080831115614e5e578095505b85826002016000828254614e7291906155d4565b90915550614e82905086826155c1565b826000018190555060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663557ed1ba6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614eea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614f0e91906154ed565b6001600160a01b0398909816600090815260208080526040808320815160a0810183529a8b528a83019b8c52908a0198895260608a0197885260808a0196875280546001808201835591845291909220985160059091029098019788559751978701979097555050915160028401555160038301555160049091015550565b81600080805b6032811015610fa8576001600160a01b038085166000908152600260205260409020541692508215610fa8576001600160a01b0383166000908152600b60205260409020548281111561503b576000838152600d6020526040808220548383529082205461271091615004916155c1565b61500e9089615d3a565b6150189190615d51565b90506150278582600185614e2f565b60088210615036575050610fa8565b819350505b839450508061504990615cea565b9050614f93565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291516000928392908816916150b49190615d03565b6000604051808303816000865af19150503d80600081146150f1576040519150601f19603f3d011682016040523d82523d6000602084013e6150f6565b606091505b50915091508180156151205750805115806151205750808060200190518101906151209190615f31565b610fa85760405162461bcd60e51b8152602060048201526002602482015261232360f11b6044820152606401610326565b6001600160a01b038083166000908152600b6020908152604080832054600a835281842054600e8452828520549095168085526010909352908320549093929061519b90846155c1565b6000858152600c6020526040902054909150849082111561520d57846008036151c75750505050505050565b60006151d48660016155d4565b90505b60088111615207576000818152600c602052604090205483106152075790508061520081615cea565b90506151d7565b50615260565b6000858152600c60205260409020548210156152605760006152306001876155c1565b90505b6000818152600c6020526040902054909150819083101561525e5761525781615f4e565b9050615233565b505b8481146152c75780876001600160a01b03167f0cc892d72e685354f9baadfab659f254d34127183029c44470c0b0b28c0684a2876040516152a391815260200190565b60405180910390a36001600160a01b0387166000908152600b602052604090208190555b6001600160a01b03808816600090815260116020908152604080832054938716835260129091528120546152fb90836155c1565b90506141d089828a61534f565b6001600160a01b03811660009081526004602052604090205460ff1661534c576001600160a01b0381166000908152600460205260409020805460ff191660011790555b50565b60008181526022602090815260408083206001600160a01b03871684528252808320602490925290912054808314615402576001600160a01b038516600081815260246020908152604080832087905584835260228252808320938352928152828220600101546023909152919020548111156153e2576001600160a01b03861660009081526023602052604090208190555b506001600160a01b03851660009081526023602052604090205460028301555b6001820184905560028201546000818611156154255761542282876155c1565b90505b835460008681526021602052604090207f000000000000000000000000000000000000000000000000000000000000000083106154bf578183111561548c5761546e82846155c1565b81600001600082825461548191906155d4565b909155506154b79050565b818310156154b75761549e83836155c1565b8160000160008282546154b191906155c1565b90915550505b8286556141d0565b81156141d057818160000160008282546154d991906155c1565b909155505060008655505050505050505050565b6000602082840312156154ff57600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b8381101561556b5781516001600160a01b031687529582019590820190600101615546565b509495945050505050565b84815260806020820152600061558f6080830186615532565b6001600160a01b03949094166040830152506060015292915050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610ffc57610ffc6155ab565b80820180821115610ffc57610ffc6155ab565b60008083601f8401126155f957600080fd5b5081356001600160401b0381111561561057600080fd5b6020830191508360208260051b850101111561562b57600080fd5b9250929050565b6000806000806040858703121561564857600080fd5b84356001600160401b038082111561565f57600080fd5b61566b888389016155e7565b9096509450602087013591508082111561568457600080fd5b50615691878288016155e7565b95989497509550505050565b80356001600160a01b03811681146156b457600080fd5b919050565b600080604083850312156156cc57600080fd5b6156d58361569d565b946020939093013593505050565b6000602082840312156156f557600080fd5b613d498261569d565b604051601f8201601f191681016001600160401b038111828210171561572657615726615506565b604052919050565b60006001600160401b0382111561574757615747615506565b5060051b60200190565b600082601f83011261576257600080fd5b813560206157776157728361572e565b6156fe565b82815260059290921b8401810191818101908684111561579657600080fd5b8286015b848110156157b8576157ab8161569d565b835291830191830161579a565b509695505050505050565b600080604083850312156157d657600080fd5b82356001600160401b03808211156157ed57600080fd5b6157f986838701615751565b9350602085013591508082111561580f57600080fd5b5061581c85828601615751565b9150509250929050565b6000806040838503121561583957600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b8381101561556b5781518752958201959082019060010161585c565b60408152600061588b6040830185615848565b828103602084015261589d8185615848565b95945050505050565b6000806000606084860312156158bb57600080fd5b6158c48461569d565b92506158d26020850161569d565b9150604084013590509250925092565b6000806000606084860312156158f757600080fd5b6159008461569d565b95602085013595506040909401359392505050565b602080825282518282018190526000919060409081850190868401855b828110156159765781518051855286810151878601528581015186860152606080820151908601526080908101519085015260a09093019290850190600101615932565b5091979650505050505050565b6040808252835182820181905260009190606090818501906020808901865b838110156159c7578151805186528301518386015293860193908201906001016159a2565b5050868303818801528751808452928101945087810192915060005b82811015615a1a57615a0a8685518051825260208082015190830152604090810151910152565b94840194928101926001016159e3565b509398975050505050505050565b60005b83811015615a43578181015183820152602001615a2b565b50506000910152565b60008151808452615a64816020860160208601615a28565b601f01601f19169290920160200192915050565b6001600160a01b038a81168252602082018a905261012060408301819052600091615aa58483018c615a4c565b9150808a1660608501525087608084015282810360a0840152615ac88188615a4c565b60c0840196909652505060e0810192909252610100909101529695505050505050565b600080600060608486031215615b0057600080fd5b615b098461569d565b925060208401359150615b1e6040850161569d565b90509250925092565b602080825282518282018190526000919060409081850190868401855b8281101561597657815180518552868101518786015285810151868601526060908101516001600160a01b03169085015260809093019290850190600101615b44565b60008060008060008060006080888a031215615ba257600080fd5b87356001600160401b0380821115615bb957600080fd5b615bc58b838c016155e7565b909950975060208a0135915080821115615bde57600080fd5b615bea8b838c016155e7565b909750955060408a0135915080821115615c0357600080fd5b50615c108a828b016155e7565b989b979a50959894979596606090950135949350505050565b801515811461534c57600080fd5b60008060408385031215615c4a57600080fd5b82356001600160401b03811115615c6057600080fd5b615c6c85828601615751565b9250506020830135615c7d81615c29565b809150509250929050565b6020808252825182820181905260009190848201906040850190845b81811015615cde57615ccb8385518051825260208082015190830152604090810151910152565b9284019260609290920191600101615ca4565b50909695505050505050565b600060018201615cfc57615cfc6155ab565b5060010190565b60008251615d15818460208701615a28565b9190910192915050565b6020808252600190820152606f60f81b604082015260600190565b8082028115828204841417610ffc57610ffc6155ab565b600082615d6e57634e487b7160e01b600052601260045260246000fd5b500490565b85815284602082015260a060408201526000615d9260a0830186615532565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215615dc457600080fd5b8351925060208401519150604084015190509250925092565b600060208284031215615def57600080fd5b815160ff81168114613d4957600080fd5b600060208284031215615e1257600080fd5b81516001600160401b0380821115615e2957600080fd5b818401915084601f830112615e3d57600080fd5b815181811115615e4f57615e4f615506565b615e62601f8201601f19166020016156fe565b9150808252856020828501011115615e7957600080fd5b615e8a816020840160208601615a28565b50949350505050565b82815260406020820152600061258b6040830184615532565b60006020808385031215615ebf57600080fd5b82516001600160401b03811115615ed557600080fd5b8301601f81018513615ee657600080fd5b8051615ef46157728261572e565b81815260059190911b82018301908381019087831115615f1357600080fd5b928401925b828410156145b957835182529284019290840190615f18565b600060208284031215615f4357600080fd5b8151613d4981615c29565b600081615f5d57615f5d6155ab565b50600019019056fea2646970667358221220cc1209ac817bab93b379f7226a9a1d20a8e0e3458f012641cae52e81be8cca8664736f6c6343000813003360a060405234801561001057600080fd5b506040516101d33803806101d383398101604081905261002f916100b0565b33608081905260405163095ea7b360e01b8152600481019190915260001960248201526001600160a01b0382169063095ea7b3906044016020604051808303816000875af1158015610085573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100a991906100e0565b5050610102565b6000602082840312156100c257600080fd5b81516001600160a01b03811681146100d957600080fd5b9392505050565b6000602082840312156100f257600080fd5b815180151581146100d957600080fd5b60805160b961011a6000396000601d015260b96000f3fe608060405236607e57604051632a98472f60e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906355308e5e9034906024016000604051808303818588803b158015606957600080fd5b505af1158015607c573d6000803e3d6000fd5b005b600080fdfea26469706673582212207350bd390dcfa331414557f4e0142107eff882b6b20fa43c6b967d54205fb2f964736f6c63430008130033ce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4efce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4edce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4eece6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ec
Deployed Bytecode
0x6080604052600436106101ba5760003560e01c806394ebf3fe116100ec578063d727ce2f1161008a578063eada90d911610064578063eada90d914610c58578063f0b0d0a414610c78578063f2fde38b14610ca5578063ffeaeb3814610cc557600080fd5b8063d727ce2f14610bf8578063d9444b3814610c18578063de5c0fdc14610c3857600080fd5b8063bfac5ee0116100c6578063bfac5ee014610a80578063c09d0e0f14610aa0578063cc81885e14610bc0578063d004534114610be257600080fd5b806394ebf3fe14610a165780639551ae4414610a36578063a55489ed14610a6057600080fd5b80636386c1c711610159578063703198ca11610133578063703198ca1461096557806376e199fb146109925780638593b2b1146109c05780638da5cb5b146109f857600080fd5b80636386c1c71461086d578063677ba3d3146108e25780636f17d6111461090257600080fd5b80632d380242116101955780632d380242146107f6578063423feeaf1461080c57806344d248031461082c57806355308e5e1461085a57600080fd5b8062e487ec146107635780631b5cc7a71461078357806322ca129b146107b657600080fd5b3661075e577f00000000000000000000000097ecc27f79eaa69f80ab49bc97ba3750a7087ccc6001600160a01b031663070c6d216040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561021a57600080fd5b505af115801561022e573d6000803e3d6000fd5b5033925050328214905061023e57005b61024781610ce5565b34600081900361025357005b60007f00000000000000000000000097ecc27f79eaa69f80ab49bc97ba3750a7087ccc6001600160a01b031663557ed1ba6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d791906154ed565b6001600160a01b03841660009081526001602052604090206002810154919250908061032f5760405162461bcd60e51b8152602060048201526002602482015261183960f11b60448201526064015b60405180910390fd5b60408051600380825260808201909252600091602082016060803683370190505090507f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c816000815181106103865761038661551c565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000055d398326f99059ff775485246999027b3197955816001815181106103da576103da61551c565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000097ecc27f79eaa69f80ab49bc97ba3750a7087ccc8160028151811061042e5761042e61551c565b6001600160a01b0392831660209182029290920101526040516370a0823160e01b81523060048201526000917f00000000000000000000000097ecc27f79eaa69f80ab49bc97ba3750a7087ccc16906370a0823190602401602060405180830381865afa1580156104a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c791906154ed565b90507f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e6001600160a01b031663b6f9de9587600085308a6040518663ffffffff1660e01b815260040161051d9493929190615576565b6000604051808303818588803b15801561053657600080fd5b505af115801561054a573d6000803e3d6000fd5b50506040516370a0823160e01b81523060048201528493507f00000000000000000000000097ecc27f79eaa69f80ab49bc97ba3750a7087ccc6001600160a01b031692506370a082319150602401602060405180830381865afa1580156105b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d991906154ed565b6105e391906155c1565b90506106107f00000000000000000000000097ecc27f79eaa69f80ab49bc97ba3750a7087ccc8883610e3b565b8083111561061c578092505b8284600201600082825461063091906155c1565b925050819055508284600301600082825461064b91906155d4565b92505081905550826018600082825461066491906155d4565b90915550506001600160a01b038781166000908152600860209081526040808320815160a0810183528881528084018b81528184018681526060830187815260808401888152855460018082018855968a52979098209351600590970290930195865590519285019290925590516002840155516003830155915160049182015590516340c10f1960e01b81523091810191909152602481018590527f00000000000000000000000097ecc27f79eaa69f80ab49bc97ba3750a7087ccc909116906340c10f1990604401600060405180830381600087803b15801561074857600080fd5b505af115801561075c573d6000803e3d6000fd5b005b600080fd5b34801561076f57600080fd5b5061075c61077e366004615632565b610f10565b34801561078f57600080fd5b506107a361079e3660046156b9565b610fb0565b6040519081526020015b60405180910390f35b3480156107c257600080fd5b506107e66107d13660046156e3565b60046020526000908152604090205460ff1681565b60405190151581526020016107ad565b34801561080257600080fd5b506107a360185481565b34801561081857600080fd5b5061075c6108273660046157c3565b611002565b34801561083857600080fd5b5061084c610847366004615826565b611085565b6040516107ad929190615878565b61075c6108683660046156e3565b6111b9565b34801561087957600080fd5b5061088d6108883660046156e3565b6120c8565b604080519b8c5260208c019a909a52988a01979097526060890195909552608088019390935260a087019190915260c086015260e08501526101008401526101208301521515610140820152610160016107ad565b3480156108ee57600080fd5b5061075c6108fd3660046158a6565b6122aa565b34801561090e57600080fd5b5061094561091d3660046156e3565b6001602081905260009182526040909120805491810154600282015460039092015490919084565b6040805194855260208501939093529183015260608201526080016107ad565b34801561097157600080fd5b506109856109803660046158e2565b612566565b6040516107ad9190615915565b34801561099e57600080fd5b506109b26109ad3660046158e2565b612593565b6040516107ad929190615983565b3480156109cc57600080fd5b506109e06109db3660046156b9565b612759565b6040516001600160a01b0390911681526020016107ad565b348015610a0457600080fd5b506000546001600160a01b03166109e0565b348015610a2257600080fd5b5061075c610a31366004615826565b612791565b348015610a4257600080fd5b50610a4b6127cd565b6040516107ad99989796959493929190615a78565b348015610a6c57600080fd5b50610985610a7b3660046158e2565b612b58565b348015610a8c57600080fd5b5061075c610a9b366004615aeb565b612b7e565b348015610aac57600080fd5b50610b57610abb3660046156e3565b6001600160a01b039081166000818152600260209081526040808320546003835281842054600a845282852054600e8552838620548816808752601080875285882054898952600f8852868920548b16808a52918852868920548a8a5260118952878a2054848b5260128a52888b2054848c52898c20549c8c52600b909a52979099205495909a169a9399929891979296909592949293909290565b604080516001600160a01b039c8d168152602081019b909b528a0198909852958916606089015260808801949094529690911660a086015260c085015260e0840194909452610100830193909352610120820192909252610140810191909152610160016107ad565b348015610bcc57600080fd5b50610bd5612bb3565b6040516107ad9190615b27565b348015610bee57600080fd5b506107a360175481565b348015610c0457600080fd5b5061075c610c13366004615b87565b612c3d565b348015610c2457600080fd5b5061075c610c33366004615c37565b612ecc565b348015610c4457600080fd5b50610985610c533660046158e2565b613054565b348015610c6457600080fd5b5061075c610c73366004615826565b61307a565b348015610c8457600080fd5b50610c98610c933660046156e3565b6131e4565b6040516107ad9190615c88565b348015610cb157600080fd5b5061075c610cc03660046156e3565b6132e3565b348015610cd157600080fd5b50610985610ce03660046158e2565b613368565b60007f00000000000000000000000097ecc27f79eaa69f80ab49bc97ba3750a7087ccc6001600160a01b031663557ed1ba6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6991906154ed565b9050610d75828261338e565b610d7e82613480565b6000601480549050905060007f00000000000000000000000097ecc27f79eaa69f80ab49bc97ba3750a7087ccc6001600160a01b0316634efc64326040518163ffffffff1660e01b8152600401602060405180830381865afa158015610de8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0c91906154ed565b905060005b82811015610e3457610e2485828461359d565b610e2d81615cea565b9050610e11565b5050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1790529151600092861691610e9391615d03565b6000604051808303816000865af19150503d8060008114610ed0576040519150601f19603f3d011682016040523d82523d6000602084013e610ed5565b606091505b5050905080610f0a5760405162461bcd60e51b81526020600482015260016024820152602360f91b6044820152606401610326565b50505050565b6000546001600160a01b03163314610f3a5760405162461bcd60e51b815260040161032690615d1f565b8260005b81811015610fa8576000868683818110610f5a57610f5a61551c565b9050602002016020810190610f6f91906156e3565b9050610f9781868685818110610f8757610f8761551c565b9050602002013560016000613908565b50610fa181615cea565b9050610f3e565b505050505050565b6000817f00000000000000000000000000000000000000000000000000038d7ea4c6800003610fe157506000610ffc565b506001600160a01b0382166000908152601360205260409020545b92915050565b6000546001600160a01b0316331461102c5760405162461bcd60e51b815260040161032690615d1f565b815160005b81811015610f0a5761107584828151811061104e5761104e61551c565b60200260200101518483815181106110685761106861551c565b6020026020010151613a60565b61107e81615cea565b9050611031565b606080600061109485856155c1565b61109f9060016155d4565b9050806001600160401b038111156110b9576110b9615506565b6040519080825280602002602001820160405280156110e2578160200160208202803683370190505b509250806001600160401b038111156110fd576110fd615506565b604051908082528060200260200182016040528015611126578160200160208202803683370190505b5091506000855b8581116111af5760008181526019602052604090205485518690849081106111575761115761551c565b602002602001018181525050601a6000828152602001908152602001600020548483815181106111895761118961551c565b602090810291909101015261119d82615cea565b91506111a881615cea565b905061112d565b5050509250929050565b33600090815260156020526040902054326001600160a01b038316146112065760405162461bcd60e51b815260206004820152600260248201526137b960f11b6044820152606401610326565b60006014828154811061121b5761121b61551c565b600091825260209091206003600490920201908101549091506001600160a01b0316331461124857600080fd5b60007f00000000000000000000000097ecc27f79eaa69f80ab49bc97ba3750a7087ccc6001600160a01b031663557ed1ba6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112cc91906154ed565b6040516301971ca160e61b81526004810182905290915034906000907f00000000000000000000000097ecc27f79eaa69f80ab49bc97ba3750a7087ccc6001600160a01b0316906365c7284090602401602060405180830381865afa158015611339573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135d91906154ed565b90508160000361137257610fa886868361359d565b6060600080600088600003611875576001600160a01b038a166000908152601660209081526040808320838052909152902080549250826113da5760405162461bcd60e51b81526020600482015260026024820152611cdd60f21b6044820152606401610326565b6040805160038082526080820190925290602082016060803683370190505094507f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c8560008151811061142f5761142f61551c565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000055d398326f99059ff775485246999027b3197955856001815181106114835761148361551c565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000097ecc27f79eaa69f80ab49bc97ba3750a7087ccc856002815181106114d7576114d761551c565b6001600160a01b0392831660209182029290920101526040516370a0823160e01b81523060048201527f00000000000000000000000097ecc27f79eaa69f80ab49bc97ba3750a7087ccc909116906370a0823190602401602060405180830381865afa15801561154b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061156f91906154ed565b93507f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e6001600160a01b031663b6f9de9588600088308d6040518663ffffffff1660e01b81526004016115c59493929190615576565b6000604051808303818588803b1580156115de57600080fd5b505af11580156115f2573d6000803e3d6000fd5b50506040516370a0823160e01b81523060048201528793507f00000000000000000000000097ecc27f79eaa69f80ab49bc97ba3750a7087ccc6001600160a01b031692506370a082319150602401602060405180830381865afa15801561165d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061168191906154ed565b61168b91906155c1565b93506116b87f00000000000000000000000097ecc27f79eaa69f80ab49bc97ba3750a7087ccc8c86610e3b565b6116c48b60008861359d565b85816002015482600101546116d991906155d4565b101561170c5760405162461bcd60e51b8152602060048201526002602482015261727760f01b6044820152606401610326565b82848111156117185750835b6001600160a01b038c166000908152601c60209081526040808320815160a0810183528581528084018e81529281018581526060820186815260808301878152845460018181018755958952969097209251600590960290920194855592519184019190915590516002830155516003820155905160049091015561179d81856155c1565b8083556001600160a01b038d166000908152601e60205260408120805492965083929091906117cd9084906155c1565b90915550506001600160a01b038c166000908152601e60205260409020546117f490613c8d565b6001600160a01b038d166000908152601d602052604090205490935083811115611836576118318d61182686846155c1565b60018560018d613d50565b61184f565b61184f8d61184483876155c1565b60008560018d613d50565b816027600082825461186191906155c1565b909155505050505050505050505050505050565b8760020154612710611886886141dc565b6118909190615d3a565b61189a9190615d51565b60038901546040516340c10f1960e01b81526001600160a01b039182166004820152602481018390529193507f00000000000000000000000097ecc27f79eaa69f80ab49bc97ba3750a7087ccc16906340c10f1990604401600060405180830381600087803b15801561190c57600080fd5b505af1158015611920573d6000803e3d6000fd5b506002925061192d915050565b604051908082528060200260200182016040528015611956578160200160208202803683370190505b5093507f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c8460008151811061198d5761198d61551c565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000055d398326f99059ff775485246999027b3197955846001815181106119e1576119e161551c565b6001600160a01b0392831660209182029290920101526040516370a0823160e01b81523060048201527f00000000000000000000000055d398326f99059ff775485246999027b3197955909116906370a0823190602401602060405180830381865afa158015611a55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7991906154ed565b90507f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e6001600160a01b031663b6f9de9587600087308c6040518663ffffffff1660e01b8152600401611acf9493929190615576565b6000604051808303818588803b158015611ae857600080fd5b505af1158015611afc573d6000803e3d6000fd5b50506040516370a0823160e01b81523060048201528493507f00000000000000000000000055d398326f99059ff775485246999027b31979556001600160a01b031692506370a082319150602401602060405180830381865afa158015611b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b8b91906154ed565b611b9591906155c1565b90507f00000000000000000000000055d398326f99059ff775485246999027b319795584600081518110611bcb57611bcb61551c565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000097ecc27f79eaa69f80ab49bc97ba3750a7087ccc84600181518110611c1f57611c1f61551c565b6001600160a01b03928316602091820292909201015260405163034dafe760e41b8152600481018790527f00000000000000000000000097ecc27f79eaa69f80ab49bc97ba3750a7087ccc909116906334dafe7090602401602060405180830381865afa158015611c94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb891906154ed565b7f00000000000000000000000097ecc27f79eaa69f80ab49bc97ba3750a7087ccc6001600160a01b0316637ff9b5966040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d3a91906154ed565b10612025576000611d4c600283615d51565b6040516370a0823160e01b81523060048201529091507f00000000000000000000000097ecc27f79eaa69f80ab49bc97ba3750a7087ccc6001600160a01b0316906370a0823190602401602060405180830381865afa158015611db3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dd791906154ed565b604051635c11d79560e01b81529094506001600160a01b037f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e1690635c11d79590611e2f9084906000908a9030908f90600401615d73565b600060405180830381600087803b158015611e4957600080fd5b505af1158015611e5d573d6000803e3d6000fd5b50506040516370a0823160e01b81523060048201528692507f00000000000000000000000097ecc27f79eaa69f80ab49bc97ba3750a7087ccc6001600160a01b031691506370a0823190602401602060405180830381865afa158015611ec7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eeb91906154ed565b611ef591906155c1565b93506001600160a01b037f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e1663e8e337007f00000000000000000000000097ecc27f79eaa69f80ab49bc97ba3750a7087ccc7f00000000000000000000000055d398326f99059ff775485246999027b3197955878560008061dead611f7c426102586155d4565b60405160e08a901b6001600160e01b03191681526001600160a01b039889166004820152968816602488015260448701959095526064860193909352608485019190915260a484015290921660c482015260e4810191909152610104016060604051808303816000875af1158015611ff8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201c9190615daf565b505050506120af565b604051635c11d79560e01b81526001600160a01b037f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e1690635c11d7959061207c908490600090899061dead908e90600401615d73565b600060405180830381600087803b15801561209657600080fd5b505af11580156120aa573d6000803e3d6000fd5b505050505b6120bc8a8a8484896143af565b50505050505050505050565b60008060008060008060008060008060008b6001600160a01b0316319a507f00000000000000000000000097ecc27f79eaa69f80ab49bc97ba3750a7087ccc6001600160a01b03166370a082318d6040518263ffffffff1660e01b815260040161214191906001600160a01b0391909116815260200190565b602060405180830381865afa15801561215e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061218291906154ed565b995061218d8c61449e565b6001600160a01b038d166000908152601d6020908152604080832054602990925290912054919a50985096506121c48c6001610fb0565b9550601060008d6001600160a01b03166001600160a01b03168152602001908152602001600020549450601260008d6001600160a01b03166001600160a01b03168152602001908152602001600020549350600960008d6001600160a01b03166001600160a01b03168152602001908152602001600020549250601f60008d6001600160a01b03166001600160a01b03168152602001908152602001600020549150602860008d6001600160a01b03166001600160a01b0316815260200190815260200160002060009054906101000a900460ff16905091939597999b90929496989a50565b336001600160a01b037f00000000000000000000000097ecc27f79eaa69f80ab49bc97ba3750a7087ccc16146122df57600080fd5b807f00000000000000000000000000000000000000000000000000038d7ea4c6800003612315576123108383613a60565b505050565b6000196001600160a01b038316016123925760007f0000000000000000000000000000000000000000000000000de0b6b3a764000061235661271084615d3a565b6123609190615d51565b905061138881111561237157506113885b6001600160a01b039093166000908152601360205260409020929092555050565b8060000361244157816001600160a01b0316836001600160a01b0316036123bc5761231083610ce5565b6001600160a01b03821630036123d557612310836145c4565b6001600160a01b03821660009081526015602052604081205460148054919291839081106124055761240561551c565b6000918252602090912060049091020160038101549091506001600160a01b0390811690851603610e345781600003610e3457610e34856147aa565b816001600160a01b0316601460008154811061245f5761245f61551c565b60009182526020909120600360049092020101546001600160a01b031603612518576123108360008361249185613c8d565b7f00000000000000000000000097ecc27f79eaa69f80ab49bc97ba3750a7087ccc6001600160a01b0316634efc64326040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124ef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251391906154ed565b6143af565b6001600160a01b0382166000908152601360205260409020548015610f0a5760006127106125468385615d3a565b6125509190615d51565b905061255c85826149c4565b610e3484826149ee565b6001600160a01b0383166000908152602080526040902060609061258b908484614ab1565b949350505050565b60608060006125a285856155c1565b6125ad9060016155d4565b9050806001600160401b038111156125c7576125c7615506565b60405190808252806020026020018201604052801561260c57816020015b60408051808201909152600080825260208201528152602001906001900390816125e55790505b509250806001600160401b0381111561262757612627615506565b60405190808252806020026020018201604052801561267c57816020015b61266960405180606001604052806000815260200160008152602001600081525090565b8152602001906001900390816126455790505b5091506000855b85811161274e57600081815260216020908152604091829020825180840190935280548352600101549082015285518690849081106126c4576126c461551c565b60209081029190910181019190915260008281526022825260408082206001600160a01b038c168352835290819020815160608101835281548152600182015493810193909352600201549082015284518590849081106127275761272761551c565b60200260200101819052508161273c90615cea565b915061274781615cea565b9050612683565b505050935093915050565b6003602052816000526040600020818154811061277557600080fd5b6000918252602090912001546001600160a01b03169150829050565b6000546001600160a01b031633146127bb5760405162461bcd60e51b815260040161032690615d1f565b6000918252600c602052604090912055565b6000806060600080606060008060007f00000000000000000000000055d398326f99059ff775485246999027b319795598507f00000000000000000000000055d398326f99059ff775485246999027b31979556001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561285d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128819190615ddd565b60ff1697507f00000000000000000000000055d398326f99059ff775485246999027b31979556001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156128e4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261290c9190810190615e00565b96507f00000000000000000000000097ecc27f79eaa69f80ab49bc97ba3750a7087ccc95507f00000000000000000000000097ecc27f79eaa69f80ab49bc97ba3750a7087ccc6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561298f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129b39190615ddd565b60ff1694507f00000000000000000000000097ecc27f79eaa69f80ab49bc97ba3750a7087ccc6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015612a16573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612a3e9190810190615e00565b93507f00000000000000000000000097ecc27f79eaa69f80ab49bc97ba3750a7087ccc6001600160a01b0316637ff9b5966040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ac291906154ed565b92507f00000000000000000000000097ecc27f79eaa69f80ab49bc97ba3750a7087ccc6001600160a01b031663557ed1ba6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b4691906154ed565b91506027549050909192939495969798565b6001600160a01b038316600090815260086020526040902060609061258b908484614ab1565b6000546001600160a01b03163314612ba85760405162461bcd60e51b815260040161032690615d1f565b612310838284610e3b565b60606014805480602002602001604051908101604052809291908181526020016000905b82821015612c3457600084815260209081902060408051608081018252600486029092018054835260018082015484860152600282015492840192909252600301546001600160a01b031660608301529083529092019101612bd7565b50505050905090565b6000546001600160a01b03163314612c675760405162461bcd60e51b815260040161032690615d1f565b7f00000000000000000000000097ecc27f79eaa69f80ab49bc97ba3750a7087ccc6001600160a01b031663070c6d216040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612cc257600080fd5b505af1158015612cd6573d6000803e3d6000fd5b5050601480548993506000925084908110612cf357612cf361551c565b9060005260206000209060040201905060007f00000000000000000000000097ecc27f79eaa69f80ab49bc97ba3750a7087ccc6001600160a01b0316634efc64326040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d8791906154ed565b905060005b83811015612ebf5760008b8b83818110612da857612da861551c565b9050602002016020810190612dbd91906156e3565b60038501549091506001600160a01b037f00000000000000000000000097ecc27f79eaa69f80ab49bc97ba3750a7087ccc8116916340c10f1991168c8c86818110612e0a57612e0a61551c565b6040516001600160e01b031960e087901b1681526001600160a01b0390941660048501526020029190910135602483015250604401600060405180830381600087803b158015612e5957600080fd5b505af1158015612e6d573d6000803e3d6000fd5b50505050612eae81878c8c86818110612e8857612e8861551c565b905060200201358b8b87818110612ea157612ea161551c565b90506020020135876143af565b50612eb881615cea565b9050612d8c565b5050505050505050505050565b6000546001600160a01b0316331480612f0d5750336001600160a01b037f000000000000000000000000a9ea103e8f2ceb7263705b3fa2cabb6a71c0828d16145b612f1657600080fd5b60007f00000000000000000000000097ecc27f79eaa69f80ab49bc97ba3750a7087ccc6001600160a01b0316634efc64326040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f9a91906154ed565b905060005b8351811015610f0a578260286000868481518110612fbf57612fbf61551c565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff02191690831515021790555081602960008684815181106130155761301561551c565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550808061304c90615cea565b915050612f9f565b6001600160a01b038316600090815260076020526040902060609061258b908484614ab1565b336001600160a01b037f00000000000000000000000097ecc27f79eaa69f80ab49bc97ba3750a7087ccc16146130af57600080fd5b806000036130bb575050565b600082815260196020526040902054156130d3575050565b60008281526019602052604081208290556130ef6001846155c1565b90506130fd81602754614c21565b601b5460000361313357601b839055605a601a600061311d8660016155d4565b8152602081019190915260400160002055505050565b6000838152601a6020526040812054900361231057600081815260196020908152604080832054601a90925290912054818411156131875760468111156131825761317f600a826155c1565b90505b6131a6565b818410156131a657606e8110156131a6576131a3600a826155d4565b90505b6000858152601a6020908152604080832084905585835260259091529020548015610fa857600084815260256020526040812055610fa88482614d29565b601454606090806001600160401b0381111561320257613202615506565b60405190808252806020026020018201604052801561325757816020015b61324460405180606001604052806000815260200160008152602001600081525090565b8152602001906001900390816132205790505b50915060005b818110156132dc576001600160a01b0384166000908152601660209081526040808320848452825291829020825160608101845281548152600182015492810192909252600201549181019190915283518490839081106132c0576132c061551c565b6020026020010181905250806132d590615cea565b905061325d565b5050919050565b6000546001600160a01b0316331461330d5760405162461bcd60e51b815260040161032690615d1f565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166000908152601c6020526040902060609061258b908484614ab1565b6001600160a01b03821660009081526001602081905260409091209081015482036133b857505050565b60006133c38461449e565b6001830184905590508015610f0a57808260020160008282546133e691906155d4565b90915550508154819083906000906133ff9084906155c1565b90915550506001600160a01b0393909316600090815260208080526040808320815160a081018352968752868301958652908601838152606087018481526080880185815283546001808201865594875294909520975160059094029097019283559451908201559251600284015592516003830155509051600490910155565b6001600160a01b03808216600090815260296020908152604080832054815163277e321960e11b8152915190947f00000000000000000000000097ecc27f79eaa69f80ab49bc97ba3750a7087ccc1692634efc643292600480820193918290030181865afa1580156134f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061351a91906154ed565b905081600003613544576001600160a01b0390921660009081526029602052604090209190915550565b600061355183601e6155d4565b90508181111561355e5750805b6001600160a01b0384166000908152602960205260409020819055825b81811015610e345761358d8186614d66565b61359681615cea565b905061357b565b6001600160a01b03831660009081526016602090815260408083208584529091528120805490918190036135d2575050505050565b60018201548015806135e357508381145b156135f057505050505050565b60028301548461360082846155d4565b1061360e5750505050505050565b600061361a83876155c1565b905086600003613791577f00000000000000000000000097ecc27f79eaa69f80ab49bc97ba3750a7087ccc6001600160a01b031663070c6d216040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561367f57600080fd5b505af1158015613693573d6000803e3d6000fd5b50505050600082826136a591906155c1565b9050601e8111156136b45750601e5b808660020160008282546136c891906155d4565b909155506000905080806136dc86886155d4565b6136e79060016155d4565b90505b898111613734576000818152601a60205260409020546127109061370e908a615d3a565b6137189190615d51565b61372290846155d4565b925060019182019101601e82106136ea575b506137428b8360038d614e2f565b61374c8b83614f8d565b61271061375b6107d084615d3a565b6137659190615d51565b60008a815260256020526040812080549091906137839084906155d4565b909155506138fe9350505050565b6000601488815481106137a6576137a661551c565b6000918252602082206004909102018054909250908184106137c9575091508160015b60006137d586866155c1565b9050808960020160008282546137eb91906155d4565b9250508190555060008161271086600101548b6138089190615d3a565b6138129190615d51565b61381c9190615d3a565b905061382b8d8260038f614e2f565b6138358d82614f8d565b6127106138446107d083615d3a565b61384e9190615d51565b60008c8152602560205260408120805490919061386c9084906155d4565b909155505082156138f8576003850154601480546138e4927f00000000000000000000000097ecc27f79eaa69f80ab49bc97ba3750a7087ccc926001600160a01b03909116916000906138c1576138c161551c565b60009182526020909120600360049092020101546001600160a01b03168c615050565b6138f38d60008b60008f6143af565b60008a555b50505050505b5050505050505050565b826017600082825461391a91906155d4565b9250508190555060007f00000000000000000000000097ecc27f79eaa69f80ab49bc97ba3750a7087ccc6001600160a01b031663557ed1ba6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613981573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139a591906154ed565b90506139b1858261338e565b6001600160a01b03851660009081526001602052604081208054909186918391906139dd9084906155d4565b9091555050506001600160a01b039094166000908152600760209081526040808320815160a081018352968752868301978852908601948552606086019384526080860183815281546001818101845592855292909320955160059092029095019081559451938501939093559051600284015551600383015551600490910155565b6001600160a01b038083166000908152600260205260409020541615613aac5760405162461bcd60e51b81526020600482015260016024820152603160f91b6044820152606401610326565b6001600160a01b03821660009081526004602052604090205460ff1615613af95760405162461bcd60e51b81526020600482015260016024820152606160f81b6044820152606401610326565b6001600160a01b03821660009081526003602052604090205415613b435760405162461bcd60e51b81526020600482015260016024820152601d60fa1b6044820152606401610326565b806001600160a01b0316826001600160a01b03161480613b6a57506001600160a01b038216155b80613b7c57506001600160a01b038116155b15613b85575050565b6001600160a01b03808316600081815260026020908152604080832080549587166001600160a01b031996871681179091558084526003835281842080546001810182559085528385200180549096169094179094559181526029909152908120549003613c89577f00000000000000000000000097ecc27f79eaa69f80ab49bc97ba3750a7087ccc6001600160a01b0316634efc64326040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c6f91906154ed565b6001600160a01b0382166000908152602960205260409020555b5050565b6000807f00000000000000000000000097ecc27f79eaa69f80ab49bc97ba3750a7087ccc6001600160a01b0316637ff9b5966040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d1291906154ed565b90507f0000000000000000000000000000000000000000000000000de0b6b3a7640000613d3f8483615d3a565b613d499190615d51565b9392505050565b8315613d89576001600160a01b0386166000908152601d602052604081208054879290613d7e9084906155c1565b90915550613db79050565b6001600160a01b0386166000908152601d602052604081208054879290613db19084906155d4565b90915550505b81613dea576001600160a01b0386166000908152601e602052604081208054859290613de49084906155d4565b90915550505b6001600160a01b038087166000908152600260205260409020541680156141d3578660005b60328110156141d0576001600160a01b0380831660009081526002602052604090205416925082156141d0576001600160a01b0382166000908152601060205260409020548715613e99576001600160a01b0384166000908152600a6020526040812080548b9290613e829084906155c1565b90915550613e92905089826155c1565b9050613ed4565b6001600160a01b0384166000908152600a6020526040812080548b9290613ec19084906155d4565b90915550613ed1905089826155d4565b90505b6001600160a01b038316600090815260106020908152604080832084905560129091529020548615613f3f576001600160a01b038516600090815260116020526040812080548a9290613f289084906155c1565b90915550613f38905088826155c1565b9050613f7a565b6001600160a01b038516600090815260116020526040812080548a9290613f679084906155d4565b90915550613f77905088826155d4565b90505b6001600160a01b0380851660008181526012602090815260408083208690558985168352600e825280832054600f9092529091205490831692169082900361408e578a15614089576001600160a01b03811660009081526010602052604090205480851015614087576001600160a01b038881166000818152600e602090815260409182902080546001600160a01b0319168786169081179091558251868152948c1691850191909152908301889052917f560a1ade523f722abd6c8292ea96b463bf9530c0d2c37bccc890b838df4256819060600160405180910390a36001600160a01b038881166000908152600f6020526040902080546001600160a01b0319169189169190911790555b505b6141ae565b6001600160a01b03821660009081526010602052604090205484111561415f576001600160a01b038281166000818152601060209081526040918290205482518981529182019390935290810191909152818816918916907f560a1ade523f722abd6c8292ea96b463bf9530c0d2c37bccc890b838df4256819060600160405180910390a36001600160a01b038781166000908152600e6020908152604080832080546001600160a01b03199081168c871617909155600f90925290912080549091169184169190911790556141ae565b6001600160a01b0381166000908152601060205260409020548411156141ae576001600160a01b038781166000908152600f6020526040902080546001600160a01b0319169188169190911790555b6141b88789615151565b86955050505050806141c990615cea565b9050613e0f565b50505b50505050505050565b60408051600380825260808201909252600091829190602082016060803683370190505090507f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c816000815181106142365761423661551c565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000055d398326f99059ff775485246999027b31979558160018151811061428a5761428a61551c565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000097ecc27f79eaa69f80ab49bc97ba3750a7087ccc816002815181106142de576142de61551c565b6001600160a01b03928316602091820292909201015260405163d06ca61f60e01b81527f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e9091169063d06ca61f9061433c9086908590600401615e93565b600060405180830381865afa158015614359573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526143819190810190615eac565b6001825161438f91906155c1565b8151811061439f5761439f61551c565b6020026020010151915050919050565b6143ba85858361359d565b6143c385615308565b6001600160a01b038516600090815260166020908152604080832087845290915281209085900361444357600181015415806144125750818160020154826001015461440f91906155d4565b10155b6144435760405162461bcd60e51b8152602060048201526002602482015261727760f01b6044820152606401610326565b600181018290556000600282018190558154859183916144649084906155d4565b90915550508215610fa85761447f8684600087600087613d50565b836027600082825461449191906155d4565b9091555050505050505050565b6001600160a01b038116600090815260016020526040812080548083036144c9575060009392505050565b60008260010154905060007f00000000000000000000000097ecc27f79eaa69f80ab49bc97ba3750a7087ccc6001600160a01b031663557ed1ba6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614532573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061455691906154ed565b905081811161456b5750600095945050505050565b600061457783836155c1565b90506000620151808261271061458e600a89615d3a565b6145989190615d51565b6145a29190615d3a565b6145ac9190615d51565b9050848111156145b95750835b979650505050505050565b6001600160a01b038116600090815260096020908152604080832054600890925290912054811061461c5760405162461bcd60e51b8152602060048201526002602482015261726360f01b6044820152606401610326565b6146278160016155d4565b6001600160a01b0383166000908152600960209081526040808320939093556008905290812080548390811061465f5761465f61551c565b9060005260206000209060050201905080600301546000146146a85760405162461bcd60e51b815260206004820152600260248201526118d960f21b6044820152606401610326565b60007f00000000000000000000000097ecc27f79eaa69f80ab49bc97ba3750a7087ccc6001600160a01b031663557ed1ba6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614708573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061472c91906154ed565b905061a8c0826001015461474091906155d4565b8110156147745760405162461bcd60e51b8152602060048201526002602482015261666f60f01b6044820152606401610326565b600382018190558154610f0a907f00000000000000000000000097ecc27f79eaa69f80ab49bc97ba3750a7087ccc908690610e3b565b6001600160a01b0381166000908152601f6020908152604080832054601c9092529091205481106148025760405162461bcd60e51b8152602060048201526002602482015261726360f01b6044820152606401610326565b61480d8160016155d4565b6001600160a01b0383166000908152601f6020908152604080832093909355601c90529081208054839081106148455761484561551c565b90600052602060002090600502019050806003015460001461488e5760405162461bcd60e51b815260206004820152600260248201526118d960f21b6044820152606401610326565b60007f00000000000000000000000097ecc27f79eaa69f80ab49bc97ba3750a7087ccc6001600160a01b031663557ed1ba6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156148ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061491291906154ed565b905061a8c0826001015461492691906155d4565b81101561495a5760405162461bcd60e51b8152602060048201526002602482015261666f60f01b6044820152606401610326565b808260030181905550610f0a7f00000000000000000000000097ecc27f79eaa69f80ab49bc97ba3750a7087ccc601460008154811061499b5761499b61551c565b600091825260209091206003600490920201015484546001600160a01b03909116908790615050565b60006127106149d561753084615d3a565b6149df9190615d51565b90506123108382600085613908565b81600080805b6032811015610fa8576001600160a01b038085166000908152600260205260409020541692508215610fa8576001600160a01b0383166000908152600b602052604090205482811115614a9c57600083815260066020526040808220548383529082205461271091614a65916155c1565b614a6f9089615d3a565b614a799190615d51565b9050614a888582600285614e2f565b60088210614a97575050610fa8565b819350505b8394505080614aaa90615cea565b90506149f4565b8254606090831115614ac257835492505b811580614ada57508354614ad79084906155c1565b82115b15614aef578354614aec9084906155c1565b91505b816001600160401b03811115614b0757614b07615506565b604051908082528060200260200182016040528015614b6a57816020015b614b576040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b815260200190600190039081614b255790505b5090506000835b614b7b84866155d4565b811015614c1857858181548110614b9457614b9461551c565b90600052602060002090600502016040518060a001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481525050838381518110614bf157614bf161551c565b602002602001018190525081614c0690615cea565b9150614c1181615cea565b9050614b71565b50509392505050565b60008281526026602052604090205415614c39575050565b6000828152602660208190526040822083905581614c586001866155c1565b815260200190815260200160002054905080821115612310576000614c7d82846155c1565b6005549091506001600160a01b037f00000000000000000000000097ecc27f79eaa69f80ab49bc97ba3750a7087ccc8116916340c10f199116612710614cc56107d086615d3a565b614ccf9190615d51565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015614d1557600080fd5b505af11580156138fe573d6000803e3d6000fd5b600082815260216020526040902080548015610f0a57828015610e345780836001016000828254614d5a91906155d4565b90915550505050505050565b60008281526022602090815260408083206001600160a01b0385168452825280832060289092529091205460ff1615614df05760018101548015614dee57600282015480821115614dec576000614dbd82846155c1565b90506000612710614dd06101f484615d3a565b614dda9190615d51565b9050614de9868260028a613908565b50505b505b505b80548015610f0a57600084815260216020526040812080546001820154919291614e1a9085615d3a565b614e249190615d51565b9050610fa885826004895b8215610f0a576001600160a01b0384166000908152600160205260409020805484919080831115614e5e578095505b85826002016000828254614e7291906155d4565b90915550614e82905086826155c1565b826000018190555060007f00000000000000000000000097ecc27f79eaa69f80ab49bc97ba3750a7087ccc6001600160a01b031663557ed1ba6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614eea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614f0e91906154ed565b6001600160a01b0398909816600090815260208080526040808320815160a0810183529a8b528a83019b8c52908a0198895260608a0197885260808a0196875280546001808201835591845291909220985160059091029098019788559751978701979097555050915160028401555160038301555160049091015550565b81600080805b6032811015610fa8576001600160a01b038085166000908152600260205260409020541692508215610fa8576001600160a01b0383166000908152600b60205260409020548281111561503b576000838152600d6020526040808220548383529082205461271091615004916155c1565b61500e9089615d3a565b6150189190615d51565b90506150278582600185614e2f565b60088210615036575050610fa8565b819350505b839450508061504990615cea565b9050614f93565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291516000928392908816916150b49190615d03565b6000604051808303816000865af19150503d80600081146150f1576040519150601f19603f3d011682016040523d82523d6000602084013e6150f6565b606091505b50915091508180156151205750805115806151205750808060200190518101906151209190615f31565b610fa85760405162461bcd60e51b8152602060048201526002602482015261232360f11b6044820152606401610326565b6001600160a01b038083166000908152600b6020908152604080832054600a835281842054600e8452828520549095168085526010909352908320549093929061519b90846155c1565b6000858152600c6020526040902054909150849082111561520d57846008036151c75750505050505050565b60006151d48660016155d4565b90505b60088111615207576000818152600c602052604090205483106152075790508061520081615cea565b90506151d7565b50615260565b6000858152600c60205260409020548210156152605760006152306001876155c1565b90505b6000818152600c6020526040902054909150819083101561525e5761525781615f4e565b9050615233565b505b8481146152c75780876001600160a01b03167f0cc892d72e685354f9baadfab659f254d34127183029c44470c0b0b28c0684a2876040516152a391815260200190565b60405180910390a36001600160a01b0387166000908152600b602052604090208190555b6001600160a01b03808816600090815260116020908152604080832054938716835260129091528120546152fb90836155c1565b90506141d089828a61534f565b6001600160a01b03811660009081526004602052604090205460ff1661534c576001600160a01b0381166000908152600460205260409020805460ff191660011790555b50565b60008181526022602090815260408083206001600160a01b03871684528252808320602490925290912054808314615402576001600160a01b038516600081815260246020908152604080832087905584835260228252808320938352928152828220600101546023909152919020548111156153e2576001600160a01b03861660009081526023602052604090208190555b506001600160a01b03851660009081526023602052604090205460028301555b6001820184905560028201546000818611156154255761542282876155c1565b90505b835460008681526021602052604090207f0000000000000000000000000000000000000000000000008ac7230489e8000083106154bf578183111561548c5761546e82846155c1565b81600001600082825461548191906155d4565b909155506154b79050565b818310156154b75761549e83836155c1565b8160000160008282546154b191906155c1565b90915550505b8286556141d0565b81156141d057818160000160008282546154d991906155c1565b909155505060008655505050505050505050565b6000602082840312156154ff57600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b8381101561556b5781516001600160a01b031687529582019590820190600101615546565b509495945050505050565b84815260806020820152600061558f6080830186615532565b6001600160a01b03949094166040830152506060015292915050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610ffc57610ffc6155ab565b80820180821115610ffc57610ffc6155ab565b60008083601f8401126155f957600080fd5b5081356001600160401b0381111561561057600080fd5b6020830191508360208260051b850101111561562b57600080fd5b9250929050565b6000806000806040858703121561564857600080fd5b84356001600160401b038082111561565f57600080fd5b61566b888389016155e7565b9096509450602087013591508082111561568457600080fd5b50615691878288016155e7565b95989497509550505050565b80356001600160a01b03811681146156b457600080fd5b919050565b600080604083850312156156cc57600080fd5b6156d58361569d565b946020939093013593505050565b6000602082840312156156f557600080fd5b613d498261569d565b604051601f8201601f191681016001600160401b038111828210171561572657615726615506565b604052919050565b60006001600160401b0382111561574757615747615506565b5060051b60200190565b600082601f83011261576257600080fd5b813560206157776157728361572e565b6156fe565b82815260059290921b8401810191818101908684111561579657600080fd5b8286015b848110156157b8576157ab8161569d565b835291830191830161579a565b509695505050505050565b600080604083850312156157d657600080fd5b82356001600160401b03808211156157ed57600080fd5b6157f986838701615751565b9350602085013591508082111561580f57600080fd5b5061581c85828601615751565b9150509250929050565b6000806040838503121561583957600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b8381101561556b5781518752958201959082019060010161585c565b60408152600061588b6040830185615848565b828103602084015261589d8185615848565b95945050505050565b6000806000606084860312156158bb57600080fd5b6158c48461569d565b92506158d26020850161569d565b9150604084013590509250925092565b6000806000606084860312156158f757600080fd5b6159008461569d565b95602085013595506040909401359392505050565b602080825282518282018190526000919060409081850190868401855b828110156159765781518051855286810151878601528581015186860152606080820151908601526080908101519085015260a09093019290850190600101615932565b5091979650505050505050565b6040808252835182820181905260009190606090818501906020808901865b838110156159c7578151805186528301518386015293860193908201906001016159a2565b5050868303818801528751808452928101945087810192915060005b82811015615a1a57615a0a8685518051825260208082015190830152604090810151910152565b94840194928101926001016159e3565b509398975050505050505050565b60005b83811015615a43578181015183820152602001615a2b565b50506000910152565b60008151808452615a64816020860160208601615a28565b601f01601f19169290920160200192915050565b6001600160a01b038a81168252602082018a905261012060408301819052600091615aa58483018c615a4c565b9150808a1660608501525087608084015282810360a0840152615ac88188615a4c565b60c0840196909652505060e0810192909252610100909101529695505050505050565b600080600060608486031215615b0057600080fd5b615b098461569d565b925060208401359150615b1e6040850161569d565b90509250925092565b602080825282518282018190526000919060409081850190868401855b8281101561597657815180518552868101518786015285810151868601526060908101516001600160a01b03169085015260809093019290850190600101615b44565b60008060008060008060006080888a031215615ba257600080fd5b87356001600160401b0380821115615bb957600080fd5b615bc58b838c016155e7565b909950975060208a0135915080821115615bde57600080fd5b615bea8b838c016155e7565b909750955060408a0135915080821115615c0357600080fd5b50615c108a828b016155e7565b989b979a50959894979596606090950135949350505050565b801515811461534c57600080fd5b60008060408385031215615c4a57600080fd5b82356001600160401b03811115615c6057600080fd5b615c6c85828601615751565b9250506020830135615c7d81615c29565b809150509250929050565b6020808252825182820181905260009190848201906040850190845b81811015615cde57615ccb8385518051825260208082015190830152604090810151910152565b9284019260609290920191600101615ca4565b50909695505050505050565b600060018201615cfc57615cfc6155ab565b5060010190565b60008251615d15818460208701615a28565b9190910192915050565b6020808252600190820152606f60f81b604082015260600190565b8082028115828204841417610ffc57610ffc6155ab565b600082615d6e57634e487b7160e01b600052601260045260246000fd5b500490565b85815284602082015260a060408201526000615d9260a0830186615532565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215615dc457600080fd5b8351925060208401519150604084015190509250925092565b600060208284031215615def57600080fd5b815160ff81168114613d4957600080fd5b600060208284031215615e1257600080fd5b81516001600160401b0380821115615e2957600080fd5b818401915084601f830112615e3d57600080fd5b815181811115615e4f57615e4f615506565b615e62601f8201601f19166020016156fe565b9150808252856020828501011115615e7957600080fd5b615e8a816020840160208601615a28565b50949350505050565b82815260406020820152600061258b6040830184615532565b60006020808385031215615ebf57600080fd5b82516001600160401b03811115615ed557600080fd5b8301601f81018513615ee657600080fd5b8051615ef46157728261572e565b81815260059190911b82018301908381019087831115615f1357600080fd5b928401925b828410156145b957835182529284019290840190615f18565b600060208284031215615f4357600080fd5b8151613d4981615c29565b600081615f5d57615f5d6155ab565b50600019019056fea2646970667358221220cc1209ac817bab93b379f7226a9a1d20a8e0e3458f012641cae52e81be8cca8664736f6c63430008130033
Deployed Bytecode Sourcemap
48519:320:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17710:6;-1:-1:-1;;;;;17703:30:0;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17764:10:0;;-1:-1:-1;;17789:9:0;:20;;;-1:-1:-1;17785:59:0;;17826:7;17785:59;17854:17;17863:7;17854:8;:17::i;:::-;17902:9;17882:17;17926:14;;;17922:53;;17957:7;17922:53;17985:15;18010:6;-1:-1:-1;;;;;18003:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18066:18:0;;18038:25;18066:18;;;:9;:18;;;;;18112;;;;17985:42;;-1:-1:-1;18066:18:0;18149:10;18141:25;;;;-1:-1:-1;;;18141:25:0;;405:2:1;18141:25:0;;;387:21:1;444:1;424:18;;;417:29;-1:-1:-1;;;462:18:1;;;455:32;504:18;;18141:25:0;;;;;;;;;18201:16;;;18215:1;18201:16;;;;;;;;;18177:21;;18201:16;;;;;;;;;;-1:-1:-1;18201:16:0;18177:40;;18238:5;18228:4;18233:1;18228:7;;;;;;;;:::i;:::-;;;;;;:15;-1:-1:-1;;;;;18228:15:0;;;-1:-1:-1;;;;;18228:15:0;;;;;18264:5;18254:4;18259:1;18254:7;;;;;;;;:::i;:::-;;;;;;:15;-1:-1:-1;;;;;18254:15:0;;;-1:-1:-1;;;;;18254:15:0;;;;;18290:6;18280:4;18285:1;18280:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18280:16:0;;;:7;;;;;;;;;:16;18329:39;;-1:-1:-1;;;18329:39:0;;18362:4;18329:39;;;943:51:1;18307:19:0;;18336:6;18329:24;;;;916:18:1;;18329:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18307:61;;18379:11;-1:-1:-1;;;;;18379:62:0;;18467:9;18492:1;18495:4;18509;18516:7;18379:145;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18549:39:0;;-1:-1:-1;;;18549:39:0;;18582:4;18549:39;;;943:51:1;18591:11:0;;-1:-1:-1;18556:6:0;-1:-1:-1;;;;;18549:24:0;;-1:-1:-1;18549:24:0;;-1:-1:-1;916:18:1;;18549:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:53;;;;:::i;:::-;18535:67;;18613:43;18627:6;18635:7;18644:11;18613:13;:43::i;:::-;18680:11;18671:6;:20;18667:73;;;18717:11;18708:20;;18667:73;18772:6;18750:8;:18;;;:28;;;;;;;:::i;:::-;;;;;;;;18815:6;18789:8;:22;;;:32;;;;;;;:::i;:::-;;;;;;;;18848:6;18832:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;18865:22:0;;;;;;;:13;:22;;;;;;;;18907:171;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18865:224;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19100:42;;-1:-1:-1;;;19100:42:0;;19128:4;19100:42;;;2555:51:1;;;;2622:18;;;2615:34;;;19107:6:0;19100:19;;;;;;2528:18:1;;19100:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48519:320;;;;17332:325;;;;;;;;;;-1:-1:-1;17332:325:0;;;;;:::i;:::-;;:::i;25173:216::-;;;;;;;;;;-1:-1:-1;25173:216:0;;;;;:::i;:::-;;:::i;:::-;;;4393:25:1;;;4381:2;4366:18;25173:216:0;;;;;;;;4932:39;;;;;;;;;;-1:-1:-1;4932:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4785:14:1;;4778:22;4760:41;;4748:2;4733:18;4932:39:0;4620:187:1;6553:27:0;;;;;;;;;;;;;;;;21706:263;;;;;;;;;;-1:-1:-1;21706:263:0;;;;;:::i;:::-;;:::i;44355:466::-;;;;;;;;;;-1:-1:-1;44355:466:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;27100:4506::-;;;;;;:::i;:::-;;:::i;45884:1005::-;;;;;;;;;;-1:-1:-1;45884:1005:0;;;;;:::i;:::-;;:::i;:::-;;;;8138:25:1;;;8194:2;8179:18;;8172:34;;;;8222:18;;;8215:34;;;;8280:2;8265:18;;8258:34;;;;8323:3;8308:19;;8301:35;;;;8367:3;8352:19;;8345:35;;;;8411:3;8396:19;;8389:35;8455:3;8440:19;;8433:35;8499:3;8484:19;;8477:35;8543:3;8528:19;;8521:35;8600:15;8593:23;8587:3;8572:19;;8565:52;8125:3;8110:19;45884:1005:0;7716:907:1;23505:1660:0;;;;;;;;;;-1:-1:-1;23505:1660:0;;;;;:::i;:::-;;:::i;4627:45::-;;;;;;;;;;-1:-1:-1;4627:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9192:25:1;;;9248:2;9233:18;;9226:34;;;;9276:18;;;9269:34;9334:2;9319:18;;9312:34;9179:3;9164:19;4627:45:0;8961:391:1;22437:222:0;;;;;;;;;;-1:-1:-1;22437:222:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;46899:611::-;;;;;;;;;;-1:-1:-1;46899:611:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;4732:44::-;;;;;;;;;;-1:-1:-1;4732:44:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;961:32:1;;;943:51;;931:2;916:18;4732:44:0;797:203:1;1393:79:0;;;;;;;;;;-1:-1:-1;1431:7:0;1458:6;-1:-1:-1;;;;;1458:6:0;1393:79;;20860:119;;;;;;;;;;-1:-1:-1;20860:119:0;;;;;:::i;:::-;;:::i;45139:737::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;22206:223::-;;;;;;;;;;-1:-1:-1;22206:223:0;;;;;:::i;:::-;;:::i;20683:167::-;;;;;;;;;;-1:-1:-1;20683:167:0;;;;;:::i;:::-;;:::i;47518:994::-;;;;;;;;;;-1:-1:-1;47518:994:0;;;;;:::i;:::-;-1:-1:-1;;;;;47979:17:0;;;47622:15;47979:17;;;:8;:17;;;;;;;;;48019:7;:16;;;;;:23;48066:11;:20;;;;;;48112:13;:22;;;;;;;;48163:31;;;:17;:31;;;;;;;48221:23;;;:14;:23;;;;;;;;48274:32;;;;;;;;;;48329:19;;;:10;:19;;;;;;48376:30;;;:16;:30;;;;;;48435:31;;;;;;;48485:19;;;:10;:19;;;;;;;;47979:17;;;;;48019:23;;48066:20;;48112:22;;48163:31;;48221:23;;48274:32;;48329:19;;48376:30;;48485:19;47518:994;;;;;-1:-1:-1;;;;;14652:15:1;;;14634:34;;14699:2;14684:18;;14677:34;;;;14727:18;;14720:34;;;;14790:15;;;14785:2;14770:18;;14763:43;14837:3;14822:19;;14815:35;;;;14887:15;;;;14614:3;14866:19;;14859:44;14934:3;14919:19;;14912:35;14978:3;14963:19;;14956:35;;;;15022:3;15007:19;;15000:35;;;;15066:3;15051:19;;15044:35;;;;15110:3;15095:19;;15088:36;;;;14583:3;14568:19;47518:994:0;14168:962:1;44237:108:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;6516:30::-;;;;;;;;;;;;;;;;31616:636;;;;;;;;;;-1:-1:-1;31616:636:0;;;;;:::i;:::-;;:::i;41621:352::-;;;;;;;;;;-1:-1:-1;41621:352:0;;;;;:::i;:::-;;:::i;21977:221::-;;;;;;;;;;-1:-1:-1;21977:221:0;;;;;:::i;:::-;;:::i;25656:1203::-;;;;;;;;;;-1:-1:-1;25656:1203:0;;;;;:::i;:::-;;:::i;44829:302::-;;;;;;;;;;-1:-1:-1;44829:302:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1574:160::-;;;;;;;;;;-1:-1:-1;1574:160:0;;;;;:::i;:::-;;:::i;22667:226::-;;;;;;;;;;-1:-1:-1;22667:226:0;;;;;:::i;:::-;;:::i;43845:384::-;43899:15;43924:6;-1:-1:-1;;;;;43917:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43899:42;;43954:33;43970:7;43979;43954:15;:33::i;:::-;44000:22;44014:7;44000:13;:22::i;:::-;44033:11;44047:12;:19;;;;44033:33;;44077:13;44100:6;-1:-1:-1;;;;;44093:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44077:41;;44134:9;44129:93;44153:3;44149:1;:7;44129:93;;;44180:30;44192:7;44201:1;44204:5;44180:11;:30::i;:::-;44158:3;;;:::i;:::-;;;44129:93;;;;43888:341;;;43845:384;:::o;16696:222::-;16822:45;;;-1:-1:-1;;;;;2573:32:1;;;16822:45:0;;;2555:51:1;2622:18;;;;2615:34;;;16822:45:0;;;;;;;;;;2528:18:1;;;;16822:45:0;;;;;;;-1:-1:-1;;;;;16822:45:0;-1:-1:-1;;;16822:45:0;;;16797:81;;-1:-1:-1;;16797:10:0;;;:81;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16778:100;;;16897:7;16889:21;;;;-1:-1:-1;;;16889:21:0;;19212:2:1;16889:21:0;;;19194::1;19251:1;19231:18;;;19224:29;-1:-1:-1;;;19269:18:1;;;19262:31;19310:18;;16889:21:0;19010:324:1;16889:21:0;16767:151;16696:222;;;:::o;17332:325::-;1520:6;;-1:-1:-1;;;;;1520:6:0;1530:10;1520:20;1512:34;;;;-1:-1:-1;;;1512:34:0;;;;;;;:::i;:::-;17479:8;17465:11:::1;17505:145;17529:3;17525:1;:7;17505:145;;;17554:15;17572:8;;17581:1;17572:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;17554:29;;17598:40;17613:7;17622:6;;17629:1;17622:9;;;;;;;:::i;:::-;;;;;;;17633:1;17636;17598:14;:40::i;:::-;-1:-1:-1::0;17534:3:0::1;::::0;::::1;:::i;:::-;;;17505:145;;;;17454:203;17332:325:::0;;;;:::o;25173:216::-;25267:7;25309:6;25291:14;:24;25287:65;;-1:-1:-1;25339:1:0;25332:8;;25287:65;-1:-1:-1;;;;;;25369:12:0;;;;;;:8;:12;;;;;;25173:216;;;;;:::o;21706:263::-;1520:6;;-1:-1:-1;;;;;1520:6:0;1530:10;1520:20;1512:34;;;;-1:-1:-1;;;1512:34:0;;;;;;;:::i;:::-;21840:14;;21826:11:::1;21865:97;21889:3;21885:1;:7;21865:97;;;21914:36;21927:7;21935:1;21927:10;;;;;;;;:::i;:::-;;;;;;;21939:7;21947:1;21939:10;;;;;;;;:::i;:::-;;;;;;;21914:12;:36::i;:::-;21894:3;::::0;::::1;:::i;:::-;;;21865:97;;44355:466:::0;44449:23;;44509:11;44523;44529:5;44523:3;:11;:::i;:::-;:15;;44537:1;44523:15;:::i;:::-;44509:29;;44572:3;-1:-1:-1;;;;;44558:18:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44558:18:0;;44549:27;;44609:3;-1:-1:-1;;;;;44595:18:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44595:18:0;-1:-1:-1;44587:26:0;-1:-1:-1;44624:13:0;44669:5;44652:162;44681:3;44676:1;:8;44652:162;;44722:11;;;;:8;:11;;;;;;44706:13;;:6;;44713:5;;44706:13;;;;;;:::i;:::-;;;;;;:27;;;;;44763:14;:17;44778:1;44763:17;;;;;;;;;;;;44748:5;44754;44748:12;;;;;;;;:::i;:::-;;;;;;;;;;:32;44795:7;;;:::i;:::-;;-1:-1:-1;44686:3:0;;;:::i;:::-;;;44652:162;;;;44498:323;;44355:466;;;;;:::o;27100:4506::-;27192:10;27163:13;27179:24;;;:12;:24;;;;;;27222:9;-1:-1:-1;;;;;27222:20:0;;;27214:35;;;;-1:-1:-1;;;27214:35:0;;19870:2:1;27214:35:0;;;19852:21:1;19909:1;19889:18;;;19882:29;-1:-1:-1;;;19927:18:1;;;19920:32;19969:18;;27214:35:0;19668:325:1;27214:35:0;27260:26;27289:12;27302:5;27289:19;;;;;;;;:::i;:::-;;;;;;;;;27327:15;27289:19;;;;;27327:15;;;;27289:19;;-1:-1:-1;;;;;;27327:15:0;27346:10;27327:29;27319:38;;;;;;27368:15;27393:6;-1:-1:-1;;;;;27386:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27477:30;;-1:-1:-1;;;27477:30:0;;;;;4393:25:1;;;27368:42:0;;-1:-1:-1;27441:9:0;;27421:17;;27484:6;-1:-1:-1;;;;;27477:21:0;;;;4366:18:1;;27477:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27461:46;;27527:9;27522:1;:14;27518:102;;27553:34;27565:7;27574:5;27581;27553:11;:34::i;27518:102::-;27630:21;27662:19;27692;27722:18;27762:5;27757:1;:10;27753:2147;;-1:-1:-1;;;;;27809:19:0;;27784:22;27809:19;;;:10;:19;;;;;;;;:22;;;;;;;;27860:11;;;-1:-1:-1;27896:15:0;27888:30;;;;-1:-1:-1;;;27888:30:0;;20200:2:1;27888:30:0;;;20182:21:1;20239:1;20219:18;;;20212:29;-1:-1:-1;;;20257:18:1;;;20250:32;20299:18;;27888:30:0;19998:325:1;27888:30:0;27940:16;;;27954:1;27940:16;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27940:16:0;27933:23;;27981:5;27971:4;27976:1;27971:7;;;;;;;;:::i;:::-;;;;;;:15;-1:-1:-1;;;;;27971:15:0;;;-1:-1:-1;;;;;27971:15:0;;;;;28011:5;28001:4;28006:1;28001:7;;;;;;;;:::i;:::-;;;;;;:15;-1:-1:-1;;;;;28001:15:0;;;-1:-1:-1;;;;;28001:15:0;;;;;28041:6;28031:4;28036:1;28031:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28031:16:0;;;:7;;;;;;;;;:16;28076:39;;-1:-1:-1;;;28076:39:0;;28109:4;28076:39;;;943:51:1;28083:6:0;28076:24;;;;;;916:18:1;;28076:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28062:53;;28130:11;-1:-1:-1;;;;;28130:62:0;;28222:9;28251:1;28254:4;28268;28275:7;28130:153;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28312:39:0;;-1:-1:-1;;;28312:39:0;;28345:4;28312:39;;;943:51:1;28354:11:0;;-1:-1:-1;28319:6:0;-1:-1:-1;;;;;28312:24:0;;-1:-1:-1;28312:24:0;;-1:-1:-1;916:18:1;;28312:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:53;;;;:::i;:::-;28298:67;;28380:43;28394:6;28402:7;28411:11;28380:13;:43::i;:::-;28440:30;28452:7;28461:1;28464:5;28440:11;:30::i;:::-;28529:5;28511:4;:14;;;28495:4;:13;;;:30;;;;:::i;:::-;:39;;28487:54;;;;-1:-1:-1;;;28487:54:0;;20530:2:1;28487:54:0;;;20512:21:1;20569:1;20549:18;;;20542:29;-1:-1:-1;;;20587:18:1;;;20580:32;20629:18;;28487:54:0;20328:325:1;28487:54:0;28582:11;28612:27;;;28608:95;;;-1:-1:-1;28676:11:0;28608:95;-1:-1:-1;;;;;28719:23:0;;;;;;:14;:23;;;;;;;;28766:202;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28719:264;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28998:28;28804:13;28998:28;;:::i;:::-;29041:25;;;-1:-1:-1;;;;;29081:20:0;;29041:11;29081:20;;;:11;:20;;;;;:37;;28998:28;;-1:-1:-1;29105:13:0;;29081:20;;29041:11;29081:37;;29105:13;;29081:37;:::i;:::-;;;;-1:-1:-1;;;;;;;29162:20:0;;;;;;:11;:20;;;;;;29148:35;;:13;:35::i;:::-;-1:-1:-1;;;;;29218:19:0;;29198:17;29218:19;;;:10;:19;;;;;;29135:48;;-1:-1:-1;29258:22:0;;;29254:565;;;29301:229;29341:7;29371:22;29383:10;29371:9;:22;:::i;:::-;29416:4;29443:13;29479:4;29506:5;29301:17;:229::i;:::-;29254:565;;;29573:230;29613:7;29643:22;29656:9;29643:10;:22;:::i;:::-;29688:5;29716:13;29752:4;29779:5;29573:17;:230::i;:::-;29854:13;29833:17;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;;;;;;;;;27100:4506:0:o;27753:2147::-;30002:6;:14;;;4881:5;29938:31;29959:9;29938:20;:31::i;:::-;:47;;;;:::i;:::-;29937:79;;;;:::i;:::-;30047:15;;;;30027:49;;-1:-1:-1;;;30027:49:0;;-1:-1:-1;;;;;30047:15:0;;;30027:49;;;2555:51:1;2622:18;;;2615:34;;;29910:106:0;;-1:-1:-1;30034:6:0;30027:19;;;;2528:18:1;;30027:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30108:1:0;;-1:-1:-1;30094:16:0;;-1:-1:-1;;30094:16:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30094:16:0;;30087:23;;30131:5;30121:4;30126:1;30121:7;;;;;;;;:::i;:::-;;;;;;:15;-1:-1:-1;;;;;30121:15:0;;;-1:-1:-1;;;;;30121:15:0;;;;;30157:5;30147:4;30152:1;30147:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30147:15:0;;;:7;;;;;;;;;:15;30186:38;;-1:-1:-1;;;30186:38:0;;30218:4;30186:38;;;943:51:1;30193:5:0;30186:23;;;;;;916:18:1;;30186:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30173:51;;30235:11;-1:-1:-1;;;;;30235:62:0;;30323:9;30348:1;30351:4;30365;30372:7;30235:145;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30404:38:0;;-1:-1:-1;;;30404:38:0;;30436:4;30404:38;;;943:51:1;30445:10:0;;-1:-1:-1;30411:5:0;-1:-1:-1;;;;;30404:23:0;;-1:-1:-1;30404:23:0;;-1:-1:-1;916:18:1;;30404:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;;;;:::i;:::-;30391:64;;30476:5;30466:4;30471:1;30466:7;;;;;;;;:::i;:::-;;;;;;:15;-1:-1:-1;;;;;30466:15:0;;;-1:-1:-1;;;;;30466:15:0;;;;;30502:6;30492:4;30497:1;30492:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30492:16:0;;;:7;;;;;;;;;:16;30554:30;;-1:-1:-1;;;30554:30:0;;;;;4393:25:1;;;30561:6:0;30554:23;;;;;;4366:18:1;;30554:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30530:6;-1:-1:-1;;;;;30523:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;30519:1013;;30601:14;30618;30631:1;30618:10;:14;:::i;:::-;30661:39;;-1:-1:-1;;;30661:39:0;;30694:4;30661:39;;;943:51:1;30601:31:0;;-1:-1:-1;30668:6:0;-1:-1:-1;;;;;30661:24:0;;;;916:18:1;;30661:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30715:206;;-1:-1:-1;;;30715:206:0;;30647:53;;-1:-1:-1;;;;;;30715:11:0;:65;;;;:206;;30799:6;;30824:1;;30844:4;;30875;;30899:7;;30715:206;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30950:39:0;;-1:-1:-1;;;30950:39:0;;30983:4;30950:39;;;943:51:1;30992:11:0;;-1:-1:-1;30957:6:0;-1:-1:-1;;;;;30950:24:0;;-1:-1:-1;30950:24:0;;916:18:1;;30950:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:53;;;;:::i;:::-;30936:67;-1:-1:-1;;;;;;31018:11:0;:24;;31061:6;31086:5;30936:67;31140:6;31165:1;;31213:6;31239:21;:15;31257:3;31239:21;:::i;:::-;31018:257;;;;;;-1:-1:-1;;;;;;31018:257:0;;;-1:-1:-1;;;;;22055:15:1;;;31018:257:0;;;22037:34:1;22107:15;;;22087:18;;;22080:43;22139:18;;;22132:34;;;;22182:18;;;22175:34;;;;22225:19;;;22218:35;;;;22269:19;;;22262:35;22334:15;;;22313:19;;;22306:44;22366:19;;;22359:35;;;;21971:19;;31018:257:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;30586:701;30519:1013;;;31308:212;;-1:-1:-1;;;31308:212:0;;-1:-1:-1;;;;;31308:11:0;:65;;;;:212;;31392:10;;31421:1;;31441:4;;31472:6;;31498:7;;31308:212;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30519:1013;31544:54;31551:7;31560:5;31567:11;31580:10;31592:5;31544:6;:54::i;:::-;27152:4454;;;;;;;;;27100:4506;:::o;45884:1005::-;45984:15;46010:20;46041:21;46073:17;46101:21;46133:15;46159:24;46194:23;46228:22;46261:24;46296:20;46350:7;-1:-1:-1;;;;;46350:15:0;;46340:25;;46398:6;-1:-1:-1;;;;;46391:24:0;;46416:7;46391:33;;;;;;;;;;;;;;-1:-1:-1;;;;;961:32:1;;;;943:51;;931:2;916:18;;797:203;46391:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46376:48;;46451:23;46466:7;46451:14;:23::i;:::-;-1:-1:-1;;;;;46497:19:0;;;;;;:10;:19;;;;;;;;;46543:14;:23;;;;;;;46435:39;;-1:-1:-1;46497:19:0;-1:-1:-1;46543:23:0;-1:-1:-1;46587:22:0;46508:7;46607:1;46587:10;:22::i;:::-;46577:32;;46639:17;:26;46657:7;-1:-1:-1;;;;;46639:26:0;-1:-1:-1;;;;;46639:26:0;;;;;;;;;;;;;46620:45;;46694:16;:25;46711:7;-1:-1:-1;;;;;46694:25:0;-1:-1:-1;;;;;46694:25:0;;;;;;;;;;;;;46676:43;;46747:15;:24;46763:7;-1:-1:-1;;;;;46747:24:0;-1:-1:-1;;;;;46747:24:0;;;;;;;;;;;;;46730:41;;46801:17;:26;46819:7;-1:-1:-1;;;;;46801:26:0;-1:-1:-1;;;;;46801:26:0;;;;;;;;;;;;;46782:45;;46856:16;:25;46873:7;-1:-1:-1;;;;;46856:25:0;-1:-1:-1;;;;;46856:25:0;;;;;;;;;;;;;;;;;;;;;;46838:43;;45884:1005;;;;;;;;;;;;;:::o;23505:1660::-;23634:10;-1:-1:-1;;;;;23648:6:0;23634:20;;23626:29;;;;;;23688:6;23670:14;:24;23666:100;;23711:22;23724:4;23730:2;23711:12;:22::i;:::-;23505:1660;;;:::o;23666:100::-;-1:-1:-1;;;;;;;23782:17:0;;;23778:258;;23816:14;23860:10;23834:22;4881:5;23834:6;:22;:::i;:::-;23833:37;;;;:::i;:::-;23816:54;;5989:4;23889:6;:20;23885:81;;;-1:-1:-1;5989:4:0;23885:81;-1:-1:-1;;;;;23980:14:0;;;;;;;:8;:14;;;;;:23;;;;-1:-1:-1;;23505:1660:0:o;23778:258::-;24057:6;24052:1;:11;24048:565;;24094:2;-1:-1:-1;;;;;24086:10:0;:4;-1:-1:-1;;;;;24086:10:0;;24082:499;;24117:14;24126:4;24117:8;:14::i;24082:499::-;-1:-1:-1;;;;;24157:19:0;;24165:4;24157:19;24153:428;;24199:18;24212:4;24199:12;:18::i;24153:428::-;-1:-1:-1;;;;;24285:16:0;;24258:24;24285:16;;;:12;:16;;;;;;24349:12;:30;;24285:16;;24258:24;24285:16;;24349:30;;;;;;:::i;:::-;;;;;;;;;;;;;;24408:15;;;;24349:30;;-1:-1:-1;;;;;;24408:15:0;;;24402:21;;;;24398:168;;24457:16;24452:1;:21;24448:99;;24504:19;24518:4;24504:13;:19::i;24048:565::-;24657:2;-1:-1:-1;;;;;24629:30:0;:12;24642:1;24629:15;;;;;;;;:::i;:::-;;;;;;;;;:24;:15;;;;;:24;;-1:-1:-1;;;;;24629:24:0;:30;24625:257;;24676:173;24701:4;24724:1;24744:6;24769:21;24783:6;24769:13;:21::i;:::-;24816:6;-1:-1:-1;;;;;24809:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24676:6;:173::i;24625:257::-;-1:-1:-1;;;;;24910:12:0;;24892:15;24910:12;;;:8;:12;;;;;;24939:11;;24935:223;;24967:21;4881:5;24992:16;25001:7;24992:6;:16;:::i;:::-;24991:34;;;;:::i;:::-;24967:58;;25040:30;25050:4;25056:13;25040:9;:30::i;:::-;25085:40;25107:2;25111:13;25085:21;:40::i;22437:222::-;-1:-1:-1;;;;;22614:21:0;;;;;;:12;:21;;;;;22567:15;;22602:49;;22637:5;22644:6;22602:11;:49::i;:::-;22595:56;22437:222;-1:-1:-1;;;;22437:222:0:o;46899:611::-;47048:32;;47151:11;47165;47171:5;47165:3;:11;:::i;:::-;:15;;47179:1;47165:15;:::i;:::-;47151:29;;47223:3;-1:-1:-1;;;;;47203:24:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;47203:24:0;;;;;;;;;;;;;;;;47191:36;;47274:3;-1:-1:-1;;;;;47254:24:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;47254:24:0;;;;;;;;;;;;;;;;-1:-1:-1;47238:40:0;-1:-1:-1;47289:13:0;47334:5;47317:186;47346:3;47341:1;:8;47317:186;;47390:16;;;;:13;:16;;;;;;;;;47371:35;;;;;;;;;;;;;;;;;;;:16;;:9;;47381:5;;47371:16;;;;;;:::i;:::-;;;;;;;;;;;:35;;;;47444:16;;;;:13;:16;;;;;;-1:-1:-1;;;;;47444:25:0;;;;;;;;;;47421:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:20;;:13;;47435:5;;47421:20;;;;;;:::i;:::-;;;;;;:48;;;;47484:7;;;;:::i;:::-;;-1:-1:-1;47351:3:0;;;:::i;:::-;;;47317:186;;;;47140:370;;46899:611;;;;;;:::o;4732:44::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4732:44:0;;-1:-1:-1;4732:44:0;;-1:-1:-1;4732:44:0:o;20860:119::-;1520:6;;-1:-1:-1;;;;;1520:6:0;1530:10;1520:20;1512:34;;;;-1:-1:-1;;;1512:34:0;;;;;;;:::i;:::-;20944:18:::1;::::0;;;:15:::1;:18;::::0;;;;;:27;20860:119::o;45139:737::-;45208:12;45231:20;45262:24;45297:13;45321:21;45353:25;45389:18;45418:15;45444:24;45499:5;45492:12;;45537:5;-1:-1:-1;;;;;45530:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45515:39;;;;45585:5;-1:-1:-1;;;;;45578:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;45578:22:0;;;;;;;;;;;;:::i;:::-;45565:35;;45619:6;45611:14;;45659:6;-1:-1:-1;;;;;45652:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45636:41;;;;45709:6;-1:-1:-1;;;;;45702:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;45702:23:0;;;;;;;;;;;;:::i;:::-;45688:37;;45756:6;-1:-1:-1;;;;;45749:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45736:40;;45804:6;-1:-1:-1;;;;;45797:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45787:34;;45851:17;;45832:36;;45139:737;;;;;;;;;:::o;22206:223::-;-1:-1:-1;;;;;22383:22:0;;;;;;:13;:22;;;;;22336:15;;22371:50;;22407:5;22414:6;22371:11;:50::i;20683:167::-;1520:6;;-1:-1:-1;;;;;1520:6:0;1530:10;1520:20;1512:34;;;;-1:-1:-1;;;1512:34:0;;;;;;;:::i;:::-;20810:32:::1;20824:5;20831:2;20835:6;20810:13;:32::i;44237:108::-:0;44285:20;44325:12;44318:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;44318:19:0;;;;;;;;;;;;;;;;;;;;;;44237:108;:::o;31616:636::-;1520:6;;-1:-1:-1;;;;;1520:6:0;1530:10;1520:20;1512:34;;;;-1:-1:-1;;;1512:34:0;;;;;;;:::i;:::-;31826:6:::1;-1:-1:-1::0;;;;;31819:30:0::1;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;31931:12:0::1;:24:::0;;31876:8;;-1:-1:-1;31862:11:0::1;::::0;-1:-1:-1;31944:10:0;;31931:24;::::1;;;;;:::i;:::-;;;;;;;;;;;31902:53;;31966:13;31989:6;-1:-1:-1::0;;;;;31982:23:0::1;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31966:41;;32023:9;32018:227;32042:3;32038:1;:7;32018:227;;;32067:15;32085:8;;32094:1;32085:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;32131:15;::::0;::::1;::::0;32067:29;;-1:-1:-1;;;;;;32118:6:0::1;32111:19:::0;::::1;::::0;::::1;::::0;32131:15:::1;32148:6:::0;;32155:1;32148:9;;::::1;;;;;:::i;:::-;32111:47;::::0;-1:-1:-1;;;;;;32111:47:0::1;::::0;;;;;;-1:-1:-1;;;;;2573:32:1;;;32111:47:0::1;::::0;::::1;2555:51:1::0;32148:9:0::1;;::::0;;;::::1;;2622:18:1::0;;;2615:34;-1:-1:-1;2528:18:1;;32111:47:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;32173:60;32180:7;32189:10;32201:6;;32208:1;32201:9;;;;;;;:::i;:::-;;;;;;;32212:10;;32223:1;32212:13;;;;;;;:::i;:::-;;;;;;;32227:5;32173:6;:60::i;:::-;-1:-1:-1::0;32047:3:0::1;::::0;::::1;:::i;:::-;;;32018:227;;;;31808:444;;;31616:636:::0;;;;;;;:::o;41621:352::-;41727:6;;-1:-1:-1;;;;;41727:6:0;41713:10;:20;;:43;;-1:-1:-1;41737:10:0;-1:-1:-1;;;;;41751:5:0;41737:19;;41713:43;41705:52;;;;;;41768:13;41791:6;-1:-1:-1;;;;;41784:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41768:41;;41825:6;41820:146;41841:4;:11;41837:1;:15;41820:146;;;41902:6;41874:16;:25;41891:4;41896:1;41891:7;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;41874:25:0;-1:-1:-1;;;;;41874:25:0;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;41949:5;41923:14;:23;41938:4;41943:1;41938:7;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;41923:23:0;-1:-1:-1;;;;;41923:23:0;;;;;;;;;;;;:31;;;;41854:3;;;;;:::i;:::-;;;;41820:146;;21977:221;-1:-1:-1;;;;;22153:21:0;;;;;;:12;:21;;;;;22106:15;;22141:49;;22176:5;22183:6;22141:11;:49::i;25656:1203::-;25731:10;-1:-1:-1;;;;;25745:6:0;25731:20;;25723:29;;;;;;25772:5;25767:1;:10;25763:49;;25656:1203;;:::o;25763:49::-;25842:1;25826:13;;;:8;:13;;;;;;:17;25822:56;;25656:1203;;:::o;25822:56::-;25888:13;;;;:8;:13;;;;;:21;;;25937:7;25943:1;25897:3;25937:7;:::i;:::-;25920:24;;25957:42;25973:6;25981:17;;25957:15;:42::i;:::-;26019:9;;26014:1;:14;26010:842;;26045:9;:15;;;26101:2;26075:14;:23;26090:7;26057:3;26096:1;26090:7;:::i;:::-;26075:23;;;;;;;;;;;-1:-1:-1;26075:23:0;:28;23505:1660;;;:::o;26010:842::-;26130:19;;;;:14;:19;;;;;;26125:24;;26121:731;;26166:16;26185;;;:8;:16;;;;;;;;;26234:14;:22;;;;;;;26275:16;;;26271:302;;;25589:2;26318:7;:28;26314:90;;;26371:13;26382:2;26371:13;;:::i;:::-;;;26314:90;26271:302;;;26437:8;26429:5;:16;26425:148;;;25644:3;26472:7;:28;26468:90;;;26525:13;26536:2;26525:13;;:::i;:::-;;;26468:90;26587:19;;;;:14;:19;;;;;;;;:29;;;26658:22;;;:14;:22;;;;;;26699:20;;26695:146;;26765:1;26740:22;;;:14;:22;;;;;:26;26785:40;26755:6;26808:16;26785:14;:40::i;44829:302::-;44961:12;:19;44910:24;;44961:19;-1:-1:-1;;;;;44999:20:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;44999:20:0;;;;;;;;;;;;;;;;;44991:28;;45035:9;45030:94;45054:3;45050:1;:7;45030:94;;;-1:-1:-1;;;;;45090:19:0;;;;;;:10;:19;;;;;;;;:22;;;;;;;;;45079:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:8;;:5;;45110:1;;45079:8;;;;;;:::i;:::-;;;;;;:33;;;;45059:3;;;;:::i;:::-;;;45030:94;;;;44936:195;44829:302;;;:::o;1574:160::-;1520:6;;-1:-1:-1;;;;;1520:6:0;1530:10;1520:20;1512:34;;;;-1:-1:-1;;;1512:34:0;;;;;;;:::i;:::-;1681:6:::1;::::0;;1660:38:::1;::::0;-1:-1:-1;;;;;1660:38:0;;::::1;::::0;1681:6;::::1;::::0;1660:38:::1;::::0;::::1;1709:6;:17:::0;;-1:-1:-1;;;;;;1709:17:0::1;-1:-1:-1::0;;;;;1709:17:0;;;::::1;::::0;;;::::1;::::0;;1574:160::o;22667:226::-;-1:-1:-1;;;;;22846:23:0;;;;;;:14;:23;;;;;22799:15;;22834:51;;22871:5;22878:6;22834:11;:51::i;19160:742::-;-1:-1:-1;;;;;19266:18:0;;19238:25;19266:18;;;:9;:18;;;;;;;;19310:24;;;;19299:35;;19295:74;;19351:7;19160:742;;:::o;19295:74::-;19379:21;19403:23;19418:7;19403:14;:23::i;:::-;19437:24;;;:34;;;19379:47;-1:-1:-1;19486:17:0;;19482:413;;19542:13;19520:8;:18;;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;;19570:36:0;;19593:13;;19570:8;;:19;;:36;;19593:13;;19570:36;:::i;:::-;;;;-1:-1:-1;;;;;;;19621:21:0;;;;;;;;:12;:21;;;;;;;19666:202;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19621:262;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19621:262:0;;;;;;;19160:742::o;42040:549::-;-1:-1:-1;;;;;42117:23:0;;;42099:15;42117:23;;;:14;:23;;;;;;;;;42167:25;;-1:-1:-1;;;42167:25:0;;;;42117:23;;42174:6;42167:23;;;;:25;;;;;;;;;;;:23;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42151:41;;42212:7;42207:1;:12;42203:97;;-1:-1:-1;;;;;42236:23:0;;;;;;;:14;:23;;;;;:31;;;;-1:-1:-1;42040:549:0:o;42203:97::-;42312:18;42333:12;:7;42343:2;42333:12;:::i;:::-;42312:33;;42373:5;42360:10;:18;42356:69;;;-1:-1:-1;42408:5:0;42356:69;-1:-1:-1;;;;;42435:23:0;;;;;;:14;:23;;;;;:36;;;42499:7;42482:100;42512:10;42508:1;:14;42482:100;;;42544:26;42559:1;42562:7;42544:14;:26::i;:::-;42524:3;;;:::i;:::-;;;42482:100;;33148:2593;-1:-1:-1;;;;;33294:19:0;;33269:22;33294:19;;;:10;:19;;;;;;;;:26;;;;;;;;33353:11;;33294:26;;33381:16;;;33377:55;;33414:7;;33148:2593;;;:::o;33377:55::-;33461:13;;;;33491;;;:34;;;33520:5;33508:8;:17;33491:34;33487:73;;;33542:7;;;33148:2593;;;:::o;33487:73::-;33590:14;;;;33645:5;33621:20;33590:14;33621:8;:20;:::i;:::-;:29;33617:68;;33667:7;;;;33148:2593;;;:::o;33617:68::-;33695:13;33711:16;33719:8;33711:5;:16;:::i;:::-;33695:32;;33747:5;33742:1;:10;33738:1996;;33778:6;-1:-1:-1;;;;;33771:30:0;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33818:18;33847:9;33839:5;:17;;;;:::i;:::-;33818:38;;33888:2;33875:10;:15;33871:71;;;-1:-1:-1;33924:2:0;33871:71;33974:10;33956:4;:14;;;:28;;;;;;;:::i;:::-;;;;-1:-1:-1;33999:19:0;;-1:-1:-1;33999:19:0;;34074:20;34085:9;34074:8;:20;:::i;:::-;:24;;34097:1;34074:24;:::i;:::-;34062:36;;34057:360;34105:5;34100:1;:10;34057:360;;34166:17;;;;:14;:17;;;;;;4881:5;;34152:31;;:11;:31;:::i;:::-;34151:70;;;;:::i;:::-;34135:87;;;;:::i;:::-;;-1:-1:-1;34274:3:0;34300;;;;34274;34350:2;34345:7;;34057:360;34341:61;34057:360;;34431:42;34442:7;34451:11;34464:1;34467:5;34431:10;:42::i;:::-;34488:40;34507:7;34516:11;34488:18;:40::i;:::-;4881:5;34586:28;37652:4;34586:11;:28;:::i;:::-;34585:63;;;;:::i;:::-;34543:21;;;;:14;:21;;;;;:105;;:21;;;:105;;;;;:::i;:::-;;;;-1:-1:-1;33738:1996:0;;-1:-1:-1;;;;33738:1996:0;;34681:26;34710:12;34723:5;34710:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;34763:15;;34710:19;;-1:-1:-1;34763:15:0;34827:17;;;34823:108;;-1:-1:-1;34873:8:0;-1:-1:-1;34873:8:0;34911:4;34823:108;34945:18;34966:17;34974:9;34966:5;:17;:::i;:::-;34945:38;;35016:10;34998:4;:14;;;:28;;;;;;;:::i;:::-;;;;;;;;35041:19;35135:10;4881:5;35079:6;:18;;;35065:11;:32;;;;:::i;:::-;35064:67;;;;:::i;:::-;35063:82;;;;:::i;:::-;35041:104;;35160:42;35171:7;35180:11;35193:1;35196:5;35160:10;:42::i;:::-;35217:40;35236:7;35245:11;35217:18;:40::i;:::-;4881:5;35315:28;37652:4;35315:11;:28;:::i;:::-;35314:63;;;;:::i;:::-;35272:21;;;;:14;:21;;;;;:105;;:21;;;:105;;;;;:::i;:::-;;;;-1:-1:-1;;35394:329:0;;;;35496:15;;;;35534:12;:15;;35427:184;;35467:6;;-1:-1:-1;;;;;35496:15:0;;;;;;35534;;;;:::i;:::-;;;;;;;;;:24;:15;;;;;:24;;-1:-1:-1;;;;;35534:24:0;35581:11;35427:17;:184::i;:::-;35632:41;35639:7;35648:1;35651:11;35664:1;35667:5;35632:6;:41::i;:::-;35706:1;35692:15;;35394:329;34666:1068;;;;;33738:1996;33258:2483;;;;;33148:2593;;;:::o;14957:636::-;15130:10;15111:15;;:29;;;;;;;:::i;:::-;;;;;;;;15151:15;15176:6;-1:-1:-1;;;;;15169:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15151:42;;15204:33;15220:7;15229;15204:15;:33::i;:::-;-1:-1:-1;;;;;15276:18:0;;15248:25;15276:18;;;:9;:18;;;;;15305:33;;15276:18;;15328:10;;15276:18;;15248:25;15305:33;;15328:10;;15305:33;:::i;:::-;;;;-1:-1:-1;;;;;;;;15349:21:0;;;;;;;:12;:21;;;;;;;;15390:184;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15349:236;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14957:636::o;21129:567::-;-1:-1:-1;;;;;21226:17:0;;;;;;;:8;:17;;;;;;;21212:31;21204:45;;;;-1:-1:-1;;;21204:45:0;;23920:2:1;21204:45:0;;;23902:21:1;23959:1;23939:18;;;23932:29;-1:-1:-1;;;23977:18:1;;;23970:31;24018:18;;21204:45:0;23718:324:1;21204:45:0;-1:-1:-1;;;;;21269:16:0;;;;;;:7;:16;;;;;;;;21268:17;21260:31;;;;-1:-1:-1;;;21260:31:0;;24249:2:1;21260:31:0;;;24231:21:1;24288:1;24268:18;;;24261:29;-1:-1:-1;;;24306:18:1;;;24299:31;24347:18;;21260:31:0;24047:324:1;21260:31:0;-1:-1:-1;;;;;21315:16:0;;;;;;:7;:16;;;;;:23;21310:28;21302:42;;;;-1:-1:-1;;;21302:42:0;;24578:2:1;21302:42:0;;;24560:21:1;24617:1;24597:18;;;24590:29;-1:-1:-1;;;24635:18:1;;;24628:31;24676:18;;21302:42:0;24376:324:1;21302:42:0;21384:7;-1:-1:-1;;;;;21373:18:0;:7;-1:-1:-1;;;;;21373:18:0;;:43;;;-1:-1:-1;;;;;;21395:21:0;;;21373:43;:68;;;-1:-1:-1;;;;;;21420:21:0;;;21373:68;21355:131;;;21129:567;;:::o;21355:131::-;-1:-1:-1;;;;;21496:17:0;;;;;;;:8;:17;;;;;;;;:27;;;;;-1:-1:-1;;;;;;21496:27:0;;;;;;;;21534:16;;;:7;:16;;;;;:30;;21496:27;21534:30;;;;;;;;;;;;;;;;;;;;;;21586:23;;;:14;:23;;;;;;;21581:28;;21577:112;;21659:6;-1:-1:-1;;;;;21652:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21626:23:0;;;;;;:14;:23;;;;;:51;21577:112;21129:567;;:::o;16456:232::-;16538:18;16569;16597:6;-1:-1:-1;;;;;16590:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16569:48;-1:-1:-1;16670:10:0;16642:24;16655:11;16569:48;16642:24;:::i;:::-;16641:39;;;;:::i;:::-;16628:52;16456:232;-1:-1:-1;;;16456:232:0:o;11471:3252::-;11680:5;11676:133;;;-1:-1:-1;;;;;11704:19:0;;;;;;:10;:19;;;;;:29;;11727:6;;11704:19;:29;;11727:6;;11704:29;:::i;:::-;;;;-1:-1:-1;11676:133:0;;-1:-1:-1;11676:133:0;;-1:-1:-1;;;;;11768:19:0;;;;;;:10;:19;;;;;:29;;11791:6;;11768:19;:29;;11791:6;;11768:29;:::i;:::-;;;;-1:-1:-1;;11676:133:0;11824:10;11819:79;;-1:-1:-1;;;;;11851:20:0;;;;;;:11;:20;;;;;:35;;11875:11;;11851:20;:35;;11875:11;;11851:35;:::i;:::-;;;;-1:-1:-1;;11819:79:0;-1:-1:-1;;;;;11928:17:0;;;11910:15;11928:17;;;:8;:17;;;;;;;11960:21;;11956:2760;;12016:7;11998:15;12038:2667;6181:2;12058:1;:12;12038:2667;;;-1:-1:-1;;;;;12106:17:0;;;;;;;:8;:17;;;;;;;;-1:-1:-1;12142:75:0;;12192:5;12142:75;-1:-1:-1;;;;;12264:26:0;;12237:24;12264:26;;;:17;:26;;;;;;12309:261;;;;-1:-1:-1;;;;;12343:20:0;;;;;;:11;:20;;;;;:30;;12367:6;;12343:20;:30;;12367:6;;12343:30;:::i;:::-;;;;-1:-1:-1;12396:26:0;;-1:-1:-1;12416:6:0;12396:26;;:::i;:::-;;;12309:261;;;-1:-1:-1;;;;;12471:20:0;;;;;;:11;:20;;;;;:30;;12495:6;;12471:20;:30;;12495:6;;12471:30;:::i;:::-;;;;-1:-1:-1;12524:26:0;;-1:-1:-1;12544:6:0;12524:26;;:::i;:::-;;;12309:261;-1:-1:-1;;;;;12588:26:0;;;;;;:17;:26;;;;;;;;:45;;;12680:16;:25;;;;;;12724:286;;;;-1:-1:-1;;;;;12765:19:0;;;;;;:10;:19;;;;;:34;;12788:11;;12765:19;:34;;12788:11;;12765:34;:::i;:::-;;;;-1:-1:-1;12822:30:0;;-1:-1:-1;12841:11:0;12822:30;;:::i;:::-;;;12724:286;;;-1:-1:-1;;;;;12903:19:0;;;;;;:10;:19;;;;;:34;;12926:11;;12903:19;:34;;12926:11;;12903:34;:::i;:::-;;;;-1:-1:-1;12960:30:0;;-1:-1:-1;12979:11:0;12960:30;;:::i;:::-;;;12724:286;-1:-1:-1;;;;;13028:25:0;;;;;;;:16;:25;;;;;;;;:43;;;13115:22;;;;;:13;:22;;;;;;13180:14;:23;;;;;;;13115:22;;;;13180:23;;13228;;;13224:1383;;13282:5;13278:655;;;-1:-1:-1;;;;;13341:32:0;;13318:20;13341:32;;;:17;:32;;;;;;13404:31;;;13400:510;;;-1:-1:-1;;;;;13470:22:0;;;;;;;:13;:22;;;;;;;;;:38;;-1:-1:-1;;;;;;13470:38:0;;;;;;;;;;13544:272;;24907:25:1;;;24968:32;;;24948:18;;;24941:60;;;;25017:18;;;25010:34;;;13470:38:0;13544:272;;24895:2:1;24880:18;13544:272:0;;;;;;;-1:-1:-1;;;;;13849:23:0;;;;;;;:14;:23;;;;;:33;;-1:-1:-1;;;;;;13849:33:0;;;;;;;;;;13400:510;13289:644;13278:655;13224:1383;;;-1:-1:-1;;;;;13981:31:0;;;;;;:17;:31;;;;;;13962:50;;13958:649;;;-1:-1:-1;;;;;14232:31:0;;;;;;;:17;:31;;;;;;;;;;14044:242;;24907:25:1;;;24948:18;;;24941:60;;;;25017:18;;;25010:34;;;;14044:242:0;;;;;;;;;24895:2:1;24880:18;14044:242:0;;;;;;;-1:-1:-1;;;;;14311:22:0;;;;;;;:13;:22;;;;;;;;:32;;-1:-1:-1;;;;;;14311:32:0;;;;;;;;;;14368:14;:23;;;;;;:38;;;;;;;;;;;;;;13958:649;;;-1:-1:-1;;;;;14477:32:0;;;;;;:17;:32;;;;;;14458:51;;14432:175;;;-1:-1:-1;;;;;14554:23:0;;;;;;;:14;:23;;;;;:33;;-1:-1:-1;;;;;;14554:33:0;;;;;;;;;;14432:175;14625:28;14638:7;14647:5;14625:12;:28::i;:::-;14682:7;14672:17;;12077:2628;;;;12072:3;;;;:::i;:::-;;;12038:2667;;;;11983:2733;11956:2760;11665:3058;11471:3252;;;;;;:::o;36645:358::-;36788:16;;;36802:1;36788:16;;;;;;;;;36732:19;;;;36788:16;;;;;;;;;;;-1:-1:-1;36788:16:0;36764:40;;36825:5;36815:4;36820:1;36815:7;;;;;;;;:::i;:::-;;;;;;:15;-1:-1:-1;;;;;36815:15:0;;;-1:-1:-1;;;;;36815:15:0;;;;;36851:5;36841:4;36846:1;36841:7;;;;;;;;:::i;:::-;;;;;;:15;-1:-1:-1;;;;;36841:15:0;;;-1:-1:-1;;;;;36841:15:0;;;;;36877:6;36867:4;36872:1;36867:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;36867:16:0;;;:7;;;;;;;;;:16;36908:42;;-1:-1:-1;;;36908:42:0;;:11;:25;;;;;;:42;;36934:9;;36945:4;;36908:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;36908:42:0;;;;;;;;;;;;:::i;:::-;36979:1;36965:4;:11;:15;;;;:::i;:::-;36908:87;;;;;;;;:::i;:::-;;;;;;;36894:101;;36753:250;36645:358;;;:::o;32260:878::-;32437:34;32449:7;32458:5;32465;32437:11;:34::i;:::-;32482:17;32491:7;32482:8;:17::i;:::-;-1:-1:-1;;;;;32535:19:0;;32510:22;32535:19;;;:10;:19;;;;;;;;:26;;;;;;;;;32576:10;;;32572:168;;32634:13;;;;32629:18;;:61;;;32685:5;32667:4;:14;;;32651:4;:13;;;:30;;;;:::i;:::-;:39;;32629:61;32603:125;;;;-1:-1:-1;;;32603:125:0;;20530:2:1;32603:125:0;;;20512:21:1;20569:1;20549:18;;;20542:29;-1:-1:-1;;;20587:18:1;;;20580:32;20629:18;;32603:125:0;20328:325:1;32603:125:0;32750:13;;;:21;;;32799:1;32782:14;;;:18;;;32811:26;;32826:11;;32750:4;;32811:26;;32826:11;;32811:26;:::i;:::-;;;;-1:-1:-1;;32852:14:0;;32848:283;;32883:189;32919:7;32945:10;32974:5;32998:11;33028:5;33052;32883:17;:189::i;:::-;33108:11;33087:17;;:32;;;;;;;:::i;:::-;;;;-1:-1:-1;;32424:714:0;32260:878;;;;;:::o;19910:765::-;-1:-1:-1;;;;;20021:18:0;;19973:7;20021:18;;;:9;:18;;;;;20071:19;;20105:15;;;20101:56;;-1:-1:-1;20144:1:0;;19910:765;-1:-1:-1;;;19910:765:0:o;20101:56::-;20167:23;20193:8;:24;;;20167:50;;20228:15;20253:6;-1:-1:-1;;;;;20246:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20228:42;;20296:15;20285:7;:26;20281:67;;-1:-1:-1;20335:1:0;;19910:765;-1:-1:-1;;;;;19910:765:0:o;20281:67::-;20358:20;20382:25;20392:15;20382:7;:25;:::i;:::-;20358:50;-1:-1:-1;20419:21:0;4827:6;20358:50;4881:5;20446:31;6411:2;20446:10;:31;:::i;:::-;20445:62;;;;:::i;:::-;20444:79;;;;:::i;:::-;20443:98;;;;:::i;:::-;20419:122;;20572:10;20556:13;:26;20552:85;;;-1:-1:-1;20615:10:0;20552:85;20654:13;19910:765;-1:-1:-1;;;;;;;19910:765:0:o;42599:563::-;-1:-1:-1;;;;;42682:24:0;;42657:22;42682:24;;;:15;:24;;;;;;;;;42742:13;:22;;;;;;:29;42725:46;;42717:61;;;;-1:-1:-1;;;42717:61:0;;26480:2:1;42717:61:0;;;26462:21:1;26519:1;26499:18;;;26492:29;-1:-1:-1;;;26537:18:1;;;26530:32;26579:18;;42717:61:0;26278:325:1;42717:61:0;42816:18;:14;42833:1;42816:18;:::i;:::-;-1:-1:-1;;;;;42789:24:0;;;;;;:15;:24;;;;;;;;:45;;;;42869:13;:22;;;;;:38;;42892:14;;42869:38;;;;;;:::i;:::-;;;;;;;;;;;42845:62;;42931:6;:10;;;42926:1;:15;42918:30;;;;-1:-1:-1;;;42918:30:0;;26810:2:1;42918:30:0;;;26792:21:1;26849:1;26829:18;;;26822:29;-1:-1:-1;;;26867:18:1;;;26860:32;26909:18;;42918:30:0;26608:325:1;42918:30:0;42959:15;42984:6;-1:-1:-1;;;;;42977:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42959:42;;6463:8;43031:6;:11;;;:29;;;;:::i;:::-;43020:7;:40;;43012:55;;;;-1:-1:-1;;;43012:55:0;;27140:2:1;43012:55:0;;;27122:21:1;27179:1;27159:18;;;27152:29;-1:-1:-1;;;27197:18:1;;;27190:32;27239:18;;43012:55:0;26938:325:1;43012:55:0;43078:10;;;:20;;;43140:13;;43109:45;;43123:6;;43131:7;;43109:13;:45::i;43172:663::-;-1:-1:-1;;;;;43256:26:0;;43231:22;43256:26;;;:17;:26;;;;;;;;;43318:14;:23;;;;;;:30;43301:47;;43293:62;;;;-1:-1:-1;;;43293:62:0;;26480:2:1;43293:62:0;;;26462:21:1;26519:1;26499:18;;;26492:29;-1:-1:-1;;;26537:18:1;;;26530:32;26579:18;;43293:62:0;26278:325:1;43293:62:0;43395:18;:14;43412:1;43395:18;:::i;:::-;-1:-1:-1;;;;;43366:26:0;;;;;;:17;:26;;;;;;;;:47;;;;43448:14;:23;;;;;:39;;43472:14;;43448:39;;;;;;:::i;:::-;;;;;;;;;;;43424:63;;43511:6;:10;;;43506:1;:15;43498:30;;;;-1:-1:-1;;;43498:30:0;;26810:2:1;43498:30:0;;;26792:21:1;26849:1;26829:18;;;26822:29;-1:-1:-1;;;26867:18:1;;;26860:32;26909:18;;43498:30:0;26608:325:1;43498:30:0;43539:15;43564:6;-1:-1:-1;;;;;43557:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43539:42;;6463:8;43611:6;:11;;;:29;;;;:::i;:::-;43600:7;:40;;43592:55;;;;-1:-1:-1;;;43592:55:0;;27140:2:1;43592:55:0;;;27122:21:1;27179:1;27159:18;;;27152:29;-1:-1:-1;;;27197:18:1;;;27190:32;27239:18;;43592:55:0;26938:325:1;43592:55:0;43671:7;43658:6;:10;;:20;;;;43689:138;43721:6;43742:12;43755:1;43742:15;;;;;;;;:::i;:::-;;;;;;;;;:24;:15;;;;;:24;;43803:13;;-1:-1:-1;;;;;43742:24:0;;;;43781:7;;43689:17;:138::i;14733:214::-;14809:18;4881:5;14831:29;6086:5;14831:11;:29;:::i;:::-;14830:47;;;;:::i;:::-;14809:68;;14888:51;14903:7;14912:10;14924:1;14927:11;14888:14;:51::i;15603:845::-;15704:7;15686:15;;;15776:665;6181:2;15796:1;:12;15776:665;;;-1:-1:-1;;;;;15840:17:0;;;;;;;:8;:17;;;;;;;;-1:-1:-1;15872:67:0;;15918:5;15872:67;-1:-1:-1;;;;;15969:19:0;;15953:13;15969:19;;;:10;:19;;;;;;16007:17;;;16003:395;;;16045:19;16123:25;;;:14;:25;;;;;;;16099:21;;;;;;;4881:5;;16099:49;;;:::i;:::-;16068:81;;:6;:81;:::i;:::-;16067:128;;;;:::i;:::-;16045:150;;16214:42;16225:7;16234:11;16247:1;16250:5;16214:10;:42::i;:::-;5484:1;16279:5;:18;16275:72;;16322:5;;;;16275:72;16377:5;16365:17;;16026:372;16003:395;16422:7;16412:17;;15815:626;15810:3;;;;:::i;:::-;;;15776:665;;22901:596;23086:17;;23038:23;;23078:25;;23074:83;;;23128:17;;;-1:-1:-1;23074:83:0;23171:11;;;:49;;-1:-1:-1;23195:17:0;;:25;;23215:5;;23195:25;:::i;:::-;23186:6;:34;23171:49;23167:116;;;23246:17;;:25;;23266:5;;23246:25;:::i;:::-;23237:34;;23167:116;23316:6;-1:-1:-1;;;;;23303:20:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23303:20:0;;;;;;;;;;;;;;;;-1:-1:-1;23293:30:0;-1:-1:-1;23334:13:0;23379:5;23362:128;23390:14;23398:6;23390:5;:14;:::i;:::-;23386:1;:18;23362:128;;;23443:10;23454:1;23443:13;;;;;;;;:::i;:::-;;;;;;;;;;;23426:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:7;23434:5;23426:14;;;;;;;;:::i;:::-;;;;;;:30;;;;23471:7;;;;:::i;:::-;;-1:-1:-1;23406:3:0;;;:::i;:::-;;;23362:128;;;;23063:434;22901:596;;;;;:::o;41094:517::-;41199:1;41176:20;;;:15;:20;;;;;;:24;41172:63;;41094:517;;:::o;41172:63::-;41245:20;;;;:15;:20;;;;;;;:34;;;:20;41331:7;41337:1;41261:3;41331:7;:::i;:::-;41315:24;;;;;;;;;;;;41290:49;;41368:14;41354:11;:28;41350:254;;;41399:17;41419:28;41433:14;41419:11;:28;:::i;:::-;41500:11;;41399:48;;-1:-1:-1;;;;;;41469:6:0;41462:19;;;;;41500:11;4881:5;41531:29;37806:4;41399:48;41531:29;:::i;:::-;41530:47;;;;:::i;:::-;41462:130;;-1:-1:-1;;;;;;41462:130:0;;;;;;;-1:-1:-1;;;;;2573:32:1;;;41462:130:0;;;2555:51:1;2622:18;;;2615:34;2528:18;;41462:130:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39649:378;39719:34;39756:16;;;:13;:16;;;;;39805:24;;39844:15;;39840:180;;39897:6;39922:14;;39918:91;;39983:10;39957:12;:22;;;:36;;;;;;;:::i;:::-;;;;-1:-1:-1;;39861:159:0;39708:319;;39649:378;;:::o;40037:1047::-;40108:30;40141:16;;;:13;:16;;;;;;;;-1:-1:-1;;;;;40141:25:0;;;;;;;;;40183:16;:25;;;;;;;;;40179:574;;;40250:23;;;;40292:18;;40288:454;;40359:26;;;;40408:34;;;40404:323;;;40467:17;40487:34;40504:17;40487:14;:34;:::i;:::-;40467:54;-1:-1:-1;40544:18:0;4881:5;40566:27;37918:3;40467:54;40566:27;:::i;:::-;40565:78;;;;:::i;:::-;40544:99;;40666:41;40681:7;40690:10;40702:1;40705;40666:14;:41::i;:::-;40444:283;;40404:323;40312:430;40288:454;40210:543;40179:574;40780:15;;40810:10;;40806:271;;40837:34;40874:16;;;:13;:16;;;;;40990:24;;40935:22;;;;40874:16;;40837:34;40926:31;;:6;:31;:::i;:::-;40925:89;;;;:::i;:::-;40905:109;;41029:36;41040:7;41049:9;41060:1;41063;35811:826;35961:50;;35993:7;35961:50;-1:-1:-1;;;;;36083:18:0;;36021:14;36083:18;;;:9;:18;;;;;36133:19;;36038:6;;36083:18;36167:19;;;36163:71;;;36212:10;36203:19;;36163:71;36268:6;36246:8;:18;;;:28;;;;;;;:::i;:::-;;;;-1:-1:-1;36309:19:0;;-1:-1:-1;36322:6:0;36309:10;:19;:::i;:::-;36287:8;:19;;:41;;;;36339:15;36364:6;-1:-1:-1;;;;;36357:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;36392:21:0;;;;;;;;:12;:21;;;;;;;36433:185;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36392:237;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;36392:237:0;;;;;;;;;;;;;;;;;-1:-1:-1;35811:826:0:o;10660:803::-;10758:7;10740:15;;;10830:626;6181:2;10850:1;:12;10830:626;;;-1:-1:-1;;;;;10894:17:0;;;;;;;:8;:17;;;;;;;;-1:-1:-1;10926:67:0;;10972:5;10926:67;-1:-1:-1;;;;;11023:19:0;;11007:13;11023:19;;;:10;:19;;;;;;11061:17;;;11057:356;;;11099:19;11172:20;;;:9;:20;;;;;;;11153:16;;;;;;;4881:5;;11153:39;;;:::i;:::-;11122:71;;:6;:71;:::i;:::-;11121:89;;;;:::i;:::-;11099:111;;11229:42;11240:7;11249:11;11262:1;11265:5;11229:10;:42::i;:::-;5484:1;11294:5;:18;11290:72;;11337:5;;;;11290:72;11392:5;11380:17;;11080:333;11057:356;11437:7;11427:17;;10869:587;10864:3;;;;:::i;:::-;;;10830:626;;16926:396;17132:51;;;-1:-1:-1;;;;;27526:15:1;;;17132:51:0;;;27508:34:1;27578:15;;;27558:18;;;27551:43;27610:18;;;;27603:34;;;17132:51:0;;;;;;;;;;27443:18:1;;;;17132:51:0;;;;;;;-1:-1:-1;;;;;17132:51:0;-1:-1:-1;;;17132:51:0;;;17107:87;;-1:-1:-1;;;;17107:10:0;;;;:87;;17132:51;17107:87;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17071:123;;;;17227:7;:57;;;;-1:-1:-1;17239:11:0;;:16;;:44;;;17270:4;17259:24;;;;;;;;;;;;:::i;:::-;17205:109;;;;-1:-1:-1;;;17205:109:0;;28100:2:1;17205:109:0;;;28082:21:1;28139:1;28119:18;;;28112:29;-1:-1:-1;;;28157:18:1;;;28150:32;28199:18;;17205:109:0;27898:325:1;9325:1325:0;-1:-1:-1;;;;;9414:19:0;;;9398:13;9414:19;;;:10;:19;;;;;;;;;9465:11;:20;;;;;;9519:13;:22;;;;;;;;;9591:31;;;:17;:31;;;;;;;9414:19;;9465:20;9398:13;9578:44;;9465:20;9578:44;:::i;:::-;9635:16;9694:22;;;:15;:22;;;;;;9552:70;;-1:-1:-1;9654:5:0;;9676:40;;9672:640;;;9752:5;5484:1;9739:18;9735:65;;9778:7;;;;;9325:1325;;:::o;9735:65::-;9821:9;9833;:5;9841:1;9833:9;:::i;:::-;9821:21;;9816:208;5484:1;9844;:14;9816:208;;9908:18;;;;:15;:18;;;;;;9890:36;;9951:5;9886:90;10007:1;-1:-1:-1;10007:1:0;9860:3;10007:1;9860:3;:::i;:::-;;;9816:208;;;;9672:640;;;10063:22;;;;:15;:22;;;;;;10045:40;;10041:271;;;10109:9;10121;10129:1;10121:5;:9;:::i;:::-;10109:21;;10104:197;10216:18;;;;:15;:18;;;;;;10171:1;;-1:-1:-1;10171:1:0;;10197:37;;10193:91;10259:5;10193:91;10134:3;;;:::i;:::-;;;10104:197;;;;10041:271;10338:5;10326:8;:17;10322:137;;10386:8;10377:7;-1:-1:-1;;;;;10365:37:0;;10396:5;10365:37;;;;4393:25:1;;4381:2;4366:18;;4247:177;10365:37:0;;;;;;;;-1:-1:-1;;;;;10417:19:0;;;;;;:10;:19;;;;;:30;;;10322:137;-1:-1:-1;;;;;10491:19:0;;;10471:17;10491:19;;;:10;:19;;;;;;;;;10558:30;;;;;:16;:30;;;;;;10546:42;;10491:19;10546:42;:::i;:::-;10521:67;;10599:43;10611:7;10620:14;10636:5;10599:11;:43::i;20987:134::-;-1:-1:-1;;;;;21046:16:0;;;;;;:7;:16;;;;;;;;21041:73;;-1:-1:-1;;;;;21079:16:0;;;;;;:7;:16;;;;;:23;;-1:-1:-1;;21079:23:0;21098:4;21079:23;;;21041:73;20987:134;:::o;37930:1709::-;38060:30;38093:20;;;:13;:20;;;;;;;;-1:-1:-1;;;;;38093:29:0;;;;;;;;;38162:17;:26;;;;;;;38205:25;;;38201:463;;-1:-1:-1;;;;;38249:26:0;;;;;;:17;:26;;;;;;;;:34;;;38329:31;;;:13;:31;;;;;:84;;;;;;;;;:99;;;38449:18;:27;;;;;;;:48;-1:-1:-1;38445:137:0;;;-1:-1:-1;;;;;38518:27:0;;;;;;:18;:27;;;;;:48;;;38445:137;-1:-1:-1;;;;;;38625:27:0;;;;;;:18;:27;;;;;;38596:26;;;:56;38201:463;38676:23;;;:40;;;38757:26;;;;38729:25;38836:34;;;38832:121;;;38907:34;38924:17;38907:14;:34;:::i;:::-;38887:54;;38832:121;38984:15;;38963:18;39047:20;;;:13;:20;;;;;39105:14;39084:35;;39080:552;;39160:10;39140:17;:30;39136:270;;;39220:30;39240:10;39220:17;:30;:::i;:::-;39191:12;:24;;;:60;;;;;;;:::i;:::-;;;;-1:-1:-1;39136:270:0;;-1:-1:-1;39136:270:0;;39297:10;39277:17;:30;39273:133;;;39359:30;39372:17;39359:10;:30;:::i;:::-;39330:12;:24;;;:60;;;;;;;:::i;:::-;;;;-1:-1:-1;;39273:133:0;39420:35;;;39080:552;;;39494:14;;39490:131;;39557:10;39529:12;:24;;;:38;;;;;;;:::i;:::-;;;;-1:-1:-1;;39604:1:0;39586:19;;38049:1590;;;;;;37930:1709;;;:::o;14:184:1:-;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;-1:-1:-1;176:16:1;;14:184;-1:-1:-1;14:184:1:o;533:127::-;594:10;589:3;585:20;582:1;575:31;625:4;622:1;615:15;649:4;646:1;639:15;665:127;726:10;721:3;717:20;714:1;707:31;757:4;754:1;747:15;781:4;778:1;771:15;1005:461;1058:3;1096:5;1090:12;1123:6;1118:3;1111:19;1149:4;1178:2;1173:3;1169:12;1162:19;;1215:2;1208:5;1204:14;1236:1;1246:195;1260:6;1257:1;1254:13;1246:195;;;1325:13;;-1:-1:-1;;;;;1321:39:1;1309:52;;1381:12;;;;1416:15;;;;1357:1;1275:9;1246:195;;;-1:-1:-1;1457:3:1;;1005:461;-1:-1:-1;;;;;1005:461:1:o;1471:510::-;1742:6;1731:9;1724:25;1785:3;1780:2;1769:9;1765:18;1758:31;1705:4;1806:57;1858:3;1847:9;1843:19;1835:6;1806:57;:::i;:::-;-1:-1:-1;;;;;1899:32:1;;;;1894:2;1879:18;;1872:60;-1:-1:-1;1963:2:1;1948:18;1941:34;1798:65;1471:510;-1:-1:-1;;1471:510:1:o;1986:127::-;2047:10;2042:3;2038:20;2035:1;2028:31;2078:4;2075:1;2068:15;2102:4;2099:1;2092:15;2118:128;2185:9;;;2206:11;;;2203:37;;;2220:18;;:::i;2251:125::-;2316:9;;;2337:10;;;2334:36;;;2350:18;;:::i;2660:367::-;2723:8;2733:6;2787:3;2780:4;2772:6;2768:17;2764:27;2754:55;;2805:1;2802;2795:12;2754:55;-1:-1:-1;2828:20:1;;-1:-1:-1;;;;;2860:30:1;;2857:50;;;2903:1;2900;2893:12;2857:50;2940:4;2932:6;2928:17;2916:29;;3000:3;2993:4;2983:6;2980:1;2976:14;2968:6;2964:27;2960:38;2957:47;2954:67;;;3017:1;3014;3007:12;2954:67;2660:367;;;;;:::o;3032:773::-;3154:6;3162;3170;3178;3231:2;3219:9;3210:7;3206:23;3202:32;3199:52;;;3247:1;3244;3237:12;3199:52;3287:9;3274:23;-1:-1:-1;;;;;3357:2:1;3349:6;3346:14;3343:34;;;3373:1;3370;3363:12;3343:34;3412:70;3474:7;3465:6;3454:9;3450:22;3412:70;:::i;:::-;3501:8;;-1:-1:-1;3386:96:1;-1:-1:-1;3589:2:1;3574:18;;3561:32;;-1:-1:-1;3605:16:1;;;3602:36;;;3634:1;3631;3624:12;3602:36;;3673:72;3737:7;3726:8;3715:9;3711:24;3673:72;:::i;:::-;3032:773;;;;-1:-1:-1;3764:8:1;-1:-1:-1;;;;3032:773:1:o;3810:173::-;3878:20;;-1:-1:-1;;;;;3927:31:1;;3917:42;;3907:70;;3973:1;3970;3963:12;3907:70;3810:173;;;:::o;3988:254::-;4056:6;4064;4117:2;4105:9;4096:7;4092:23;4088:32;4085:52;;;4133:1;4130;4123:12;4085:52;4156:29;4175:9;4156:29;:::i;:::-;4146:39;4232:2;4217:18;;;;4204:32;;-1:-1:-1;;;3988:254:1:o;4429:186::-;4488:6;4541:2;4529:9;4520:7;4516:23;4512:32;4509:52;;;4557:1;4554;4547:12;4509:52;4580:29;4599:9;4580:29;:::i;4812:275::-;4883:2;4877:9;4948:2;4929:13;;-1:-1:-1;;4925:27:1;4913:40;;-1:-1:-1;;;;;4968:34:1;;5004:22;;;4965:62;4962:88;;;5030:18;;:::i;:::-;5066:2;5059:22;4812:275;;-1:-1:-1;4812:275:1:o;5092:183::-;5152:4;-1:-1:-1;;;;;5177:6:1;5174:30;5171:56;;;5207:18;;:::i;:::-;-1:-1:-1;5252:1:1;5248:14;5264:4;5244:25;;5092:183::o;5280:668::-;5334:5;5387:3;5380:4;5372:6;5368:17;5364:27;5354:55;;5405:1;5402;5395:12;5354:55;5441:6;5428:20;5467:4;5491:60;5507:43;5547:2;5507:43;:::i;:::-;5491:60;:::i;:::-;5585:15;;;5671:1;5667:10;;;;5655:23;;5651:32;;;5616:12;;;;5695:15;;;5692:35;;;5723:1;5720;5713:12;5692:35;5759:2;5751:6;5747:15;5771:148;5787:6;5782:3;5779:15;5771:148;;;5853:23;5872:3;5853:23;:::i;:::-;5841:36;;5897:12;;;;5804;;5771:148;;;-1:-1:-1;5937:5:1;5280:668;-1:-1:-1;;;;;;5280:668:1:o;5953:595::-;6071:6;6079;6132:2;6120:9;6111:7;6107:23;6103:32;6100:52;;;6148:1;6145;6138:12;6100:52;6188:9;6175:23;-1:-1:-1;;;;;6258:2:1;6250:6;6247:14;6244:34;;;6274:1;6271;6264:12;6244:34;6297:61;6350:7;6341:6;6330:9;6326:22;6297:61;:::i;:::-;6287:71;;6411:2;6400:9;6396:18;6383:32;6367:48;;6440:2;6430:8;6427:16;6424:36;;;6456:1;6453;6446:12;6424:36;;6479:63;6534:7;6523:8;6512:9;6508:24;6479:63;:::i;:::-;6469:73;;;5953:595;;;;;:::o;6553:248::-;6621:6;6629;6682:2;6670:9;6661:7;6657:23;6653:32;6650:52;;;6698:1;6695;6688:12;6650:52;-1:-1:-1;;6721:23:1;;;6791:2;6776:18;;;6763:32;;-1:-1:-1;6553:248:1:o;6806:435::-;6859:3;6897:5;6891:12;6924:6;6919:3;6912:19;6950:4;6979:2;6974:3;6970:12;6963:19;;7016:2;7009:5;7005:14;7037:1;7047:169;7061:6;7058:1;7055:13;7047:169;;;7122:13;;7110:26;;7156:12;;;;7191:15;;;;7083:1;7076:9;7047:169;;7246:465;7503:2;7492:9;7485:21;7466:4;7529:56;7581:2;7570:9;7566:18;7558:6;7529:56;:::i;:::-;7633:9;7625:6;7621:22;7616:2;7605:9;7601:18;7594:50;7661:44;7698:6;7690;7661:44;:::i;:::-;7653:52;7246:465;-1:-1:-1;;;;;7246:465:1:o;8628:328::-;8705:6;8713;8721;8774:2;8762:9;8753:7;8749:23;8745:32;8742:52;;;8790:1;8787;8780:12;8742:52;8813:29;8832:9;8813:29;:::i;:::-;8803:39;;8861:38;8895:2;8884:9;8880:18;8861:38;:::i;:::-;8851:48;;8946:2;8935:9;8931:18;8918:32;8908:42;;8628:328;;;;;:::o;9357:322::-;9434:6;9442;9450;9503:2;9491:9;9482:7;9478:23;9474:32;9471:52;;;9519:1;9516;9509:12;9471:52;9542:29;9561:9;9542:29;:::i;:::-;9532:39;9618:2;9603:18;;9590:32;;-1:-1:-1;9669:2:1;9654:18;;;9641:32;;9357:322;-1:-1:-1;;;9357:322:1:o;9684:999::-;9901:2;9953:21;;;10023:13;;9926:18;;;10045:22;;;9872:4;;9901:2;10086;;10104:18;;;;10145:15;;;9872:4;10188:469;10202:6;10199:1;10196:13;10188:469;;;10261:13;;10299:9;;10287:22;;10349:11;;;10343:18;10329:12;;;10322:40;10402:11;;;10396:18;10382:12;;;10375:40;10438:4;10482:11;;;10476:18;10462:12;;;10455:40;10518:4;10562:11;;;10556:18;10542:12;;;10535:40;10604:4;10595:14;;;;10632:15;;;;10224:1;10217:9;10188:469;;;-1:-1:-1;10674:3:1;;9684:999;-1:-1:-1;;;;;;;9684:999:1:o;10903:1428::-;11276:2;11328:21;;;11398:13;;11301:18;;;11420:22;;;11247:4;;11276:2;11461;;11479:18;;;;11516:4;11543:15;;;11247:4;11586:254;11600:6;11597:1;11594:13;11586:254;;;11659:13;;11697:9;;11685:22;;11747:11;;11741:18;11727:12;;;11720:40;11780:12;;;;11815:15;;;;11622:1;11615:9;11586:254;;;-1:-1:-1;;11876:19:1;;;11856:18;;;11849:47;11946:13;;11968:21;;;12007:12;;;;-1:-1:-1;12044:15:1;;;;11946:13;-1:-1:-1;12079:1:1;12089:214;12105:8;12100:3;12097:17;12089:214;;;12160:55;12209:5;12198:8;12192:15;10767:12;;10755:25;;10829:4;10818:16;;;10812:23;10796:14;;;10789:47;10885:4;10874:16;;;10868:23;10852:14;;10845:47;10688:210;12160:55;12237:14;;;;12276:17;;;;12133:1;12124:11;12089:214;;;-1:-1:-1;12320:5:1;;10903:1428;-1:-1:-1;;;;;;;;10903:1428:1:o;12336:250::-;12421:1;12431:113;12445:6;12442:1;12439:13;12431:113;;;12521:11;;;12515:18;12502:11;;;12495:39;12467:2;12460:10;12431:113;;;-1:-1:-1;;12578:1:1;12560:16;;12553:27;12336:250::o;12591:271::-;12633:3;12671:5;12665:12;12698:6;12693:3;12686:19;12714:76;12783:6;12776:4;12771:3;12767:14;12760:4;12753:5;12749:16;12714:76;:::i;:::-;12844:2;12823:15;-1:-1:-1;;12819:29:1;12810:39;;;;12851:4;12806:50;;12591:271;-1:-1:-1;;12591:271:1:o;12867:963::-;-1:-1:-1;;;;;13320:15:1;;;13302:34;;13367:2;13352:18;;13345:34;;;13252:3;13410:2;13395:18;;13388:30;;;13223:4;;13441:45;13467:18;;;13459:6;13441:45;:::i;:::-;13427:59;;13534:2;13526:6;13522:15;13517:2;13506:9;13502:18;13495:43;;13575:6;13569:3;13558:9;13554:19;13547:35;13631:9;13623:6;13619:22;13613:3;13602:9;13598:19;13591:51;13659:33;13685:6;13677;13659:33;:::i;:::-;13723:3;13708:19;;13701:35;;;;-1:-1:-1;;13767:3:1;13752:19;;13745:35;;;;13811:3;13796:19;;;13789:35;13651:41;12867:963;-1:-1:-1;;;;;;12867:963:1:o;13835:328::-;13912:6;13920;13928;13981:2;13969:9;13960:7;13956:23;13952:32;13949:52;;;13997:1;13994;13987:12;13949:52;14020:29;14039:9;14020:29;:::i;:::-;14010:39;;14096:2;14085:9;14081:18;14068:32;14058:42;;14119:38;14153:2;14142:9;14138:18;14119:38;:::i;:::-;14109:48;;13835:328;;;;;:::o;15135:955::-;15362:2;15414:21;;;15484:13;;15387:18;;;15506:22;;;15333:4;;15362:2;15547;;15565:18;;;;15606:15;;;15333:4;15649:415;15663:6;15660:1;15657:13;15649:415;;;15722:13;;15760:9;;15748:22;;15810:11;;;15804:18;15790:12;;;15783:40;15863:11;;;15857:18;15843:12;;;15836:40;15899:4;15947:11;;;15941:18;-1:-1:-1;;;;;15937:44:1;15923:12;;;15916:66;16011:4;16002:14;;;;16039:15;;;;15978:1;15678:9;15649:415;;16095:1157;16262:6;16270;16278;16286;16294;16302;16310;16363:3;16351:9;16342:7;16338:23;16334:33;16331:53;;;16380:1;16377;16370:12;16331:53;16420:9;16407:23;-1:-1:-1;;;;;16490:2:1;16482:6;16479:14;16476:34;;;16506:1;16503;16496:12;16476:34;16545:70;16607:7;16598:6;16587:9;16583:22;16545:70;:::i;:::-;16634:8;;-1:-1:-1;16519:96:1;-1:-1:-1;16722:2:1;16707:18;;16694:32;;-1:-1:-1;16738:16:1;;;16735:36;;;16767:1;16764;16757:12;16735:36;16806:72;16870:7;16859:8;16848:9;16844:24;16806:72;:::i;:::-;16897:8;;-1:-1:-1;16780:98:1;-1:-1:-1;16985:2:1;16970:18;;16957:32;;-1:-1:-1;17001:16:1;;;16998:36;;;17030:1;17027;17020:12;16998:36;;17069:72;17133:7;17122:8;17111:9;17107:24;17069:72;:::i;:::-;16095:1157;;;;-1:-1:-1;16095:1157:1;;;;;;17242:2;17227:18;;;17214:32;;16095:1157;-1:-1:-1;;;;16095:1157:1:o;17257:118::-;17343:5;17336:13;17329:21;17322:5;17319:32;17309:60;;17365:1;17362;17355:12;17380:477;17470:6;17478;17531:2;17519:9;17510:7;17506:23;17502:32;17499:52;;;17547:1;17544;17537:12;17499:52;17587:9;17574:23;-1:-1:-1;;;;;17612:6:1;17609:30;17606:50;;;17652:1;17649;17642:12;17606:50;17675:61;17728:7;17719:6;17708:9;17704:22;17675:61;:::i;:::-;17665:71;;;17786:2;17775:9;17771:18;17758:32;17799:28;17821:5;17799:28;:::i;:::-;17846:5;17836:15;;;17380:477;;;;;:::o;17862:711::-;18085:2;18137:21;;;18207:13;;18110:18;;;18229:22;;;18056:4;;18085:2;18308:15;;;;18282:2;18267:18;;;18056:4;18351:196;18365:6;18362:1;18359:13;18351:196;;;18414:51;18461:3;18452:6;18446:13;10767:12;;10755:25;;10829:4;10818:16;;;10812:23;10796:14;;;10789:47;10885:4;10874:16;;;10868:23;10852:14;;10845:47;10688:210;18414:51;18522:15;;;;18494:4;18485:14;;;;;18387:1;18380:9;18351:196;;;-1:-1:-1;18564:3:1;;17862:711;-1:-1:-1;;;;;;17862:711:1:o;18578:135::-;18617:3;18638:17;;;18635:43;;18658:18;;:::i;:::-;-1:-1:-1;18705:1:1;18694:13;;18578:135::o;18718:287::-;18847:3;18885:6;18879:13;18901:66;18960:6;18955:3;18948:4;18940:6;18936:17;18901:66;:::i;:::-;18983:16;;;;;18718:287;-1:-1:-1;;18718:287:1:o;19339:324::-;19541:2;19523:21;;;19580:1;19560:18;;;19553:29;-1:-1:-1;;;19613:2:1;19598:18;;19591:31;19654:2;19639:18;;19339:324::o;20658:168::-;20731:9;;;20762;;20779:15;;;20773:22;;20759:37;20749:71;;20800:18;;:::i;20831:217::-;20871:1;20897;20887:132;;20941:10;20936:3;20932:20;20929:1;20922:31;20976:4;20973:1;20966:15;21004:4;21001:1;20994:15;20887:132;-1:-1:-1;21033:9:1;;20831:217::o;21053:582::-;21352:6;21341:9;21334:25;21395:6;21390:2;21379:9;21375:18;21368:34;21438:3;21433:2;21422:9;21418:18;21411:31;21315:4;21459:57;21511:3;21500:9;21496:19;21488:6;21459:57;:::i;:::-;-1:-1:-1;;;;;21552:32:1;;;;21547:2;21532:18;;21525:60;-1:-1:-1;21616:3:1;21601:19;21594:35;21451:65;21053:582;-1:-1:-1;;;21053:582:1:o;22405:306::-;22493:6;22501;22509;22562:2;22550:9;22541:7;22537:23;22533:32;22530:52;;;22578:1;22575;22568:12;22530:52;22607:9;22601:16;22591:26;;22657:2;22646:9;22642:18;22636:25;22626:35;;22701:2;22690:9;22686:18;22680:25;22670:35;;22405:306;;;;;:::o;22716:273::-;22784:6;22837:2;22825:9;22816:7;22812:23;22808:32;22805:52;;;22853:1;22850;22843:12;22805:52;22885:9;22879:16;22935:4;22928:5;22924:16;22917:5;22914:27;22904:55;;22955:1;22952;22945:12;22994:719;23074:6;23127:2;23115:9;23106:7;23102:23;23098:32;23095:52;;;23143:1;23140;23133:12;23095:52;23176:9;23170:16;-1:-1:-1;;;;;23246:2:1;23238:6;23235:14;23232:34;;;23262:1;23259;23252:12;23232:34;23300:6;23289:9;23285:22;23275:32;;23345:7;23338:4;23334:2;23330:13;23326:27;23316:55;;23367:1;23364;23357:12;23316:55;23396:2;23390:9;23418:2;23414;23411:10;23408:36;;;23424:18;;:::i;:::-;23466:53;23509:2;23490:13;;-1:-1:-1;;23486:27:1;23515:2;23482:36;23466:53;:::i;:::-;23453:66;;23542:2;23535:5;23528:17;23582:7;23577:2;23572;23568;23564:11;23560:20;23557:33;23554:53;;;23603:1;23600;23593:12;23554:53;23616:67;23680:2;23675;23668:5;23664:14;23659:2;23655;23651:11;23616:67;:::i;:::-;-1:-1:-1;23702:5:1;22994:719;-1:-1:-1;;;;22994:719:1:o;25055:332::-;25262:6;25251:9;25244:25;25305:2;25300;25289:9;25285:18;25278:30;25225:4;25325:56;25377:2;25366:9;25362:18;25354:6;25325:56;:::i;25392:881::-;25487:6;25518:2;25561;25549:9;25540:7;25536:23;25532:32;25529:52;;;25577:1;25574;25567:12;25529:52;25610:9;25604:16;-1:-1:-1;;;;;25635:6:1;25632:30;25629:50;;;25675:1;25672;25665:12;25629:50;25698:22;;25751:4;25743:13;;25739:27;-1:-1:-1;25729:55:1;;25780:1;25777;25770:12;25729:55;25809:2;25803:9;25832:60;25848:43;25888:2;25848:43;:::i;25832:60::-;25926:15;;;26008:1;26004:10;;;;25996:19;;25992:28;;;25957:12;;;;26032:19;;;26029:39;;;26064:1;26061;26054:12;26029:39;26088:11;;;;26108:135;26124:6;26119:3;26116:15;26108:135;;;26190:10;;26178:23;;26141:12;;;;26221;;;;26108:135;;27648:245;27715:6;27768:2;27756:9;27747:7;27743:23;27739:32;27736:52;;;27784:1;27781;27774:12;27736:52;27816:9;27810:16;27835:28;27857:5;27835:28;:::i;28228:136::-;28267:3;28295:5;28285:39;;28304:18;;:::i;:::-;-1:-1:-1;;;28340:18:1;;28228:136::o
Swarm Source
ipfs://7350bd390dcfa331414557f4e0142107eff882b6b20fa43c6b967d54205fb2f9
Loading...
Loading
Loading...
Loading
Net Worth in USD
$1,237.74
Net Worth in BNB
Token Allocations
BSC-USD
100.00%
Multichain Portfolio | 32 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| BSC | 100.00% | $1 | 1,237.736 | $1,237.74 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.