Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 358 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Transfer | 37319692 | 174 days ago | IN | 0 ETH | 0.00000084 | ||||
| Approve | 35034871 | 227 days ago | IN | 0 ETH | 0.00000003 | ||||
| Transfer | 34749684 | 233 days ago | IN | 0 ETH | 0.00000002 | ||||
| Transfer | 34749637 | 233 days ago | IN | 0 ETH | 0.00000002 | ||||
| Transfer | 34749596 | 233 days ago | IN | 0 ETH | 0.00000002 | ||||
| Transfer | 34749515 | 233 days ago | IN | 0 ETH | 0.00000003 | ||||
| Transfer | 34749472 | 233 days ago | IN | 0 ETH | 0.00000003 | ||||
| Transfer | 34748967 | 233 days ago | IN | 0 ETH | 0.00000006 | ||||
| Transfer | 34748844 | 233 days ago | IN | 0 ETH | 0.00000005 | ||||
| Transfer | 34748775 | 233 days ago | IN | 0 ETH | 0.00000006 | ||||
| Transfer | 34748670 | 233 days ago | IN | 0 ETH | 0.00000016 | ||||
| Transfer | 34748498 | 233 days ago | IN | 0 ETH | 0.00000021 | ||||
| Transfer | 34747332 | 233 days ago | IN | 0 ETH | 0.00000013 | ||||
| Transfer | 34692715 | 235 days ago | IN | 0 ETH | 0.00000061 | ||||
| Transfer | 34545448 | 238 days ago | IN | 0 ETH | 0.00000164 | ||||
| Transfer | 34198494 | 246 days ago | IN | 0 ETH | 0.00000156 | ||||
| Transfer | 34120207 | 248 days ago | IN | 0 ETH | 0.0000005 | ||||
| Transfer | 34102520 | 248 days ago | IN | 0 ETH | 0.00000018 | ||||
| Transfer | 34074937 | 249 days ago | IN | 0 ETH | 0.00000024 | ||||
| Transfer | 34073704 | 249 days ago | IN | 0 ETH | 0.00000044 | ||||
| Transfer | 34073664 | 249 days ago | IN | 0 ETH | 0.00000044 | ||||
| Transfer | 34073118 | 249 days ago | IN | 0 ETH | 0.00000108 | ||||
| Transfer | 34073037 | 249 days ago | IN | 0 ETH | 0.00000065 | ||||
| Transfer | 34073020 | 249 days ago | IN | 0 ETH | 0.00000065 | ||||
| Transfer | 34072970 | 249 days ago | IN | 0 ETH | 0.0000006 |
Latest 25 internal transactions (View All)
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 32371482 | 288 days ago | 0.00010804 ETH | ||||
| 32371482 | 288 days ago | 0.00016206 ETH | ||||
| 32371482 | 288 days ago | 0.0002701 ETH | ||||
| 32371482 | 288 days ago | 0.00054021 ETH | ||||
| 32371482 | 288 days ago | 0.00108042 ETH | ||||
| 31516163 | 308 days ago | 0.00010199 ETH | ||||
| 31516163 | 308 days ago | 0.00015299 ETH | ||||
| 31516163 | 308 days ago | 0.00025498 ETH | ||||
| 31516163 | 308 days ago | 0.00050997 ETH | ||||
| 31516163 | 308 days ago | 0.00101994 ETH | ||||
| 31457481 | 310 days ago | 0.00024533 ETH | ||||
| 31457481 | 310 days ago | 0.000368 ETH | ||||
| 31457481 | 310 days ago | 0.00061333 ETH | ||||
| 31457481 | 310 days ago | 0.00122667 ETH | ||||
| 31457481 | 310 days ago | 0.00245335 ETH | ||||
| 31100422 | 318 days ago | 0.0001445 ETH | ||||
| 31100422 | 318 days ago | 0.00021676 ETH | ||||
| 31100422 | 318 days ago | 0.00036127 ETH | ||||
| 31100422 | 318 days ago | 0.00072254 ETH | ||||
| 31100422 | 318 days ago | 0.00144508 ETH | ||||
| 31052918 | 319 days ago | 0.00045773 ETH | ||||
| 31052918 | 319 days ago | 0.00068659 ETH | ||||
| 31052918 | 319 days ago | 0.00114432 ETH | ||||
| 31052918 | 319 days ago | 0.00228865 ETH | ||||
| 31052918 | 319 days ago | 0.00457731 ETH |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Angel
Compiler Version
v0.8.20+commit.a1b79de6
Contract Source Code (Solidity)
/**
*Submitted for verification at basescan.org on 2024-12-27
*/
// SPDX-License-Identifier: MIT
/**
* Official Links:
* 🌐 Website: https://angelverse.io/token/
* 📢 Telegram: https://t.me/AngelVerseOfficial
* ✖ X (Twitter): https://x.com/realangelverse
*/
pragma solidity ^0.8.20;
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(
address indexed previousOwner,
address indexed newOwner
);
constructor() {
_transferOwnership(_msgSender());
}
function owner() public view virtual returns (address) {
return _owner;
}
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
function transferOwnership(address newOwner) public virtual onlyOwner {
require(
newOwner != address(0),
"Ownable: new owner is the zero address"
);
_transferOwnership(newOwner);
}
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
interface IERC20 {
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address to, 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 from,
address to,
uint256 amount
) external returns (bool);
}
interface IERC20Metadata is IERC20 {
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function decimals() external view returns (uint8);
}
contract ERC20 is Context, IERC20Metadata {
mapping(address => uint256) internal _balances;
mapping(address => mapping(address => uint256)) internal _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
function name() public view virtual override returns (string memory) {
return _name;
}
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
function decimals() public view virtual override returns (uint8) {
return 18;
}
function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
function balanceOf(address account)
public
view
virtual
override
returns (uint256)
{
return _balances[account];
}
function transfer(address to, uint256 amount)
public
virtual
override
returns (bool)
{
address owner = _msgSender();
_transfer(owner, to, amount);
return true;
}
function allowance(address owner, address spender)
public
view
virtual
override
returns (uint256)
{
return _allowances[owner][spender];
}
function approve(address spender, uint256 amount)
public
virtual
override
returns (bool)
{
address owner = _msgSender();
_approve(owner, spender, amount);
return true;
}
function transferFrom(
address from,
address to,
uint256 amount
) public virtual override returns (bool) {
address spender = _msgSender();
_spendAllowance(from, spender, amount);
_transfer(from, to, amount);
return true;
}
function increaseAllowance(address spender, uint256 addedValue)
public
virtual
returns (bool)
{
address owner = _msgSender();
_approve(owner, spender, allowance(owner, spender) + addedValue);
return true;
}
function decreaseAllowance(address spender, uint256 subtractedValue)
public
virtual
returns (bool)
{
address owner = _msgSender();
uint256 currentAllowance = allowance(owner, spender);
require(
currentAllowance >= subtractedValue,
"ERC20: decreased allowance below zero"
);
unchecked {
_approve(owner, spender, currentAllowance - subtractedValue);
}
return true;
}
function _transfer(
address from,
address to,
uint256 amount
) internal virtual {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
_beforeTokenTransfer(from, to, amount);
uint256 fromBalance = _balances[from];
require(
fromBalance >= amount,
"ERC20: transfer amount exceeds balance"
);
unchecked {
_balances[from] = fromBalance - amount;
_balances[to] += amount;
}
emit Transfer(from, to, amount);
_afterTokenTransfer(from, to, amount);
}
function _mint(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_beforeTokenTransfer(address(0), account, amount);
_totalSupply += amount;
unchecked {
_balances[account] += amount;
}
emit Transfer(address(0), account, amount);
_afterTokenTransfer(address(0), account, amount);
}
function _burn(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: burn from the zero address");
_beforeTokenTransfer(account, address(0), amount);
uint256 accountBalance = _balances[account];
require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
unchecked {
_balances[account] = accountBalance - amount;
_totalSupply -= amount;
}
emit Transfer(account, address(0), amount);
_afterTokenTransfer(account, address(0), amount);
}
function _approve(
address owner,
address spender,
uint256 amount
) internal virtual {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
function _spendAllowance(
address owner,
address spender,
uint256 amount
) internal virtual {
uint256 currentAllowance = allowance(owner, spender);
if (currentAllowance != type(uint256).max) {
require(
currentAllowance >= amount,
"ERC20: insufficient allowance"
);
unchecked {
_approve(owner, spender, currentAllowance - amount);
}
}
}
function _beforeTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
function _afterTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
}
interface IUniswapV2Pair {
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
event Transfer(address indexed from, address indexed to, uint256 value);
function name() external pure returns (string memory);
function symbol() external pure returns (string memory);
function decimals() external pure returns (uint8);
function totalSupply() external view returns (uint256);
function balanceOf(address owner) external view returns (uint256);
function allowance(address owner, address spender)
external
view
returns (uint256);
function approve(address spender, uint256 value) external returns (bool);
function transfer(address to, uint256 value) external returns (bool);
function transferFrom(
address from,
address to,
uint256 value
) external returns (bool);
function DOMAIN_SEPARATOR() external view returns (bytes32);
function PERMIT_TYPEHASH() external pure returns (bytes32);
function nonces(address owner) external view returns (uint256);
function permit(
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) external;
event Burn(
address indexed sender,
uint256 amount0,
uint256 amount1,
address indexed to
);
event Swap(
address indexed sender,
uint256 amount0In,
uint256 amount1In,
uint256 amount0Out,
uint256 amount1Out,
address indexed to
);
event Sync(uint112 reserve0, uint112 reserve1);
function MINIMUM_LIQUIDITY() external pure returns (uint256);
function factory() external view returns (address);
function token0() external view returns (address);
function token1() external view returns (address);
function getReserves()
external
view
returns (
uint112 reserve0,
uint112 reserve1,
uint32 blockTimestampLast
);
function price0CumulativeLast() external view returns (uint256);
function price1CumulativeLast() external view returns (uint256);
function kLast() external view returns (uint256);
function burn(address to)
external
returns (uint256 amount0, uint256 amount1);
function swap(
uint256 amount0Out,
uint256 amount1Out,
address to,
bytes calldata data
) external;
function skim(address to) external;
function sync() external;
function initialize(address, address) external;
}
interface IUniswapV2Factory {
event PairCreated(
address indexed token0,
address indexed token1,
address pair,
uint256
);
function feeTo() external view returns (address);
function feeToSetter() external view returns (address);
function getPair(address tokenA, address tokenB)
external
view
returns (address pair);
function allPairs(uint256) external view returns (address pair);
function allPairsLength() external view returns (uint256);
function createPair(address tokenA, address tokenB)
external
returns (address pair);
function setFeeTo(address) external;
function setFeeToSetter(address) external;
}
interface IUniswapV2Router01 {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidity(
address tokenA,
address tokenB,
uint256 amountADesired,
uint256 amountBDesired,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline
)
external
returns (
uint256 amountA,
uint256 amountB,
uint256 liquidity
);
function addLiquidityETH(
address token,
uint256 amountTokenDesired,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
)
external
payable
returns (
uint256 amountToken,
uint256 amountETH,
uint256 liquidity
);
function removeLiquidity(
address tokenA,
address tokenB,
uint256 liquidity,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline
) external returns (uint256 amountA, uint256 amountB);
function removeLiquidityETH(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
) external returns (uint256 amountToken, uint256 amountETH);
function removeLiquidityWithPermit(
address tokenA,
address tokenB,
uint256 liquidity,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline,
bool approveMax,
uint8 v,
bytes32 r,
bytes32 s
) external returns (uint256 amountA, uint256 amountB);
function removeLiquidityETHWithPermit(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline,
bool approveMax,
uint8 v,
bytes32 r,
bytes32 s
) external returns (uint256 amountToken, uint256 amountETH);
function swapExactTokensForTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapTokensForExactTokens(
uint256 amountOut,
uint256 amountInMax,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapExactETHForTokens(
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external payable returns (uint256[] memory amounts);
function swapTokensForExactETH(
uint256 amountOut,
uint256 amountInMax,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapExactTokensForETH(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapETHForExactTokens(
uint256 amountOut,
address[] calldata path,
address to,
uint256 deadline
) external payable returns (uint256[] memory amounts);
function quote(
uint256 amountA,
uint256 reserveA,
uint256 reserveB
) external pure returns (uint256 amountB);
function getAmountOut(
uint256 amountIn,
uint256 reserveIn,
uint256 reserveOut
) external pure returns (uint256 amountOut);
function getAmountIn(
uint256 amountOut,
uint256 reserveIn,
uint256 reserveOut
) external pure returns (uint256 amountIn);
function getAmountsOut(uint256 amountIn, address[] calldata path)
external
view
returns (uint256[] memory amounts);
function getAmountsIn(uint256 amountOut, address[] calldata path)
external
view
returns (uint256[] memory amounts);
}
interface IUniswapV2Router02 is IUniswapV2Router01 {
function removeLiquidityETHSupportingFeeOnTransferTokens(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
) external returns (uint256 amountETH);
function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline,
bool approveMax,
uint8 v,
bytes32 r,
bytes32 s
) external returns (uint256 amountETH);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external payable;
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external;
}
/// @title Angel Token Contract
/// @notice This contract implements an ERC20 token with custom fees and wallet allocations
contract Angel is ERC20, Ownable {
address payable public marketingWallet;
address payable public developmentWallet;
address payable public treasuryWallet;
address payable public investmentWallet;
uint256 public maxTxLimit;
uint256 public maxWalletAmount;
uint256 public buyTax;
uint256 public sellTax;
uint256 public swapThreshold;
bool private swapping;
IUniswapV2Router02 public uniswapRouter;
address public uniswapPair;
mapping(address => bool) public excludedFromFees;
event TaxesUpdated(uint256 buyTax, uint256 sellTax);
event MarketingWalletUpdated(address indexed oldWallet, address indexed newWallet);
event DevelopmentWalletUpdated(address indexed oldWallet, address indexed newWallet);
event TreasuryWalletUpdated(address indexed oldWallet, address indexed newWallet);
event InvestmentWalletUpdated(address indexed oldWallet, address indexed newWallet);
event SwapThresholdUpdated(uint256 threshold);
event ExcludedFromFees(address indexed account, bool excluded);
event MaxTxLimitUpdated(uint256 amount);
event MaxWalletAmountUpdated(uint256 amount);
event FeesDistributed(uint256 ethForInvestment, uint256 ethForMarketing, uint256 ethForDevelopment, uint256 ethForTreasury);
/// @notice Initializes the token contract with the initial supply and parameters
constructor() ERC20("Angelverse", "ANGEL") {
uint256 SUPPLY = 100_000_000 * 10 ** decimals();
_mint(msg.sender, SUPPLY);
developmentWallet = payable(0x7556C283Eeb4bBecAFf761cB9EE04D659dd7F28a);
marketingWallet = payable(0xB0fF9086165Fba3F21161E34e7c4EEdAb3E2679e);
treasuryWallet = payable(0x0b69532DD3531eF9295b0C6f01fE234322879788);
investmentWallet = payable(0x09c8Ee07DDc00a9AFa06d6FbCeb00214dd29e907);
maxTxLimit = totalSupply() / 100;
maxWalletAmount = (totalSupply() * 2) / 100;
buyTax = 25;
sellTax = 25;
swapThreshold = 10_000 * 10 ** decimals();
uniswapRouter = IUniswapV2Router02(
0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24 // Base Mainnet V2 Address
);
uniswapPair = IUniswapV2Factory(uniswapRouter.factory()).createPair(
address(this),
uniswapRouter.WETH()
);
excludedFromFees[msg.sender] = true;
excludedFromFees[address(this)] = true;
excludedFromFees[marketingWallet] = true;
excludedFromFees[treasuryWallet] = true;
excludedFromFees[developmentWallet] = true;
excludedFromFees[investmentWallet] = true;
}
/// @notice Returns the number of decimals used for the token
/// @return Number of decimals (9)
function decimals() public pure override returns (uint8) {
return 9;
}
/// @notice Handles token transfers and applies taxes if applicable
/// @param sender The address sending the tokens
/// @param recipient The address receiving the tokens
/// @param amount The amount of tokens being transferred
function _transfer(
address sender,
address recipient,
uint256 amount
) internal override {
require(amount > 0, "Angel: Transfer amount must be greater than zero");
if (!excludedFromFees[recipient] && !excludedFromFees[sender]) {
if(recipient != uniswapPair){
require(balanceOf(recipient) + amount <= maxWalletAmount, "Angel: Wallet balance exceeds max wallet limit");
}
require(amount <= maxTxLimit, "Angel: Amount exceeds max Transection limit");
}
uint256 fee = 0;
bool applyFees = true;
if (!swapping && sender != uniswapPair && balanceOf(address(this)) >= swapThreshold) {
swapping = true;
swapAndDistributeFees();
swapping = false;
}
if(excludedFromFees[sender] || excludedFromFees[recipient]){
applyFees = false;
}
if (applyFees) {
if (recipient == uniswapPair) {
fee = (amount * sellTax) / 100;
} else if (sender == uniswapPair) {
fee = (amount * buyTax) / 100;
}
if (fee > 0) {
super._transfer(sender, address(this), fee);
amount -= fee;
}
}
super._transfer(sender, recipient, amount);
}
/// @notice Swap tokens for ETH and distribute to wallets
function swapAndDistributeFees() private {
uint256 contractTokenBalance = balanceOf(address(this));
if (contractTokenBalance == 0) return;
uint256 initialETHBalance = address(this).balance;
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = uniswapRouter.WETH();
_approve(address(this), address(uniswapRouter), contractTokenBalance);
uniswapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
contractTokenBalance,
0,
path,
address(this),
block.timestamp
);
uint256 totalETHReceived = address(this).balance - initialETHBalance;
uint256 ethForInvestment = (totalETHReceived * 50) / 100;
uint256 ethForMarketing = (totalETHReceived * 25) / 100;
uint256 ethForDevelopment = (totalETHReceived * 15) / 100;
uint256 ethForTreasury = (totalETHReceived * 10) / 100;
payable(investmentWallet).transfer(ethForInvestment);
payable(marketingWallet).transfer(ethForMarketing);
payable(developmentWallet).transfer(ethForDevelopment);
payable(treasuryWallet).transfer(ethForTreasury);
emit FeesDistributed(ethForInvestment, ethForMarketing, ethForDevelopment, ethForTreasury);
}
/// @notice Allows the caller to burn a specified amount of tokens
/// @param amount The amount of tokens to burn
function burn(uint256 amount) external {
require(amount > 0, "Angel: Burn amount must be greater than zero");
_burn(msg.sender, amount);
}
/// @notice Updates the buy and sell tax percentages
/// @param _buyTax The new buy tax percentage
/// @param _sellTax The new sell tax percentage
function setTaxes(uint256 _buyTax, uint256 _sellTax) external onlyOwner {
require(_buyTax <= 25, "Angel: Buy tax can't exceed 25%");
require(_sellTax <= 25, "Angel: Sell tax can't exceed 25%");
buyTax = _buyTax;
sellTax = _sellTax;
emit TaxesUpdated(buyTax, sellTax);
}
/// @notice Updates the maximum transaction amount
/// @param amount The new maximum transaction amount
function setMaxTxLimit(uint256 amount) external onlyOwner {
require(amount >= totalSupply() / 100, "Angel: Max TX must be at least 1% tokens");
maxTxLimit = amount;
emit MaxTxLimitUpdated(amount);
}
/// @notice Updates the maximum wallet amount
/// @param amount The new maximum wallet amount
function setMaxWalletAmount(uint256 amount) external onlyOwner {
require(amount >= totalSupply() / 100, "Angel: Max wallet must be at least 1% tokens");
maxWalletAmount = amount;
emit MaxWalletAmountUpdated(amount);
}
/// @notice Updates the marketing wallet address
/// @param newWallet The new marketing wallet address
function setMarketingWallet(address payable newWallet) external onlyOwner {
require(newWallet != address(0), "Angel: Invalid address");
emit MarketingWalletUpdated(marketingWallet, newWallet);
marketingWallet = newWallet;
excludeFromFees(newWallet, true);
}
/// @notice Updates the development wallet address
/// @param newWallet The new development wallet address
function setDevelopmentWallet(address payable newWallet) external onlyOwner {
require(newWallet != address(0), "Angel: Invalid address");
emit DevelopmentWalletUpdated(developmentWallet, newWallet);
developmentWallet = newWallet;
excludeFromFees(newWallet, true);
}
/// @notice Updates the treasury wallet address
/// @param newWallet The new treasury wallet address
function setTreasuryWallet(address payable newWallet) external onlyOwner {
require(newWallet != address(0), "Angel: Invalid address");
emit TreasuryWalletUpdated(treasuryWallet, newWallet);
treasuryWallet = newWallet;
excludeFromFees(newWallet, true);
}
/// @notice Updates the LP wallet address
/// @param newWallet The new LP wallet address
function setInvestmentWallet(address payable newWallet) external onlyOwner {
require(newWallet != address(0), "Angel: Invalid address");
emit InvestmentWalletUpdated(investmentWallet, newWallet);
investmentWallet = newWallet;
excludeFromFees(newWallet, true);
}
/// @notice Updates the token balance threshold for swapping accumulated fees
/// @param threshold The new swap threshold
function setSwapThreshold(uint256 threshold) external onlyOwner {
require(threshold <= totalSupply(), "Angel: Threshold too high");
swapThreshold = threshold;
emit SwapThresholdUpdated(threshold);
}
/// @notice Excludes or includes an account from paying fees
/// @param account The account to exclude or include
/// @param excluded Whether to exclude (true) or include (false) the account
function excludeFromFees(address account, bool excluded) public onlyOwner {
excludedFromFees[account] = excluded;
emit ExcludedFromFees(account, excluded);
}
/// @notice Allows the owner to withdraw all Ether from the contract
function withdrawEther() external onlyOwner {
uint256 contractBalance = address(this).balance;
require(contractBalance > 0, "Angel: No Ether to withdraw");
payable(owner()).transfer(contractBalance);
}
/// @notice Allows the contract to receive ETH
receive() external payable {}
/// @notice Fallback function to handle unexpected ETH transfers
fallback() external payable {}
}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":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"},{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"DevelopmentWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"ExcludedFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"ethForInvestment","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethForMarketing","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethForDevelopment","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethForTreasury","type":"uint256"}],"name":"FeesDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"},{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"InvestmentWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"},{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"MarketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"MaxTxLimitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"MaxWalletAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"threshold","type":"uint256"}],"name":"SwapThresholdUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"buyTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellTax","type":"uint256"}],"name":"TaxesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"},{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"TreasuryWalletUpdated","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"developmentWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"investmentWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"}],"name":"setDevelopmentWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"}],"name":"setInvestmentWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"threshold","type":"uint256"}],"name":"setSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyTax","type":"uint256"},{"internalType":"uint256","name":"_sellTax","type":"uint256"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"}],"name":"setTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawEther","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
608060405234801562000010575f80fd5b506040518060400160405280600a81526020017f416e67656c7665727365000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f414e47454c00000000000000000000000000000000000000000000000000000081525081600390816200008e919062000c5d565b508060049081620000a0919062000c5d565b505050620000c3620000b7620007af60201b60201c565b620007b660201b60201c565b5f620000d46200087960201b60201c565b600a620000e2919062000eca565b6305f5e100620000f3919062000f1a565b90506200010733826200088160201b60201c565b737556c283eeb4bbecaff761cb9ee04d659dd7f28a60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073b0ff9086165fba3f21161e34e7c4eedab3e2679e60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550730b69532dd3531ef9295b0c6f01fe23432287978860085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507309c8ee07ddc00a9afa06d6fbceb00214dd29e90760095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606462000269620009e660201b60201c565b62000275919062000f91565b600a81905550606460026200028f620009e660201b60201c565b6200029b919062000f1a565b620002a7919062000f91565b600b819055506019600c819055506019600d81905550620002cd6200087960201b60201c565b600a620002db919062000eca565b612710620002ea919062000f1a565b600e81905550734752ba5dbc23f44d87826276bf6fd6b1c372ad24600f60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003b1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003d791906200102d565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200045f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200048591906200102d565b6040518363ffffffff1660e01b8152600401620004a49291906200106e565b6020604051808303815f875af1158015620004c1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620004e791906200102d565b60105f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160115f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160115f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160115f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160115f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160115f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160115f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550506200117d565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f6009905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620008f2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008e990620010f7565b60405180910390fd5b620009055f8383620009ef60201b60201c565b8060025f82825462000918919062001117565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620009c7919062001162565b60405180910390a3620009e25f8383620009f460201b60201c565b5050565b5f600254905090565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000a7557607f821691505b60208210810362000a8b5762000a8a62000a30565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000aef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000ab2565b62000afb868362000ab2565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000b4562000b3f62000b398462000b13565b62000b1c565b62000b13565b9050919050565b5f819050919050565b62000b608362000b25565b62000b7862000b6f8262000b4c565b84845462000abe565b825550505050565b5f90565b62000b8e62000b80565b62000b9b81848462000b55565b505050565b5b8181101562000bc25762000bb65f8262000b84565b60018101905062000ba1565b5050565b601f82111562000c115762000bdb8162000a91565b62000be68462000aa3565b8101602085101562000bf6578190505b62000c0e62000c058562000aa3565b83018262000ba0565b50505b505050565b5f82821c905092915050565b5f62000c335f198460080262000c16565b1980831691505092915050565b5f62000c4d838362000c22565b9150826002028217905092915050565b62000c6882620009f9565b67ffffffffffffffff81111562000c845762000c8362000a03565b5b62000c90825462000a5d565b62000c9d82828562000bc6565b5f60209050601f83116001811462000cd3575f841562000cbe578287015190505b62000cca858262000c40565b86555062000d39565b601f19841662000ce38662000a91565b5f5b8281101562000d0c5784890151825560018201915060208501945060208101905062000ce5565b8683101562000d2c578489015162000d28601f89168262000c22565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111562000dcb5780860481111562000da35762000da262000d41565b5b600185161562000db35780820291505b808102905062000dc38562000d6e565b945062000d83565b94509492505050565b5f8262000de5576001905062000eb7565b8162000df4575f905062000eb7565b816001811462000e0d576002811462000e185762000e4e565b600191505062000eb7565b60ff84111562000e2d5762000e2c62000d41565b5b8360020a91508482111562000e475762000e4662000d41565b5b5062000eb7565b5060208310610133831016604e8410600b841016171562000e885782820a90508381111562000e825762000e8162000d41565b5b62000eb7565b62000e97848484600162000d7a565b9250905081840481111562000eb15762000eb062000d41565b5b81810290505b9392505050565b5f60ff82169050919050565b5f62000ed68262000b13565b915062000ee38362000ebe565b925062000f127fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000dd4565b905092915050565b5f62000f268262000b13565b915062000f338362000b13565b925082820262000f438162000b13565b9150828204841483151762000f5d5762000f5c62000d41565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f62000f9d8262000b13565b915062000faa8362000b13565b92508262000fbd5762000fbc62000f64565b5b828204905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000ff78262000fcc565b9050919050565b620010098162000feb565b811462001014575f80fd5b50565b5f81519050620010278162000ffe565b92915050565b5f6020828403121562001045576200104462000fc8565b5b5f620010548482850162001017565b91505092915050565b620010688162000feb565b82525050565b5f604082019050620010835f8301856200105d565b6200109260208301846200105d565b9392505050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f620010df601f8362001099565b9150620010ec82620010a9565b602082019050919050565b5f6020820190508181035f8301526200111081620010d1565b9050919050565b5f620011238262000b13565b9150620011308362000b13565b92508282019050808211156200114b576200114a62000d41565b5b92915050565b6200115c8162000b13565b82525050565b5f602082019050620011775f83018462001151565b92915050565b614082806200118b5f395ff3fe60806040526004361061021d575f3560e01c806375f0a87411610122578063b6fa37bc116100aa578063c816841b1161006e578063c816841b14610796578063cc1776d3146107c0578063dbe66ca0146107ea578063dd62ed3e14610826578063f2fde38b1461086257610224565b8063b6fa37bc146106ca578063c0246668146106f4578063c04a54141461071c578063c43b247214610746578063c647b20e1461076e57610224565b80639d0014b1116100f15780639d0014b1146105d8578063a457c2d714610600578063a8602fea1461063c578063a9059cbb14610664578063aa4bde28146106a057610224565b806375f0a874146105305780638036d5901461055a5780638da5cb5b1461058457806395d89b41146105ae57610224565b80634626402b116101a557806370a082311161017457806370a0823114610476578063715018a6146104b257806372ac2486146104c8578063735de9f7146104f05780637362377b1461051a57610224565b80634626402b146103d25780634f7041a5146103fc5780635d098b381461042657806364f5a5bb1461044e57610224565b806323b872dd116101ec57806323b872dd146102e057806327a14fc21461031c578063313ce56714610344578063395093511461036e57806342966c68146103aa57610224565b80630445b6671461022657806306fdde0314610250578063095ea7b31461027a57806318160ddd146102b657610224565b3661022457005b005b348015610231575f80fd5b5061023a61088a565b6040516102479190612ca5565b60405180910390f35b34801561025b575f80fd5b50610264610890565b6040516102719190612d48565b60405180910390f35b348015610285575f80fd5b506102a0600480360381019061029b9190612df0565b610920565b6040516102ad9190612e48565b60405180910390f35b3480156102c1575f80fd5b506102ca610942565b6040516102d79190612ca5565b60405180910390f35b3480156102eb575f80fd5b5061030660048036038101906103019190612e61565b61094b565b6040516103139190612e48565b60405180910390f35b348015610327575f80fd5b50610342600480360381019061033d9190612eb1565b610979565b005b34801561034f575f80fd5b50610358610a8c565b6040516103659190612ef7565b60405180910390f35b348015610379575f80fd5b50610394600480360381019061038f9190612df0565b610a94565b6040516103a19190612e48565b60405180910390f35b3480156103b5575f80fd5b506103d060048036038101906103cb9190612eb1565b610aca565b005b3480156103dd575f80fd5b506103e6610b19565b6040516103f39190612f30565b60405180910390f35b348015610407575f80fd5b50610410610b3e565b60405161041d9190612ca5565b60405180910390f35b348015610431575f80fd5b5061044c60048036038101906104479190612f73565b610b44565b005b348015610459575f80fd5b50610474600480360381019061046f9190612eb1565b610cf7565b005b348015610481575f80fd5b5061049c60048036038101906104979190612f9e565b610e0a565b6040516104a99190612ca5565b60405180910390f35b3480156104bd575f80fd5b506104c6610e4f565b005b3480156104d3575f80fd5b506104ee60048036038101906104e99190612f73565b610ed6565b005b3480156104fb575f80fd5b50610504611089565b6040516105119190613024565b60405180910390f35b348015610525575f80fd5b5061052e6110af565b005b34801561053b575f80fd5b506105446111bf565b6040516105519190612f30565b60405180910390f35b348015610565575f80fd5b5061056e6111e4565b60405161057b9190612ca5565b60405180910390f35b34801561058f575f80fd5b506105986111ea565b6040516105a5919061304c565b60405180910390f35b3480156105b9575f80fd5b506105c2611212565b6040516105cf9190612d48565b60405180910390f35b3480156105e3575f80fd5b506105fe60048036038101906105f99190612eb1565b6112a2565b005b34801561060b575f80fd5b5061062660048036038101906106219190612df0565b6113a9565b6040516106339190612e48565b60405180910390f35b348015610647575f80fd5b50610662600480360381019061065d9190612f73565b61141e565b005b34801561066f575f80fd5b5061068a60048036038101906106859190612df0565b6115d1565b6040516106979190612e48565b60405180910390f35b3480156106ab575f80fd5b506106b46115f3565b6040516106c19190612ca5565b60405180910390f35b3480156106d5575f80fd5b506106de6115f9565b6040516106eb9190612f30565b60405180910390f35b3480156106ff575f80fd5b5061071a6004803603810190610715919061308f565b61161e565b005b348015610727575f80fd5b50610730611740565b60405161073d9190612f30565b60405180910390f35b348015610751575f80fd5b5061076c60048036038101906107679190612f73565b611765565b005b348015610779575f80fd5b50610794600480360381019061078f91906130cd565b611918565b005b3480156107a1575f80fd5b506107aa611a6b565b6040516107b7919061304c565b60405180910390f35b3480156107cb575f80fd5b506107d4611a90565b6040516107e19190612ca5565b60405180910390f35b3480156107f5575f80fd5b50610810600480360381019061080b9190612f9e565b611a96565b60405161081d9190612e48565b60405180910390f35b348015610831575f80fd5b5061084c6004803603810190610847919061310b565b611ab3565b6040516108599190612ca5565b60405180910390f35b34801561086d575f80fd5b5061088860048036038101906108839190612f9e565b611b35565b005b600e5481565b60606003805461089f90613176565b80601f01602080910402602001604051908101604052809291908181526020018280546108cb90613176565b80156109165780601f106108ed57610100808354040283529160200191610916565b820191905f5260205f20905b8154815290600101906020018083116108f957829003601f168201915b5050505050905090565b5f8061092a611c2b565b9050610937818585611c32565b600191505092915050565b5f600254905090565b5f80610955611c2b565b9050610962858285611df5565b61096d858585611e80565b60019150509392505050565b610981611c2b565b73ffffffffffffffffffffffffffffffffffffffff1661099f6111ea565b73ffffffffffffffffffffffffffffffffffffffff16146109f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ec906131f0565b60405180910390fd5b60646109ff610942565b610a099190613268565b811015610a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4290613308565b60405180910390fd5b80600b819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e00181604051610a819190612ca5565b60405180910390a150565b5f6009905090565b5f80610a9e611c2b565b9050610abf818585610ab08589611ab3565b610aba9190613326565b611c32565b600191505092915050565b5f8111610b0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b03906133c9565b60405180910390fd5b610b1633826122e4565b50565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b610b4c611c2b565b73ffffffffffffffffffffffffffffffffffffffff16610b6a6111ea565b73ffffffffffffffffffffffffffffffffffffffff1614610bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb7906131f0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2590613431565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610cf481600161161e565b50565b610cff611c2b565b73ffffffffffffffffffffffffffffffffffffffff16610d1d6111ea565b73ffffffffffffffffffffffffffffffffffffffff1614610d73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6a906131f0565b60405180910390fd5b6064610d7d610942565b610d879190613268565b811015610dc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc0906134bf565b60405180910390fd5b80600a819055507f7cd96ba5448bfec9f649d205609b7ef3d00507914d52d7fe748da5811659406a81604051610dff9190612ca5565b60405180910390a150565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610e57611c2b565b73ffffffffffffffffffffffffffffffffffffffff16610e756111ea565b73ffffffffffffffffffffffffffffffffffffffff1614610ecb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec2906131f0565b60405180910390fd5b610ed45f6124a7565b565b610ede611c2b565b73ffffffffffffffffffffffffffffffffffffffff16610efc6111ea565b73ffffffffffffffffffffffffffffffffffffffff1614610f52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f49906131f0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610fc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb790613431565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f94cc1498503be9a145caf3e96f856665f29cf9b26c7179a93fbe1c1e5f56a0fd60405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061108681600161161e565b50565b600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6110b7611c2b565b73ffffffffffffffffffffffffffffffffffffffff166110d56111ea565b73ffffffffffffffffffffffffffffffffffffffff161461112b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611122906131f0565b60405180910390fd5b5f4790505f8111611171576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116890613527565b60405180910390fd5b6111796111ea565b73ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156111bb573d5f803e3d5ffd5b5050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461122190613176565b80601f016020809104026020016040519081016040528092919081815260200182805461124d90613176565b80156112985780601f1061126f57610100808354040283529160200191611298565b820191905f5260205f20905b81548152906001019060200180831161127b57829003601f168201915b5050505050905090565b6112aa611c2b565b73ffffffffffffffffffffffffffffffffffffffff166112c86111ea565b73ffffffffffffffffffffffffffffffffffffffff161461131e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611315906131f0565b60405180910390fd5b611326610942565b811115611368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135f9061358f565b60405180910390fd5b80600e819055507f18ff2fc8464635e4f668567019152095047e34d7a2ab4b97661ba4dc7fd064768160405161139e9190612ca5565b60405180910390a150565b5f806113b3611c2b565b90505f6113c08286611ab3565b905083811015611405576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fc9061361d565b60405180910390fd5b6114128286868403611c32565b60019250505092915050565b611426611c2b565b73ffffffffffffffffffffffffffffffffffffffff166114446111ea565b73ffffffffffffffffffffffffffffffffffffffff161461149a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611491906131f0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611508576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ff90613431565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fa982575859d7ad2f390dc12b23f7dab8bbda047f9d0140ac68344b27bf34bfb460405160405180910390a38060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506115ce81600161161e565b50565b5f806115db611c2b565b90506115e8818585611e80565b600191505092915050565b600b5481565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611626611c2b565b73ffffffffffffffffffffffffffffffffffffffff166116446111ea565b73ffffffffffffffffffffffffffffffffffffffff161461169a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611691906131f0565b60405180910390fd5b8060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f3499bfcf9673677ba552f3fe2ea274ec7e6246da31c3c87e115b45a9b0db2efb826040516117349190612e48565b60405180910390a25050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61176d611c2b565b73ffffffffffffffffffffffffffffffffffffffff1661178b6111ea565b73ffffffffffffffffffffffffffffffffffffffff16146117e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d8906131f0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361184f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184690613431565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fdf6235b37dec10f156049397a31d5cfcd35b3ba91e1d95545e4cd8cb16f22b3560405160405180910390a38060095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061191581600161161e565b50565b611920611c2b565b73ffffffffffffffffffffffffffffffffffffffff1661193e6111ea565b73ffffffffffffffffffffffffffffffffffffffff1614611994576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198b906131f0565b60405180910390fd5b60198211156119d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cf90613685565b60405180910390fd5b6019811115611a1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a13906136ed565b60405180910390fd5b81600c8190555080600d819055507f35d461df023e70886ad5e68610133ecb7d637c2263453f6ea50daf699cb31ed4600c54600d54604051611a5f92919061370b565b60405180910390a15050565b60105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b6011602052805f5260405f205f915054906101000a900460ff1681565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611b3d611c2b565b73ffffffffffffffffffffffffffffffffffffffff16611b5b6111ea565b73ffffffffffffffffffffffffffffffffffffffff1614611bb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba8906131f0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c16906137a2565b60405180910390fd5b611c28816124a7565b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ca0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9790613830565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d05906138be565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611de89190612ca5565b60405180910390a3505050565b5f611e008484611ab3565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611e7a5781811015611e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6390613926565b60405180910390fd5b611e798484848403611c32565b5b50505050565b5f8111611ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb9906139b4565b60405180910390fd5b60115f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015611f60575060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156120585760105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461201257600b5481611fc684610e0a565b611fd09190613326565b1115612011576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200890613a42565b60405180910390fd5b5b600a54811115612057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204e90613ad0565b60405180910390fd5b5b5f8060019050600f5f9054906101000a900460ff161580156120c7575060105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156120dd5750600e546120da30610e0a565b10155b1561211e576001600f5f6101000a81548160ff02191690831515021790555061210461256a565b5f600f5f6101000a81548160ff0219169083151502179055505b60115f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806121b9575060115f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156121c2575f90505b80156122d25760105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361223d576064600d548461222c9190613aee565b6122369190613268565b91506122af565b60105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036122ae576064600c54846122a19190613aee565b6122ab9190613268565b91505b5b5f8211156122d1576122c2853084612a17565b81836122ce9190613b2f565b92505b5b6122dd858585612a17565b5050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612352576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234990613bd2565b60405180910390fd5b61235d825f83612c83565b5f805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156123e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d790613c60565b60405180910390fd5b8181035f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f82825403925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161248f9190612ca5565b60405180910390a36124a2835f84612c88565b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f61257430610e0a565b90505f81036125835750612a15565b5f4790505f600267ffffffffffffffff8111156125a3576125a2613c7e565b5b6040519080825280602002602001820160405280156125d15781602001602082028036833780820191505090505b50905030815f815181106125e8576125e7613cab565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561268d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126b19190613cec565b816001815181106126c5576126c4613cab565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061272c30600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685611c32565b600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947845f8430426040518663ffffffff1660e01b815260040161278f959493929190613e07565b5f604051808303815f87803b1580156127a6575f80fd5b505af11580156127b8573d5f803e3d5ffd5b505050505f82476127c99190613b2f565b90505f60646032836127db9190613aee565b6127e59190613268565b90505f60646019846127f79190613aee565b6128019190613268565b90505f6064600f856128139190613aee565b61281d9190613268565b90505f6064600a8661282f9190613aee565b6128399190613268565b905060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8590811502906040515f60405180830381858888f1935050505015801561289f573d5f803e3d5ffd5b5060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8490811502906040515f60405180830381858888f19350505050158015612904573d5f803e3d5ffd5b5060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f19350505050158015612969573d5f803e3d5ffd5b5060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156129ce573d5f803e3d5ffd5b507f78490b24a020086d2701460dc169a540280c517bef9cdcd742f751a9099922a384848484604051612a049493929190613e5f565b60405180910390a150505050505050505b565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7c90613f12565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aea90613fa0565b60405180910390fd5b612afe838383612c83565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612b81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b789061402e565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612c6a9190612ca5565b60405180910390a3612c7d848484612c88565b50505050565b505050565b505050565b5f819050919050565b612c9f81612c8d565b82525050565b5f602082019050612cb85f830184612c96565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612cf5578082015181840152602081019050612cda565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612d1a82612cbe565b612d248185612cc8565b9350612d34818560208601612cd8565b612d3d81612d00565b840191505092915050565b5f6020820190508181035f830152612d608184612d10565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612d9582612d6c565b9050919050565b612da581612d8b565b8114612daf575f80fd5b50565b5f81359050612dc081612d9c565b92915050565b612dcf81612c8d565b8114612dd9575f80fd5b50565b5f81359050612dea81612dc6565b92915050565b5f8060408385031215612e0657612e05612d68565b5b5f612e1385828601612db2565b9250506020612e2485828601612ddc565b9150509250929050565b5f8115159050919050565b612e4281612e2e565b82525050565b5f602082019050612e5b5f830184612e39565b92915050565b5f805f60608486031215612e7857612e77612d68565b5b5f612e8586828701612db2565b9350506020612e9686828701612db2565b9250506040612ea786828701612ddc565b9150509250925092565b5f60208284031215612ec657612ec5612d68565b5b5f612ed384828501612ddc565b91505092915050565b5f60ff82169050919050565b612ef181612edc565b82525050565b5f602082019050612f0a5f830184612ee8565b92915050565b5f612f1a82612d6c565b9050919050565b612f2a81612f10565b82525050565b5f602082019050612f435f830184612f21565b92915050565b612f5281612f10565b8114612f5c575f80fd5b50565b5f81359050612f6d81612f49565b92915050565b5f60208284031215612f8857612f87612d68565b5b5f612f9584828501612f5f565b91505092915050565b5f60208284031215612fb357612fb2612d68565b5b5f612fc084828501612db2565b91505092915050565b5f819050919050565b5f612fec612fe7612fe284612d6c565b612fc9565b612d6c565b9050919050565b5f612ffd82612fd2565b9050919050565b5f61300e82612ff3565b9050919050565b61301e81613004565b82525050565b5f6020820190506130375f830184613015565b92915050565b61304681612d8b565b82525050565b5f60208201905061305f5f83018461303d565b92915050565b61306e81612e2e565b8114613078575f80fd5b50565b5f8135905061308981613065565b92915050565b5f80604083850312156130a5576130a4612d68565b5b5f6130b285828601612db2565b92505060206130c38582860161307b565b9150509250929050565b5f80604083850312156130e3576130e2612d68565b5b5f6130f085828601612ddc565b925050602061310185828601612ddc565b9150509250929050565b5f806040838503121561312157613120612d68565b5b5f61312e85828601612db2565b925050602061313f85828601612db2565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061318d57607f821691505b6020821081036131a05761319f613149565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6131da602083612cc8565b91506131e5826131a6565b602082019050919050565b5f6020820190508181035f830152613207816131ce565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61327282612c8d565b915061327d83612c8d565b92508261328d5761328c61320e565b5b828204905092915050565b7f416e67656c3a204d61782077616c6c6574206d757374206265206174206c65615f8201527f737420312520746f6b656e730000000000000000000000000000000000000000602082015250565b5f6132f2602c83612cc8565b91506132fd82613298565b604082019050919050565b5f6020820190508181035f83015261331f816132e6565b9050919050565b5f61333082612c8d565b915061333b83612c8d565b92508282019050808211156133535761335261323b565b5b92915050565b7f416e67656c3a204275726e20616d6f756e74206d7573742062652067726561745f8201527f6572207468616e207a65726f0000000000000000000000000000000000000000602082015250565b5f6133b3602c83612cc8565b91506133be82613359565b604082019050919050565b5f6020820190508181035f8301526133e0816133a7565b9050919050565b7f416e67656c3a20496e76616c69642061646472657373000000000000000000005f82015250565b5f61341b601683612cc8565b9150613426826133e7565b602082019050919050565b5f6020820190508181035f8301526134488161340f565b9050919050565b7f416e67656c3a204d6178205458206d757374206265206174206c6561737420315f8201527f2520746f6b656e73000000000000000000000000000000000000000000000000602082015250565b5f6134a9602883612cc8565b91506134b48261344f565b604082019050919050565b5f6020820190508181035f8301526134d68161349d565b9050919050565b7f416e67656c3a204e6f20457468657220746f20776974686472617700000000005f82015250565b5f613511601b83612cc8565b915061351c826134dd565b602082019050919050565b5f6020820190508181035f83015261353e81613505565b9050919050565b7f416e67656c3a205468726573686f6c6420746f6f2068696768000000000000005f82015250565b5f613579601983612cc8565b915061358482613545565b602082019050919050565b5f6020820190508181035f8301526135a68161356d565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613607602583612cc8565b9150613612826135ad565b604082019050919050565b5f6020820190508181035f830152613634816135fb565b9050919050565b7f416e67656c3a20427579207461782063616e27742065786365656420323525005f82015250565b5f61366f601f83612cc8565b915061367a8261363b565b602082019050919050565b5f6020820190508181035f83015261369c81613663565b9050919050565b7f416e67656c3a2053656c6c207461782063616e277420657863656564203235255f82015250565b5f6136d7602083612cc8565b91506136e2826136a3565b602082019050919050565b5f6020820190508181035f830152613704816136cb565b9050919050565b5f60408201905061371e5f830185612c96565b61372b6020830184612c96565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61378c602683612cc8565b915061379782613732565b604082019050919050565b5f6020820190508181035f8301526137b981613780565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61381a602483612cc8565b9150613825826137c0565b604082019050919050565b5f6020820190508181035f8301526138478161380e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6138a8602283612cc8565b91506138b38261384e565b604082019050919050565b5f6020820190508181035f8301526138d58161389c565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f613910601d83612cc8565b915061391b826138dc565b602082019050919050565b5f6020820190508181035f83015261393d81613904565b9050919050565b7f416e67656c3a205472616e7366657220616d6f756e74206d75737420626520675f8201527f726561746572207468616e207a65726f00000000000000000000000000000000602082015250565b5f61399e603083612cc8565b91506139a982613944565b604082019050919050565b5f6020820190508181035f8301526139cb81613992565b9050919050565b7f416e67656c3a2057616c6c65742062616c616e63652065786365656473206d615f8201527f782077616c6c6574206c696d6974000000000000000000000000000000000000602082015250565b5f613a2c602e83612cc8565b9150613a37826139d2565b604082019050919050565b5f6020820190508181035f830152613a5981613a20565b9050919050565b7f416e67656c3a20416d6f756e742065786365656473206d6178205472616e73655f8201527f6374696f6e206c696d6974000000000000000000000000000000000000000000602082015250565b5f613aba602b83612cc8565b9150613ac582613a60565b604082019050919050565b5f6020820190508181035f830152613ae781613aae565b9050919050565b5f613af882612c8d565b9150613b0383612c8d565b9250828202613b1181612c8d565b91508282048414831517613b2857613b2761323b565b5b5092915050565b5f613b3982612c8d565b9150613b4483612c8d565b9250828203905081811115613b5c57613b5b61323b565b5b92915050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f613bbc602183612cc8565b9150613bc782613b62565b604082019050919050565b5f6020820190508181035f830152613be981613bb0565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f613c4a602283612cc8565b9150613c5582613bf0565b604082019050919050565b5f6020820190508181035f830152613c7781613c3e565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050613ce681612d9c565b92915050565b5f60208284031215613d0157613d00612d68565b5b5f613d0e84828501613cd8565b91505092915050565b5f819050919050565b5f613d3a613d35613d3084613d17565b612fc9565b612c8d565b9050919050565b613d4a81613d20565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613d8281612d8b565b82525050565b5f613d938383613d79565b60208301905092915050565b5f602082019050919050565b5f613db582613d50565b613dbf8185613d5a565b9350613dca83613d6a565b805f5b83811015613dfa578151613de18882613d88565b9750613dec83613d9f565b925050600181019050613dcd565b5085935050505092915050565b5f60a082019050613e1a5f830188612c96565b613e276020830187613d41565b8181036040830152613e398186613dab565b9050613e48606083018561303d565b613e556080830184612c96565b9695505050505050565b5f608082019050613e725f830187612c96565b613e7f6020830186612c96565b613e8c6040830185612c96565b613e996060830184612c96565b95945050505050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613efc602583612cc8565b9150613f0782613ea2565b604082019050919050565b5f6020820190508181035f830152613f2981613ef0565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613f8a602383612cc8565b9150613f9582613f30565b604082019050919050565b5f6020820190508181035f830152613fb781613f7e565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f614018602683612cc8565b915061402382613fbe565b604082019050919050565b5f6020820190508181035f8301526140458161400c565b905091905056fea2646970667358221220a70e3d05549f9867a171d11b5c7e7e61994a30403c7bb8c212ec2a358edc0bbe64736f6c63430008140033
Deployed Bytecode
0x60806040526004361061021d575f3560e01c806375f0a87411610122578063b6fa37bc116100aa578063c816841b1161006e578063c816841b14610796578063cc1776d3146107c0578063dbe66ca0146107ea578063dd62ed3e14610826578063f2fde38b1461086257610224565b8063b6fa37bc146106ca578063c0246668146106f4578063c04a54141461071c578063c43b247214610746578063c647b20e1461076e57610224565b80639d0014b1116100f15780639d0014b1146105d8578063a457c2d714610600578063a8602fea1461063c578063a9059cbb14610664578063aa4bde28146106a057610224565b806375f0a874146105305780638036d5901461055a5780638da5cb5b1461058457806395d89b41146105ae57610224565b80634626402b116101a557806370a082311161017457806370a0823114610476578063715018a6146104b257806372ac2486146104c8578063735de9f7146104f05780637362377b1461051a57610224565b80634626402b146103d25780634f7041a5146103fc5780635d098b381461042657806364f5a5bb1461044e57610224565b806323b872dd116101ec57806323b872dd146102e057806327a14fc21461031c578063313ce56714610344578063395093511461036e57806342966c68146103aa57610224565b80630445b6671461022657806306fdde0314610250578063095ea7b31461027a57806318160ddd146102b657610224565b3661022457005b005b348015610231575f80fd5b5061023a61088a565b6040516102479190612ca5565b60405180910390f35b34801561025b575f80fd5b50610264610890565b6040516102719190612d48565b60405180910390f35b348015610285575f80fd5b506102a0600480360381019061029b9190612df0565b610920565b6040516102ad9190612e48565b60405180910390f35b3480156102c1575f80fd5b506102ca610942565b6040516102d79190612ca5565b60405180910390f35b3480156102eb575f80fd5b5061030660048036038101906103019190612e61565b61094b565b6040516103139190612e48565b60405180910390f35b348015610327575f80fd5b50610342600480360381019061033d9190612eb1565b610979565b005b34801561034f575f80fd5b50610358610a8c565b6040516103659190612ef7565b60405180910390f35b348015610379575f80fd5b50610394600480360381019061038f9190612df0565b610a94565b6040516103a19190612e48565b60405180910390f35b3480156103b5575f80fd5b506103d060048036038101906103cb9190612eb1565b610aca565b005b3480156103dd575f80fd5b506103e6610b19565b6040516103f39190612f30565b60405180910390f35b348015610407575f80fd5b50610410610b3e565b60405161041d9190612ca5565b60405180910390f35b348015610431575f80fd5b5061044c60048036038101906104479190612f73565b610b44565b005b348015610459575f80fd5b50610474600480360381019061046f9190612eb1565b610cf7565b005b348015610481575f80fd5b5061049c60048036038101906104979190612f9e565b610e0a565b6040516104a99190612ca5565b60405180910390f35b3480156104bd575f80fd5b506104c6610e4f565b005b3480156104d3575f80fd5b506104ee60048036038101906104e99190612f73565b610ed6565b005b3480156104fb575f80fd5b50610504611089565b6040516105119190613024565b60405180910390f35b348015610525575f80fd5b5061052e6110af565b005b34801561053b575f80fd5b506105446111bf565b6040516105519190612f30565b60405180910390f35b348015610565575f80fd5b5061056e6111e4565b60405161057b9190612ca5565b60405180910390f35b34801561058f575f80fd5b506105986111ea565b6040516105a5919061304c565b60405180910390f35b3480156105b9575f80fd5b506105c2611212565b6040516105cf9190612d48565b60405180910390f35b3480156105e3575f80fd5b506105fe60048036038101906105f99190612eb1565b6112a2565b005b34801561060b575f80fd5b5061062660048036038101906106219190612df0565b6113a9565b6040516106339190612e48565b60405180910390f35b348015610647575f80fd5b50610662600480360381019061065d9190612f73565b61141e565b005b34801561066f575f80fd5b5061068a60048036038101906106859190612df0565b6115d1565b6040516106979190612e48565b60405180910390f35b3480156106ab575f80fd5b506106b46115f3565b6040516106c19190612ca5565b60405180910390f35b3480156106d5575f80fd5b506106de6115f9565b6040516106eb9190612f30565b60405180910390f35b3480156106ff575f80fd5b5061071a6004803603810190610715919061308f565b61161e565b005b348015610727575f80fd5b50610730611740565b60405161073d9190612f30565b60405180910390f35b348015610751575f80fd5b5061076c60048036038101906107679190612f73565b611765565b005b348015610779575f80fd5b50610794600480360381019061078f91906130cd565b611918565b005b3480156107a1575f80fd5b506107aa611a6b565b6040516107b7919061304c565b60405180910390f35b3480156107cb575f80fd5b506107d4611a90565b6040516107e19190612ca5565b60405180910390f35b3480156107f5575f80fd5b50610810600480360381019061080b9190612f9e565b611a96565b60405161081d9190612e48565b60405180910390f35b348015610831575f80fd5b5061084c6004803603810190610847919061310b565b611ab3565b6040516108599190612ca5565b60405180910390f35b34801561086d575f80fd5b5061088860048036038101906108839190612f9e565b611b35565b005b600e5481565b60606003805461089f90613176565b80601f01602080910402602001604051908101604052809291908181526020018280546108cb90613176565b80156109165780601f106108ed57610100808354040283529160200191610916565b820191905f5260205f20905b8154815290600101906020018083116108f957829003601f168201915b5050505050905090565b5f8061092a611c2b565b9050610937818585611c32565b600191505092915050565b5f600254905090565b5f80610955611c2b565b9050610962858285611df5565b61096d858585611e80565b60019150509392505050565b610981611c2b565b73ffffffffffffffffffffffffffffffffffffffff1661099f6111ea565b73ffffffffffffffffffffffffffffffffffffffff16146109f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ec906131f0565b60405180910390fd5b60646109ff610942565b610a099190613268565b811015610a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4290613308565b60405180910390fd5b80600b819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e00181604051610a819190612ca5565b60405180910390a150565b5f6009905090565b5f80610a9e611c2b565b9050610abf818585610ab08589611ab3565b610aba9190613326565b611c32565b600191505092915050565b5f8111610b0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b03906133c9565b60405180910390fd5b610b1633826122e4565b50565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b610b4c611c2b565b73ffffffffffffffffffffffffffffffffffffffff16610b6a6111ea565b73ffffffffffffffffffffffffffffffffffffffff1614610bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb7906131f0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2590613431565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610cf481600161161e565b50565b610cff611c2b565b73ffffffffffffffffffffffffffffffffffffffff16610d1d6111ea565b73ffffffffffffffffffffffffffffffffffffffff1614610d73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6a906131f0565b60405180910390fd5b6064610d7d610942565b610d879190613268565b811015610dc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc0906134bf565b60405180910390fd5b80600a819055507f7cd96ba5448bfec9f649d205609b7ef3d00507914d52d7fe748da5811659406a81604051610dff9190612ca5565b60405180910390a150565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610e57611c2b565b73ffffffffffffffffffffffffffffffffffffffff16610e756111ea565b73ffffffffffffffffffffffffffffffffffffffff1614610ecb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec2906131f0565b60405180910390fd5b610ed45f6124a7565b565b610ede611c2b565b73ffffffffffffffffffffffffffffffffffffffff16610efc6111ea565b73ffffffffffffffffffffffffffffffffffffffff1614610f52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f49906131f0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610fc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb790613431565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f94cc1498503be9a145caf3e96f856665f29cf9b26c7179a93fbe1c1e5f56a0fd60405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061108681600161161e565b50565b600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6110b7611c2b565b73ffffffffffffffffffffffffffffffffffffffff166110d56111ea565b73ffffffffffffffffffffffffffffffffffffffff161461112b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611122906131f0565b60405180910390fd5b5f4790505f8111611171576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116890613527565b60405180910390fd5b6111796111ea565b73ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156111bb573d5f803e3d5ffd5b5050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461122190613176565b80601f016020809104026020016040519081016040528092919081815260200182805461124d90613176565b80156112985780601f1061126f57610100808354040283529160200191611298565b820191905f5260205f20905b81548152906001019060200180831161127b57829003601f168201915b5050505050905090565b6112aa611c2b565b73ffffffffffffffffffffffffffffffffffffffff166112c86111ea565b73ffffffffffffffffffffffffffffffffffffffff161461131e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611315906131f0565b60405180910390fd5b611326610942565b811115611368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135f9061358f565b60405180910390fd5b80600e819055507f18ff2fc8464635e4f668567019152095047e34d7a2ab4b97661ba4dc7fd064768160405161139e9190612ca5565b60405180910390a150565b5f806113b3611c2b565b90505f6113c08286611ab3565b905083811015611405576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fc9061361d565b60405180910390fd5b6114128286868403611c32565b60019250505092915050565b611426611c2b565b73ffffffffffffffffffffffffffffffffffffffff166114446111ea565b73ffffffffffffffffffffffffffffffffffffffff161461149a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611491906131f0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611508576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ff90613431565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fa982575859d7ad2f390dc12b23f7dab8bbda047f9d0140ac68344b27bf34bfb460405160405180910390a38060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506115ce81600161161e565b50565b5f806115db611c2b565b90506115e8818585611e80565b600191505092915050565b600b5481565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611626611c2b565b73ffffffffffffffffffffffffffffffffffffffff166116446111ea565b73ffffffffffffffffffffffffffffffffffffffff161461169a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611691906131f0565b60405180910390fd5b8060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f3499bfcf9673677ba552f3fe2ea274ec7e6246da31c3c87e115b45a9b0db2efb826040516117349190612e48565b60405180910390a25050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61176d611c2b565b73ffffffffffffffffffffffffffffffffffffffff1661178b6111ea565b73ffffffffffffffffffffffffffffffffffffffff16146117e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d8906131f0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361184f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184690613431565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fdf6235b37dec10f156049397a31d5cfcd35b3ba91e1d95545e4cd8cb16f22b3560405160405180910390a38060095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061191581600161161e565b50565b611920611c2b565b73ffffffffffffffffffffffffffffffffffffffff1661193e6111ea565b73ffffffffffffffffffffffffffffffffffffffff1614611994576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198b906131f0565b60405180910390fd5b60198211156119d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cf90613685565b60405180910390fd5b6019811115611a1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a13906136ed565b60405180910390fd5b81600c8190555080600d819055507f35d461df023e70886ad5e68610133ecb7d637c2263453f6ea50daf699cb31ed4600c54600d54604051611a5f92919061370b565b60405180910390a15050565b60105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b6011602052805f5260405f205f915054906101000a900460ff1681565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611b3d611c2b565b73ffffffffffffffffffffffffffffffffffffffff16611b5b6111ea565b73ffffffffffffffffffffffffffffffffffffffff1614611bb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba8906131f0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c16906137a2565b60405180910390fd5b611c28816124a7565b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ca0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9790613830565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d05906138be565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611de89190612ca5565b60405180910390a3505050565b5f611e008484611ab3565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611e7a5781811015611e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6390613926565b60405180910390fd5b611e798484848403611c32565b5b50505050565b5f8111611ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb9906139b4565b60405180910390fd5b60115f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015611f60575060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156120585760105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461201257600b5481611fc684610e0a565b611fd09190613326565b1115612011576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200890613a42565b60405180910390fd5b5b600a54811115612057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204e90613ad0565b60405180910390fd5b5b5f8060019050600f5f9054906101000a900460ff161580156120c7575060105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156120dd5750600e546120da30610e0a565b10155b1561211e576001600f5f6101000a81548160ff02191690831515021790555061210461256a565b5f600f5f6101000a81548160ff0219169083151502179055505b60115f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806121b9575060115f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156121c2575f90505b80156122d25760105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361223d576064600d548461222c9190613aee565b6122369190613268565b91506122af565b60105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036122ae576064600c54846122a19190613aee565b6122ab9190613268565b91505b5b5f8211156122d1576122c2853084612a17565b81836122ce9190613b2f565b92505b5b6122dd858585612a17565b5050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612352576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234990613bd2565b60405180910390fd5b61235d825f83612c83565b5f805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156123e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d790613c60565b60405180910390fd5b8181035f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f82825403925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161248f9190612ca5565b60405180910390a36124a2835f84612c88565b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f61257430610e0a565b90505f81036125835750612a15565b5f4790505f600267ffffffffffffffff8111156125a3576125a2613c7e565b5b6040519080825280602002602001820160405280156125d15781602001602082028036833780820191505090505b50905030815f815181106125e8576125e7613cab565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561268d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126b19190613cec565b816001815181106126c5576126c4613cab565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061272c30600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685611c32565b600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947845f8430426040518663ffffffff1660e01b815260040161278f959493929190613e07565b5f604051808303815f87803b1580156127a6575f80fd5b505af11580156127b8573d5f803e3d5ffd5b505050505f82476127c99190613b2f565b90505f60646032836127db9190613aee565b6127e59190613268565b90505f60646019846127f79190613aee565b6128019190613268565b90505f6064600f856128139190613aee565b61281d9190613268565b90505f6064600a8661282f9190613aee565b6128399190613268565b905060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8590811502906040515f60405180830381858888f1935050505015801561289f573d5f803e3d5ffd5b5060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8490811502906040515f60405180830381858888f19350505050158015612904573d5f803e3d5ffd5b5060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f19350505050158015612969573d5f803e3d5ffd5b5060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156129ce573d5f803e3d5ffd5b507f78490b24a020086d2701460dc169a540280c517bef9cdcd742f751a9099922a384848484604051612a049493929190613e5f565b60405180910390a150505050505050505b565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7c90613f12565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aea90613fa0565b60405180910390fd5b612afe838383612c83565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612b81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b789061402e565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612c6a9190612ca5565b60405180910390a3612c7d848484612c88565b50505050565b505050565b505050565b5f819050919050565b612c9f81612c8d565b82525050565b5f602082019050612cb85f830184612c96565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612cf5578082015181840152602081019050612cda565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612d1a82612cbe565b612d248185612cc8565b9350612d34818560208601612cd8565b612d3d81612d00565b840191505092915050565b5f6020820190508181035f830152612d608184612d10565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612d9582612d6c565b9050919050565b612da581612d8b565b8114612daf575f80fd5b50565b5f81359050612dc081612d9c565b92915050565b612dcf81612c8d565b8114612dd9575f80fd5b50565b5f81359050612dea81612dc6565b92915050565b5f8060408385031215612e0657612e05612d68565b5b5f612e1385828601612db2565b9250506020612e2485828601612ddc565b9150509250929050565b5f8115159050919050565b612e4281612e2e565b82525050565b5f602082019050612e5b5f830184612e39565b92915050565b5f805f60608486031215612e7857612e77612d68565b5b5f612e8586828701612db2565b9350506020612e9686828701612db2565b9250506040612ea786828701612ddc565b9150509250925092565b5f60208284031215612ec657612ec5612d68565b5b5f612ed384828501612ddc565b91505092915050565b5f60ff82169050919050565b612ef181612edc565b82525050565b5f602082019050612f0a5f830184612ee8565b92915050565b5f612f1a82612d6c565b9050919050565b612f2a81612f10565b82525050565b5f602082019050612f435f830184612f21565b92915050565b612f5281612f10565b8114612f5c575f80fd5b50565b5f81359050612f6d81612f49565b92915050565b5f60208284031215612f8857612f87612d68565b5b5f612f9584828501612f5f565b91505092915050565b5f60208284031215612fb357612fb2612d68565b5b5f612fc084828501612db2565b91505092915050565b5f819050919050565b5f612fec612fe7612fe284612d6c565b612fc9565b612d6c565b9050919050565b5f612ffd82612fd2565b9050919050565b5f61300e82612ff3565b9050919050565b61301e81613004565b82525050565b5f6020820190506130375f830184613015565b92915050565b61304681612d8b565b82525050565b5f60208201905061305f5f83018461303d565b92915050565b61306e81612e2e565b8114613078575f80fd5b50565b5f8135905061308981613065565b92915050565b5f80604083850312156130a5576130a4612d68565b5b5f6130b285828601612db2565b92505060206130c38582860161307b565b9150509250929050565b5f80604083850312156130e3576130e2612d68565b5b5f6130f085828601612ddc565b925050602061310185828601612ddc565b9150509250929050565b5f806040838503121561312157613120612d68565b5b5f61312e85828601612db2565b925050602061313f85828601612db2565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061318d57607f821691505b6020821081036131a05761319f613149565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6131da602083612cc8565b91506131e5826131a6565b602082019050919050565b5f6020820190508181035f830152613207816131ce565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61327282612c8d565b915061327d83612c8d565b92508261328d5761328c61320e565b5b828204905092915050565b7f416e67656c3a204d61782077616c6c6574206d757374206265206174206c65615f8201527f737420312520746f6b656e730000000000000000000000000000000000000000602082015250565b5f6132f2602c83612cc8565b91506132fd82613298565b604082019050919050565b5f6020820190508181035f83015261331f816132e6565b9050919050565b5f61333082612c8d565b915061333b83612c8d565b92508282019050808211156133535761335261323b565b5b92915050565b7f416e67656c3a204275726e20616d6f756e74206d7573742062652067726561745f8201527f6572207468616e207a65726f0000000000000000000000000000000000000000602082015250565b5f6133b3602c83612cc8565b91506133be82613359565b604082019050919050565b5f6020820190508181035f8301526133e0816133a7565b9050919050565b7f416e67656c3a20496e76616c69642061646472657373000000000000000000005f82015250565b5f61341b601683612cc8565b9150613426826133e7565b602082019050919050565b5f6020820190508181035f8301526134488161340f565b9050919050565b7f416e67656c3a204d6178205458206d757374206265206174206c6561737420315f8201527f2520746f6b656e73000000000000000000000000000000000000000000000000602082015250565b5f6134a9602883612cc8565b91506134b48261344f565b604082019050919050565b5f6020820190508181035f8301526134d68161349d565b9050919050565b7f416e67656c3a204e6f20457468657220746f20776974686472617700000000005f82015250565b5f613511601b83612cc8565b915061351c826134dd565b602082019050919050565b5f6020820190508181035f83015261353e81613505565b9050919050565b7f416e67656c3a205468726573686f6c6420746f6f2068696768000000000000005f82015250565b5f613579601983612cc8565b915061358482613545565b602082019050919050565b5f6020820190508181035f8301526135a68161356d565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613607602583612cc8565b9150613612826135ad565b604082019050919050565b5f6020820190508181035f830152613634816135fb565b9050919050565b7f416e67656c3a20427579207461782063616e27742065786365656420323525005f82015250565b5f61366f601f83612cc8565b915061367a8261363b565b602082019050919050565b5f6020820190508181035f83015261369c81613663565b9050919050565b7f416e67656c3a2053656c6c207461782063616e277420657863656564203235255f82015250565b5f6136d7602083612cc8565b91506136e2826136a3565b602082019050919050565b5f6020820190508181035f830152613704816136cb565b9050919050565b5f60408201905061371e5f830185612c96565b61372b6020830184612c96565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61378c602683612cc8565b915061379782613732565b604082019050919050565b5f6020820190508181035f8301526137b981613780565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61381a602483612cc8565b9150613825826137c0565b604082019050919050565b5f6020820190508181035f8301526138478161380e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6138a8602283612cc8565b91506138b38261384e565b604082019050919050565b5f6020820190508181035f8301526138d58161389c565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f613910601d83612cc8565b915061391b826138dc565b602082019050919050565b5f6020820190508181035f83015261393d81613904565b9050919050565b7f416e67656c3a205472616e7366657220616d6f756e74206d75737420626520675f8201527f726561746572207468616e207a65726f00000000000000000000000000000000602082015250565b5f61399e603083612cc8565b91506139a982613944565b604082019050919050565b5f6020820190508181035f8301526139cb81613992565b9050919050565b7f416e67656c3a2057616c6c65742062616c616e63652065786365656473206d615f8201527f782077616c6c6574206c696d6974000000000000000000000000000000000000602082015250565b5f613a2c602e83612cc8565b9150613a37826139d2565b604082019050919050565b5f6020820190508181035f830152613a5981613a20565b9050919050565b7f416e67656c3a20416d6f756e742065786365656473206d6178205472616e73655f8201527f6374696f6e206c696d6974000000000000000000000000000000000000000000602082015250565b5f613aba602b83612cc8565b9150613ac582613a60565b604082019050919050565b5f6020820190508181035f830152613ae781613aae565b9050919050565b5f613af882612c8d565b9150613b0383612c8d565b9250828202613b1181612c8d565b91508282048414831517613b2857613b2761323b565b5b5092915050565b5f613b3982612c8d565b9150613b4483612c8d565b9250828203905081811115613b5c57613b5b61323b565b5b92915050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f613bbc602183612cc8565b9150613bc782613b62565b604082019050919050565b5f6020820190508181035f830152613be981613bb0565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f613c4a602283612cc8565b9150613c5582613bf0565b604082019050919050565b5f6020820190508181035f830152613c7781613c3e565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050613ce681612d9c565b92915050565b5f60208284031215613d0157613d00612d68565b5b5f613d0e84828501613cd8565b91505092915050565b5f819050919050565b5f613d3a613d35613d3084613d17565b612fc9565b612c8d565b9050919050565b613d4a81613d20565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613d8281612d8b565b82525050565b5f613d938383613d79565b60208301905092915050565b5f602082019050919050565b5f613db582613d50565b613dbf8185613d5a565b9350613dca83613d6a565b805f5b83811015613dfa578151613de18882613d88565b9750613dec83613d9f565b925050600181019050613dcd565b5085935050505092915050565b5f60a082019050613e1a5f830188612c96565b613e276020830187613d41565b8181036040830152613e398186613dab565b9050613e48606083018561303d565b613e556080830184612c96565b9695505050505050565b5f608082019050613e725f830187612c96565b613e7f6020830186612c96565b613e8c6040830185612c96565b613e996060830184612c96565b95945050505050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613efc602583612cc8565b9150613f0782613ea2565b604082019050919050565b5f6020820190508181035f830152613f2981613ef0565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613f8a602383612cc8565b9150613f9582613f30565b604082019050919050565b5f6020820190508181035f830152613fb781613f7e565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f614018602683612cc8565b915061402382613fbe565b604082019050919050565b5f6020820190508181035f8301526140458161400c565b905091905056fea2646970667358221220a70e3d05549f9867a171d11b5c7e7e61994a30403c7bb8c212ec2a358edc0bbe64736f6c63430008140033
Deployed Bytecode Sourcemap
17595:10403:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17947:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2927:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4000:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3248:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4250:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24789:250;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20385:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4553:270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23671:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17727:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17890:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25160:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24447:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3364:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;979:103;;;;;;;;;;;;;:::i;:::-;;25585:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18012:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27565:233;;;;;;;;;;;;;:::i;:::-;;17635:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17819:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;756:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3035:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26859:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4831:505;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26012:296;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3549:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17851:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17771:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27303:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17680:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26415:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24002:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18058:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17918:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18093:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3791:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1090:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17947:28;;;;:::o;2927:100::-;2981:13;3014:5;3007:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2927:100;:::o;4000:242::-;4119:4;4141:13;4157:12;:10;:12::i;:::-;4141:28;;4180:32;4189:5;4196:7;4205:6;4180:8;:32::i;:::-;4230:4;4223:11;;;4000:242;;;;:::o;3248:108::-;3309:7;3336:12;;3329:19;;3248:108;:::o;4250:295::-;4381:4;4398:15;4416:12;:10;:12::i;:::-;4398:30;;4439:38;4455:4;4461:7;4470:6;4439:15;:38::i;:::-;4488:27;4498:4;4504:2;4508:6;4488:9;:27::i;:::-;4533:4;4526:11;;;4250:295;;;;;:::o;24789:250::-;902:12;:10;:12::i;:::-;891:23;;:7;:5;:7::i;:::-;:23;;;883:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24898:3:::1;24882:13;:11;:13::i;:::-;:19;;;;:::i;:::-;24871:6;:30;;24863:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;24979:6;24961:15;:24;;;;25001:30;25024:6;25001:30;;;;;;:::i;:::-;;;;;;;;24789:250:::0;:::o;20385:84::-;20435:5;20460:1;20453:8;;20385:84;:::o;4553:270::-;4668:4;4690:13;4706:12;:10;:12::i;:::-;4690:28;;4729:64;4738:5;4745:7;4782:10;4754:25;4764:5;4771:7;4754:9;:25::i;:::-;:38;;;;:::i;:::-;4729:8;:64::i;:::-;4811:4;4804:11;;;4553:270;;;;:::o;23671:161::-;23738:1;23729:6;:10;23721:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23799:25;23805:10;23817:6;23799:5;:25::i;:::-;23671:161;:::o;17727:37::-;;;;;;;;;;;;;:::o;17890:21::-;;;;:::o;25160:300::-;902:12;:10;:12::i;:::-;891:23;;:7;:5;:7::i;:::-;:23;;;883:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25274:1:::1;25253:23;;:9;:23;;::::0;25245:58:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;25361:9;25321:50;;25344:15;;;;;;;;;;;25321:50;;;;;;;;;;;;25400:9;25382:15;;:27;;;;;;;;;;;;;;;;;;25420:32;25436:9;25447:4;25420:15;:32::i;:::-;25160:300:::0;:::o;24447:230::-;902:12;:10;:12::i;:::-;891:23;;:7;:5;:7::i;:::-;:23;;;883:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24550:3:::1;24534:13;:11;:13::i;:::-;:19;;;;:::i;:::-;24524:6;:29;;24516:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;24622:6;24609:10;:19;;;;24644:25;24662:6;24644:25;;;;;;:::i;:::-;;;;;;;;24447:230:::0;:::o;3364:177::-;3483:7;3515:9;:18;3525:7;3515:18;;;;;;;;;;;;;;;;3508:25;;3364:177;;;:::o;979:103::-;902:12;:10;:12::i;:::-;891:23;;:7;:5;:7::i;:::-;:23;;;883:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1044:30:::1;1071:1;1044:18;:30::i;:::-;979:103::o:0;25585:308::-;902:12;:10;:12::i;:::-;891:23;;:7;:5;:7::i;:::-;:23;;;883:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25701:1:::1;25680:23;;:9;:23;;::::0;25672:58:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;25792:9;25748:54;;25773:17;;;;;;;;;;;25748:54;;;;;;;;;;;;25833:9;25813:17;;:29;;;;;;;;;;;;;;;;;;25853:32;25869:9;25880:4;25853:15;:32::i;:::-;25585:308:::0;:::o;18012:39::-;;;;;;;;;;;;;:::o;27565:233::-;902:12;:10;:12::i;:::-;891:23;;:7;:5;:7::i;:::-;:23;;;883:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27620:23:::1;27646:21;27620:47;;27704:1;27686:15;:19;27678:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;27756:7;:5;:7::i;:::-;27748:25;;:42;27774:15;27748:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;27609:189;27565:233::o:0;17635:38::-;;;;;;;;;;;;;:::o;17819:25::-;;;;:::o;756:87::-;802:7;829:6;;;;;;;;;;;822:13;;756:87;:::o;3035:104::-;3091:13;3124:7;3117:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3035:104;:::o;26859:230::-;902:12;:10;:12::i;:::-;891:23;;:7;:5;:7::i;:::-;:23;;;883:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26955:13:::1;:11;:13::i;:::-;26942:9;:26;;26934:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;27025:9;27009:13;:25;;;;27050:31;27071:9;27050:31;;;;;;:::i;:::-;;;;;;;;26859:230:::0;:::o;4831:505::-;4951:4;4973:13;4989:12;:10;:12::i;:::-;4973:28;;5012:24;5039:25;5049:5;5056:7;5039:9;:25::i;:::-;5012:52;;5117:15;5097:16;:35;;5075:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;5233:60;5242:5;5249:7;5277:15;5258:16;:34;5233:8;:60::i;:::-;5324:4;5317:11;;;;4831:505;;;;:::o;26012:296::-;902:12;:10;:12::i;:::-;891:23;;:7;:5;:7::i;:::-;:23;;;883:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26125:1:::1;26104:23;;:9;:23;;::::0;26096:58:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;26210:9;26172:48;;26194:14;;;;;;;;;;;26172:48;;;;;;;;;;;;26248:9;26231:14;;:26;;;;;;;;;;;;;;;;;;26268:32;26284:9;26295:4;26268:15;:32::i;:::-;26012:296:::0;:::o;3549:234::-;3664:4;3686:13;3702:12;:10;:12::i;:::-;3686:28;;3725;3735:5;3742:2;3746:6;3725:9;:28::i;:::-;3771:4;3764:11;;;3549:234;;;;:::o;17851:30::-;;;;:::o;17771:39::-;;;;;;;;;;;;;:::o;27303:180::-;902:12;:10;:12::i;:::-;891:23;;:7;:5;:7::i;:::-;:23;;;883:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27416:8:::1;27388:16;:25;27405:7;27388:25;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;27457:7;27440:35;;;27466:8;27440:35;;;;;;:::i;:::-;;;;;;;;27303:180:::0;;:::o;17680:40::-;;;;;;;;;;;;;:::o;26415:304::-;902:12;:10;:12::i;:::-;891:23;;:7;:5;:7::i;:::-;:23;;;883:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26530:1:::1;26509:23;;:9;:23;;::::0;26501:58:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;26619:9;26577:52;;26601:16;;;;;;;;;;;26577:52;;;;;;;;;;;;26659:9;26640:16;;:28;;;;;;;;;;;;;;;;;;26679:32;26695:9;26706:4;26679:15;:32::i;:::-;26415:304:::0;:::o;24002:323::-;902:12;:10;:12::i;:::-;891:23;;:7;:5;:7::i;:::-;:23;;;883:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24104:2:::1;24093:7;:13;;24085:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24173:2;24161:8;:14;;24153:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;24234:7;24225:6;:16;;;;24262:8;24252:7;:18;;;;24288:29;24301:6;;24309:7;;24288:29;;;;;;;:::i;:::-;;;;;;;;24002:323:::0;;:::o;18058:26::-;;;;;;;;;;;;;:::o;17918:22::-;;;;:::o;18093:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;3791:201::-;3925:7;3957:11;:18;3969:5;3957:18;;;;;;;;;;;;;;;:27;3976:7;3957:27;;;;;;;;;;;;;;;;3950:34;;3791:201;;;;:::o;1090:238::-;902:12;:10;:12::i;:::-;891:23;;:7;:5;:7::i;:::-;:23;;;883:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1213:1:::1;1193:22;;:8;:22;;::::0;1171:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1292:28;1311:8;1292:18;:28::i;:::-;1090:238:::0;:::o;277:98::-;330:7;357:10;350:17;;277:98;:::o;7110:380::-;7263:1;7246:19;;:5;:19;;;7238:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7344:1;7325:21;;:7;:21;;;7317:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7428:6;7398:11;:18;7410:5;7398:18;;;;;;;;;;;;;;;:27;7417:7;7398:27;;;;;;;;;;;;;;;:36;;;;7466:7;7450:32;;7459:5;7450:32;;;7475:6;7450:32;;;;;;:::i;:::-;;;;;;;;7110:380;;;:::o;7498:502::-;7633:24;7660:25;7670:5;7677:7;7660:9;:25::i;:::-;7633:52;;7720:17;7700:16;:37;7696:297;;7800:6;7780:16;:26;;7754:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;7915:51;7924:5;7931:7;7959:6;7940:16;:25;7915:8;:51::i;:::-;7696:297;7622:378;7498:502;;;:::o;20725:1396::-;20875:1;20866:6;:10;20858:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;20947:16;:27;20964:9;20947:27;;;;;;;;;;;;;;;;;;;;;;;;;20946:28;:57;;;;;20979:16;:24;20996:6;20979:24;;;;;;;;;;;;;;;;;;;;;;;;;20978:25;20946:57;20942:350;;;21036:11;;;;;;;;;;;21023:24;;:9;:24;;;21020:170;;21108:15;;21098:6;21075:20;21085:9;21075;:20::i;:::-;:29;;;;:::i;:::-;:48;;21067:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;21020:170;21222:10;;21212:6;:20;;21204:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;20942:350;21304:11;21330:14;21347:4;21330:21;;21369:8;;;;;;;;;;;21368:9;:34;;;;;21391:11;;;;;;;;;;;21381:21;;:6;:21;;;;21368:34;:79;;;;;21434:13;;21406:24;21424:4;21406:9;:24::i;:::-;:41;;21368:79;21364:196;;;21475:4;21464:8;;:15;;;;;;;;;;;;;;;;;;21494:23;:21;:23::i;:::-;21543:5;21532:8;;:16;;;;;;;;;;;;;;;;;;21364:196;21575:16;:24;21592:6;21575:24;;;;;;;;;;;;;;;;;;;;;;;;;:55;;;;21603:16;:27;21620:9;21603:27;;;;;;;;;;;;;;;;;;;;;;;;;21575:55;21572:103;;;21658:5;21646:17;;21572:103;21691:9;21687:372;;;21734:11;;;;;;;;;;;21721:24;;:9;:24;;;21717:192;;21793:3;21782:7;;21773:6;:16;;;;:::i;:::-;21772:24;;;;:::i;:::-;21766:30;;21717:192;;;21832:11;;;;;;;;;;;21822:21;;:6;:21;;;21818:91;;21890:3;21880:6;;21871;:15;;;;:::i;:::-;21870:23;;;;:::i;:::-;21864:29;;21818:91;21717:192;21935:1;21929:3;:7;21925:123;;;21957:43;21973:6;21989:4;21996:3;21957:15;:43::i;:::-;22029:3;22019:13;;;;;:::i;:::-;;;21925:123;21687:372;22071:42;22087:6;22095:9;22106:6;22071:15;:42::i;:::-;20847:1274;;20725:1396;;;:::o;6507:595::-;6610:1;6591:21;;:7;:21;;;6583:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6663:49;6684:7;6701:1;6705:6;6663:20;:49::i;:::-;6725:22;6750:9;:18;6760:7;6750:18;;;;;;;;;;;;;;;;6725:43;;6805:6;6787:14;:24;;6779:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;6924:6;6907:14;:23;6886:9;:18;6896:7;6886:18;;;;;;;;;;;;;;;:44;;;;6961:6;6945:12;;:22;;;;;;;;;;;7022:1;6996:37;;7005:7;6996:37;;;7026:6;6996:37;;;;;;:::i;:::-;;;;;;;;7046:48;7066:7;7083:1;7087:6;7046:19;:48::i;:::-;6572:530;6507:595;;:::o;1336:191::-;1410:16;1429:6;;;;;;;;;;;1410:25;;1455:8;1446:6;;:17;;;;;;;;;;;;;;;;;;1510:8;1479:40;;1500:8;1479:40;;;;;;;;;;;;1399:128;1336:191;:::o;22192:1347::-;22244:28;22275:24;22293:4;22275:9;:24::i;:::-;22244:55;;22338:1;22314:20;:25;22310:38;;22341:7;;;22310:38;22360:25;22388:21;22360:49;;22420:21;22458:1;22444:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22420:40;;22489:4;22471;22476:1;22471:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;22515:13;;;;;;;;;;;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22505:4;22510:1;22505:7;;;;;;;;:::i;:::-;;;;;;;:30;;;;;;;;;;;22548:69;22565:4;22580:13;;;;;;;;;;;22596:20;22548:8;:69::i;:::-;22628:13;;;;;;;;;;;:64;;;22707:20;22742:1;22758:4;22785;22805:15;22628:203;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22842:24;22893:17;22869:21;:41;;;;:::i;:::-;22842:68;;22923:24;22976:3;22970:2;22951:16;:21;;;;:::i;:::-;22950:29;;;;:::i;:::-;22923:56;;22990:23;23042:3;23036:2;23017:16;:21;;;;:::i;:::-;23016:29;;;;:::i;:::-;22990:55;;23056:25;23110:3;23104:2;23085:16;:21;;;;:::i;:::-;23084:29;;;;:::i;:::-;23056:57;;23124:22;23175:3;23169:2;23150:16;:21;;;;:::i;:::-;23149:29;;;;:::i;:::-;23124:54;;23199:16;;;;;;;;;;;23191:34;;:52;23226:16;23191:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23262:15;;;;;;;;;;;23254:33;;:50;23288:15;23254:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23323:17;;;;;;;;;;;23315:35;;:54;23351:17;23315:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23388:14;;;;;;;;;;;23380:32;;:48;23413:14;23380:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23446:85;23462:16;23480:15;23497:17;23516:14;23446:85;;;;;;;;;:::i;:::-;;;;;;;;22233:1306;;;;;;;;22192:1347;:::o;5344:712::-;5491:1;5475:18;;:4;:18;;;5467:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5568:1;5554:16;;:2;:16;;;5546:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;5623:38;5644:4;5650:2;5654:6;5623:20;:38::i;:::-;5674:19;5696:9;:15;5706:4;5696:15;;;;;;;;;;;;;;;;5674:37;;5759:6;5744:11;:21;;5722:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;5899:6;5885:11;:20;5867:9;:15;5877:4;5867:15;;;;;;;;;;;;;;;:38;;;;5937:6;5920:9;:13;5930:2;5920:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;5987:2;5972:26;;5981:4;5972:26;;;5991:6;5972:26;;;;;;:::i;:::-;;;;;;;;6011:37;6031:4;6037:2;6041:6;6011:19;:37::i;:::-;5456:600;5344:712;;;:::o;8008:125::-;;;;:::o;8141:124::-;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:246::-;803:1;813:113;827:6;824:1;821:13;813:113;;;912:1;907:3;903:11;897:18;893:1;888:3;884:11;877:39;849:2;846:1;842:10;837:15;;813:113;;;960:1;951:6;946:3;942:16;935:27;784:184;722:246;;;:::o;974:102::-;1015:6;1066:2;1062:7;1057:2;1050:5;1046:14;1042:28;1032:38;;974:102;;;:::o;1082:377::-;1170:3;1198:39;1231:5;1198:39;:::i;:::-;1253:71;1317:6;1312:3;1253:71;:::i;:::-;1246:78;;1333:65;1391:6;1386:3;1379:4;1372:5;1368:16;1333:65;:::i;:::-;1423:29;1445:6;1423:29;:::i;:::-;1418:3;1414:39;1407:46;;1174:285;1082:377;;;;:::o;1465:313::-;1578:4;1616:2;1605:9;1601:18;1593:26;;1665:9;1659:4;1655:20;1651:1;1640:9;1636:17;1629:47;1693:78;1766:4;1757:6;1693:78;:::i;:::-;1685:86;;1465:313;;;;:::o;1865:117::-;1974:1;1971;1964:12;2111:126;2148:7;2188:42;2181:5;2177:54;2166:65;;2111:126;;;:::o;2243:96::-;2280:7;2309:24;2327:5;2309:24;:::i;:::-;2298:35;;2243:96;;;:::o;2345:122::-;2418:24;2436:5;2418:24;:::i;:::-;2411:5;2408:35;2398:63;;2457:1;2454;2447:12;2398:63;2345:122;:::o;2473:139::-;2519:5;2557:6;2544:20;2535:29;;2573:33;2600:5;2573:33;:::i;:::-;2473:139;;;;:::o;2618:122::-;2691:24;2709:5;2691:24;:::i;:::-;2684:5;2681:35;2671:63;;2730:1;2727;2720:12;2671:63;2618:122;:::o;2746:139::-;2792:5;2830:6;2817:20;2808:29;;2846:33;2873:5;2846:33;:::i;:::-;2746:139;;;;:::o;2891:474::-;2959:6;2967;3016:2;3004:9;2995:7;2991:23;2987:32;2984:119;;;3022:79;;:::i;:::-;2984:119;3142:1;3167:53;3212:7;3203:6;3192:9;3188:22;3167:53;:::i;:::-;3157:63;;3113:117;3269:2;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3240:118;2891:474;;;;;:::o;3371:90::-;3405:7;3448:5;3441:13;3434:21;3423:32;;3371:90;;;:::o;3467:109::-;3548:21;3563:5;3548:21;:::i;:::-;3543:3;3536:34;3467:109;;:::o;3582:210::-;3669:4;3707:2;3696:9;3692:18;3684:26;;3720:65;3782:1;3771:9;3767:17;3758:6;3720:65;:::i;:::-;3582:210;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:329::-;4482:6;4531:2;4519:9;4510:7;4506:23;4502:32;4499:119;;;4537:79;;:::i;:::-;4499:119;4657:1;4682:53;4727:7;4718:6;4707:9;4703:22;4682:53;:::i;:::-;4672:63;;4628:117;4423:329;;;;:::o;4758:86::-;4793:7;4833:4;4826:5;4822:16;4811:27;;4758:86;;;:::o;4850:112::-;4933:22;4949:5;4933:22;:::i;:::-;4928:3;4921:35;4850:112;;:::o;4968:214::-;5057:4;5095:2;5084:9;5080:18;5072:26;;5108:67;5172:1;5161:9;5157:17;5148:6;5108:67;:::i;:::-;4968:214;;;;:::o;5188:104::-;5233:7;5262:24;5280:5;5262:24;:::i;:::-;5251:35;;5188:104;;;:::o;5298:142::-;5401:32;5427:5;5401:32;:::i;:::-;5396:3;5389:45;5298:142;;:::o;5446:254::-;5555:4;5593:2;5582:9;5578:18;5570:26;;5606:87;5690:1;5679:9;5675:17;5666:6;5606:87;:::i;:::-;5446:254;;;;:::o;5706:138::-;5787:32;5813:5;5787:32;:::i;:::-;5780:5;5777:43;5767:71;;5834:1;5831;5824:12;5767:71;5706:138;:::o;5850:155::-;5904:5;5942:6;5929:20;5920:29;;5958:41;5993:5;5958:41;:::i;:::-;5850:155;;;;:::o;6011:345::-;6078:6;6127:2;6115:9;6106:7;6102:23;6098:32;6095:119;;;6133:79;;:::i;:::-;6095:119;6253:1;6278:61;6331:7;6322:6;6311:9;6307:22;6278:61;:::i;:::-;6268:71;;6224:125;6011:345;;;;:::o;6362:329::-;6421:6;6470:2;6458:9;6449:7;6445:23;6441:32;6438:119;;;6476:79;;:::i;:::-;6438:119;6596:1;6621:53;6666:7;6657:6;6646:9;6642:22;6621:53;:::i;:::-;6611:63;;6567:117;6362:329;;;;:::o;6697:60::-;6725:3;6746:5;6739:12;;6697:60;;;:::o;6763:142::-;6813:9;6846:53;6864:34;6873:24;6891:5;6873:24;:::i;:::-;6864:34;:::i;:::-;6846:53;:::i;:::-;6833:66;;6763:142;;;:::o;6911:126::-;6961:9;6994:37;7025:5;6994:37;:::i;:::-;6981:50;;6911:126;;;:::o;7043:153::-;7120:9;7153:37;7184:5;7153:37;:::i;:::-;7140:50;;7043:153;;;:::o;7202:185::-;7316:64;7374:5;7316:64;:::i;:::-;7311:3;7304:77;7202:185;;:::o;7393:276::-;7513:4;7551:2;7540:9;7536:18;7528:26;;7564:98;7659:1;7648:9;7644:17;7635:6;7564:98;:::i;:::-;7393:276;;;;:::o;7675:118::-;7762:24;7780:5;7762:24;:::i;:::-;7757:3;7750:37;7675:118;;:::o;7799:222::-;7892:4;7930:2;7919:9;7915:18;7907:26;;7943:71;8011:1;8000:9;7996:17;7987:6;7943:71;:::i;:::-;7799:222;;;;:::o;8027:116::-;8097:21;8112:5;8097:21;:::i;:::-;8090:5;8087:32;8077:60;;8133:1;8130;8123:12;8077:60;8027:116;:::o;8149:133::-;8192:5;8230:6;8217:20;8208:29;;8246:30;8270:5;8246:30;:::i;:::-;8149:133;;;;:::o;8288:468::-;8353:6;8361;8410:2;8398:9;8389:7;8385:23;8381:32;8378:119;;;8416:79;;:::i;:::-;8378:119;8536:1;8561:53;8606:7;8597:6;8586:9;8582:22;8561:53;:::i;:::-;8551:63;;8507:117;8663:2;8689:50;8731:7;8722:6;8711:9;8707:22;8689:50;:::i;:::-;8679:60;;8634:115;8288:468;;;;;:::o;8762:474::-;8830:6;8838;8887:2;8875:9;8866:7;8862:23;8858:32;8855:119;;;8893:79;;:::i;:::-;8855:119;9013:1;9038:53;9083:7;9074:6;9063:9;9059:22;9038:53;:::i;:::-;9028:63;;8984:117;9140:2;9166:53;9211:7;9202:6;9191:9;9187:22;9166:53;:::i;:::-;9156:63;;9111:118;8762:474;;;;;:::o;9242:::-;9310:6;9318;9367:2;9355:9;9346:7;9342:23;9338:32;9335:119;;;9373:79;;:::i;:::-;9335:119;9493:1;9518:53;9563:7;9554:6;9543:9;9539:22;9518:53;:::i;:::-;9508:63;;9464:117;9620:2;9646:53;9691:7;9682:6;9671:9;9667:22;9646:53;:::i;:::-;9636:63;;9591:118;9242:474;;;;;:::o;9722:180::-;9770:77;9767:1;9760:88;9867:4;9864:1;9857:15;9891:4;9888:1;9881:15;9908:320;9952:6;9989:1;9983:4;9979:12;9969:22;;10036:1;10030:4;10026:12;10057:18;10047:81;;10113:4;10105:6;10101:17;10091:27;;10047:81;10175:2;10167:6;10164:14;10144:18;10141:38;10138:84;;10194:18;;:::i;:::-;10138:84;9959:269;9908:320;;;:::o;10234:182::-;10374:34;10370:1;10362:6;10358:14;10351:58;10234:182;:::o;10422:366::-;10564:3;10585:67;10649:2;10644:3;10585:67;:::i;:::-;10578:74;;10661:93;10750:3;10661:93;:::i;:::-;10779:2;10774:3;10770:12;10763:19;;10422:366;;;:::o;10794:419::-;10960:4;10998:2;10987:9;10983:18;10975:26;;11047:9;11041:4;11037:20;11033:1;11022:9;11018:17;11011:47;11075:131;11201:4;11075:131;:::i;:::-;11067:139;;10794:419;;;:::o;11219:180::-;11267:77;11264:1;11257:88;11364:4;11361:1;11354:15;11388:4;11385:1;11378:15;11405:180;11453:77;11450:1;11443:88;11550:4;11547:1;11540:15;11574:4;11571:1;11564:15;11591:185;11631:1;11648:20;11666:1;11648:20;:::i;:::-;11643:25;;11682:20;11700:1;11682:20;:::i;:::-;11677:25;;11721:1;11711:35;;11726:18;;:::i;:::-;11711:35;11768:1;11765;11761:9;11756:14;;11591:185;;;;:::o;11782:231::-;11922:34;11918:1;11910:6;11906:14;11899:58;11991:14;11986:2;11978:6;11974:15;11967:39;11782:231;:::o;12019:366::-;12161:3;12182:67;12246:2;12241:3;12182:67;:::i;:::-;12175:74;;12258:93;12347:3;12258:93;:::i;:::-;12376:2;12371:3;12367:12;12360:19;;12019:366;;;:::o;12391:419::-;12557:4;12595:2;12584:9;12580:18;12572:26;;12644:9;12638:4;12634:20;12630:1;12619:9;12615:17;12608:47;12672:131;12798:4;12672:131;:::i;:::-;12664:139;;12391:419;;;:::o;12816:191::-;12856:3;12875:20;12893:1;12875:20;:::i;:::-;12870:25;;12909:20;12927:1;12909:20;:::i;:::-;12904:25;;12952:1;12949;12945:9;12938:16;;12973:3;12970:1;12967:10;12964:36;;;12980:18;;:::i;:::-;12964:36;12816:191;;;;:::o;13013:231::-;13153:34;13149:1;13141:6;13137:14;13130:58;13222:14;13217:2;13209:6;13205:15;13198:39;13013:231;:::o;13250:366::-;13392:3;13413:67;13477:2;13472:3;13413:67;:::i;:::-;13406:74;;13489:93;13578:3;13489:93;:::i;:::-;13607:2;13602:3;13598:12;13591:19;;13250:366;;;:::o;13622:419::-;13788:4;13826:2;13815:9;13811:18;13803:26;;13875:9;13869:4;13865:20;13861:1;13850:9;13846:17;13839:47;13903:131;14029:4;13903:131;:::i;:::-;13895:139;;13622:419;;;:::o;14047:172::-;14187:24;14183:1;14175:6;14171:14;14164:48;14047:172;:::o;14225:366::-;14367:3;14388:67;14452:2;14447:3;14388:67;:::i;:::-;14381:74;;14464:93;14553:3;14464:93;:::i;:::-;14582:2;14577:3;14573:12;14566:19;;14225:366;;;:::o;14597:419::-;14763:4;14801:2;14790:9;14786:18;14778:26;;14850:9;14844:4;14840:20;14836:1;14825:9;14821:17;14814:47;14878:131;15004:4;14878:131;:::i;:::-;14870:139;;14597:419;;;:::o;15022:227::-;15162:34;15158:1;15150:6;15146:14;15139:58;15231:10;15226:2;15218:6;15214:15;15207:35;15022:227;:::o;15255:366::-;15397:3;15418:67;15482:2;15477:3;15418:67;:::i;:::-;15411:74;;15494:93;15583:3;15494:93;:::i;:::-;15612:2;15607:3;15603:12;15596:19;;15255:366;;;:::o;15627:419::-;15793:4;15831:2;15820:9;15816:18;15808:26;;15880:9;15874:4;15870:20;15866:1;15855:9;15851:17;15844:47;15908:131;16034:4;15908:131;:::i;:::-;15900:139;;15627:419;;;:::o;16052:177::-;16192:29;16188:1;16180:6;16176:14;16169:53;16052:177;:::o;16235:366::-;16377:3;16398:67;16462:2;16457:3;16398:67;:::i;:::-;16391:74;;16474:93;16563:3;16474:93;:::i;:::-;16592:2;16587:3;16583:12;16576:19;;16235:366;;;:::o;16607:419::-;16773:4;16811:2;16800:9;16796:18;16788:26;;16860:9;16854:4;16850:20;16846:1;16835:9;16831:17;16824:47;16888:131;17014:4;16888:131;:::i;:::-;16880:139;;16607:419;;;:::o;17032:175::-;17172:27;17168:1;17160:6;17156:14;17149:51;17032:175;:::o;17213:366::-;17355:3;17376:67;17440:2;17435:3;17376:67;:::i;:::-;17369:74;;17452:93;17541:3;17452:93;:::i;:::-;17570:2;17565:3;17561:12;17554:19;;17213:366;;;:::o;17585:419::-;17751:4;17789:2;17778:9;17774:18;17766:26;;17838:9;17832:4;17828:20;17824:1;17813:9;17809:17;17802:47;17866:131;17992:4;17866:131;:::i;:::-;17858:139;;17585:419;;;:::o;18010:224::-;18150:34;18146:1;18138:6;18134:14;18127:58;18219:7;18214:2;18206:6;18202:15;18195:32;18010:224;:::o;18240:366::-;18382:3;18403:67;18467:2;18462:3;18403:67;:::i;:::-;18396:74;;18479:93;18568:3;18479:93;:::i;:::-;18597:2;18592:3;18588:12;18581:19;;18240:366;;;:::o;18612:419::-;18778:4;18816:2;18805:9;18801:18;18793:26;;18865:9;18859:4;18855:20;18851:1;18840:9;18836:17;18829:47;18893:131;19019:4;18893:131;:::i;:::-;18885:139;;18612:419;;;:::o;19037:181::-;19177:33;19173:1;19165:6;19161:14;19154:57;19037:181;:::o;19224:366::-;19366:3;19387:67;19451:2;19446:3;19387:67;:::i;:::-;19380:74;;19463:93;19552:3;19463:93;:::i;:::-;19581:2;19576:3;19572:12;19565:19;;19224:366;;;:::o;19596:419::-;19762:4;19800:2;19789:9;19785:18;19777:26;;19849:9;19843:4;19839:20;19835:1;19824:9;19820:17;19813:47;19877:131;20003:4;19877:131;:::i;:::-;19869:139;;19596:419;;;:::o;20021:182::-;20161:34;20157:1;20149:6;20145:14;20138:58;20021:182;:::o;20209:366::-;20351:3;20372:67;20436:2;20431:3;20372:67;:::i;:::-;20365:74;;20448:93;20537:3;20448:93;:::i;:::-;20566:2;20561:3;20557:12;20550:19;;20209:366;;;:::o;20581:419::-;20747:4;20785:2;20774:9;20770:18;20762:26;;20834:9;20828:4;20824:20;20820:1;20809:9;20805:17;20798:47;20862:131;20988:4;20862:131;:::i;:::-;20854:139;;20581:419;;;:::o;21006:332::-;21127:4;21165:2;21154:9;21150:18;21142:26;;21178:71;21246:1;21235:9;21231:17;21222:6;21178:71;:::i;:::-;21259:72;21327:2;21316:9;21312:18;21303:6;21259:72;:::i;:::-;21006:332;;;;;:::o;21344:225::-;21484:34;21480:1;21472:6;21468:14;21461:58;21553:8;21548:2;21540:6;21536:15;21529:33;21344:225;:::o;21575:366::-;21717:3;21738:67;21802:2;21797:3;21738:67;:::i;:::-;21731:74;;21814:93;21903:3;21814:93;:::i;:::-;21932:2;21927:3;21923:12;21916:19;;21575:366;;;:::o;21947:419::-;22113:4;22151:2;22140:9;22136:18;22128:26;;22200:9;22194:4;22190:20;22186:1;22175:9;22171:17;22164:47;22228:131;22354:4;22228:131;:::i;:::-;22220:139;;21947:419;;;:::o;22372:223::-;22512:34;22508:1;22500:6;22496:14;22489:58;22581:6;22576:2;22568:6;22564:15;22557:31;22372:223;:::o;22601:366::-;22743:3;22764:67;22828:2;22823:3;22764:67;:::i;:::-;22757:74;;22840:93;22929:3;22840:93;:::i;:::-;22958:2;22953:3;22949:12;22942:19;;22601:366;;;:::o;22973:419::-;23139:4;23177:2;23166:9;23162:18;23154:26;;23226:9;23220:4;23216:20;23212:1;23201:9;23197:17;23190:47;23254:131;23380:4;23254:131;:::i;:::-;23246:139;;22973:419;;;:::o;23398:221::-;23538:34;23534:1;23526:6;23522:14;23515:58;23607:4;23602:2;23594:6;23590:15;23583:29;23398:221;:::o;23625:366::-;23767:3;23788:67;23852:2;23847:3;23788:67;:::i;:::-;23781:74;;23864:93;23953:3;23864:93;:::i;:::-;23982:2;23977:3;23973:12;23966:19;;23625:366;;;:::o;23997:419::-;24163:4;24201:2;24190:9;24186:18;24178:26;;24250:9;24244:4;24240:20;24236:1;24225:9;24221:17;24214:47;24278:131;24404:4;24278:131;:::i;:::-;24270:139;;23997:419;;;:::o;24422:179::-;24562:31;24558:1;24550:6;24546:14;24539:55;24422:179;:::o;24607:366::-;24749:3;24770:67;24834:2;24829:3;24770:67;:::i;:::-;24763:74;;24846:93;24935:3;24846:93;:::i;:::-;24964:2;24959:3;24955:12;24948:19;;24607:366;;;:::o;24979:419::-;25145:4;25183:2;25172:9;25168:18;25160:26;;25232:9;25226:4;25222:20;25218:1;25207:9;25203:17;25196:47;25260:131;25386:4;25260:131;:::i;:::-;25252:139;;24979:419;;;:::o;25404:235::-;25544:34;25540:1;25532:6;25528:14;25521:58;25613:18;25608:2;25600:6;25596:15;25589:43;25404:235;:::o;25645:366::-;25787:3;25808:67;25872:2;25867:3;25808:67;:::i;:::-;25801:74;;25884:93;25973:3;25884:93;:::i;:::-;26002:2;25997:3;25993:12;25986:19;;25645:366;;;:::o;26017:419::-;26183:4;26221:2;26210:9;26206:18;26198:26;;26270:9;26264:4;26260:20;26256:1;26245:9;26241:17;26234:47;26298:131;26424:4;26298:131;:::i;:::-;26290:139;;26017:419;;;:::o;26442:233::-;26582:34;26578:1;26570:6;26566:14;26559:58;26651:16;26646:2;26638:6;26634:15;26627:41;26442:233;:::o;26681:366::-;26823:3;26844:67;26908:2;26903:3;26844:67;:::i;:::-;26837:74;;26920:93;27009:3;26920:93;:::i;:::-;27038:2;27033:3;27029:12;27022:19;;26681:366;;;:::o;27053:419::-;27219:4;27257:2;27246:9;27242:18;27234:26;;27306:9;27300:4;27296:20;27292:1;27281:9;27277:17;27270:47;27334:131;27460:4;27334:131;:::i;:::-;27326:139;;27053:419;;;:::o;27478:230::-;27618:34;27614:1;27606:6;27602:14;27595:58;27687:13;27682:2;27674:6;27670:15;27663:38;27478:230;:::o;27714:366::-;27856:3;27877:67;27941:2;27936:3;27877:67;:::i;:::-;27870:74;;27953:93;28042:3;27953:93;:::i;:::-;28071:2;28066:3;28062:12;28055:19;;27714:366;;;:::o;28086:419::-;28252:4;28290:2;28279:9;28275:18;28267:26;;28339:9;28333:4;28329:20;28325:1;28314:9;28310:17;28303:47;28367:131;28493:4;28367:131;:::i;:::-;28359:139;;28086:419;;;:::o;28511:410::-;28551:7;28574:20;28592:1;28574:20;:::i;:::-;28569:25;;28608:20;28626:1;28608:20;:::i;:::-;28603:25;;28663:1;28660;28656:9;28685:30;28703:11;28685:30;:::i;:::-;28674:41;;28864:1;28855:7;28851:15;28848:1;28845:22;28825:1;28818:9;28798:83;28775:139;;28894:18;;:::i;:::-;28775:139;28559:362;28511:410;;;;:::o;28927:194::-;28967:4;28987:20;29005:1;28987:20;:::i;:::-;28982:25;;29021:20;29039:1;29021:20;:::i;:::-;29016:25;;29065:1;29062;29058:9;29050:17;;29089:1;29083:4;29080:11;29077:37;;;29094:18;;:::i;:::-;29077:37;28927:194;;;;:::o;29127:220::-;29267:34;29263:1;29255:6;29251:14;29244:58;29336:3;29331:2;29323:6;29319:15;29312:28;29127:220;:::o;29353:366::-;29495:3;29516:67;29580:2;29575:3;29516:67;:::i;:::-;29509:74;;29592:93;29681:3;29592:93;:::i;:::-;29710:2;29705:3;29701:12;29694:19;;29353:366;;;:::o;29725:419::-;29891:4;29929:2;29918:9;29914:18;29906:26;;29978:9;29972:4;29968:20;29964:1;29953:9;29949:17;29942:47;30006:131;30132:4;30006:131;:::i;:::-;29998:139;;29725:419;;;:::o;30150:221::-;30290:34;30286:1;30278:6;30274:14;30267:58;30359:4;30354:2;30346:6;30342:15;30335:29;30150:221;:::o;30377:366::-;30519:3;30540:67;30604:2;30599:3;30540:67;:::i;:::-;30533:74;;30616:93;30705:3;30616:93;:::i;:::-;30734:2;30729:3;30725:12;30718:19;;30377:366;;;:::o;30749:419::-;30915:4;30953:2;30942:9;30938:18;30930:26;;31002:9;30996:4;30992:20;30988:1;30977:9;30973:17;30966:47;31030:131;31156:4;31030:131;:::i;:::-;31022:139;;30749:419;;;:::o;31174:180::-;31222:77;31219:1;31212:88;31319:4;31316:1;31309:15;31343:4;31340:1;31333:15;31360:180;31408:77;31405:1;31398:88;31505:4;31502:1;31495:15;31529:4;31526:1;31519:15;31546:143;31603:5;31634:6;31628:13;31619:22;;31650:33;31677:5;31650:33;:::i;:::-;31546:143;;;;:::o;31695:351::-;31765:6;31814:2;31802:9;31793:7;31789:23;31785:32;31782:119;;;31820:79;;:::i;:::-;31782:119;31940:1;31965:64;32021:7;32012:6;32001:9;31997:22;31965:64;:::i;:::-;31955:74;;31911:128;31695:351;;;;:::o;32052:85::-;32097:7;32126:5;32115:16;;32052:85;;;:::o;32143:158::-;32201:9;32234:61;32252:42;32261:32;32287:5;32261:32;:::i;:::-;32252:42;:::i;:::-;32234:61;:::i;:::-;32221:74;;32143:158;;;:::o;32307:147::-;32402:45;32441:5;32402:45;:::i;:::-;32397:3;32390:58;32307:147;;:::o;32460:114::-;32527:6;32561:5;32555:12;32545:22;;32460:114;;;:::o;32580:184::-;32679:11;32713:6;32708:3;32701:19;32753:4;32748:3;32744:14;32729:29;;32580:184;;;;:::o;32770:132::-;32837:4;32860:3;32852:11;;32890:4;32885:3;32881:14;32873:22;;32770:132;;;:::o;32908:108::-;32985:24;33003:5;32985:24;:::i;:::-;32980:3;32973:37;32908:108;;:::o;33022:179::-;33091:10;33112:46;33154:3;33146:6;33112:46;:::i;:::-;33190:4;33185:3;33181:14;33167:28;;33022:179;;;;:::o;33207:113::-;33277:4;33309;33304:3;33300:14;33292:22;;33207:113;;;:::o;33356:732::-;33475:3;33504:54;33552:5;33504:54;:::i;:::-;33574:86;33653:6;33648:3;33574:86;:::i;:::-;33567:93;;33684:56;33734:5;33684:56;:::i;:::-;33763:7;33794:1;33779:284;33804:6;33801:1;33798:13;33779:284;;;33880:6;33874:13;33907:63;33966:3;33951:13;33907:63;:::i;:::-;33900:70;;33993:60;34046:6;33993:60;:::i;:::-;33983:70;;33839:224;33826:1;33823;33819:9;33814:14;;33779:284;;;33783:14;34079:3;34072:10;;33480:608;;;33356:732;;;;:::o;34094:831::-;34357:4;34395:3;34384:9;34380:19;34372:27;;34409:71;34477:1;34466:9;34462:17;34453:6;34409:71;:::i;:::-;34490:80;34566:2;34555:9;34551:18;34542:6;34490:80;:::i;:::-;34617:9;34611:4;34607:20;34602:2;34591:9;34587:18;34580:48;34645:108;34748:4;34739:6;34645:108;:::i;:::-;34637:116;;34763:72;34831:2;34820:9;34816:18;34807:6;34763:72;:::i;:::-;34845:73;34913:3;34902:9;34898:19;34889:6;34845:73;:::i;:::-;34094:831;;;;;;;;:::o;34931:553::-;35108:4;35146:3;35135:9;35131:19;35123:27;;35160:71;35228:1;35217:9;35213:17;35204:6;35160:71;:::i;:::-;35241:72;35309:2;35298:9;35294:18;35285:6;35241:72;:::i;:::-;35323;35391:2;35380:9;35376:18;35367:6;35323:72;:::i;:::-;35405;35473:2;35462:9;35458:18;35449:6;35405:72;:::i;:::-;34931:553;;;;;;;:::o;35490:224::-;35630:34;35626:1;35618:6;35614:14;35607:58;35699:7;35694:2;35686:6;35682:15;35675:32;35490:224;:::o;35720:366::-;35862:3;35883:67;35947:2;35942:3;35883:67;:::i;:::-;35876:74;;35959:93;36048:3;35959:93;:::i;:::-;36077:2;36072:3;36068:12;36061:19;;35720:366;;;:::o;36092:419::-;36258:4;36296:2;36285:9;36281:18;36273:26;;36345:9;36339:4;36335:20;36331:1;36320:9;36316:17;36309:47;36373:131;36499:4;36373:131;:::i;:::-;36365:139;;36092:419;;;:::o;36517:222::-;36657:34;36653:1;36645:6;36641:14;36634:58;36726:5;36721:2;36713:6;36709:15;36702:30;36517:222;:::o;36745:366::-;36887:3;36908:67;36972:2;36967:3;36908:67;:::i;:::-;36901:74;;36984:93;37073:3;36984:93;:::i;:::-;37102:2;37097:3;37093:12;37086:19;;36745:366;;;:::o;37117:419::-;37283:4;37321:2;37310:9;37306:18;37298:26;;37370:9;37364:4;37360:20;37356:1;37345:9;37341:17;37334:47;37398:131;37524:4;37398:131;:::i;:::-;37390:139;;37117:419;;;:::o;37542:225::-;37682:34;37678:1;37670:6;37666:14;37659:58;37751:8;37746:2;37738:6;37734:15;37727:33;37542:225;:::o;37773:366::-;37915:3;37936:67;38000:2;37995:3;37936:67;:::i;:::-;37929:74;;38012:93;38101:3;38012:93;:::i;:::-;38130:2;38125:3;38121:12;38114:19;;37773:366;;;:::o;38145:419::-;38311:4;38349:2;38338:9;38334:18;38326:26;;38398:9;38392:4;38388:20;38384:1;38373:9;38369:17;38362:47;38426:131;38552:4;38426:131;:::i;:::-;38418:139;;38145:419;;;:::o
Swarm Source
ipfs://a70e3d05549f9867a171d11b5c7e7e61994a30403c7bb8c212ec2a358edc0bbe
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Token Allocations
ETH
100.00%
Multichain Portfolio | 32 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| BASE | 100.00% | $2,414.04 | 0.00000000000000041 | <$0.000001 |
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.