Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 6 from a total of 6 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Add Liquidity ET... | 10740136 | 2013 days ago | IN | 0.01 ETH | 0.02618584 | ||||
| Remove Liquidity | 10736679 | 2013 days ago | IN | 0 ETH | 0.03149298 | ||||
| Remove Liquidity | 10736283 | 2013 days ago | IN | 0 ETH | 0.00185926 | ||||
| Add Liquidity ET... | 10736119 | 2013 days ago | IN | 1 ETH | 0.20195128 | ||||
| Initialize | 10735533 | 2013 days ago | IN | 0 ETH | 0.00327513 | ||||
| Initialize | 10734785 | 2013 days ago | IN | 0 ETH | 0.01271013 |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
DemaxPlatform
Compiler Version
v0.6.8+commit.0bbfe453
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2020-08-26
*/
// Dependency file: contracts/interfaces/IDemaxTransferListener.sol
// pragma solidity >=0.6.6;
interface IDemaxTransferListener {
function transferNotify(address from, address to, address token, uint amount) external returns (bool);
}
// Dependency file: contracts/modules/Ownable.sol
// pragma solidity >=0.5.16;
contract Ownable {
address public owner;
event OwnerChanged(address indexed _oldOwner, address indexed _newOwner);
constructor() public {
owner = msg.sender;
}
modifier onlyOwner() {
require(msg.sender == owner, 'Ownable: FORBIDDEN');
_;
}
function changeOwner(address _newOwner) public onlyOwner {
require(_newOwner != address(0), 'Ownable: INVALID_ADDRESS');
emit OwnerChanged(owner, _newOwner);
owner = _newOwner;
}
}
// Dependency file: contracts/interfaces/IDemaxPair.sol
// pragma solidity >=0.5.0;
interface IDemaxPair {
event Mint(address indexed sender, uint amount0, uint amount1);
event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
event Swap(
address indexed sender,
uint amount0In,
uint amount1In,
uint amount0Out,
uint amount1Out,
address indexed to
);
event Sync(uint112 reserve0, uint112 reserve1);
function MINIMUM_LIQUIDITY() external pure returns (uint);
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 (uint);
function price1CumulativeLast() external view returns (uint);
function kLast() external view returns (uint);
function totalSupply() external view returns (uint);
function balanceOf(address) external view returns (uint);
function mint(address to) external returns (uint liquidity);
function burn(address from, address to, uint amount) external returns (uint amount0, uint amount1);
function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
function skim(address to) external;
function sync() external;
function initialize(address tokenA, address tokenB, address platform, address dgas) external;
function swapFee(uint amount, address token, address to) external ;
function queryReward() external view returns (uint rewardAmount, uint blockNumber);
function mintReward() external returns (uint rewardAmount);
function getDGASReserve() external view returns (uint);
}
// Dependency file: contracts/interfaces/IDemaxFactory.sol
// pragma solidity >=0.5.0;
interface IDemaxFactory {
event PairCreated(address indexed token0, address indexed token1, address pair, uint);
function contractCodeHash() external view returns (bytes32);
function getPair(address tokenA, address tokenB) external view returns (address pair);
function isPair(address pair) external view returns (bool);
function allPairs(uint) external view returns (address pair);
function allPairsLength() external view returns (uint);
function playerPairs(address player, uint index) external view returns (address pair);
function getPlayerPairCount(address player) external view returns (uint);
function createPair(address tokenA, address tokenB) external returns (address pair);
function addPlayerPair(address player, address _pair) external returns (bool);
}
// Dependency file: contracts/interfaces/IERC20.sol
// pragma solidity >=0.5.0;
interface IERC20 {
event Approval(address indexed owner, address indexed spender, uint value);
event Transfer(address indexed from, address indexed to, uint value);
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function decimals() external view returns (uint8);
function totalSupply() external view returns (uint);
function balanceOf(address owner) external view returns (uint);
function allowance(address owner, address spender) external view returns (uint);
function approve(address spender, uint value) external returns (bool);
function transfer(address to, uint value) external returns (bool);
function transferFrom(address from, address to, uint value) external returns (bool);
}
// Dependency file: contracts/interfaces/IDemaxConfig.sol
// pragma solidity >=0.5.0;
interface IDemaxConfig {
function dgas() external view returns (address);
function PERCENT_DENOMINATOR() external view returns (uint);
function getConfig(bytes32 _name) external view returns (uint minValue, uint maxValue, uint maxSpan, uint value, uint enable);
function getConfigValue(bytes32 _name) external view returns (uint);
function changeConfigValue(bytes32 _name, uint _value) external returns (bool);
function checkToken(address _token) external view returns(bool);
function checkPair(address tokenA, address tokenB) external view returns (bool);
function listToken(address _token) external returns (bool);
function getDefaultListTokens() external returns (address[] memory);
function platform() external view returns (address);
}
// Dependency file: contracts/interfaces/IDemaxGovernance.sol
// pragma solidity >=0.5.0;
interface IDemaxGovernance {
function addPair(address _tokenA, address _tokenB) external returns (bool);
function addReward(uint _value) external returns (bool);
}
// Dependency file: contracts/interfaces/IWETH.sol
// pragma solidity >=0.5.0;
interface IWETH {
function deposit() external payable;
function transfer(address to, uint value) external returns (bool);
function withdraw(uint) external;
}
// Dependency file: contracts/libraries/DemaxSwapLibrary.sol
// pragma solidity >=0.5.0;
// import '../interfaces/IDemaxPair.sol';
// import '../interfaces/IDemaxFactory.sol';
// import "./SafeMath.sol";
library DemaxSwapLibrary {
using SafeMath for uint;
function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {
require(tokenA != tokenB, 'DemaxSwapLibrary: IDENTICAL_ADDRESSES');
(token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
require(token0 != address(0), 'DemaxSwapLibrary: ZERO_ADDRESS');
}
function pairFor(address factory, address tokenA, address tokenB) internal view returns (address pair) {
(address token0, address token1) = sortTokens(tokenA, tokenB);
bytes32 salt = keccak256(abi.encodePacked(token0, token1));
bytes32 rawAddress = keccak256(
abi.encodePacked(
bytes1(0xff),
factory,
salt,
IDemaxFactory(factory).contractCodeHash()
)
);
return address(bytes20(rawAddress << 96));
}
function getReserves(address factory, address tokenA, address tokenB) internal view returns (uint reserveA, uint reserveB) {
(address token0,) = sortTokens(tokenA, tokenB);
(uint reserve0, uint reserve1,) = IDemaxPair(pairFor(factory, tokenA, tokenB)).getReserves();
(reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0);
}
function quoteEnhance(address factory, address tokenA, address tokenB, uint amountA) internal view returns(uint amountB) {
(uint reserveA, uint reserveB) = getReserves(factory, tokenA, tokenB);
return quote(amountA, reserveA, reserveB);
}
function quote(uint amountA, uint reserveA, uint reserveB) internal pure returns (uint amountB) {
require(amountA > 0, 'DemaxSwapLibrary: INSUFFICIENT_AMOUNT');
require(reserveA > 0 && reserveB > 0, 'DemaxSwapLibrary: INSUFFICIENT_LIQUIDITY');
amountB = amountA.mul(reserveB) / reserveA;
}
function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) internal pure returns (uint amountOut) {
require(amountIn > 0, 'DemaxSwapLibrary: INSUFFICIENT_INPUT_AMOUNT');
require(reserveIn > 0 && reserveOut > 0, 'DemaxSwapLibrary: INSUFFICIENT_LIQUIDITY');
uint numerator = amountIn.mul(reserveOut);
uint denominator = reserveIn.add(amountIn);
amountOut = numerator / denominator;
}
function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) internal pure returns (uint amountIn) {
require(amountOut > 0, 'DemaxSwapLibrary: INSUFFICIENT_OUTPUT_AMOUNT');
require(reserveIn > 0 && reserveOut > 0, 'DemaxSwapLibrary: INSUFFICIENT_LIQUIDITY');
uint numerator = reserveIn.mul(amountOut);
uint denominator = reserveOut.sub(amountOut);
amountIn = (numerator / denominator).add(1);
}
}
// Dependency file: contracts/libraries/TransferHelper.sol
// SPDX-License-Identifier: GPL-3.0-or-later
// pragma solidity >=0.6.0;
// helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false
library TransferHelper {
function safeApprove(address token, address to, uint value) internal {
// bytes4(keccak256(bytes('approve(address,uint256)')));
(bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value));
require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: APPROVE_FAILED');
}
function safeTransfer(address token, address to, uint value) internal {
// bytes4(keccak256(bytes('transfer(address,uint256)')));
(bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED');
}
function safeTransferFrom(address token, address from, address to, uint value) internal {
// bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
(bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED');
}
function safeTransferETH(address to, uint value) internal {
(bool success,) = to.call{value:value}(new bytes(0));
require(success, 'TransferHelper: ETH_TRANSFER_FAILED');
}
}
// Dependency file: contracts/libraries/SafeMath.sol
// pragma solidity >=0.5.0;
// a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math)
library SafeMath {
function add(uint x, uint y) internal pure returns (uint z) {
require((z = x + y) >= x, 'ds-math-add-overflow');
}
function sub(uint x, uint y) internal pure returns (uint z) {
require((z = x - y) <= x, 'ds-math-sub-underflow');
}
function mul(uint x, uint y) internal pure returns (uint z) {
require(y == 0 || (z = x * y) / y == x, 'ds-math-mul-overflow');
}
}
// Dependency file: contracts/libraries/ConfigNames.sol
// pragma solidity >=0.5.16;
library ConfigNames {
bytes32 public constant PRODUCE_DGAS_RATE = bytes32('PRODUCE_DGAS_RATE');
bytes32 public constant SWAP_FEE_PERCENT = bytes32('SWAP_FEE_PERCENT');
bytes32 public constant LIST_DGAS_AMOUNT = bytes32('LIST_DGAS_AMOUNT');
bytes32 public constant UNSTAKE_DURATION = bytes32('UNSTAKE_DURATION');
bytes32 public constant REMOVE_LIQUIDITY_DURATION = bytes32('REMOVE_LIQUIDITY_DURATION');
bytes32 public constant TOKEN_TO_DGAS_PAIR_MIN_PERCENT = bytes32('TOKEN_TO_DGAS_PAIR_MIN_PERCENT');
bytes32 public constant LIST_TOKEN_FAILURE_BURN_PRECENT = bytes32('LIST_TOKEN_FAILURE_BURN_PRECENT');
bytes32 public constant LIST_TOKEN_SUCCESS_BURN_PRECENT = bytes32('LIST_TOKEN_SUCCESS_BURN_PRECENT');
bytes32 public constant PROPOSAL_DGAS_AMOUNT = bytes32('PROPOSAL_DGAS_AMOUNT');
bytes32 public constant VOTE_DURATION = bytes32('VOTE_DURATION');
bytes32 public constant VOTE_REWARD_PERCENT = bytes32('VOTE_REWARD_PERCENT');
bytes32 public constant PAIR_SWITCH = bytes32('PAIR_SWITCH');
bytes32 public constant TOKEN_PENGDING_SWITCH = bytes32('TOKEN_PENGDING_SWITCH');
bytes32 public constant TOKEN_PENGDING_TIME = bytes32('TOKEN_PENGDING_TIME');
}
pragma solidity >=0.6.6;
// import './libraries/ConfigNames.sol';
// import './libraries/SafeMath.sol';
// import './libraries/TransferHelper.sol';
// import './libraries/DemaxSwapLibrary.sol';
// import './interfaces/IWETH.sol';
// import './interfaces/IDemaxGovernance.sol';
// import './interfaces/IDemaxConfig.sol';
// import './interfaces/IERC20.sol';
// import './interfaces/IDemaxFactory.sol';
// import './interfaces/IDemaxPair.sol';
// import './modules/Ownable.sol';
// import './interfaces/IDemaxTransferListener.sol';
contract DemaxPlatform is Ownable {
uint public version = 1;
address public DGAS;
address public CONFIG;
address public FACTORY;
address public WETH;
address public GOVERNANCE;
address public TRANSFER_LISTENER;
uint256 public constant PERCENT_DENOMINATOR = 10000;
event AddLiquidity(
address indexed player,
address indexed tokenA,
address indexed tokenB,
uint256 amountA,
uint256 amountB
);
event RemoveLiquidity(
address indexed player,
address indexed tokenA,
address indexed tokenB,
uint256 amountA,
uint256 amountB
);
event SwapToken(
address indexed receiver,
address indexed fromToken,
address indexed toToken,
uint256 inAmount,
uint256 outAmount
);
receive() external payable {
assert(msg.sender == WETH);
}
modifier ensure(uint256 deadline) {
require(deadline >= block.timestamp, 'DEMAX PLATFORM : EXPIRED');
_;
}
function initialize(
address _DGAS,
address _CONFIG,
address _FACTORY,
address _WETH,
address _GOVERNANCE,
address _TRANSFER_LISTENER
) external onlyOwner {
DGAS = _DGAS;
CONFIG = _CONFIG;
FACTORY = _FACTORY;
WETH = _WETH;
GOVERNANCE = _GOVERNANCE;
TRANSFER_LISTENER = _TRANSFER_LISTENER;
}
function _addLiquidity(
address tokenA,
address tokenB,
uint256 amountADesired,
uint256 amountBDesired,
uint256 amountAMin,
uint256 amountBMin
) internal returns (uint256 amountA, uint256 amountB) {
if (IDemaxFactory(FACTORY).getPair(tokenA, tokenB) == address(0)) {
IDemaxFactory(FACTORY).createPair(tokenA, tokenB);
}
require(
IDemaxConfig(CONFIG).checkPair(tokenA, tokenB),
'DEMAX PLATFORM : ADD LIQUIDITY PAIR CONFIG CHECK FAIL'
);
(uint256 reserveA, uint256 reserveB) = DemaxSwapLibrary.getReserves(FACTORY, tokenA, tokenB);
if (reserveA == 0 && reserveB == 0) {
(amountA, amountB) = (amountADesired, amountBDesired);
} else {
uint256 amountBOptimal = DemaxSwapLibrary.quote(amountADesired, reserveA, reserveB);
if (amountBOptimal <= amountBDesired) {
require(amountBOptimal >= amountBMin, 'DEMAX PLATFORM : INSUFFICIENT_B_AMOUNT');
(amountA, amountB) = (amountADesired, amountBOptimal);
} else {
uint256 amountAOptimal = DemaxSwapLibrary.quote(amountBDesired, reserveB, reserveA);
assert(amountAOptimal <= amountADesired);
require(amountAOptimal >= amountAMin, 'DEMAX PLATFORM : INSUFFICIENT_A_AMOUNT');
(amountA, amountB) = (amountAOptimal, amountBDesired);
}
}
IDemaxFactory(FACTORY).addPlayerPair(msg.sender, IDemaxFactory(FACTORY).getPair(tokenA, tokenB));
}
function _calcDGASRate(
address tokenA,
address tokenB,
uint256 amountA,
uint256 amountB
) internal view returns (uint256 value) {
uint256 tokenAValue = 0;
uint256 tokenBValue = 0;
if (tokenA == WETH || tokenA == DGAS) {
tokenAValue = tokenA == WETH ? amountA : DemaxSwapLibrary.quoteEnhance(FACTORY, DGAS, WETH, amountA);
}
if (tokenB == WETH || tokenB == DGAS) {
tokenBValue = tokenB == WETH ? amountB : DemaxSwapLibrary.quoteEnhance(FACTORY, DGAS, WETH, amountB);
}
return tokenAValue + tokenBValue;
}
function addLiquidity(
address tokenA,
address tokenB,
uint256 amountA,
uint256 amountB,
uint256 amountAMin,
uint256 amountBMin,
uint256 deadline
)
external
ensure(deadline)
returns (
uint256 _amountA,
uint256 _amountB,
uint256 _liquidity
)
{
(_amountA, _amountB) = _addLiquidity(tokenA, tokenB, amountA, amountB, amountAMin, amountBMin);
address pair = DemaxSwapLibrary.pairFor(FACTORY, tokenA, tokenB);
TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, _amountA);
TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, _amountB);
_liquidity = IDemaxPair(pair).mint(msg.sender);
_transferNotify(msg.sender, pair, tokenA, _amountA);
_transferNotify(msg.sender, pair, tokenB, _amountB);
emit AddLiquidity(msg.sender, tokenA, tokenB, _amountA, _amountB);
}
function addLiquidityETH(
address token,
uint256 amountTokenDesired,
uint256 amountTokenMin,
uint256 amountETHMin,
uint256 deadline
)
external
payable
ensure(deadline)
returns (
uint256 amountToken,
uint256 amountETH,
uint256 liquidity
)
{
(amountToken, amountETH) = _addLiquidity(
token,
WETH,
amountTokenDesired,
msg.value,
amountTokenMin,
amountETHMin
);
address pair = DemaxSwapLibrary.pairFor(FACTORY, token, WETH);
TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
IWETH(WETH).deposit{value: amountETH}();
assert(IWETH(WETH).transfer(pair, amountETH));
liquidity = IDemaxPair(pair).mint(msg.sender);
_transferNotify(msg.sender, pair, WETH, amountETH);
_transferNotify(msg.sender, pair, token, amountToken);
emit AddLiquidity(msg.sender, token, WETH, amountToken, amountETH);
if (msg.value > amountETH) TransferHelper.safeTransferETH(msg.sender, msg.value - amountETH);
}
function removeLiquidity(
address tokenA,
address tokenB,
uint256 liquidity,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline
) public ensure(deadline) returns (uint256 amountA, uint256 amountB) {
address pair = DemaxSwapLibrary.pairFor(FACTORY, tokenA, tokenB);
uint256 _liquidity = liquidity;
address _tokenA = tokenA;
address _tokenB = tokenB;
(uint256 amount0, uint256 amount1) = IDemaxPair(pair).burn(msg.sender, to, _liquidity);
(address token0, ) = DemaxSwapLibrary.sortTokens(_tokenA, _tokenB);
(amountA, amountB) = _tokenA == token0 ? (amount0, amount1) : (amount1, amount0);
_transferNotify(pair, to, _tokenA, amountA);
_transferNotify(pair, to, _tokenB, amountB);
require(amountA >= amountAMin, 'DEMAX PLATFORM : INSUFFICIENT_A_AMOUNT');
require(amountB >= amountBMin, 'DEMAX PLATFORM : INSUFFICIENT_B_AMOUNT');
emit RemoveLiquidity(msg.sender, _tokenA, _tokenB, amountA, amountB);
}
function removeLiquidityETH(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
) public ensure(deadline) returns (uint256 amountToken, uint256 amountETH) {
(amountToken, amountETH) = removeLiquidity(
token,
WETH,
liquidity,
amountTokenMin,
amountETHMin,
address(this),
deadline
);
TransferHelper.safeTransfer(token, to, amountToken);
IWETH(WETH).withdraw(amountETH);
TransferHelper.safeTransferETH(to, amountETH);
_transferNotify(DemaxSwapLibrary.pairFor(FACTORY, WETH, token), to, token, amountToken);
_transferNotify(DemaxSwapLibrary.pairFor(FACTORY, WETH, token), to, WETH, amountETH);
emit RemoveLiquidity(msg.sender, token, WETH, amountToken, amountETH);
}
function _getAmountsOut(
uint256 amount,
address[] memory path,
uint256 percent
) internal view returns (uint256[] memory amountOuts) {
amountOuts = new uint256[](path.length);
amountOuts[0] = amount;
for (uint256 i = 0; i < path.length - 1; i++) {
address inPath = path[i];
address outPath = path[i + 1];
(uint256 reserveA, uint256 reserveB) = DemaxSwapLibrary.getReserves(FACTORY, inPath, outPath);
uint256 outAmount = SafeMath.mul(amountOuts[i], SafeMath.sub(PERCENT_DENOMINATOR, percent));
amountOuts[i + 1] = DemaxSwapLibrary.getAmountOut(outAmount / PERCENT_DENOMINATOR, reserveA, reserveB);
}
}
function _getAmountsIn(
uint256 amount,
address[] memory path,
uint256 percent
) internal view returns (uint256[] memory amountIn) {
amountIn = new uint256[](path.length);
amountIn[path.length - 1] = amount;
for (uint256 i = path.length - 1; i > 0; i--) {
address inPath = path[i - 1];
address outPath = path[i];
(uint256 reserveA, uint256 reserveB) = DemaxSwapLibrary.getReserves(FACTORY, inPath, outPath);
uint256 inAmount = DemaxSwapLibrary.getAmountIn(amountIn[i], reserveA, reserveB);
amountIn[i - 1] = SafeMath.add(
SafeMath.mul(inAmount, PERCENT_DENOMINATOR) / SafeMath.sub(PERCENT_DENOMINATOR, percent),
1
);
}
amountIn = _getAmountsOut(amountIn[0], path, percent);
}
function swapPrecondition(address token) public view returns (bool) {
if (token == DGAS || token == WETH) return true;
uint256 percent = IDemaxConfig(CONFIG).getConfigValue(ConfigNames.TOKEN_TO_DGAS_PAIR_MIN_PERCENT);
if (!existPair(WETH, DGAS)) return false;
if (!existPair(DGAS, token)) return false;
if (!(IDemaxConfig(CONFIG).checkPair(DGAS, token) && IDemaxConfig(CONFIG).checkPair(WETH, token))) return false;
if (!existPair(WETH, token)) return true;
if (percent == 0) return true;
(uint256 reserveDGAS, ) = DemaxSwapLibrary.getReserves(FACTORY, DGAS, token);
(uint256 reserveWETH, ) = DemaxSwapLibrary.getReserves(FACTORY, WETH, token);
(uint256 reserveWETH2, uint256 reserveDGAS2) = DemaxSwapLibrary.getReserves(FACTORY, WETH, DGAS);
uint256 dgasValue = SafeMath.mul(reserveDGAS, reserveWETH2) / reserveDGAS2;
uint256 limitValue = SafeMath.mul(SafeMath.add(dgasValue, reserveWETH), percent) / PERCENT_DENOMINATOR;
return dgasValue >= limitValue;
}
function _swap(
uint256[] memory amounts,
address[] memory path,
address _to
) internal {
require(swapPrecondition(path[path.length - 1]), 'DEMAX PLATFORM : CHECK DGAS/TOKEN TO VALUE FAIL');
for (uint256 i; i < path.length - 1; i++) {
(address input, address output) = (path[i], path[i + 1]);
require(swapPrecondition(input), 'DEMAX PLATFORM : CHECK DGAS/TOKEN VALUE FROM FAIL');
require(IDemaxConfig(CONFIG).checkPair(input, output), 'DEMAX PLATFORM : SWAP PAIR CONFIG CHECK FAIL');
(address token0, address token1) = DemaxSwapLibrary.sortTokens(input, output);
uint256 amountOut = amounts[i + 1];
(uint256 amount0Out, uint256 amount1Out) = input == token0
? (uint256(0), amountOut)
: (amountOut, uint256(0));
address to = i < path.length - 2 ? DemaxSwapLibrary.pairFor(FACTORY, output, path[i + 2]) : _to;
IDemaxPair(DemaxSwapLibrary.pairFor(FACTORY, input, output)).swap(amount0Out, amount1Out, to, new bytes(0));
if (amount0Out > 0)
_transferNotify(DemaxSwapLibrary.pairFor(FACTORY, input, output), to, token0, amount0Out);
if (amount1Out > 0)
_transferNotify(DemaxSwapLibrary.pairFor(FACTORY, input, output), to, token1, amount1Out);
}
emit SwapToken(_to, path[0], path[path.length - 1], amounts[0], amounts[path.length - 1]);
}
function _swapFee(
uint256[] memory amounts,
address[] memory path,
uint256 percent
) internal {
address[] memory feepath = new address[](2);
feepath[1] = DGAS;
for (uint256 i = 0; i < path.length - 1; i++) {
uint256 fee = SafeMath.mul(amounts[i], percent) / PERCENT_DENOMINATOR;
address input = path[i];
address output = path[i + 1];
address currentPair = DemaxSwapLibrary.pairFor(FACTORY, input, output);
if (input == DGAS) {
IDemaxPair(currentPair).swapFee(fee, DGAS, GOVERNANCE);
_transferNotify(currentPair, GOVERNANCE, DGAS, fee);
} else {
IDemaxPair(currentPair).swapFee(fee, input, DemaxSwapLibrary.pairFor(FACTORY, input, DGAS));
(uint256 reserveIn, uint256 reserveDGAS) = DemaxSwapLibrary.getReserves(FACTORY, input, DGAS);
uint256 feeOut = DemaxSwapLibrary.getAmountOut(fee, reserveIn, reserveDGAS);
IDemaxPair(DemaxSwapLibrary.pairFor(FACTORY, input, DGAS)).swapFee(feeOut, DGAS, GOVERNANCE);
_transferNotify(currentPair, DemaxSwapLibrary.pairFor(FACTORY, input, DGAS), input, fee);
_transferNotify(DemaxSwapLibrary.pairFor(FACTORY, input, DGAS), GOVERNANCE, DGAS, feeOut);
fee = feeOut;
}
if (fee > 0) IDemaxGovernance(GOVERNANCE).addReward(fee);
}
}
function _getSwapFeePercent() internal view returns (uint256) {
return IDemaxConfig(CONFIG).getConfigValue(ConfigNames.SWAP_FEE_PERCENT);
}
function swapExactTokensForTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external ensure(deadline) returns (uint256[] memory amounts) {
uint256 percent = _getSwapFeePercent();
amounts = _getAmountsOut(amountIn, path, percent);
require(amounts[amounts.length - 1] >= amountOutMin, 'DEMAX PLATFORM : INSUFFICIENT_OUTPUT_AMOUNT');
address pair = DemaxSwapLibrary.pairFor(FACTORY, path[0], path[1]);
_innerTransferFrom(
path[0],
msg.sender,
pair,
SafeMath.mul(amountIn, SafeMath.sub(PERCENT_DENOMINATOR, percent)) / PERCENT_DENOMINATOR
);
_swap(amounts, path, to);
_innerTransferFrom(path[0], msg.sender, pair, SafeMath.mul(amounts[0], percent) / PERCENT_DENOMINATOR);
_swapFee(amounts, path, percent);
}
function _innerTransferFrom(
address token,
address from,
address to,
uint256 amount
) internal {
TransferHelper.safeTransferFrom(token, from, to, amount);
_transferNotify(from, to, token, amount);
}
function _innerTransferWETH(address to, uint256 amount) internal {
assert(IWETH(WETH).transfer(to, amount));
_transferNotify(address(this), to, WETH, amount);
}
function swapExactETHForTokens(
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external payable ensure(deadline) returns (uint256[] memory amounts) {
require(path[0] == WETH, 'DEMAX PLATFORM : INVALID_PATH');
uint256 percent = _getSwapFeePercent();
amounts = _getAmountsOut(msg.value, path, percent);
require(amounts[amounts.length - 1] >= amountOutMin, 'DEMAX PLATFORM : INSUFFICIENT_OUTPUT_AMOUNT');
address pair = DemaxSwapLibrary.pairFor(FACTORY, path[0], path[1]);
IWETH(WETH).deposit{
value: SafeMath.mul(amounts[0], SafeMath.sub(PERCENT_DENOMINATOR, percent)) / PERCENT_DENOMINATOR
}();
_innerTransferWETH(
pair,
SafeMath.mul(amounts[0], SafeMath.sub(PERCENT_DENOMINATOR, percent)) / PERCENT_DENOMINATOR
);
_swap(amounts, path, to);
IWETH(WETH).deposit{value: SafeMath.mul(amounts[0], percent) / PERCENT_DENOMINATOR}();
_innerTransferWETH(pair, SafeMath.mul(amounts[0], percent) / PERCENT_DENOMINATOR);
_swapFee(amounts, path, percent);
}
function swapExactTokensForETH(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external ensure(deadline) returns (uint256[] memory amounts) {
require(path[path.length - 1] == WETH, 'DEMAX PLATFORM : INVALID_PATH');
uint256 percent = _getSwapFeePercent();
amounts = _getAmountsOut(amountIn, path, percent);
require(amounts[amounts.length - 1] >= amountOutMin, 'DEMAX PLATFORM : INSUFFICIENT_OUTPUT_AMOUNT');
address pair = DemaxSwapLibrary.pairFor(FACTORY, path[0], path[1]);
_innerTransferFrom(
path[0],
msg.sender,
pair,
SafeMath.mul(amountIn, SafeMath.sub(PERCENT_DENOMINATOR, percent)) / PERCENT_DENOMINATOR
);
_swap(amounts, path, address(this));
IWETH(WETH).withdraw(amounts[amounts.length - 1]);
TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]);
_innerTransferFrom(path[0], msg.sender, pair, SafeMath.mul(amounts[0], percent) / PERCENT_DENOMINATOR);
_swapFee(amounts, path, percent);
}
function swapTokensForExactTokens(
uint256 amountOut,
uint256 amountInMax,
address[] calldata path,
address to,
uint256 deadline
) external ensure(deadline) returns (uint256[] memory amounts) {
uint256 percent = _getSwapFeePercent();
amounts = _getAmountsIn(amountOut, path, percent);
require(amounts[0] <= amountInMax, 'DEMAX PLATFORM : EXCESSIVE_INPUT_AMOUNT');
address pair = DemaxSwapLibrary.pairFor(FACTORY, path[0], path[1]);
_innerTransferFrom(
path[0],
msg.sender,
pair,
SafeMath.mul(amounts[0], SafeMath.sub(PERCENT_DENOMINATOR, percent)) / PERCENT_DENOMINATOR
);
_swap(amounts, path, to);
_innerTransferFrom(path[0], msg.sender, pair, SafeMath.mul(amounts[0], percent) / PERCENT_DENOMINATOR);
_swapFee(amounts, path, percent);
}
function swapTokensForExactETH(
uint256 amountOut,
uint256 amountInMax,
address[] calldata path,
address to,
uint256 deadline
) external ensure(deadline) returns (uint256[] memory amounts) {
require(path[path.length - 1] == WETH, 'DEMAX PLATFORM : INVALID_PATH');
uint256 percent = _getSwapFeePercent();
amounts = _getAmountsIn(amountOut, path, percent);
require(amounts[0] <= amountInMax, 'DEMAX PLATFORM : EXCESSIVE_INPUT_AMOUNT');
address pair = DemaxSwapLibrary.pairFor(FACTORY, path[0], path[1]);
_innerTransferFrom(
path[0],
msg.sender,
pair,
SafeMath.mul(amounts[0], SafeMath.sub(PERCENT_DENOMINATOR, percent)) / PERCENT_DENOMINATOR
);
_swap(amounts, path, address(this));
IWETH(WETH).withdraw(amounts[amounts.length - 1]);
TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]);
_innerTransferFrom(path[0], msg.sender, pair, SafeMath.mul(amounts[0], percent) / PERCENT_DENOMINATOR);
_swapFee(amounts, path, percent);
}
function swapETHForExactTokens(
uint256 amountOut,
address[] calldata path,
address to,
uint256 deadline
) external payable ensure(deadline) returns (uint256[] memory amounts) {
require(path[0] == WETH, 'DEMAX PLATFORM : INVALID_PATH');
uint256 percent = _getSwapFeePercent();
amounts = _getAmountsIn(amountOut, path, percent);
require(amounts[0] <= msg.value, 'DEMAX PLATFORM : EXCESSIVE_INPUT_AMOUNT');
IWETH(WETH).deposit{
value: SafeMath.mul(amounts[0], SafeMath.sub(PERCENT_DENOMINATOR, percent)) / PERCENT_DENOMINATOR
}();
address pair = DemaxSwapLibrary.pairFor(FACTORY, path[0], path[1]);
_innerTransferWETH(
pair,
SafeMath.mul(amounts[0], SafeMath.sub(PERCENT_DENOMINATOR, percent)) / PERCENT_DENOMINATOR
);
_swap(amounts, path, to);
IWETH(WETH).deposit{value: SafeMath.mul(amounts[0], percent) / PERCENT_DENOMINATOR}();
_innerTransferWETH(pair, SafeMath.mul(amounts[0], percent) / PERCENT_DENOMINATOR);
_swapFee(amounts, path, percent);
if (msg.value > amounts[0]) TransferHelper.safeTransferETH(msg.sender, msg.value - amounts[0]);
}
function _transferNotify(
address from,
address to,
address token,
uint256 amount
) internal {
IDemaxTransferListener(TRANSFER_LISTENER).transferNotify(from, to, token, amount);
}
function existPair(address tokenA, address tokenB) public view returns (bool) {
return IDemaxFactory(FACTORY).getPair(tokenA, tokenB) != address(0);
}
function getReserves(address tokenA, address tokenB) public view returns (uint256, uint256) {
return DemaxSwapLibrary.getReserves(FACTORY, tokenA, tokenB);
}
function pairFor(address tokenA, address tokenB) public view returns (address) {
return DemaxSwapLibrary.pairFor(FACTORY, tokenA, tokenB);
}
function getAmountOut(
uint256 amountIn,
uint256 reserveIn,
uint256 reserveOut
) public view returns (uint256 amountOut) {
uint256 percent = _getSwapFeePercent();
uint256 amount = SafeMath.mul(amountIn, SafeMath.sub(PERCENT_DENOMINATOR, percent)) / PERCENT_DENOMINATOR;
return DemaxSwapLibrary.getAmountOut(amount, reserveIn, reserveOut);
}
function getAmountIn(
uint256 amountOut,
uint256 reserveIn,
uint256 reserveOut
) public view returns (uint256 amountIn) {
uint256 percent = _getSwapFeePercent();
uint256 amount = DemaxSwapLibrary.getAmountIn(amountOut, reserveIn, reserveOut);
return SafeMath.mul(amount, PERCENT_DENOMINATOR) / SafeMath.sub(PERCENT_DENOMINATOR, percent);
}
function getAmountsOut(uint256 amountIn, address[] memory path) public view returns (uint256[] memory amounts) {
uint256 percent = _getSwapFeePercent();
return _getAmountsOut(amountIn, path, percent);
}
function getAmountsIn(uint256 amountOut, address[] memory path) public view returns (uint256[] memory amounts) {
uint256 percent = _getSwapFeePercent();
return _getAmountsIn(amountOut, path, percent);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":true,"internalType":"address","name":"tokenA","type":"address"},{"indexed":true,"internalType":"address","name":"tokenB","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountA","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountB","type":"uint256"}],"name":"AddLiquidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"_newOwner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":true,"internalType":"address","name":"tokenA","type":"address"},{"indexed":true,"internalType":"address","name":"tokenB","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountA","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountB","type":"uint256"}],"name":"RemoveLiquidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":true,"internalType":"address","name":"fromToken","type":"address"},{"indexed":true,"internalType":"address","name":"toToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"inAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"outAmount","type":"uint256"}],"name":"SwapToken","type":"event"},{"inputs":[],"name":"CONFIG","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DGAS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FACTORY","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GOVERNANCE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERCENT_DENOMINATOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TRANSFER_LISTENER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"_amountA","type":"uint256"},{"internalType":"uint256","name":"_amountB","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountTokenDesired","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"changeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"}],"name":"existPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsIn","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"}],"name":"getReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_DGAS","type":"address"},{"internalType":"address","name":"_CONFIG","type":"address"},{"internalType":"address","name":"_FACTORY","type":"address"},{"internalType":"address","name":"_WETH","type":"address"},{"internalType":"address","name":"_GOVERNANCE","type":"address"},{"internalType":"address","name":"_TRANSFER_LISTENER","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"}],"name":"pairFor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapETHForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"swapPrecondition","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60806040526001805534801561001457600080fd5b50600080546001600160a01b03191633179055614668806100366000396000f3fe6080604052600436106101c65760003560e01c80638803dbee116100f7578063c2ceddfa11610095578063d92e82e411610064578063d92e82e414610a53578063ddd377ac14610a68578063f6f1e30614610a9b578063fb3bdb4114610ad9576101e1565b8063c2ceddfa146108b9578063cc2a9a5b14610908578063d06ca61f14610963578063d52bb6f414610a18576101e1565b80639e6c2959116100d15780639e6c2959146107ff578063a6f9dae114610814578063ad5c464814610847578063baa2abde1461085c576101e1565b80638803dbee146107195780638da5cb5b146107af57806396ed28f9146107c4576101e1565b80634a25d94a116101645780637ae06e581161013e5780637ae06e58146105d15780637ff36ab51461064a578063822abc7c146106ce57806385f8c259146106e3576101e1565b80634a25d94a1461051157806354fd4d50146105a7578063723c2e2d146105bc576101e1565b806318cbafe5116101a057806318cbafe5146102cb5780631f00ca74146103b15780632dd310001461046657806338ed17391461047b576101e1565b806302751cec146101e6578063054d50d414610252578063146278341461029a576101e1565b366101e1576005546001600160a01b031633146101df57fe5b005b600080fd5b3480156101f257600080fd5b50610239600480360360c081101561020957600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610b5d565b6040805192835260208301919091528051918290030190f35b34801561025e57600080fd5b506102886004803603606081101561027557600080fd5b5080359060208101359060400135610cf8565b60408051918252519081900360200190f35b3480156102a657600080fd5b506102af610d3e565b604080516001600160a01b039092168252519081900360200190f35b3480156102d757600080fd5b50610361600480360360a08110156102ee57600080fd5b813591602081013591810190606081016040820135600160201b81111561031457600080fd5b82018360208201111561032657600080fd5b803590602001918460208302840111600160201b8311171561034757600080fd5b91935091506001600160a01b038135169060200135610d4d565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561039d578181015183820152602001610385565b505050509050019250505060405180910390f35b3480156103bd57600080fd5b50610361600480360360408110156103d457600080fd5b81359190810190604081016020820135600160201b8111156103f557600080fd5b82018360208201111561040757600080fd5b803590602001918460208302840111600160201b8311171561042857600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110aa945050505050565b34801561047257600080fd5b506102af6110cd565b34801561048757600080fd5b50610361600480360360a081101561049e57600080fd5b813591602081013591810190606081016040820135600160201b8111156104c457600080fd5b8201836020820111156104d657600080fd5b803590602001918460208302840111600160201b831117156104f757600080fd5b91935091506001600160a01b0381351690602001356110dc565b34801561051d57600080fd5b50610361600480360360a081101561053457600080fd5b813591602081013591810190606081016040820135600160201b81111561055a57600080fd5b82018360208201111561056c57600080fd5b803590602001918460208302840111600160201b8311171561058d57600080fd5b91935091506001600160a01b038135169060200135611233565b3480156105b357600080fd5b506102886113f6565b3480156105c857600080fd5b506102af6113fc565b3480156105dd57600080fd5b5061062c600480360360e08110156105f457600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060808101359060a08101359060c0013561140b565b60408051938452602084019290925282820152519081900360600190f35b6103616004803603608081101561066057600080fd5b81359190810190604081016020820135600160201b81111561068157600080fd5b82018360208201111561069357600080fd5b803590602001918460208302840111600160201b831117156106b457600080fd5b91935091506001600160a01b038135169060200135611595565b3480156106da57600080fd5b506102af6118df565b3480156106ef57600080fd5b506102886004803603606081101561070657600080fd5b50803590602081013590604001356118ee565b34801561072557600080fd5b50610361600480360360a081101561073c57600080fd5b813591602081013591810190606081016040820135600160201b81111561076257600080fd5b82018360208201111561077457600080fd5b803590602001918460208302840111600160201b8311171561079557600080fd5b91935091506001600160a01b038135169060200135611934565b3480156107bb57600080fd5b506102af611a49565b3480156107d057600080fd5b506102af600480360360408110156107e757600080fd5b506001600160a01b0381358116916020013516611a58565b34801561080b57600080fd5b50610288611a79565b34801561082057600080fd5b506101df6004803603602081101561083757600080fd5b50356001600160a01b0316611a7f565b34801561085357600080fd5b506102af611b89565b34801561086857600080fd5b50610239600480360360e081101561087f57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135611b98565b3480156108c557600080fd5b506108f4600480360360408110156108dc57600080fd5b506001600160a01b0381358116916020013516611dd0565b604080519115158252519081900360200190f35b34801561091457600080fd5b506101df600480360360c081101561092b57600080fd5b506001600160a01b038135811691602081013582169160408201358116916060810135821691608082013581169160a0013516611e68565b34801561096f57600080fd5b506103616004803603604081101561098657600080fd5b81359190810190604081016020820135600160201b8111156109a757600080fd5b8201836020820111156109b957600080fd5b803590602001918460208302840111600160201b831117156109da57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611f2b945050505050565b348015610a2457600080fd5b5061023960048036036040811015610a3b57600080fd5b506001600160a01b0381358116916020013516611f44565b348015610a5f57600080fd5b506102af611f6c565b348015610a7457600080fd5b506108f460048036036020811015610a8b57600080fd5b50356001600160a01b0316611f7b565b61062c600480360360a0811015610ab157600080fd5b506001600160a01b0381351690602081013590604081013590606081013590608001356122aa565b61036160048036036080811015610aef57600080fd5b81359190810190604081016020820135600160201b811115610b1057600080fd5b820183602082011115610b2257600080fd5b803590602001918460208302840111600160201b83111715610b4357600080fd5b91935091506001600160a01b03813516906020013561253f565b6000808242811015610ba4576040805162461bcd60e51b815260206004820152601860248201526000805160206143d0833981519152604482015290519081900360640190fd5b600554610bc0908a906001600160a01b03168a8a8a308a611b98565b9093509150610bd089868561289d565b60055460408051632e1a7d4d60e01b81526004810185905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b158015610c1d57600080fd5b505af1158015610c31573d6000803e3d6000fd5b50505050610c3f8583612a07565b600454600554610c6891610c60916001600160a01b0391821691168c612aff565b868b86612c4d565b600454600554610c9d91610c89916001600160a01b0391821691168c612aff565b60055487906001600160a01b031685612c4d565b600554604080518581526020810185905281516001600160a01b03938416938d169233927fa8dbaaebbb025c88e9e34c84635cd8238043556e9af43fb161508c898a8e1ef9929081900390910190a450965096945050505050565b600080610d03612ce5565b90506000612710610d1f87610d1a61271086612d74565b612dc4565b81610d2657fe5b049050610d34818686612e27565b9695505050505050565b6006546001600160a01b031681565b60608142811015610d93576040805162461bcd60e51b815260206004820152601860248201526000805160206143d0833981519152604482015290519081900360640190fd5b6005546001600160a01b031686866000198101818110610daf57fe5b905060200201356001600160a01b03166001600160a01b031614610e08576040805162461bcd60e51b815260206004820152601d6024820152600080516020614595833981519152604482015290519081900360640190fd5b6000610e12612ce5565b9050610e5389888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250869250612ee3915050565b92508783600185510381518110610e6657fe5b60200260200101511015610eab5760405162461bcd60e51b815260040180806020018281038252602b815260200180614608602b913960400191505060405180910390fd5b600454600090610efa906001600160a01b031689898481610ec857fe5b905060200201356001600160a01b03168a8a6001818110610ee557fe5b905060200201356001600160a01b0316612aff565b9050610f3e88886000818110610f0c57fe5b905060200201356001600160a01b03163383612710610f318f610d1a6127108a612d74565b81610f3857fe5b04613015565b610f7d84898980806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613033915050565b60055484516001600160a01b0390911690632e1a7d4d9086906000198101908110610fa457fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610fe257600080fd5b505af1158015610ff6573d6000803e3d6000fd5b5050505061101b868560018751038151811061100e57fe5b6020026020010151612a07565b61105e8888600081811061102b57fe5b905060200201356001600160a01b03163383612710610f318960008151811061105057fe5b602002602001015188612dc4565b61109d848989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508792506134bc915050565b5050509695505050505050565b606060006110b6612ce5565b90506110c38484836138bb565b9150505b92915050565b6004546001600160a01b031681565b60608142811015611122576040805162461bcd60e51b815260206004820152601860248201526000805160206143d0833981519152604482015290519081900360640190fd5b600061112c612ce5565b905061116d89888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250869250612ee3915050565b9250878360018551038151811061118057fe5b602002602001015110156111c55760405162461bcd60e51b815260040180806020018281038252602b815260200180614608602b913960400191505060405180910390fd5b6004546000906111e2906001600160a01b031689898481610ec857fe5b90506111f488886000818110610f0c57fe5b61101b848989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508b9250613033915050565b60608142811015611279576040805162461bcd60e51b815260206004820152601860248201526000805160206143d0833981519152604482015290519081900360640190fd5b6005546001600160a01b03168686600019810181811061129557fe5b905060200201356001600160a01b03166001600160a01b0316146112ee576040805162461bcd60e51b815260206004820152601d6024820152600080516020614595833981519152604482015290519081900360640190fd5b60006112f8612ce5565b9050611339898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508692506138bb915050565b9250878360008151811061134957fe5b6020026020010151111561138e5760405162461bcd60e51b81526004018080602001828103825260278152602001806143846027913960400191505060405180910390fd5b6004546000906113ab906001600160a01b031689898481610ec857fe5b9050610f3e888860008181106113bd57fe5b905060200201356001600160a01b03163383612710610f31896000815181106113e257fe5b6020026020010151610d1a6127108a612d74565b60015481565b6002546001600160a01b031681565b60008060008342811015611454576040805162461bcd60e51b815260206004820152601860248201526000805160206143d0833981519152604482015290519081900360640190fd5b6114628b8b8b8b8b8b613a25565b6004549195509350600090611481906001600160a01b03168d8d612aff565b905061148f8c338388613e1a565b61149b8b338387613e1a565b604080516335313c2160e11b815233600482015290516001600160a01b03831691636a6278429160248083019260209291908290030181600087803b1580156114e357600080fd5b505af11580156114f7573d6000803e3d6000fd5b505050506040513d602081101561150d57600080fd5b5051925061151d33828e88612c4d565b61152933828d87612c4d565b8a6001600160a01b03168c6001600160a01b0316336001600160a01b03167fc33fbc9654f9c0dcfcbd829113bdb10afe95619bc0824bc5959ad82fd6952bd98888604051808381526020018281526020019250505060405180910390a450509750975097945050505050565b606081428110156115db576040805162461bcd60e51b815260206004820152601860248201526000805160206143d0833981519152604482015290519081900360640190fd5b6005546001600160a01b031686866000816115f257fe5b905060200201356001600160a01b03166001600160a01b03161461164b576040805162461bcd60e51b815260206004820152601d6024820152600080516020614595833981519152604482015290519081900360640190fd5b6000611655612ce5565b905061169634888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250869250612ee3915050565b925087836001855103815181106116a957fe5b602002602001015110156116ee5760405162461bcd60e51b815260040180806020018281038252602b815260200180614608602b913960400191505060405180910390fd5b60045460009061170b906001600160a01b031689898481610ec857fe5b60055485519192506001600160a01b03169063d0e30db0906127109061174a90889060009061173657fe5b6020026020010151610d1a61271088612d74565b8161175157fe5b046040518263ffffffff1660e01b81526004016000604051808303818588803b15801561177d57600080fd5b505af1158015611791573d6000803e3d6000fd5b50505050506117ba816127106117ad8760008151811061173657fe5b816117b457fe5b04613f6f565b6117f9848989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508b9250613033915050565b60055484516001600160a01b039091169063d0e30db0906127109061183190889060009061182357fe5b602002602001015186612dc4565b8161183857fe5b046040518263ffffffff1660e01b81526004016000604051808303818588803b15801561186457600080fd5b505af1158015611878573d6000803e3d6000fd5b5050505050611894816127106117ad8760008151811061182357fe5b6118d3848989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508792506134bc915050565b50505095945050505050565b6007546001600160a01b031681565b6000806118f9612ce5565b90506000611908868686614015565b905061191661271083612d74565b61192282612710612dc4565b8161192957fe5b049695505050505050565b6060814281101561197a576040805162461bcd60e51b815260206004820152601860248201526000805160206143d0833981519152604482015290519081900360640190fd5b6000611984612ce5565b90506119c5898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508692506138bb915050565b925087836000815181106119d557fe5b60200260200101511115611a1a5760405162461bcd60e51b81526004018080602001828103825260278152602001806143846027913960400191505060405180910390fd5b600454600090611a37906001600160a01b031689898481610ec857fe5b90506111f4888860008181106113bd57fe5b6000546001600160a01b031681565b600454600090611a72906001600160a01b03168484612aff565b9392505050565b61271081565b6000546001600160a01b03163314611ad3576040805162461bcd60e51b815260206004820152601260248201527127bbb730b136329d102327a92124a22222a760711b604482015290519081900360640190fd5b6001600160a01b038116611b2e576040805162461bcd60e51b815260206004820152601860248201527f4f776e61626c653a20494e56414c49445f414444524553530000000000000000604482015290519081900360640190fd5b600080546040516001600160a01b03808516939216917fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c91a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031681565b6000808242811015611bdf576040805162461bcd60e51b815260206004820152601860248201526000805160206143d0833981519152604482015290519081900360640190fd5b600454600090611bf9906001600160a01b03168c8c612aff565b60408051633dae446f60e21b81523360048201526001600160a01b038981166024830152604482018d905282519394508c938f938f9360009384939089169263f6b911bc926064808201939182900301818787803b158015611c5a57600080fd5b505af1158015611c6e573d6000803e3d6000fd5b505050506040513d6040811015611c8457600080fd5b50805160209091015190925090506000611c9e85856140e3565b509050806001600160a01b0316856001600160a01b031614611cc1578183611cc4565b82825b909a509850611cd5878d878d612c4d565b611ce1878d868c612c4d565b8d8a1015611d205760405162461bcd60e51b81526004018080602001828103825260268152602001806144756026913960400191505060405180910390fd5b8c891015611d5f5760405162461bcd60e51b815260040180806020018281038252602681526020018061456f6026913960400191505060405180910390fd5b836001600160a01b0316856001600160a01b0316336001600160a01b03167fa8dbaaebbb025c88e9e34c84635cd8238043556e9af43fb161508c898a8e1ef98d8d604051808381526020018281526020019250505060405180910390a4505050505050505097509795505050505050565b600480546040805163e6a4390560e01b81526001600160a01b0386811694820194909452848416602482015290516000938493169163e6a43905916044808301926020929190829003018186803b158015611e2a57600080fd5b505afa158015611e3e573d6000803e3d6000fd5b505050506040513d6020811015611e5457600080fd5b50516001600160a01b031614159392505050565b6000546001600160a01b03163314611ebc576040805162461bcd60e51b815260206004820152601260248201527127bbb730b136329d102327a92124a22222a760711b604482015290519081900360640190fd5b600280546001600160a01b03199081166001600160a01b0398891617909155600380548216968816969096179095556004805486169487169490941790935560058054851692861692909217909155600680548416918516919091179055600780549092169216919091179055565b60606000611f37612ce5565b90506110c3848483612ee3565b6004546000908190611f60906001600160a01b031685856141ba565b915091505b9250929050565b6003546001600160a01b031681565b6002546000906001600160a01b0383811691161480611fa757506005546001600160a01b038381169116145b15611fb4575060016122a5565b600354604080516360ccef1960e11b81527f544f4b454e5f544f5f444741535f504149525f4d494e5f50455243454e540000600482015290516000926001600160a01b03169163c199de32916024808301926020929190829003018186803b15801561201f57600080fd5b505afa158015612033573d6000803e3d6000fd5b505050506040513d602081101561204957600080fd5b505160055460025491925061206a916001600160a01b039182169116611dd0565b6120785760009150506122a5565b60025461208e906001600160a01b031684611dd0565b61209c5760009150506122a5565b6003546002546040805163a9ece1b760e01b81526001600160a01b03928316600482015286831660248201529051919092169163a9ece1b7916044808301926020929190829003018186803b1580156120f457600080fd5b505afa158015612108573d6000803e3d6000fd5b505050506040513d602081101561211e57600080fd5b505180156121ac57506003546005546040805163a9ece1b760e01b81526001600160a01b03928316600482015286831660248201529051919092169163a9ece1b7916044808301926020929190829003018186803b15801561217f57600080fd5b505afa158015612193573d6000803e3d6000fd5b505050506040513d60208110156121a957600080fd5b50515b6121ba5760009150506122a5565b6005546121d0906001600160a01b031684611dd0565b6121de5760019150506122a5565b806121ed5760019150506122a5565b60045460025460009161220d916001600160a01b039182169116866141ba565b50600454600554919250600091612231916001600160a01b039081169116876141ba565b50600454600554600254929350600092839261225d926001600160a01b039182169290821691166141ba565b9150915060008161226e8685612dc4565b8161227557fe5b049050600061271061229061228a8488614288565b89612dc4565b8161229757fe5b049091101596505050505050505b919050565b600080600083428110156122f3576040805162461bcd60e51b815260206004820152601860248201526000805160206143d0833981519152604482015290519081900360640190fd5b60055461230e908a906001600160a01b03168a348b8b613a25565b600454600554929650909450600091612335916001600160a01b03908116918d9116612aff565b90506123438a338388613e1a565b600560009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b15801561239357600080fd5b505af11580156123a7573d6000803e3d6000fd5b50506005546040805163a9059cbb60e01b81526001600160a01b038781166004830152602482018b9052915191909216945063a9059cbb9350604480830193506020928290030181600087803b15801561240057600080fd5b505af1158015612414573d6000803e3d6000fd5b505050506040513d602081101561242a57600080fd5b505161243257fe5b604080516335313c2160e11b815233600482015290516001600160a01b03831691636a6278429160248083019260209291908290030181600087803b15801561247a57600080fd5b505af115801561248e573d6000803e3d6000fd5b505050506040513d60208110156124a457600080fd5b50516005549093506124c390339083906001600160a01b031687612c4d565b6124cf33828c88612c4d565b600554604080518781526020810187905281516001600160a01b03938416938e169233927fc33fbc9654f9c0dcfcbd829113bdb10afe95619bc0824bc5959ad82fd6952bd9929081900390910190a4833411156125325761253233853403612a07565b5050955095509592505050565b60608142811015612585576040805162461bcd60e51b815260206004820152601860248201526000805160206143d0833981519152604482015290519081900360640190fd5b6005546001600160a01b0316868660008161259c57fe5b905060200201356001600160a01b03166001600160a01b0316146125f5576040805162461bcd60e51b815260206004820152601d6024820152600080516020614595833981519152604482015290519081900360640190fd5b60006125ff612ce5565b9050612640888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508692506138bb915050565b9250348360008151811061265057fe5b602002602001015111156126955760405162461bcd60e51b81526004018080602001828103825260278152602001806143846027913960400191505060405180910390fd5b60055483516001600160a01b039091169063d0e30db090612710906126d39087906000906126bf57fe5b6020026020010151610d1a61271087612d74565b816126da57fe5b046040518263ffffffff1660e01b81526004016000604051808303818588803b15801561270657600080fd5b505af115801561271a573d6000803e3d6000fd5b50506004546000935061273d92506001600160a01b0316905089898481610ec857fe5b9050612756816127106117ad8760008151811061173657fe5b612795848989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508b9250613033915050565b60055484516001600160a01b039091169063d0e30db090612710906127bf90889060009061182357fe5b816127c657fe5b046040518263ffffffff1660e01b81526004016000604051808303818588803b1580156127f257600080fd5b505af1158015612806573d6000803e3d6000fd5b5050505050612822816127106117ad8760008151811061182357fe5b612861848989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508792506134bc915050565b8360008151811061286e57fe5b60200260200101513411156118d3576118d3338560008151811061288e57fe5b60200260200101513403612a07565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b6020831061291a5780518252601f1990920191602091820191016128fb565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461297c576040519150601f19603f3d011682016040523d82523d6000602084013e612981565b606091505b50915091508180156129af5750805115806129af57508080602001905160208110156129ac57600080fd5b50515b612a00576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b60208310612a535780518252601f199092019160209182019101612a34565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612ab5576040519150601f19603f3d011682016040523d82523d6000602084013e612aba565b606091505b5050905080612afa5760405162461bcd60e51b815260040180806020018281038252602381526020018061454c6023913960400191505060405180910390fd5b505050565b6000806000612b0e85856140e3565b915091506000828260405160200180836001600160a01b03166001600160a01b031660601b8152601401826001600160a01b03166001600160a01b031660601b815260140192505050604051602081830303815290604052805190602001209050600060ff60f81b88838a6001600160a01b0316637c7f84ee6040518163ffffffff1660e01b815260040160206040518083038186803b158015612bb157600080fd5b505afa158015612bc5573d6000803e3d6000fd5b505050506040513d6020811015612bdb57600080fd5b5051604080516001600160f81b03199590951660208087019190915260609490941b6bffffffffffffffffffffffff191660218601526035850192909252605580850191909152815180850390910181526075909301905281519101206001600160a01b031698975050505050505050565b60075460408051632984b7a960e21b81526001600160a01b03878116600483015286811660248301528581166044830152606482018590529151919092169163a612dea49160848083019260209291908290030181600087803b158015612cb357600080fd5b505af1158015612cc7573d6000803e3d6000fd5b505050506040513d6020811015612cdd57600080fd5b505050505050565b600354604080516360ccef1960e11b81526f14d5d05417d1915157d4115490d1539560821b600482015290516000926001600160a01b03169163c199de32916024808301926020929190829003018186803b158015612d4357600080fd5b505afa158015612d57573d6000803e3d6000fd5b505050506040513d6020811015612d6d57600080fd5b5051905090565b808203828111156110c7576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6000811580612ddf57505080820282828281612ddc57fe5b04145b6110c7576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b6000808411612e675760405162461bcd60e51b815260040180806020018281038252602b815260200180614425602b913960400191505060405180910390fd5b600083118015612e775750600082115b612eb25760405162461bcd60e51b81526004018080602001828103825260288152602001806144cc6028913960400191505060405180910390fd5b6000612ec4858463ffffffff612dc416565b90506000612ed8858763ffffffff61428816565b905080828161192957fe5b6060825167ffffffffffffffff81118015612efd57600080fd5b50604051908082528060200260200182016040528015612f27578160200160208202803683370190505b5090508381600081518110612f3857fe5b602090810291909101015260005b600184510381101561300d576000848281518110612f6057fe5b602002602001015190506000858360010181518110612f7b57fe5b60200260200101519050600080612fa8600460009054906101000a90046001600160a01b031685856141ba565b915091506000612fd1878781518110612fbd57fe5b6020026020010151610d1a6127108b612d74565b9050612fe261271082048484612e27565b878760010181518110612ff157fe5b6020908102919091010152505060019093019250612f46915050565b509392505050565b61302184848484613e1a565b61302d83838684612c4d565b50505050565b6130538260018451038151811061304657fe5b6020026020010151611f7b565b61308e5760405162461bcd60e51b815260040180806020018281038252602f8152602001806145b5602f913960400191505060405180910390fd5b60005b6001835103811015613403576000808483815181106130ac57fe5b60200260200101518584600101815181106130c357fe5b6020026020010151915091506130d882611f7b565b6131135760405162461bcd60e51b815260040180806020018281038252603181526020018061449b6031913960400191505060405180910390fd5b6003546040805163a9ece1b760e01b81526001600160a01b03858116600483015284811660248301529151919092169163a9ece1b7916044808301926020929190829003018186803b15801561316857600080fd5b505afa15801561317c573d6000803e3d6000fd5b505050506040513d602081101561319257600080fd5b50516131cf5760405162461bcd60e51b815260040180806020018281038252602c815260200180614520602c913960400191505060405180910390fd5b6000806131dc84846140e3565b9150915060008886600101815181106131f157fe5b60200260200101519050600080846001600160a01b0316876001600160a01b03161461321f57826000613223565b6000835b91509150600060028b5103891061323a578961326b565b6004548b5161326b916001600160a01b03169089908e9060028e0190811061325e57fe5b6020026020010151612aff565b600454909150613285906001600160a01b03168989612aff565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156132c2576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561333357818101518382015260200161331b565b50505050905090810190601f1680156133605780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561338257600080fd5b505af1158015613396573d6000803e3d6000fd5b5050505060008311156133c6576004546133c6906133be906001600160a01b03168a8a612aff565b828886612c4d565b81156133ef576004546133ef906133e7906001600160a01b03168a8a612aff565b828785612c4d565b505060019096019550613091945050505050565b508160018351038151811061341457fe5b60200260200101516001600160a01b03168260008151811061343257fe5b60200260200101516001600160a01b0316826001600160a01b03167f3070708cdb5d7d3931be8443f49f7ec529e2bbe770b676e3c0cc40e158c5d0398660008151811061347b57fe5b60200260200101518760018851038151811061349357fe5b6020026020010151604051808381526020018281526020019250505060405180910390a4505050565b6040805160028082526060808301845292602083019080368337505060025482519293506001600160a01b03169183915060019081106134f857fe5b6001600160a01b039092166020928302919091019091015260005b6001845103811015612a0057600061271061353387848151811061182357fe5b8161353a57fe5b049050600085838151811061354b57fe5b60200260200101519050600086846001018151811061356657fe5b602002602001015190506000613592600460009054906101000a90046001600160a01b03168484612aff565b6002549091506001600160a01b0384811691161415613646576002546006546040805163012d9b4160e71b8152600481018890526001600160a01b039384166024820152918316604483015251918316916396cda0809160648082019260009290919082900301818387803b15801561360a57600080fd5b505af115801561361e573d6000803e3d6000fd5b505060065460025461364193508492506001600160a01b03918216911687612c4d565b61382a565b6004546002546001600160a01b03808416926396cda08092889288926136729290821691849116612aff565b6040518463ffffffff1660e01b815260040180848152602001836001600160a01b03166001600160a01b03168152602001826001600160a01b03166001600160a01b031681526020019350505050600060405180830381600087803b1580156136da57600080fd5b505af11580156136ee573d6000803e3d6000fd5b505060045460025460009350839250613715916001600160a01b03908116918891166141ba565b915091506000613726878484612e27565b600454600254919250613747916001600160a01b0391821691899116612aff565b6002546006546040805163012d9b4160e71b8152600481018690526001600160a01b03938416602482015291831660448301525192909116916396cda0809160648082019260009290919082900301818387803b1580156137a757600080fd5b505af11580156137bb573d6000803e3d6000fd5b50506004546002546137ea93508792506137e3916001600160a01b03908116918b9116612aff565b888a612c4d565b6004546002546138259161380c916001600160a01b03918216918a9116612aff565b6006546002546001600160a01b03918216911684612c4d565b955050505b83156138ab5760065460408051631d3793b160e21b81526004810187905290516001600160a01b03909216916374de4ec4916024808201926020929091908290030181600087803b15801561387e57600080fd5b505af1158015613892573d6000803e3d6000fd5b505050506040513d60208110156138a857600080fd5b50505b5050600190920191506135139050565b6060825167ffffffffffffffff811180156138d557600080fd5b506040519080825280602002602001820160405280156138ff578160200160208202803683370190505b509050838160018551038151811061391357fe5b60209081029190910101528251600019015b80156139fd57600084600183038151811061393c57fe5b60200260200101519050600085838151811061395457fe5b60200260200101519050600080613981600460009054906101000a90046001600160a01b031685856141ba565b9150915060006139a587878151811061399657fe5b60200260200101518484614015565b90506139d16139b66127108a612d74565b6139c283612710612dc4565b816139c957fe5b046001614288565b8760018803815181106139e057fe5b602090810291909101015250506000199093019250613925915050565b50613a1d81600081518110613a0e57fe5b60200260200101518484612ee3565b949350505050565b600480546040805163e6a4390560e01b81526001600160a01b038a811694820194909452888416602482015290516000938493849391169163e6a4390591604480820192602092909190829003018186803b158015613a8357600080fd5b505afa158015613a97573d6000803e3d6000fd5b505050506040513d6020811015613aad57600080fd5b50516001600160a01b03161415613b465760048054604080516364e329cb60e11b81526001600160a01b038c8116948201949094528a841660248201529051929091169163c9c65396916044808201926020929091908290030181600087803b158015613b1957600080fd5b505af1158015613b2d573d6000803e3d6000fd5b505050506040513d6020811015613b4357600080fd5b50505b6003546040805163a9ece1b760e01b81526001600160a01b038b811660048301528a811660248301529151919092169163a9ece1b7916044808301926020929190829003018186803b158015613b9b57600080fd5b505afa158015613baf573d6000803e3d6000fd5b505050506040513d6020811015613bc557600080fd5b5051613c025760405162461bcd60e51b81526004018080602001828103825260358152602001806143f06035913960400191505060405180910390fd5b6004546000908190613c1e906001600160a01b03168b8b6141ba565b91509150816000148015613c30575080155b15613c4057879350869250613d00565b6000613c4d8984846142d7565b9050878111613ca05785811015613c955760405162461bcd60e51b815260040180806020018281038252602681526020018061456f6026913960400191505060405180910390fd5b889450925082613cfe565b6000613cad8984866142d7565b905089811115613cb957fe5b87811015613cf85760405162461bcd60e51b81526004018080602001828103825260268152602001806144756026913960400191505060405180910390fd5b94508793505b505b600480546040805163e6a4390560e01b81526001600160a01b038e8116948201949094528c841660248201529051929091169163c9ead258913391849163e6a43905916044808301926020929190829003018186803b158015613d6257600080fd5b505afa158015613d76573d6000803e3d6000fd5b505050506040513d6020811015613d8c57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b158015613dde57600080fd5b505af1158015613df2573d6000803e3d6000fd5b505050506040513d6020811015613e0857600080fd5b50939a92995091975050505050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b60208310613e9f5780518252601f199092019160209182019101613e80565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613f01576040519150601f19603f3d011682016040523d82523d6000602084013e613f06565b606091505b5091509150818015613f34575080511580613f345750808060200190516020811015613f3157600080fd5b50515b612cdd5760405162461bcd60e51b81526004018080602001828103825260248152602001806145e46024913960400191505060405180910390fd5b6005546040805163a9059cbb60e01b81526001600160a01b038581166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b158015613fc557600080fd5b505af1158015613fd9573d6000803e3d6000fd5b505050506040513d6020811015613fef57600080fd5b5051613ff757fe5b60055461401190309084906001600160a01b031684612c4d565b5050565b60008084116140555760405162461bcd60e51b815260040180806020018281038252602c8152602001806144f4602c913960400191505060405180910390fd5b6000831180156140655750600082115b6140a05760405162461bcd60e51b81526004018080602001828103825260288152602001806144cc6028913960400191505060405180910390fd5b60006140b2848663ffffffff612dc416565b905060006140c6848763ffffffff612d7416565b9050610d3460018284816140d657fe5b049063ffffffff61428816565b600080826001600160a01b0316846001600160a01b031614156141375760405162461bcd60e51b81526004018080602001828103825260258152602001806144506025913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b03161061415757828461415a565b83835b90925090506001600160a01b038216611f65576040805162461bcd60e51b815260206004820152601e60248201527f44656d6178537761704c6962726172793a205a45524f5f414444524553530000604482015290519081900360640190fd5b60008060006141c985856140e3565b5090506000806141da888888612aff565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561421257600080fd5b505afa158015614226573d6000803e3d6000fd5b505050506040513d606081101561423c57600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506001600160a01b0387811690841614614276578082614279565b81815b90999098509650505050505050565b808201828110156110c7576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b60008084116143175760405162461bcd60e51b81526004018080602001828103825260258152602001806143ab6025913960400191505060405180910390fd5b6000831180156143275750600082115b6143625760405162461bcd60e51b81526004018080602001828103825260288152602001806144cc6028913960400191505060405180910390fd5b82614373858463ffffffff612dc416565b8161437a57fe5b0494935050505056fe44454d415820504c4154464f524d203a204558434553534956455f494e5055545f414d4f554e5444656d6178537761704c6962726172793a20494e53554646494349454e545f414d4f554e5444454d415820504c4154464f524d203a2045585049524544000000000000000044454d415820504c4154464f524d203a20414444204c4951554944495459205041495220434f4e46494720434845434b204641494c44656d6178537761704c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e5444656d6178537761704c6962726172793a204944454e544943414c5f41444452455353455344454d415820504c4154464f524d203a20494e53554646494349454e545f415f414d4f554e5444454d415820504c4154464f524d203a20434845434b20444741532f544f4b454e2056414c55452046524f4d204641494c44656d6178537761704c6962726172793a20494e53554646494349454e545f4c495155494449545944656d6178537761704c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e5444454d415820504c4154464f524d203a2053574150205041495220434f4e46494720434845434b204641494c5472616e7366657248656c7065723a204554485f5452414e534645525f4641494c454444454d415820504c4154464f524d203a20494e53554646494349454e545f425f414d4f554e5444454d415820504c4154464f524d203a20494e56414c49445f5041544800000044454d415820504c4154464f524d203a20434845434b20444741532f544f4b454e20544f2056414c5545204641494c5472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c454444454d415820504c4154464f524d203a20494e53554646494349454e545f4f55545055545f414d4f554e54a2646970667358221220d243c2f06d51a5ba6fa7411f78580fdbb14f5ed4386fe79deb46e5be08f63ddd64736f6c63430006080033
Deployed Bytecode
0x6080604052600436106101c65760003560e01c80638803dbee116100f7578063c2ceddfa11610095578063d92e82e411610064578063d92e82e414610a53578063ddd377ac14610a68578063f6f1e30614610a9b578063fb3bdb4114610ad9576101e1565b8063c2ceddfa146108b9578063cc2a9a5b14610908578063d06ca61f14610963578063d52bb6f414610a18576101e1565b80639e6c2959116100d15780639e6c2959146107ff578063a6f9dae114610814578063ad5c464814610847578063baa2abde1461085c576101e1565b80638803dbee146107195780638da5cb5b146107af57806396ed28f9146107c4576101e1565b80634a25d94a116101645780637ae06e581161013e5780637ae06e58146105d15780637ff36ab51461064a578063822abc7c146106ce57806385f8c259146106e3576101e1565b80634a25d94a1461051157806354fd4d50146105a7578063723c2e2d146105bc576101e1565b806318cbafe5116101a057806318cbafe5146102cb5780631f00ca74146103b15780632dd310001461046657806338ed17391461047b576101e1565b806302751cec146101e6578063054d50d414610252578063146278341461029a576101e1565b366101e1576005546001600160a01b031633146101df57fe5b005b600080fd5b3480156101f257600080fd5b50610239600480360360c081101561020957600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610b5d565b6040805192835260208301919091528051918290030190f35b34801561025e57600080fd5b506102886004803603606081101561027557600080fd5b5080359060208101359060400135610cf8565b60408051918252519081900360200190f35b3480156102a657600080fd5b506102af610d3e565b604080516001600160a01b039092168252519081900360200190f35b3480156102d757600080fd5b50610361600480360360a08110156102ee57600080fd5b813591602081013591810190606081016040820135600160201b81111561031457600080fd5b82018360208201111561032657600080fd5b803590602001918460208302840111600160201b8311171561034757600080fd5b91935091506001600160a01b038135169060200135610d4d565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561039d578181015183820152602001610385565b505050509050019250505060405180910390f35b3480156103bd57600080fd5b50610361600480360360408110156103d457600080fd5b81359190810190604081016020820135600160201b8111156103f557600080fd5b82018360208201111561040757600080fd5b803590602001918460208302840111600160201b8311171561042857600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110aa945050505050565b34801561047257600080fd5b506102af6110cd565b34801561048757600080fd5b50610361600480360360a081101561049e57600080fd5b813591602081013591810190606081016040820135600160201b8111156104c457600080fd5b8201836020820111156104d657600080fd5b803590602001918460208302840111600160201b831117156104f757600080fd5b91935091506001600160a01b0381351690602001356110dc565b34801561051d57600080fd5b50610361600480360360a081101561053457600080fd5b813591602081013591810190606081016040820135600160201b81111561055a57600080fd5b82018360208201111561056c57600080fd5b803590602001918460208302840111600160201b8311171561058d57600080fd5b91935091506001600160a01b038135169060200135611233565b3480156105b357600080fd5b506102886113f6565b3480156105c857600080fd5b506102af6113fc565b3480156105dd57600080fd5b5061062c600480360360e08110156105f457600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060808101359060a08101359060c0013561140b565b60408051938452602084019290925282820152519081900360600190f35b6103616004803603608081101561066057600080fd5b81359190810190604081016020820135600160201b81111561068157600080fd5b82018360208201111561069357600080fd5b803590602001918460208302840111600160201b831117156106b457600080fd5b91935091506001600160a01b038135169060200135611595565b3480156106da57600080fd5b506102af6118df565b3480156106ef57600080fd5b506102886004803603606081101561070657600080fd5b50803590602081013590604001356118ee565b34801561072557600080fd5b50610361600480360360a081101561073c57600080fd5b813591602081013591810190606081016040820135600160201b81111561076257600080fd5b82018360208201111561077457600080fd5b803590602001918460208302840111600160201b8311171561079557600080fd5b91935091506001600160a01b038135169060200135611934565b3480156107bb57600080fd5b506102af611a49565b3480156107d057600080fd5b506102af600480360360408110156107e757600080fd5b506001600160a01b0381358116916020013516611a58565b34801561080b57600080fd5b50610288611a79565b34801561082057600080fd5b506101df6004803603602081101561083757600080fd5b50356001600160a01b0316611a7f565b34801561085357600080fd5b506102af611b89565b34801561086857600080fd5b50610239600480360360e081101561087f57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135611b98565b3480156108c557600080fd5b506108f4600480360360408110156108dc57600080fd5b506001600160a01b0381358116916020013516611dd0565b604080519115158252519081900360200190f35b34801561091457600080fd5b506101df600480360360c081101561092b57600080fd5b506001600160a01b038135811691602081013582169160408201358116916060810135821691608082013581169160a0013516611e68565b34801561096f57600080fd5b506103616004803603604081101561098657600080fd5b81359190810190604081016020820135600160201b8111156109a757600080fd5b8201836020820111156109b957600080fd5b803590602001918460208302840111600160201b831117156109da57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611f2b945050505050565b348015610a2457600080fd5b5061023960048036036040811015610a3b57600080fd5b506001600160a01b0381358116916020013516611f44565b348015610a5f57600080fd5b506102af611f6c565b348015610a7457600080fd5b506108f460048036036020811015610a8b57600080fd5b50356001600160a01b0316611f7b565b61062c600480360360a0811015610ab157600080fd5b506001600160a01b0381351690602081013590604081013590606081013590608001356122aa565b61036160048036036080811015610aef57600080fd5b81359190810190604081016020820135600160201b811115610b1057600080fd5b820183602082011115610b2257600080fd5b803590602001918460208302840111600160201b83111715610b4357600080fd5b91935091506001600160a01b03813516906020013561253f565b6000808242811015610ba4576040805162461bcd60e51b815260206004820152601860248201526000805160206143d0833981519152604482015290519081900360640190fd5b600554610bc0908a906001600160a01b03168a8a8a308a611b98565b9093509150610bd089868561289d565b60055460408051632e1a7d4d60e01b81526004810185905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b158015610c1d57600080fd5b505af1158015610c31573d6000803e3d6000fd5b50505050610c3f8583612a07565b600454600554610c6891610c60916001600160a01b0391821691168c612aff565b868b86612c4d565b600454600554610c9d91610c89916001600160a01b0391821691168c612aff565b60055487906001600160a01b031685612c4d565b600554604080518581526020810185905281516001600160a01b03938416938d169233927fa8dbaaebbb025c88e9e34c84635cd8238043556e9af43fb161508c898a8e1ef9929081900390910190a450965096945050505050565b600080610d03612ce5565b90506000612710610d1f87610d1a61271086612d74565b612dc4565b81610d2657fe5b049050610d34818686612e27565b9695505050505050565b6006546001600160a01b031681565b60608142811015610d93576040805162461bcd60e51b815260206004820152601860248201526000805160206143d0833981519152604482015290519081900360640190fd5b6005546001600160a01b031686866000198101818110610daf57fe5b905060200201356001600160a01b03166001600160a01b031614610e08576040805162461bcd60e51b815260206004820152601d6024820152600080516020614595833981519152604482015290519081900360640190fd5b6000610e12612ce5565b9050610e5389888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250869250612ee3915050565b92508783600185510381518110610e6657fe5b60200260200101511015610eab5760405162461bcd60e51b815260040180806020018281038252602b815260200180614608602b913960400191505060405180910390fd5b600454600090610efa906001600160a01b031689898481610ec857fe5b905060200201356001600160a01b03168a8a6001818110610ee557fe5b905060200201356001600160a01b0316612aff565b9050610f3e88886000818110610f0c57fe5b905060200201356001600160a01b03163383612710610f318f610d1a6127108a612d74565b81610f3857fe5b04613015565b610f7d84898980806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613033915050565b60055484516001600160a01b0390911690632e1a7d4d9086906000198101908110610fa457fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610fe257600080fd5b505af1158015610ff6573d6000803e3d6000fd5b5050505061101b868560018751038151811061100e57fe5b6020026020010151612a07565b61105e8888600081811061102b57fe5b905060200201356001600160a01b03163383612710610f318960008151811061105057fe5b602002602001015188612dc4565b61109d848989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508792506134bc915050565b5050509695505050505050565b606060006110b6612ce5565b90506110c38484836138bb565b9150505b92915050565b6004546001600160a01b031681565b60608142811015611122576040805162461bcd60e51b815260206004820152601860248201526000805160206143d0833981519152604482015290519081900360640190fd5b600061112c612ce5565b905061116d89888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250869250612ee3915050565b9250878360018551038151811061118057fe5b602002602001015110156111c55760405162461bcd60e51b815260040180806020018281038252602b815260200180614608602b913960400191505060405180910390fd5b6004546000906111e2906001600160a01b031689898481610ec857fe5b90506111f488886000818110610f0c57fe5b61101b848989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508b9250613033915050565b60608142811015611279576040805162461bcd60e51b815260206004820152601860248201526000805160206143d0833981519152604482015290519081900360640190fd5b6005546001600160a01b03168686600019810181811061129557fe5b905060200201356001600160a01b03166001600160a01b0316146112ee576040805162461bcd60e51b815260206004820152601d6024820152600080516020614595833981519152604482015290519081900360640190fd5b60006112f8612ce5565b9050611339898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508692506138bb915050565b9250878360008151811061134957fe5b6020026020010151111561138e5760405162461bcd60e51b81526004018080602001828103825260278152602001806143846027913960400191505060405180910390fd5b6004546000906113ab906001600160a01b031689898481610ec857fe5b9050610f3e888860008181106113bd57fe5b905060200201356001600160a01b03163383612710610f31896000815181106113e257fe5b6020026020010151610d1a6127108a612d74565b60015481565b6002546001600160a01b031681565b60008060008342811015611454576040805162461bcd60e51b815260206004820152601860248201526000805160206143d0833981519152604482015290519081900360640190fd5b6114628b8b8b8b8b8b613a25565b6004549195509350600090611481906001600160a01b03168d8d612aff565b905061148f8c338388613e1a565b61149b8b338387613e1a565b604080516335313c2160e11b815233600482015290516001600160a01b03831691636a6278429160248083019260209291908290030181600087803b1580156114e357600080fd5b505af11580156114f7573d6000803e3d6000fd5b505050506040513d602081101561150d57600080fd5b5051925061151d33828e88612c4d565b61152933828d87612c4d565b8a6001600160a01b03168c6001600160a01b0316336001600160a01b03167fc33fbc9654f9c0dcfcbd829113bdb10afe95619bc0824bc5959ad82fd6952bd98888604051808381526020018281526020019250505060405180910390a450509750975097945050505050565b606081428110156115db576040805162461bcd60e51b815260206004820152601860248201526000805160206143d0833981519152604482015290519081900360640190fd5b6005546001600160a01b031686866000816115f257fe5b905060200201356001600160a01b03166001600160a01b03161461164b576040805162461bcd60e51b815260206004820152601d6024820152600080516020614595833981519152604482015290519081900360640190fd5b6000611655612ce5565b905061169634888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250869250612ee3915050565b925087836001855103815181106116a957fe5b602002602001015110156116ee5760405162461bcd60e51b815260040180806020018281038252602b815260200180614608602b913960400191505060405180910390fd5b60045460009061170b906001600160a01b031689898481610ec857fe5b60055485519192506001600160a01b03169063d0e30db0906127109061174a90889060009061173657fe5b6020026020010151610d1a61271088612d74565b8161175157fe5b046040518263ffffffff1660e01b81526004016000604051808303818588803b15801561177d57600080fd5b505af1158015611791573d6000803e3d6000fd5b50505050506117ba816127106117ad8760008151811061173657fe5b816117b457fe5b04613f6f565b6117f9848989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508b9250613033915050565b60055484516001600160a01b039091169063d0e30db0906127109061183190889060009061182357fe5b602002602001015186612dc4565b8161183857fe5b046040518263ffffffff1660e01b81526004016000604051808303818588803b15801561186457600080fd5b505af1158015611878573d6000803e3d6000fd5b5050505050611894816127106117ad8760008151811061182357fe5b6118d3848989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508792506134bc915050565b50505095945050505050565b6007546001600160a01b031681565b6000806118f9612ce5565b90506000611908868686614015565b905061191661271083612d74565b61192282612710612dc4565b8161192957fe5b049695505050505050565b6060814281101561197a576040805162461bcd60e51b815260206004820152601860248201526000805160206143d0833981519152604482015290519081900360640190fd5b6000611984612ce5565b90506119c5898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508692506138bb915050565b925087836000815181106119d557fe5b60200260200101511115611a1a5760405162461bcd60e51b81526004018080602001828103825260278152602001806143846027913960400191505060405180910390fd5b600454600090611a37906001600160a01b031689898481610ec857fe5b90506111f4888860008181106113bd57fe5b6000546001600160a01b031681565b600454600090611a72906001600160a01b03168484612aff565b9392505050565b61271081565b6000546001600160a01b03163314611ad3576040805162461bcd60e51b815260206004820152601260248201527127bbb730b136329d102327a92124a22222a760711b604482015290519081900360640190fd5b6001600160a01b038116611b2e576040805162461bcd60e51b815260206004820152601860248201527f4f776e61626c653a20494e56414c49445f414444524553530000000000000000604482015290519081900360640190fd5b600080546040516001600160a01b03808516939216917fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c91a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031681565b6000808242811015611bdf576040805162461bcd60e51b815260206004820152601860248201526000805160206143d0833981519152604482015290519081900360640190fd5b600454600090611bf9906001600160a01b03168c8c612aff565b60408051633dae446f60e21b81523360048201526001600160a01b038981166024830152604482018d905282519394508c938f938f9360009384939089169263f6b911bc926064808201939182900301818787803b158015611c5a57600080fd5b505af1158015611c6e573d6000803e3d6000fd5b505050506040513d6040811015611c8457600080fd5b50805160209091015190925090506000611c9e85856140e3565b509050806001600160a01b0316856001600160a01b031614611cc1578183611cc4565b82825b909a509850611cd5878d878d612c4d565b611ce1878d868c612c4d565b8d8a1015611d205760405162461bcd60e51b81526004018080602001828103825260268152602001806144756026913960400191505060405180910390fd5b8c891015611d5f5760405162461bcd60e51b815260040180806020018281038252602681526020018061456f6026913960400191505060405180910390fd5b836001600160a01b0316856001600160a01b0316336001600160a01b03167fa8dbaaebbb025c88e9e34c84635cd8238043556e9af43fb161508c898a8e1ef98d8d604051808381526020018281526020019250505060405180910390a4505050505050505097509795505050505050565b600480546040805163e6a4390560e01b81526001600160a01b0386811694820194909452848416602482015290516000938493169163e6a43905916044808301926020929190829003018186803b158015611e2a57600080fd5b505afa158015611e3e573d6000803e3d6000fd5b505050506040513d6020811015611e5457600080fd5b50516001600160a01b031614159392505050565b6000546001600160a01b03163314611ebc576040805162461bcd60e51b815260206004820152601260248201527127bbb730b136329d102327a92124a22222a760711b604482015290519081900360640190fd5b600280546001600160a01b03199081166001600160a01b0398891617909155600380548216968816969096179095556004805486169487169490941790935560058054851692861692909217909155600680548416918516919091179055600780549092169216919091179055565b60606000611f37612ce5565b90506110c3848483612ee3565b6004546000908190611f60906001600160a01b031685856141ba565b915091505b9250929050565b6003546001600160a01b031681565b6002546000906001600160a01b0383811691161480611fa757506005546001600160a01b038381169116145b15611fb4575060016122a5565b600354604080516360ccef1960e11b81527f544f4b454e5f544f5f444741535f504149525f4d494e5f50455243454e540000600482015290516000926001600160a01b03169163c199de32916024808301926020929190829003018186803b15801561201f57600080fd5b505afa158015612033573d6000803e3d6000fd5b505050506040513d602081101561204957600080fd5b505160055460025491925061206a916001600160a01b039182169116611dd0565b6120785760009150506122a5565b60025461208e906001600160a01b031684611dd0565b61209c5760009150506122a5565b6003546002546040805163a9ece1b760e01b81526001600160a01b03928316600482015286831660248201529051919092169163a9ece1b7916044808301926020929190829003018186803b1580156120f457600080fd5b505afa158015612108573d6000803e3d6000fd5b505050506040513d602081101561211e57600080fd5b505180156121ac57506003546005546040805163a9ece1b760e01b81526001600160a01b03928316600482015286831660248201529051919092169163a9ece1b7916044808301926020929190829003018186803b15801561217f57600080fd5b505afa158015612193573d6000803e3d6000fd5b505050506040513d60208110156121a957600080fd5b50515b6121ba5760009150506122a5565b6005546121d0906001600160a01b031684611dd0565b6121de5760019150506122a5565b806121ed5760019150506122a5565b60045460025460009161220d916001600160a01b039182169116866141ba565b50600454600554919250600091612231916001600160a01b039081169116876141ba565b50600454600554600254929350600092839261225d926001600160a01b039182169290821691166141ba565b9150915060008161226e8685612dc4565b8161227557fe5b049050600061271061229061228a8488614288565b89612dc4565b8161229757fe5b049091101596505050505050505b919050565b600080600083428110156122f3576040805162461bcd60e51b815260206004820152601860248201526000805160206143d0833981519152604482015290519081900360640190fd5b60055461230e908a906001600160a01b03168a348b8b613a25565b600454600554929650909450600091612335916001600160a01b03908116918d9116612aff565b90506123438a338388613e1a565b600560009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b15801561239357600080fd5b505af11580156123a7573d6000803e3d6000fd5b50506005546040805163a9059cbb60e01b81526001600160a01b038781166004830152602482018b9052915191909216945063a9059cbb9350604480830193506020928290030181600087803b15801561240057600080fd5b505af1158015612414573d6000803e3d6000fd5b505050506040513d602081101561242a57600080fd5b505161243257fe5b604080516335313c2160e11b815233600482015290516001600160a01b03831691636a6278429160248083019260209291908290030181600087803b15801561247a57600080fd5b505af115801561248e573d6000803e3d6000fd5b505050506040513d60208110156124a457600080fd5b50516005549093506124c390339083906001600160a01b031687612c4d565b6124cf33828c88612c4d565b600554604080518781526020810187905281516001600160a01b03938416938e169233927fc33fbc9654f9c0dcfcbd829113bdb10afe95619bc0824bc5959ad82fd6952bd9929081900390910190a4833411156125325761253233853403612a07565b5050955095509592505050565b60608142811015612585576040805162461bcd60e51b815260206004820152601860248201526000805160206143d0833981519152604482015290519081900360640190fd5b6005546001600160a01b0316868660008161259c57fe5b905060200201356001600160a01b03166001600160a01b0316146125f5576040805162461bcd60e51b815260206004820152601d6024820152600080516020614595833981519152604482015290519081900360640190fd5b60006125ff612ce5565b9050612640888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508692506138bb915050565b9250348360008151811061265057fe5b602002602001015111156126955760405162461bcd60e51b81526004018080602001828103825260278152602001806143846027913960400191505060405180910390fd5b60055483516001600160a01b039091169063d0e30db090612710906126d39087906000906126bf57fe5b6020026020010151610d1a61271087612d74565b816126da57fe5b046040518263ffffffff1660e01b81526004016000604051808303818588803b15801561270657600080fd5b505af115801561271a573d6000803e3d6000fd5b50506004546000935061273d92506001600160a01b0316905089898481610ec857fe5b9050612756816127106117ad8760008151811061173657fe5b612795848989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508b9250613033915050565b60055484516001600160a01b039091169063d0e30db090612710906127bf90889060009061182357fe5b816127c657fe5b046040518263ffffffff1660e01b81526004016000604051808303818588803b1580156127f257600080fd5b505af1158015612806573d6000803e3d6000fd5b5050505050612822816127106117ad8760008151811061182357fe5b612861848989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508792506134bc915050565b8360008151811061286e57fe5b60200260200101513411156118d3576118d3338560008151811061288e57fe5b60200260200101513403612a07565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b6020831061291a5780518252601f1990920191602091820191016128fb565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461297c576040519150601f19603f3d011682016040523d82523d6000602084013e612981565b606091505b50915091508180156129af5750805115806129af57508080602001905160208110156129ac57600080fd5b50515b612a00576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b60208310612a535780518252601f199092019160209182019101612a34565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612ab5576040519150601f19603f3d011682016040523d82523d6000602084013e612aba565b606091505b5050905080612afa5760405162461bcd60e51b815260040180806020018281038252602381526020018061454c6023913960400191505060405180910390fd5b505050565b6000806000612b0e85856140e3565b915091506000828260405160200180836001600160a01b03166001600160a01b031660601b8152601401826001600160a01b03166001600160a01b031660601b815260140192505050604051602081830303815290604052805190602001209050600060ff60f81b88838a6001600160a01b0316637c7f84ee6040518163ffffffff1660e01b815260040160206040518083038186803b158015612bb157600080fd5b505afa158015612bc5573d6000803e3d6000fd5b505050506040513d6020811015612bdb57600080fd5b5051604080516001600160f81b03199590951660208087019190915260609490941b6bffffffffffffffffffffffff191660218601526035850192909252605580850191909152815180850390910181526075909301905281519101206001600160a01b031698975050505050505050565b60075460408051632984b7a960e21b81526001600160a01b03878116600483015286811660248301528581166044830152606482018590529151919092169163a612dea49160848083019260209291908290030181600087803b158015612cb357600080fd5b505af1158015612cc7573d6000803e3d6000fd5b505050506040513d6020811015612cdd57600080fd5b505050505050565b600354604080516360ccef1960e11b81526f14d5d05417d1915157d4115490d1539560821b600482015290516000926001600160a01b03169163c199de32916024808301926020929190829003018186803b158015612d4357600080fd5b505afa158015612d57573d6000803e3d6000fd5b505050506040513d6020811015612d6d57600080fd5b5051905090565b808203828111156110c7576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6000811580612ddf57505080820282828281612ddc57fe5b04145b6110c7576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b6000808411612e675760405162461bcd60e51b815260040180806020018281038252602b815260200180614425602b913960400191505060405180910390fd5b600083118015612e775750600082115b612eb25760405162461bcd60e51b81526004018080602001828103825260288152602001806144cc6028913960400191505060405180910390fd5b6000612ec4858463ffffffff612dc416565b90506000612ed8858763ffffffff61428816565b905080828161192957fe5b6060825167ffffffffffffffff81118015612efd57600080fd5b50604051908082528060200260200182016040528015612f27578160200160208202803683370190505b5090508381600081518110612f3857fe5b602090810291909101015260005b600184510381101561300d576000848281518110612f6057fe5b602002602001015190506000858360010181518110612f7b57fe5b60200260200101519050600080612fa8600460009054906101000a90046001600160a01b031685856141ba565b915091506000612fd1878781518110612fbd57fe5b6020026020010151610d1a6127108b612d74565b9050612fe261271082048484612e27565b878760010181518110612ff157fe5b6020908102919091010152505060019093019250612f46915050565b509392505050565b61302184848484613e1a565b61302d83838684612c4d565b50505050565b6130538260018451038151811061304657fe5b6020026020010151611f7b565b61308e5760405162461bcd60e51b815260040180806020018281038252602f8152602001806145b5602f913960400191505060405180910390fd5b60005b6001835103811015613403576000808483815181106130ac57fe5b60200260200101518584600101815181106130c357fe5b6020026020010151915091506130d882611f7b565b6131135760405162461bcd60e51b815260040180806020018281038252603181526020018061449b6031913960400191505060405180910390fd5b6003546040805163a9ece1b760e01b81526001600160a01b03858116600483015284811660248301529151919092169163a9ece1b7916044808301926020929190829003018186803b15801561316857600080fd5b505afa15801561317c573d6000803e3d6000fd5b505050506040513d602081101561319257600080fd5b50516131cf5760405162461bcd60e51b815260040180806020018281038252602c815260200180614520602c913960400191505060405180910390fd5b6000806131dc84846140e3565b9150915060008886600101815181106131f157fe5b60200260200101519050600080846001600160a01b0316876001600160a01b03161461321f57826000613223565b6000835b91509150600060028b5103891061323a578961326b565b6004548b5161326b916001600160a01b03169089908e9060028e0190811061325e57fe5b6020026020010151612aff565b600454909150613285906001600160a01b03168989612aff565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156132c2576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561333357818101518382015260200161331b565b50505050905090810190601f1680156133605780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561338257600080fd5b505af1158015613396573d6000803e3d6000fd5b5050505060008311156133c6576004546133c6906133be906001600160a01b03168a8a612aff565b828886612c4d565b81156133ef576004546133ef906133e7906001600160a01b03168a8a612aff565b828785612c4d565b505060019096019550613091945050505050565b508160018351038151811061341457fe5b60200260200101516001600160a01b03168260008151811061343257fe5b60200260200101516001600160a01b0316826001600160a01b03167f3070708cdb5d7d3931be8443f49f7ec529e2bbe770b676e3c0cc40e158c5d0398660008151811061347b57fe5b60200260200101518760018851038151811061349357fe5b6020026020010151604051808381526020018281526020019250505060405180910390a4505050565b6040805160028082526060808301845292602083019080368337505060025482519293506001600160a01b03169183915060019081106134f857fe5b6001600160a01b039092166020928302919091019091015260005b6001845103811015612a0057600061271061353387848151811061182357fe5b8161353a57fe5b049050600085838151811061354b57fe5b60200260200101519050600086846001018151811061356657fe5b602002602001015190506000613592600460009054906101000a90046001600160a01b03168484612aff565b6002549091506001600160a01b0384811691161415613646576002546006546040805163012d9b4160e71b8152600481018890526001600160a01b039384166024820152918316604483015251918316916396cda0809160648082019260009290919082900301818387803b15801561360a57600080fd5b505af115801561361e573d6000803e3d6000fd5b505060065460025461364193508492506001600160a01b03918216911687612c4d565b61382a565b6004546002546001600160a01b03808416926396cda08092889288926136729290821691849116612aff565b6040518463ffffffff1660e01b815260040180848152602001836001600160a01b03166001600160a01b03168152602001826001600160a01b03166001600160a01b031681526020019350505050600060405180830381600087803b1580156136da57600080fd5b505af11580156136ee573d6000803e3d6000fd5b505060045460025460009350839250613715916001600160a01b03908116918891166141ba565b915091506000613726878484612e27565b600454600254919250613747916001600160a01b0391821691899116612aff565b6002546006546040805163012d9b4160e71b8152600481018690526001600160a01b03938416602482015291831660448301525192909116916396cda0809160648082019260009290919082900301818387803b1580156137a757600080fd5b505af11580156137bb573d6000803e3d6000fd5b50506004546002546137ea93508792506137e3916001600160a01b03908116918b9116612aff565b888a612c4d565b6004546002546138259161380c916001600160a01b03918216918a9116612aff565b6006546002546001600160a01b03918216911684612c4d565b955050505b83156138ab5760065460408051631d3793b160e21b81526004810187905290516001600160a01b03909216916374de4ec4916024808201926020929091908290030181600087803b15801561387e57600080fd5b505af1158015613892573d6000803e3d6000fd5b505050506040513d60208110156138a857600080fd5b50505b5050600190920191506135139050565b6060825167ffffffffffffffff811180156138d557600080fd5b506040519080825280602002602001820160405280156138ff578160200160208202803683370190505b509050838160018551038151811061391357fe5b60209081029190910101528251600019015b80156139fd57600084600183038151811061393c57fe5b60200260200101519050600085838151811061395457fe5b60200260200101519050600080613981600460009054906101000a90046001600160a01b031685856141ba565b9150915060006139a587878151811061399657fe5b60200260200101518484614015565b90506139d16139b66127108a612d74565b6139c283612710612dc4565b816139c957fe5b046001614288565b8760018803815181106139e057fe5b602090810291909101015250506000199093019250613925915050565b50613a1d81600081518110613a0e57fe5b60200260200101518484612ee3565b949350505050565b600480546040805163e6a4390560e01b81526001600160a01b038a811694820194909452888416602482015290516000938493849391169163e6a4390591604480820192602092909190829003018186803b158015613a8357600080fd5b505afa158015613a97573d6000803e3d6000fd5b505050506040513d6020811015613aad57600080fd5b50516001600160a01b03161415613b465760048054604080516364e329cb60e11b81526001600160a01b038c8116948201949094528a841660248201529051929091169163c9c65396916044808201926020929091908290030181600087803b158015613b1957600080fd5b505af1158015613b2d573d6000803e3d6000fd5b505050506040513d6020811015613b4357600080fd5b50505b6003546040805163a9ece1b760e01b81526001600160a01b038b811660048301528a811660248301529151919092169163a9ece1b7916044808301926020929190829003018186803b158015613b9b57600080fd5b505afa158015613baf573d6000803e3d6000fd5b505050506040513d6020811015613bc557600080fd5b5051613c025760405162461bcd60e51b81526004018080602001828103825260358152602001806143f06035913960400191505060405180910390fd5b6004546000908190613c1e906001600160a01b03168b8b6141ba565b91509150816000148015613c30575080155b15613c4057879350869250613d00565b6000613c4d8984846142d7565b9050878111613ca05785811015613c955760405162461bcd60e51b815260040180806020018281038252602681526020018061456f6026913960400191505060405180910390fd5b889450925082613cfe565b6000613cad8984866142d7565b905089811115613cb957fe5b87811015613cf85760405162461bcd60e51b81526004018080602001828103825260268152602001806144756026913960400191505060405180910390fd5b94508793505b505b600480546040805163e6a4390560e01b81526001600160a01b038e8116948201949094528c841660248201529051929091169163c9ead258913391849163e6a43905916044808301926020929190829003018186803b158015613d6257600080fd5b505afa158015613d76573d6000803e3d6000fd5b505050506040513d6020811015613d8c57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b158015613dde57600080fd5b505af1158015613df2573d6000803e3d6000fd5b505050506040513d6020811015613e0857600080fd5b50939a92995091975050505050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b60208310613e9f5780518252601f199092019160209182019101613e80565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613f01576040519150601f19603f3d011682016040523d82523d6000602084013e613f06565b606091505b5091509150818015613f34575080511580613f345750808060200190516020811015613f3157600080fd5b50515b612cdd5760405162461bcd60e51b81526004018080602001828103825260248152602001806145e46024913960400191505060405180910390fd5b6005546040805163a9059cbb60e01b81526001600160a01b038581166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b158015613fc557600080fd5b505af1158015613fd9573d6000803e3d6000fd5b505050506040513d6020811015613fef57600080fd5b5051613ff757fe5b60055461401190309084906001600160a01b031684612c4d565b5050565b60008084116140555760405162461bcd60e51b815260040180806020018281038252602c8152602001806144f4602c913960400191505060405180910390fd5b6000831180156140655750600082115b6140a05760405162461bcd60e51b81526004018080602001828103825260288152602001806144cc6028913960400191505060405180910390fd5b60006140b2848663ffffffff612dc416565b905060006140c6848763ffffffff612d7416565b9050610d3460018284816140d657fe5b049063ffffffff61428816565b600080826001600160a01b0316846001600160a01b031614156141375760405162461bcd60e51b81526004018080602001828103825260258152602001806144506025913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b03161061415757828461415a565b83835b90925090506001600160a01b038216611f65576040805162461bcd60e51b815260206004820152601e60248201527f44656d6178537761704c6962726172793a205a45524f5f414444524553530000604482015290519081900360640190fd5b60008060006141c985856140e3565b5090506000806141da888888612aff565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561421257600080fd5b505afa158015614226573d6000803e3d6000fd5b505050506040513d606081101561423c57600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506001600160a01b0387811690841614614276578082614279565b81815b90999098509650505050505050565b808201828110156110c7576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b60008084116143175760405162461bcd60e51b81526004018080602001828103825260258152602001806143ab6025913960400191505060405180910390fd5b6000831180156143275750600082115b6143625760405162461bcd60e51b81526004018080602001828103825260288152602001806144cc6028913960400191505060405180910390fd5b82614373858463ffffffff612dc416565b8161437a57fe5b0494935050505056fe44454d415820504c4154464f524d203a204558434553534956455f494e5055545f414d4f554e5444656d6178537761704c6962726172793a20494e53554646494349454e545f414d4f554e5444454d415820504c4154464f524d203a2045585049524544000000000000000044454d415820504c4154464f524d203a20414444204c4951554944495459205041495220434f4e46494720434845434b204641494c44656d6178537761704c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e5444656d6178537761704c6962726172793a204944454e544943414c5f41444452455353455344454d415820504c4154464f524d203a20494e53554646494349454e545f415f414d4f554e5444454d415820504c4154464f524d203a20434845434b20444741532f544f4b454e2056414c55452046524f4d204641494c44656d6178537761704c6962726172793a20494e53554646494349454e545f4c495155494449545944656d6178537761704c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e5444454d415820504c4154464f524d203a2053574150205041495220434f4e46494720434845434b204641494c5472616e7366657248656c7065723a204554485f5452414e534645525f4641494c454444454d415820504c4154464f524d203a20494e53554646494349454e545f425f414d4f554e5444454d415820504c4154464f524d203a20494e56414c49445f5041544800000044454d415820504c4154464f524d203a20434845434b20444741532f544f4b454e20544f2056414c5545204641494c5472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c454444454d415820504c4154464f524d203a20494e53554646494349454e545f4f55545055545f414d4f554e54a2646970667358221220d243c2f06d51a5ba6fa7411f78580fdbb14f5ed4386fe79deb46e5be08f63ddd64736f6c63430006080033
Deployed Bytecode Sourcemap
13223:23130:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14153:4;;-1:-1:-1;;;;;14153:4:0;14139:10;:18;14132:26;;;;13223:23130;;12:1:-1;9;2:12;20328:947:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20328:947:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20328:947:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;35069:404;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35069:404:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;35069:404:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;13403:25;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13403:25:0;;;:::i;:::-;;;;-1:-1:-1;;;;;13403:25:0;;;;;;;;;;;;;;29771:1172;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29771:1172:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;29771:1172:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;29771:1172:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;29771:1172:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;29771:1172:0;;-1:-1:-1;29771:1172:0;-1:-1:-1;;;;;;29771:1172:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;29771:1172:0;;;;;;;;;;;;;;;;;36125:225;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36125:225:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;36125:225:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;36125:225:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;36125:225:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;36125:225:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;36125:225:0;;-1:-1:-1;36125:225:0;;-1:-1:-1;;;;;36125:225:0:i;13348:22::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13348:22:0;;;:::i;27167:946::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27167:946:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27167:946:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27167:946:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27167:946:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;27167:946:0;;-1:-1:-1;27167:946:0;-1:-1:-1;;;;;;27167:946:0;;;;;;;;:::i;31887:1152::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31887:1152:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31887:1152:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;31887:1152:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31887:1152:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31887:1152:0;;-1:-1:-1;31887:1152:0;-1:-1:-1;;;;;;31887:1152:0;;;;;;;;:::i;13264:23::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13264:23:0;;;:::i;13294:19::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13294:19:0;;;:::i;17001:990::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17001:990:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;17001:990:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;28583:1180;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28583:1180:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28583:1180:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28583:1180:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;28583:1180:0;;-1:-1:-1;28583:1180:0;-1:-1:-1;;;;;;28583:1180:0;;;;;;;;:::i;13435:32::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13435:32:0;;;:::i;35481:403::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35481:403:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;35481:403:0;;;;;;;;;;;;:::i;30951:928::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30951:928:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30951:928:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30951:928:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30951:928:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30951:928:0;;-1:-1:-1;30951:928:0;-1:-1:-1;;;;;;30951:928:0;;;;;;;;:::i;359:20::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;359:20:0;;;:::i;34907:154::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34907:154:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;34907:154:0;;;;;;;;;;:::i;13474:51::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13474:51:0;;;:::i;645:210::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;645:210:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;645:210:0;-1:-1:-1;;;;;645:210:0;;:::i;13377:19::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13377:19:0;;;:::i;19225:1095::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19225:1095:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19225:1095:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;34556:164::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34556:164:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;34556:164:0;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;14311:408;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14311:408:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;14311:408:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;35892:225::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35892:225:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;35892:225:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;35892:225:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;35892:225:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;35892:225:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;35892:225:0;;-1:-1:-1;35892:225:0;;-1:-1:-1;;;;;35892:225:0:i;34728:171::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34728:171:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;34728:171:0;;;;;;;;;;:::i;13320:21::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13320:21:0;;;:::i;22907:1078::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22907:1078:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;22907:1078:0;-1:-1:-1;;;;;22907:1078:0;;:::i;17999:1218::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;17999:1218:0;;;;;;;;;;;;;;;;;;;;;;;:::i;33047:1259::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;33047:1259:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33047:1259:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33047:1259:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;33047:1259:0;;-1:-1:-1;33047:1259:0;-1:-1:-1;;;;;;33047:1259:0;;;;;;;;:::i;20328:947::-;20560:19;20581:17;20541:8;14239:15;14227:8;:27;;14219:64;;;;;-1:-1:-1;;;14219:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14219:64:0;;;;;;;;;;;;;;;20688:4:::1;::::0;20638:196:::1;::::0;20668:5;;-1:-1:-1;;;;;20688:4:0::1;20707:9:::0;20731:14;20760:12;20795:4:::1;20815:8:::0;20638:15:::1;:196::i;:::-;20611:223:::0;;-1:-1:-1;20611:223:0;-1:-1:-1;20845:51:0::1;20873:5:::0;20880:2;20611:223;20845:27:::1;:51::i;:::-;20913:4;::::0;20907:31:::1;::::0;;-1:-1:-1;;;20907:31:0;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;;;;;20913:4:0;;::::1;::::0;20907:20:::1;::::0;:31;;;;;20913:4:::1;::::0;20907:31;;;;;;;;20913:4;;20907:31;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20907:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20907:31:0;;;;20949:45;20980:2;20984:9;20949:30;:45::i;:::-;21046:7;::::0;21055:4:::1;::::0;21005:87:::1;::::0;21021:46:::1;::::0;-1:-1:-1;;;;;21046:7:0;;::::1;::::0;21055:4:::1;21061:5:::0;21021:24:::1;:46::i;:::-;21069:2;21073:5;21080:11;21005:15;:87::i;:::-;21144:7;::::0;21153:4:::1;::::0;21103:84:::1;::::0;21119:46:::1;::::0;-1:-1:-1;;;;;21144:7:0;;::::1;::::0;21153:4:::1;21159:5:::0;21119:24:::1;:46::i;:::-;21171:4;::::0;21167:2;;-1:-1:-1;;;;;21171:4:0::1;21177:9:::0;21103:15:::1;:84::i;:::-;21238:4;::::0;21203:64:::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;;;;;21238:4:0;;::::1;::::0;21203:64;::::1;::::0;21219:10:::1;::::0;21203:64:::1;::::0;;;;;;;;;::::1;20328:947:::0;;;;;;;;;;:::o;35069:404::-;35203:17;35233:15;35251:20;:18;:20::i;:::-;35233:38;;35282:14;13520:5;35299:66;35312:8;35322:42;13520:5;35356:7;35322:12;:42::i;:::-;35299:12;:66::i;:::-;:88;;;;;;35282:105;;35405:60;35435:6;35443:9;35454:10;35405:29;:60::i;:::-;35398:67;35069:404;-1:-1:-1;;;;;;35069:404:0:o;13403:25::-;;;-1:-1:-1;;;;;13403:25:0;;:::o;29771:1172::-;29984:24;29965:8;14239:15;14227:8;:27;;14219:64;;;;;-1:-1:-1;;;14219:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14219:64:0;;;;;;;;;;;;;;;30054:4:::1;::::0;-1:-1:-1;;;;;30054:4:0::1;30029::::0;;-1:-1:-1;;30034:15:0;;30029:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;30029:21:0::1;-1:-1:-1::0;;;;;30029:29:0::1;;30021:71;;;::::0;;-1:-1:-1;;;30021:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;30021:71:0;;;;;;;;;;;;;::::1;;30103:15;30121:20;:18;:20::i;:::-;30103:38;;30162:39;30177:8;30187:4;;30162:39;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30193:7:0;;-1:-1:-1;30162:14:0::1;::::0;-1:-1:-1;;30162:39:0:i:1;:::-;30152:49;;30251:12;30220:7;30245:1;30228:7;:14;:18;30220:27;;;;;;;;;;;;;;:43;;30212:99;;;;-1:-1:-1::0;;;30212:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30362:7;::::0;30322:12:::1;::::0;30337:51:::1;::::0;-1:-1:-1;;;;;30362:7:0::1;30371:4:::0;;30322:12;30371:7;::::1;;;;;;;;;;-1:-1:-1::0;;;;;30371:7:0::1;30380:4;;30385:1;30380:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30380:7:0::1;30337:24;:51::i;:::-;30322:66;;30399:198;30432:4;;30437:1;30432:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30432:7:0::1;30454:10;30479:4;13520:5;30498:66;30511:8;30521:42;13520:5;30555:7;30521:12;:42::i;30498:66::-;:88;;;;;;30399:18;:198::i;:::-;30608:35;30614:7;30623:4;;30608:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30637:4:0::1;::::0;-1:-1:-1;30608:5:0::1;::::0;-1:-1:-1;;30608:35:0:i:1;:::-;30660:4;::::0;30683:14;;-1:-1:-1;;;;;30660:4:0;;::::1;::::0;30654:20:::1;::::0;30675:7;;-1:-1:-1;;30683:18:0;;;30675:27;::::1;;;;;;;;;;;30654:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30654:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30654:49:0;;;;30714:63;30745:2;30749:7;30774:1;30757:7;:14;:18;30749:27;;;;;;;;;;;;;;30714:30;:63::i;:::-;30790:102;30809:4;;30814:1;30809:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30809:7:0::1;30818:10;30830:4;13520:5;30836:33;30849:7;30857:1;30849:10;;;;;;;;;;;;;;30861:7;30836:12;:33::i;30790:102::-;30903:32;30912:7;30921:4;;30903:32;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30927:7:0;;-1:-1:-1;30903:8:0::1;::::0;-1:-1:-1;;30903:32:0:i:1;:::-;14294:1;;29771:1172:::0;;;;;;;;;:::o;36125:225::-;36210:24;36247:15;36265:20;:18;:20::i;:::-;36247:38;;36303:39;36317:9;36328:4;36334:7;36303:13;:39::i;:::-;36296:46;;;36125:225;;;;;:::o;13348:22::-;;;-1:-1:-1;;;;;13348:22:0;;:::o;27167:946::-;27383:24;27364:8;14239:15;14227:8;:27;;14219:64;;;;;-1:-1:-1;;;14219:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14219:64:0;;;;;;;;;;;;;;;27420:15:::1;27438:20;:18;:20::i;:::-;27420:38;;27479:39;27494:8;27504:4;;27479:39;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27510:7:0;;-1:-1:-1;27479:14:0::1;::::0;-1:-1:-1;;27479:39:0:i:1;:::-;27469:49;;27568:12;27537:7;27562:1;27545:7;:14;:18;27537:27;;;;;;;;;;;;;;:43;;27529:99;;;;-1:-1:-1::0;;;27529:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27679:7;::::0;27639:12:::1;::::0;27654:51:::1;::::0;-1:-1:-1;;;;;27679:7:0::1;27688:4:::0;;27639:12;27688:7;::::1;;;27654:51;27639:66;;27716:198;27749:4;;27754:1;27749:7;;;;;;27716:198;27925:24;27931:7;27940:4;;27925:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27946:2:0;;-1:-1:-1;27925:5:0::1;::::0;-1:-1:-1;;27925:24:0:i:1;31887:1152::-:0;32100:24;32081:8;14239:15;14227:8;:27;;14219:64;;;;;-1:-1:-1;;;14219:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14219:64:0;;;;;;;;;;;;;;;32170:4:::1;::::0;-1:-1:-1;;;;;32170:4:0::1;32145::::0;;-1:-1:-1;;32150:15:0;;32145:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32145:21:0::1;-1:-1:-1::0;;;;;32145:29:0::1;;32137:71;;;::::0;;-1:-1:-1;;;32137:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;32137:71:0;;;;;;;;;;;;;::::1;;32219:15;32237:20;:18;:20::i;:::-;32219:38;;32278:39;32292:9;32303:4;;32278:39;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32309:7:0;;-1:-1:-1;32278:13:0::1;::::0;-1:-1:-1;;32278:39:0:i:1;:::-;32268:49;;32350:11;32336:7;32344:1;32336:10;;;;;;;;;;;;;;:25;;32328:77;;;;-1:-1:-1::0;;;32328:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32456:7;::::0;32416:12:::1;::::0;32431:51:::1;::::0;-1:-1:-1;;;;;32456:7:0::1;32465:4:::0;;32416:12;32465:7;::::1;;;32431:51;32416:66;;32493:200;32526:4;;32531:1;32526:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;32526:7:0::1;32548:10;32573:4;13520:5;32592:68;32605:7;32613:1;32605:10;;;;;;;;;;;;;;32617:42;13520:5;32651:7;32617:12;:42::i;13264:23::-:0;;;;:::o;13294:19::-;;;-1:-1:-1;;;;;13294:19:0;;:::o;17001:990::-;17293:16;17324;17355:18;17251:8;14239:15;14227:8;:27;;14219:64;;;;;-1:-1:-1;;;14219:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14219:64:0;;;;;;;;;;;;;;;17424:71:::1;17438:6;17446;17454:7;17463;17472:10;17484;17424:13;:71::i;:::-;17546:7;::::0;17401:94;;-1:-1:-1;17401:94:0;-1:-1:-1;17506:12:0::1;::::0;17521:49:::1;::::0;-1:-1:-1;;;;;17546:7:0::1;17555:6:::0;17563;17521:24:::1;:49::i;:::-;17506:64;;17581:67;17613:6;17621:10;17633:4;17639:8;17581:31;:67::i;:::-;17659;17691:6;17699:10;17711:4;17717:8;17659:31;:67::i;:::-;17750:33;::::0;;-1:-1:-1;;;17750:33:0;;17772:10:::1;17750:33;::::0;::::1;::::0;;;-1:-1:-1;;;;;17750:21:0;::::1;::::0;::::1;::::0;:33;;;;;::::1;::::0;;;;;;;;-1:-1:-1;17750:21:0;:33;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;17750:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;17750:33:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;17750:33:0;;-1:-1:-1;17794:51:0::1;17810:10;17822:4:::0;17828:6;17836:8;17794:15:::1;:51::i;:::-;17856;17872:10;17884:4;17890:6;17898:8;17856:15;:51::i;:::-;17956:6;-1:-1:-1::0;;;;;17923:60:0::1;17948:6;-1:-1:-1::0;;;;;17923:60:0::1;17936:10;-1:-1:-1::0;;;;;17923:60:0::1;;17964:8;17974;17923:60;;;;;;;;;;;;;;;;;;;;;;;;14294:1;17001:990:::0;;;;;;;;;;;;:::o;28583:1180::-;28777:24;28758:8;14239:15;14227:8;:27;;14219:64;;;;;-1:-1:-1;;;14219:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14219:64:0;;;;;;;;;;;;;;;28833:4:::1;::::0;-1:-1:-1;;;;;28833:4:0::1;28822::::0;;28833::::1;28822:7:::0;::::1;;;;;;;;;;-1:-1:-1::0;;;;;28822:7:0::1;-1:-1:-1::0;;;;;28822:15:0::1;;28814:57;;;::::0;;-1:-1:-1;;;28814:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28814:57:0;;;;;;;;;;;;;::::1;;28882:15;28900:20;:18;:20::i;:::-;28882:38;;28941:40;28956:9;28967:4;;28941:40;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28973:7:0;;-1:-1:-1;28941:14:0::1;::::0;-1:-1:-1;;28941:40:0:i:1;:::-;28931:50;;29031:12;29000:7;29025:1;29008:7;:14;:18;29000:27;;;;;;;;;;;;;;:43;;28992:99;;;;-1:-1:-1::0;;;28992:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29142:7;::::0;29102:12:::1;::::0;29117:51:::1;::::0;-1:-1:-1;;;;;29142:7:0::1;29151:4:::0;;29102:12;29151:7;::::1;;;29117:51;29185:4;::::0;29233:10;;29102:66;;-1:-1:-1;;;;;;29185:4:0::1;::::0;29179:19:::1;::::0;13520:5:::1;::::0;29220:68:::1;::::0;29233:7;;29185:4:::1;::::0;29233:10:::1;;;;;;;;;;29245:42;13520:5;29279:7;29245:12;:42::i;29220:68::-;:90;;;;;;29179:144;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29179:144:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29179:144:0;;;;;29334:153;29367:4;13520:5;29386:68;29399:7;29407:1;29399:10;;;;;;;29386:68;:90;;;;;;29334:18;:153::i;:::-;29498:24;29504:7;29513:4;;29498:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29519:2:0;;-1:-1:-1;29498:5:0::1;::::0;-1:-1:-1;;29498:24:0:i:1;:::-;29541:4;::::0;29575:10;;-1:-1:-1;;;;;29541:4:0;;::::1;::::0;29535:19:::1;::::0;13520:5:::1;::::0;29562:33:::1;::::0;29575:7;;29541:4:::1;::::0;29575:10:::1;;;;;;;;;;29587:7;29562:12;:33::i;:::-;:55;;;;;;29535:85;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29535:85:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29535:85:0;;;;;29631:81;29650:4;13520:5;29656:33;29669:7;29677:1;29669:10;;;;;;;29631:81;29723:32;29732:7;29741:4;;29723:32;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29747:7:0;;-1:-1:-1;29723:8:0::1;::::0;-1:-1:-1;;29723:32:0:i:1;:::-;14294:1;;28583:1180:::0;;;;;;;;:::o;13435:32::-;;;-1:-1:-1;;;;;13435:32:0;;:::o;35481:403::-;35615:16;35644:15;35662:20;:18;:20::i;:::-;35644:38;;35693:14;35710:62;35739:9;35750;35761:10;35710:28;:62::i;:::-;35693:79;;35834:42;13520:5;35868:7;35834:12;:42::i;:::-;35790:41;35803:6;13520:5;35790:12;:41::i;:::-;:86;;;;;;;35481:403;-1:-1:-1;;;;;;35481:403:0:o;30951:928::-;31167:24;31148:8;14239:15;14227:8;:27;;14219:64;;;;;-1:-1:-1;;;14219:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14219:64:0;;;;;;;;;;;;;;;31204:15:::1;31222:20;:18;:20::i;:::-;31204:38;;31263:39;31277:9;31288:4;;31263:39;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31294:7:0;;-1:-1:-1;31263:13:0::1;::::0;-1:-1:-1;;31263:39:0:i:1;:::-;31253:49;;31335:11;31321:7;31329:1;31321:10;;;;;;;;;;;;;;:25;;31313:77;;;;-1:-1:-1::0;;;31313:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31441:7;::::0;31401:12:::1;::::0;31416:51:::1;::::0;-1:-1:-1;;;;;31441:7:0::1;31450:4:::0;;31401:12;31450:7;::::1;;;31416:51;31401:66;;31480:200;31513:4;;31518:1;31513:7;;;;;;359:20:::0;;;-1:-1:-1;;;;;359:20:0;;:::o;34907:154::-;35029:7;;34977;;35004:49;;-1:-1:-1;;;;;35029:7:0;35038:6;35046;35004:24;:49::i;:::-;34997:56;34907:154;-1:-1:-1;;;34907:154:0:o;13474:51::-;13520:5;13474:51;:::o;645:210::-;589:5;;-1:-1:-1;;;;;589:5:0;575:10;:19;567:50;;;;;-1:-1:-1;;;567:50:0;;;;;;;;;;;;-1:-1:-1;;;567:50:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;721:23:0;::::1;713:60;;;::::0;;-1:-1:-1;;;713:60:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;802:5;::::0;;789:30:::1;::::0;-1:-1:-1;;;;;789:30:0;;::::1;::::0;802:5;::::1;::::0;789:30:::1;::::0;::::1;830:5;:17:::0;;-1:-1:-1;;;;;;830:17:0::1;-1:-1:-1::0;;;;;830:17:0;;;::::1;::::0;;;::::1;::::0;;645:210::o;13377:19::-;;;-1:-1:-1;;;;;13377:19:0;;:::o;19225:1095::-;19474:15;19491;19455:8;14239:15;14227:8;:27;;14219:64;;;;;-1:-1:-1;;;14219:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14219:64:0;;;;;;;;;;;;;;;19559:7:::1;::::0;19519:12:::1;::::0;19534:49:::1;::::0;-1:-1:-1;;;;;19559:7:0::1;19568:6:::0;19576;19534:24:::1;:49::i;:::-;19742;::::0;;-1:-1:-1;;;19742:49:0;;19764:10:::1;19742:49;::::0;::::1;::::0;-1:-1:-1;;;;;19742:49:0;;::::1;::::0;;;;;;;;;;;;19519:64;;-1:-1:-1;19615:9:0;;19653:6;;19688;;19594:18:::1;::::0;;;19742:21;;::::1;::::0;::::1;::::0;:49;;;;;;;;;;;19594:18;19742:21;:49;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;19742:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19742:49:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19742:49:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;19742:49:0;-1:-1:-1;19803:14:0::1;19823:45;19851:7:::0;19860;19823:27:::1;:45::i;:::-;19802:66;;;19911:6;-1:-1:-1::0;;;;;19900:17:0::1;:7;-1:-1:-1::0;;;;;19900:17:0::1;;:59;;19942:7;19951;19900:59;;;19921:7;19930;19900:59;19879:80:::0;;-1:-1:-1;19879:80:0;-1:-1:-1;19970:43:0::1;19986:4:::0;19992:2;19996:7;19879:80;19970:15:::1;:43::i;:::-;20024;20040:4;20046:2;20050:7;20059;20024:15;:43::i;:::-;20097:10;20086:7;:21;;20078:72;;;;-1:-1:-1::0;;;20078:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20180:10;20169:7;:21;;20161:72;;;;-1:-1:-1::0;;;20161:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20286:7;-1:-1:-1::0;;;;;20249:63:0::1;20277:7;-1:-1:-1::0;;;;;20249:63:0::1;20265:10;-1:-1:-1::0;;;;;20249:63:0::1;;20295:7;20304;20249:63;;;;;;;;;;;;;;;;;;;;;;;;14294:1;;;;;;;19225:1095:::0;;;;;;;;;;;:::o;34556:164::-;34666:7;;;34652:46;;;-1:-1:-1;;;34652:46:0;;-1:-1:-1;;;;;34652:46:0;;;;;;;;;;;;;;;;;;;34628:4;;;;34666:7;;34652:30;;:46;;;;;;;;;;;;;;34666:7;34652:46;;;2:2:-1;;;;27:1;24;17:12;2:2;34652:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34652:46:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;34652:46:0;-1:-1:-1;;;;;34652:60:0;;;;34556:164;-1:-1:-1;;;34556:164:0:o;14311:408::-;589:5;;-1:-1:-1;;;;;589:5:0;575:10;:19;567:50;;;;;-1:-1:-1;;;567:50:0;;;;;;;;;;;;-1:-1:-1;;;567:50:0;;;;;;;;;;;;;;;14536:4:::1;:12:::0;;-1:-1:-1;;;;;;14536:12:0;;::::1;-1:-1:-1::0;;;;;14536:12:0;;::::1;;::::0;;;14559:6:::1;:16:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;14586:7:::1;:18:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;14615:4:::1;:12:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;14638:10:::1;:24:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;14673:17:::1;:38:::0;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;14311:408::o;35892:225::-;35977:24;36014:15;36032:20;:18;:20::i;:::-;36014:38;;36070:39;36085:8;36095:4;36101:7;36070:14;:39::i;34728:171::-;34867:7;;34802;;;;34838:53;;-1:-1:-1;;;;;34867:7:0;34876:6;34884;34838:28;:53::i;:::-;34831:60;;;;34728:171;;;;;;:::o;13320:21::-;;;-1:-1:-1;;;;;13320:21:0;;:::o;22907:1078::-;22999:4;;22969;;-1:-1:-1;;;;;22990:13:0;;;22999:4;;22990:13;;:30;;-1:-1:-1;23016:4:0;;-1:-1:-1;;;;;23007:13:0;;;23016:4;;23007:13;22990:30;22986:47;;;-1:-1:-1;23029:4:0;23022:11;;22986:47;23075:6;;23062:79;;;-1:-1:-1;;;23062:79:0;;11941:41;23062:79;;;;;;23044:15;;-1:-1:-1;;;;;23075:6:0;;23062:35;;:79;;;;;;;;;;;;;;23075:6;23062:79;;;2:2:-1;;;;27:1;24;17:12;2:2;23062:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23062:79:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;23062:79:0;23167:4;;23173;;23062:79;;-1:-1:-1;23157:21:0;;-1:-1:-1;;;;;23167:4:0;;;;23173;23157:9;:21::i;:::-;23152:40;;23187:5;23180:12;;;;;23152:40;23218:4;;23208:22;;-1:-1:-1;;;;;23218:4:0;23224:5;23208:9;:22::i;:::-;23203:41;;23239:5;23232:12;;;;;23203:41;23274:6;;23292:4;;23261:43;;;-1:-1:-1;;;23261:43:0;;-1:-1:-1;;;;;23292:4:0;;;23261:43;;;;;;;;;;;;;23274:6;;;;;23261:30;;:43;;;;;;;;;;;;;;23274:6;23261:43;;;2:2:-1;;;;27:1;24;17:12;2:2;23261:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23261:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;23261:43:0;:90;;;;-1:-1:-1;23321:6:0;;23339:4;;23308:43;;;-1:-1:-1;;;23308:43:0;;-1:-1:-1;;;;;23339:4:0;;;23308:43;;;;;;;;;;;;;23321:6;;;;;23308:30;;:43;;;;;;;;;;;;;;23321:6;23308:43;;;2:2:-1;;;;27:1;24;17:12;2:2;23308:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23308:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;23308:43:0;23261:90;23255:111;;23361:5;23354:12;;;;;23255:111;23392:4;;23382:22;;-1:-1:-1;;;;;23392:4:0;23398:5;23382:9;:22::i;:::-;23377:40;;23413:4;23406:11;;;;;23377:40;23432:12;23428:29;;23453:4;23446:11;;;;;23428:29;23523:7;;23532:4;;23469:19;;23494:50;;-1:-1:-1;;;;;23523:7:0;;;;23532:4;23538:5;23494:28;:50::i;:::-;-1:-1:-1;23610:7:0;;23619:4;;23468:76;;-1:-1:-1;23556:19:0;;23581:50;;-1:-1:-1;;;;;23610:7:0;;;;23619:4;23625:5;23581:28;:50::i;:::-;-1:-1:-1;23718:7:0;;23727:4;;23733;;23555:76;;-1:-1:-1;23643:20:0;;;;23689:49;;-1:-1:-1;;;;;23718:7:0;;;;23727:4;;;;23733;23689:28;:49::i;:::-;23642:96;;;;23749:17;23811:12;23769:39;23782:11;23795:12;23769;:39::i;:::-;:54;;;;;;23749:74;;23834:18;13520:5;23855:59;23868:36;23881:9;23892:11;23868:12;:36::i;:::-;23906:7;23855:12;:59::i;:::-;:81;;;;;;23954:23;;;;;-1:-1:-1;;;;;;;22907:1078:0;;;;:::o;17999:1218::-;18276:19;18310:17;18342;18234:8;14239:15;14227:8;:27;;14219:64;;;;;-1:-1:-1;;;14219:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14219:64:0;;;;;;;;;;;;;;;18462:4:::1;::::0;18414:176:::1;::::0;18442:5;;-1:-1:-1;;;;;18462:4:0::1;18481:18:::0;18514:9:::1;18538:14:::0;18567:12;18414:13:::1;:176::i;:::-;18641:7;::::0;18657:4:::1;::::0;18387:203;;-1:-1:-1;18387:203:0;;-1:-1:-1;18601:12:0::1;::::0;18616:46:::1;::::0;-1:-1:-1;;;;;18641:7:0;;::::1;::::0;18650:5;;18657:4:::1;18616:24;:46::i;:::-;18601:61;;18673:69;18705:5;18712:10;18724:4;18730:11;18673:31;:69::i;:::-;18759:4;;;;;;;;;-1:-1:-1::0;;;;;18759:4:0::1;-1:-1:-1::0;;;;;18753:19:0::1;;18780:9;18753:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18753:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;-1:-1:::0;;18816:4:0::1;::::0;18810:37:::1;::::0;;-1:-1:-1;;;18810:37:0;;-1:-1:-1;;;;;18810:37:0;;::::1;;::::0;::::1;::::0;;;;;;;;;18816:4;;;::::1;::::0;-1:-1:-1;18810:20:0::1;::::0;-1:-1:-1;18810:37:0;;;;;-1:-1:-1;18810:37:0::1;::::0;;;;;;18816:4:::1;::::0;18810:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;18810:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18810:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18810:37:0;18803:45:::1;;;;18871:33;::::0;;-1:-1:-1;;;18871:33:0;;18893:10:::1;18871:33;::::0;::::1;::::0;;;-1:-1:-1;;;;;18871:21:0;::::1;::::0;::::1;::::0;:33;;;;;::::1;::::0;;;;;;;;-1:-1:-1;18871:21:0;:33;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;18871:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18871:33:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18871:33:0;18949:4:::1;::::0;18871:33;;-1:-1:-1;18915:50:0::1;::::0;18931:10:::1;::::0;18943:4;;-1:-1:-1;;;;;18949:4:0::1;18955:9:::0;18915:15:::1;:50::i;:::-;18976:53;18992:10;19004:4;19010:5;19017:11;18976:15;:53::i;:::-;19077:4;::::0;19045:61:::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;;;;;19077:4:0;;::::1;::::0;19045:61;::::1;::::0;19058:10:::1;::::0;19045:61:::1;::::0;;;;;;;;;::::1;19133:9;19121;:21;19117:92;;;19144:65;19175:10;19199:9;19187;:21;19144:30;:65::i;:::-;14294:1;17999:1218:::0;;;;;;;;;;:::o;33047:1259::-;33238:24;33219:8;14239:15;14227:8;:27;;14219:64;;;;;-1:-1:-1;;;14219:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14219:64:0;;;;;;;;;;;;;;;33294:4:::1;::::0;-1:-1:-1;;;;;33294:4:0::1;33283::::0;;33294::::1;33283:7:::0;::::1;;;;;;;;;;-1:-1:-1::0;;;;;33283:7:0::1;-1:-1:-1::0;;;;;33283:15:0::1;;33275:57;;;::::0;;-1:-1:-1;;;33275:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;33275:57:0;;;;;;;;;;;;;::::1;;33343:15;33361:20;:18;:20::i;:::-;33343:38;;33402:39;33416:9;33427:4;;33402:39;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;33433:7:0;;-1:-1:-1;33402:13:0::1;::::0;-1:-1:-1;;33402:39:0:i:1;:::-;33392:49;;33474:9;33460:7;33468:1;33460:10;;;;;;;;;;;;;;:23;;33452:75;;;;-1:-1:-1::0;;;33452:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33546:4;::::0;33594:10;;-1:-1:-1;;;;;33546:4:0;;::::1;::::0;33540:19:::1;::::0;13520:5:::1;::::0;33581:68:::1;::::0;33594:7;;33546:4:::1;::::0;33594:10:::1;;;;;;;;;;33606:42;13520:5;33640:7;33606:12;:42::i;33581:68::-;:90;;;;;;33540:144;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33540:144:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;-1:-1:::0;;33735:7:0::1;::::0;33695:12:::1;::::0;-1:-1:-1;33710:51:0::1;::::0;-1:-1:-1;;;;;;33735:7:0::1;::::0;-1:-1:-1;33744:4:0;;33695:12;33744:7;::::1;;;33710:51;33695:66;;33772:153;33805:4;13520:5;33824:68;33837:7;33845:1;33837:10;;;;;;;33772:153;33936:24;33942:7;33951:4;;33936:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;33957:2:0;;-1:-1:-1;33936:5:0::1;::::0;-1:-1:-1;;33936:24:0:i:1;:::-;33979:4;::::0;34013:10;;-1:-1:-1;;;;;33979:4:0;;::::1;::::0;33973:19:::1;::::0;13520:5:::1;::::0;34000:33:::1;::::0;34013:7;;33979:4:::1;::::0;34013:10:::1;;;34000:33;:55;;;;;;33973:85;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33973:85:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33973:85:0;;;;;34069:81;34088:4;13520:5;34094:33;34107:7;34115:1;34107:10;;;;;;;34069:81;34161:32;34170:7;34179:4;;34161:32;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;34185:7:0;;-1:-1:-1;34161:8:0::1;::::0;-1:-1:-1;;34161:32:0:i:1;:::-;34220:7;34228:1;34220:10;;;;;;;;;;;;;;34208:9;:22;34204:94;;;34232:66;34263:10;34287:7;34295:1;34287:10;;;;;;;;;;;;;;34275:9;:22;34232:30;:66::i;9739:361::-:0;9934:45;;;-1:-1:-1;;;;;9934:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;9934:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;9923:57:0;;;;9888:12;;9902:17;;9923:10;;;;9934:45;9923:57;;;25:18:-1;9923:57:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;9923:57:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;9887:93:0;;;;9999:7;:57;;;;-1:-1:-1;10011:11:0;;:16;;:44;;;10042:4;10031:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;10031:24:0;10011:44;9991:101;;;;;-1:-1:-1;;;9991:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9739:361;;;;;:::o;10518:195::-;10626:12;;;10588;10626;;;;;;;;;-1:-1:-1;;;;;10605:7:0;;;10619:5;;10605:34;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;10605:34:0;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;10587:52:0;;;10658:7;10650:55;;;;-1:-1:-1;;;10650:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10518:195;;;:::o;6651:520::-;6740:12;6766:14;6782;6800:26;6811:6;6819;6800:10;:26::i;:::-;6765:61;;;;6837:12;6879:6;6887;6862:32;;;;;;-1:-1:-1;;;;;6862:32:0;-1:-1:-1;;;;;6862:32:0;;;;;;;;-1:-1:-1;;;;;6862:32:0;-1:-1:-1;;;;;6862:32:0;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;6862:32:0;;;6852:43;;;;;;6837:58;;6906:18;6986:4;6979:12;;7006:7;7028:4;7061:7;-1:-1:-1;;;;;7047:39:0;;:41;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;7047:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7047:41:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;7047:41:0;6948:155;;;-1:-1:-1;;;;;;6948:155:0;;;;7047:41;6948:155;;;;;;;;;;;;-1:-1:-1;;6948:155:0;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;6948:155:0;;;;;;6927:187;;;;;-1:-1:-1;;;;;7129:34:0;;6651:520;-1:-1:-1;;;;;;;;6651:520:0:o;34314:234::-;34482:17;;34459:81;;;-1:-1:-1;;;34459:81:0;;-1:-1:-1;;;;;34459:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34482:17;;;;;34459:56;;:81;;;;;;;;;;;;;;34482:17;;34459:81;;;2:2:-1;;;;27:1;24;17:12;2:2;34459:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34459:81:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;34314:234:0:o;27006:153::-;27099:6;;27086:65;;;-1:-1:-1;;;27086:65:0;;-1:-1:-1;;;27086:65:0;;;;;;27059:7;;-1:-1:-1;;;;;27099:6:0;;27086:35;;:65;;;;;;;;;;;;;;27099:6;27086:65;;;2:2:-1;;;;27:1;24;17:12;2:2;27086:65:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27086:65:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;27086:65:0;;-1:-1:-1;27006:153:0;:::o;11075:129::-;11159:5;;;11154:16;;;;11146:50;;;;;-1:-1:-1;;;11146:50:0;;;;;;;;;;;;-1:-1:-1;;;11146:50:0;;;;;;;;;;;;;;11212:142;11264:6;11291;;;:30;;-1:-1:-1;;11306:5:0;;;11320:1;11315;11306:5;11315:1;11301:15;;;;;:20;11291:30;11283:63;;;;;-1:-1:-1;;;11283:63:0;;;;;;;;;;;;-1:-1:-1;;;11283:63:0;;;;;;;;;;;;;;8176:442;8269:14;8315:1;8304:8;:12;8296:68;;;;-1:-1:-1;;;8296:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8395:1;8383:9;:13;:31;;;;;8413:1;8400:10;:14;8383:31;8375:84;;;;-1:-1:-1;;;8375:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8470:14;8487:24;:8;8500:10;8487:24;:12;:24;:::i;:::-;8470:41;-1:-1:-1;8522:16:0;8541:23;:9;8555:8;8541:23;:13;:23;:::i;:::-;8522:42;;8599:11;8587:9;:23;;;;21283:739;21420:27;21487:4;:11;21473:26;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21473:26:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;21473:26:0;;21460:39;;21526:6;21510:10;21521:1;21510:13;;;;;;;;;;;;;;;;;:22;21548:9;21543:472;21581:1;21567:4;:11;:15;21563:1;:19;21543:472;;;21604:14;21621:4;21626:1;21621:7;;;;;;;;;;;;;;21604:24;;21643:15;21661:4;21666:1;21670;21666:5;21661:11;;;;;;;;;;;;;;21643:29;;21688:16;21706;21726:54;21755:7;;;;;;;;;-1:-1:-1;;;;;21755:7:0;21764:6;21772:7;21726:28;:54::i;:::-;21687:93;;;;21795:17;21815:71;21828:10;21839:1;21828:13;;;;;;;;;;;;;;21843:42;13520:5;21877:7;21843:12;:42::i;21815:71::-;21795:91;-1:-1:-1;21921:82:0;13520:5;21795:91;21951:31;21984:8;21994;21921:29;:82::i;:::-;21901:10;21912:1;21916;21912:5;21901:17;;;;;;;;;;;;;;;;;:102;-1:-1:-1;;21584:3:0;;;;;-1:-1:-1;21543:472:0;;-1:-1:-1;;21543:472:0;;;21283:739;;;;;:::o;28121:263::-;28269:56;28301:5;28308:4;28314:2;28318:6;28269:31;:56::i;:::-;28336:40;28352:4;28358:2;28362:5;28369:6;28336:15;:40::i;:::-;28121:263;;;;:::o;23993:1504::-;24132:39;24149:4;24168:1;24154:4;:11;:15;24149:21;;;;;;;;;;;;;;24132:16;:39::i;:::-;24124:99;;;;-1:-1:-1;;;24124:99:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24239:9;24234:1156;24268:1;24254:4;:11;:15;24250:1;:19;24234:1156;;;24292:13;24307:14;24326:4;24331:1;24326:7;;;;;;;;;;;;;;24335:4;24340:1;24344;24340:5;24335:11;;;;;;;;;;;;;;24291:56;;;;24370:23;24387:5;24370:16;:23::i;:::-;24362:85;;;;-1:-1:-1;;;24362:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24483:6;;24470:45;;;-1:-1:-1;;;24470:45:0;;-1:-1:-1;;;;;24470:45:0;;;;;;;;;;;;;;;;24483:6;;;;;24470:30;;:45;;;;;;;;;;;;;;24483:6;24470:45;;;2:2:-1;;;;27:1;24;17:12;2:2;24470:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24470:45:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;24470:45:0;24462:102;;;;-1:-1:-1;;;24462:102:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24580:14;24596;24614:42;24642:5;24649:6;24614:27;:42::i;:::-;24579:77;;;;24671:17;24691:7;24699:1;24703;24699:5;24691:14;;;;;;;;;;;;;;24671:34;;24721:18;24741;24772:6;-1:-1:-1;;;;;24763:15:0;:5;-1:-1:-1;;;;;24763:15:0;;:101;;24842:9;24861:1;24763:101;;;24807:1;24811:9;24763:101;24720:144;;;;24879:10;24910:1;24896:4;:11;:15;24892:1;:19;:82;;24971:3;24892:82;;;24939:7;;24956:11;;24914:54;;-1:-1:-1;;;;;24939:7:0;;24948:6;;24956:4;;24965:1;24961:5;;;24956:11;;;;;;;;;;;;24914:24;:54::i;:::-;25025:7;;24879:95;;-1:-1:-1;25000:48:0;;-1:-1:-1;;;;;25025:7:0;25034:5;25041:6;25000:24;:48::i;:::-;-1:-1:-1;;;;;24989:65:0;;25055:10;25067;25079:2;25093:1;25083:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;25083:12:0;87:42:-1;143:17;;-1:-1;25083:12:0;;24989:107;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24989:107:0;-1:-1:-1;;;;;24989:107:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;24989:107:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24989:107:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24989:107:0;;;;25128:1;25115:10;:14;25111:126;;;25189:7;;25148:89;;25164:48;;-1:-1:-1;;;;;25189:7:0;25198:5;25205:6;25164:24;:48::i;:::-;25214:2;25218:6;25226:10;25148:15;:89::i;:::-;25256:14;;25252:126;;25330:7;;25289:89;;25305:48;;-1:-1:-1;;;;;25330:7:0;25339:5;25346:6;25305:24;:48::i;:::-;25355:2;25359:6;25367:10;25289:15;:89::i;:::-;-1:-1:-1;;24271:3:0;;;;;-1:-1:-1;24234:1156:0;;-1:-1:-1;;;;;24234:1156:0;;;25429:4;25448:1;25434:4;:11;:15;25429:21;;;;;;;;;;;;;;-1:-1:-1;;;;;25405:84:0;25420:4;25425:1;25420:7;;;;;;;;;;;;;;-1:-1:-1;;;;;25405:84:0;25415:3;-1:-1:-1;;;;;25405:84:0;;25452:7;25460:1;25452:10;;;;;;;;;;;;;;25464:7;25486:1;25472:4;:11;:15;25464:24;;;;;;;;;;;;;;25405:84;;;;;;;;;;;;;;;;;;;;;;;;23993:1504;;;:::o;25505:1493::-;25670:16;;;25684:1;25670:16;;;25643:24;25670:16;;;;;25643:24;25670:16;;;;;109:14:-1;25670:16:0;88:42:-1;-1:-1;;25710:4:0;;25697:10;;;;-1:-1:-1;;;;;;25710:4:0;;25697:10;;-1:-1:-1;25710:4:0;;25697:10;;;;;;-1:-1:-1;;;;;25697:17:0;;;:10;;;;;;;;;;;:17;25730:9;25725:1266;25763:1;25749:4;:11;:15;25745:1;:19;25725:1266;;;25786:11;13520:5;25800:33;25813:7;25821:1;25813:10;;;;;;;25800:33;:55;;;;;;25786:69;;25870:13;25886:4;25891:1;25886:7;;;;;;;;;;;;;;25870:23;;25908:14;25925:4;25930:1;25934;25930:5;25925:11;;;;;;;;;;;;;;25908:28;;25951:19;25973:48;25998:7;;;;;;;;;-1:-1:-1;;;;;25998:7:0;26007:5;26014:6;25973:24;:48::i;:::-;26049:4;;25951:70;;-1:-1:-1;;;;;;26040:13:0;;;26049:4;;26040:13;26036:873;;;26111:4;;26117:10;;26074:54;;;-1:-1:-1;;;26074:54:0;;;;;;;;-1:-1:-1;;;;;26111:4:0;;;26074:54;;;;26117:10;;;26074:54;;;;;:31;;;;;;:54;;;;;26111:4;;26074:54;;;;;;;;26111:4;26074:31;:54;;;2:2:-1;;;;27:1;24;17:12;2:2;26074:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;26176:10:0;;26188:4;;26147:51;;-1:-1:-1;26163:11:0;;-1:-1:-1;;;;;;26176:10:0;;;;26188:4;26194:3;26147:15;:51::i;:::-;26036:873;;;26308:7;;26324:4;;-1:-1:-1;;;;;26239:31:0;;;;;;26271:3;;26276:5;;26283:46;;26308:7;;;;26276:5;;26324:4;26283:24;:46::i;:::-;26239:91;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26239:91:0;-1:-1:-1;;;;;26239:91:0;;;;;;-1:-1:-1;;;;;26239:91:0;-1:-1:-1;;;;;26239:91:0;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26239:91:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;26421:7:0;;26437:4;;26350:17;;-1:-1:-1;26350:17:0;;-1:-1:-1;26392:50:0;;-1:-1:-1;;;;;26421:7:0;;;;26430:5;;26437:4;26392:28;:50::i;:::-;26349:93;;;;26461:14;26478:58;26508:3;26513:9;26524:11;26478:29;:58::i;:::-;26591:7;;26607:4;;26461:75;;-1:-1:-1;26566:46:0;;-1:-1:-1;;;;;26591:7:0;;;;26600:5;;26607:4;26566:24;:46::i;:::-;26630:4;;26636:10;;26555:92;;;-1:-1:-1;;;26555:92:0;;;;;;;;-1:-1:-1;;;;;26630:4:0;;;26555:92;;;;26636:10;;;26555:92;;;;;:66;;;;;;;:92;;;;;26630:4;;26555:92;;;;;;;;26630:4;26555:66;:92;;;2:2:-1;;;;27:1;24;17:12;2:2;26555:92:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;26720:7:0;;26736:4;;26666:88;;-1:-1:-1;26682:11:0;;-1:-1:-1;26695:46:0;;-1:-1:-1;;;;;26720:7:0;;;;26729:5;;26736:4;26695:24;:46::i;:::-;26743:5;26750:3;26666:15;:88::i;:::-;26814:7;;26830:4;;26773:89;;26789:46;;-1:-1:-1;;;;;26814:7:0;;;;26823:5;;26830:4;26789:24;:46::i;:::-;26837:10;;26849:4;;-1:-1:-1;;;;;26837:10:0;;;;26849:4;26855:6;26773:15;:89::i;:::-;26887:6;-1:-1:-1;;;26036:873:0;26927:7;;26923:56;;26953:10;;26936:43;;;-1:-1:-1;;;26936:43:0;;;;;;;;;;-1:-1:-1;;;;;26953:10:0;;;;26936:38;;:43;;;;;;;;;;;;;;;26953:10;;26936:43;;;2:2:-1;;;;27:1;24;17:12;2:2;26936:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26936:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;26923:56:0;-1:-1:-1;;25766:3:0;;;;;-1:-1:-1;25725:1266:0;;-1:-1:-1;25725:1266:0;22030:869;22166:25;22229:4;:11;22215:26;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22215:26:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;22215:26:0;;22204:37;;22280:6;22252:8;22275:1;22261:4;:11;:15;22252:25;;;;;;;;;;;;;;;;;:34;22314:11;;-1:-1:-1;;22314:15:0;22297:531;22331:5;;22297:531;;22358:14;22375:4;22384:1;22380;:5;22375:11;;;;;;;;;;;;;;22358:28;;22401:15;22419:4;22424:1;22419:7;;;;;;;;;;;;;;22401:25;;22442:16;22460;22480:54;22509:7;;;;;;;;;-1:-1:-1;;;;;22509:7:0;22518:6;22526:7;22480:28;:54::i;:::-;22441:93;;;;22549:16;22568:61;22597:8;22606:1;22597:11;;;;;;;;;;;;;;22610:8;22620;22568:28;:61::i;:::-;22549:80;;22662:154;22739:42;13520:5;22773:7;22739:12;:42::i;:::-;22693:43;22706:8;13520:5;22693:12;:43::i;:::-;:88;;;;;;22800:1;22662:12;:154::i;:::-;22644:8;22657:1;22653;:5;22644:15;;;;;;;;;;;;;;;;;:172;-1:-1:-1;;;;22338:3:0;;;;-1:-1:-1;22297:531:0;;-1:-1:-1;;22297:531:0;;;22849:42;22864:8;22873:1;22864:11;;;;;;;;;;;;;;22877:4;22883:7;22849:14;:42::i;:::-;22838:53;22030:869;-1:-1:-1;;;;22030:869:0:o;14727:1619::-;15012:7;;;14998:46;;;-1:-1:-1;;;14998:46:0;;-1:-1:-1;;;;;14998:46:0;;;;;;;;;;;;;;;;;;;14949:15;;;;;;15012:7;;;14998:30;;:46;;;;;;;;;;;;;;;15012:7;14998:46;;;2:2:-1;;;;27:1;24;17:12;2:2;14998:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14998:46:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;14998:46:0;-1:-1:-1;;;;;14998:60:0;;14994:142;;;15089:7;;;15075:49;;;-1:-1:-1;;;15075:49:0;;-1:-1:-1;;;;;15075:49:0;;;;;;;;;;;;;;;;;;;15089:7;;;;;15075:33;;:49;;;;;;;;;;;;;;;15089:7;;15075:49;;;2:2:-1;;;;27:1;24;17:12;2:2;15075:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15075:49:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;14994:142:0;15181:6;;15168:46;;;-1:-1:-1;;;15168:46:0;;-1:-1:-1;;;;;15168:46:0;;;;;;;;;;;;;;;;15181:6;;;;;15168:30;;:46;;;;;;;;;;;;;;15181:6;15168:46;;;2:2:-1;;;;27:1;24;17:12;2:2;15168:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15168:46:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;15168:46:0;15146:149;;;;-1:-1:-1;;;15146:149:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15374:7;;15307:16;;;;15345:53;;-1:-1:-1;;;;;15374:7:0;15383:6;15391;15345:28;:53::i;:::-;15306:92;;;;15413:8;15425:1;15413:13;:30;;;;-1:-1:-1;15430:13:0;;15413:30;15409:823;;;15482:14;;-1:-1:-1;15498:14:0;;-1:-1:-1;15409:823:0;;;15546:22;15571:58;15594:14;15610:8;15620;15571:22;:58::i;:::-;15546:83;;15666:14;15648;:32;15644:577;;15727:10;15709:14;:28;;15701:79;;;;-1:-1:-1;;;15701:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15821:14;;-1:-1:-1;15837:14:0;-1:-1:-1;15837:14:0;15644:577;;;15893:22;15918:58;15941:14;15957:8;15967;15918:22;:58::i;:::-;15893:83;;16020:14;16002;:32;;15995:40;;;;16080:10;16062:14;:28;;16054:79;;;;-1:-1:-1;;;16054:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16174:14;-1:-1:-1;16190:14:0;;-1:-1:-1;15644:577:0;15409:823;;16256:7;;;16291:46;;;-1:-1:-1;;;16291:46:0;;-1:-1:-1;;;;;16291:46:0;;;;;;;;;;;;;;;;;;;16256:7;;;;;16242:36;;16279:10;;16256:7;;16291:30;;:46;;;;;;;;;;;;;;16256:7;16291:46;;;2:2:-1;;;;27:1;24;17:12;2:2;16291:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16291:46:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16291:46:0;16242:96;;;-1:-1:-1;;;;;;16242:96:0;;;;;;;-1:-1:-1;;;;;16242:96:0;;;;;;;;;;;;;;;;;;;;;16291:46;;16242:96;;;;;;;-1:-1:-1;16242:96:0;;;;2:2:-1;;;;27:1;24;17:12;2:2;16242:96:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16242:96:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;14727:1619:0;;;;-1:-1:-1;14727:1619:0;;-1:-1:-1;;;;;;;;14727:1619:0:o;10108:402::-;10333:51;;;-1:-1:-1;;;;;10333:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;10333:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;10322:63:0;;;;10287:12;;10301:17;;10322:10;;;;10333:51;10322:63;;;25:18:-1;10322:63:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;10322:63:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;10286:99:0;;;;10404:7;:57;;;;-1:-1:-1;10416:11:0;;:16;;:44;;;10447:4;10436:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;10436:24:0;10416:44;10396:106;;;;-1:-1:-1;;;10396:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28392:183;28481:4;;28475:32;;;-1:-1:-1;;;28475:32:0;;-1:-1:-1;;;;;28475:32:0;;;;;;;;;;;;;;;28481:4;;;;;28475:20;;:32;;;;;;;;;;;;;;28481:4;;28475:32;;;2:2:-1;;;;27:1;24;17:12;2:2;28475:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28475:32:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;28475:32:0;28468:40;;;;28554:4;;28519:48;;28543:4;;28550:2;;-1:-1:-1;;;;;28554:4:0;28560:6;28519:15;:48::i;:::-;28392:183;;:::o;8630:453::-;8723:13;8769:1;8757:9;:13;8749:70;;;;-1:-1:-1;;;8749:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8850:1;8838:9;:13;:31;;;;;8868:1;8855:10;:14;8838:31;8830:84;;;;-1:-1:-1;;;8830:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8925:14;8942:24;:9;8956;8942:24;:13;:24;:::i;:::-;8925:41;-1:-1:-1;8977:16:0;8996:25;:10;9011:9;8996:25;:14;:25;:::i;:::-;8977:44;;9043:32;9073:1;9056:11;9044:9;:23;;;;;;;9043:32;:29;:32;:::i;6293:349::-;6368:14;6384;6429:6;-1:-1:-1;;;;;6419:16:0;:6;-1:-1:-1;;;;;6419:16:0;;;6411:66;;;;-1:-1:-1;;;6411:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6516:6;-1:-1:-1;;;;;6507:15:0;:6;-1:-1:-1;;;;;6507:15:0;;:53;;6545:6;6553;6507:53;;;6526:6;6534;6507:53;6488:72;;-1:-1:-1;6488:72:0;-1:-1:-1;;;;;;6579:20:0;;6571:63;;;;;-1:-1:-1;;;6571:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;7179:387;7272:13;7287;7314:14;7333:26;7344:6;7352;7333:10;:26::i;:::-;7313:46;;;7371:13;7386;7415:32;7423:7;7432:6;7440;7415:7;:32::i;:::-;-1:-1:-1;;;;;7404:56:0;;:58;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;7404:58:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7404:58:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;7404:58:0;;;;;;;7370:92;;;;;-1:-1:-1;7370:92:0;;-1:-1:-1;;;;;;7496:16:0;;;;;;;:62;;7539:8;7549;7496:62;;;7516:8;7526;7496:62;7473:85;;;;-1:-1:-1;7179:387:0;-1:-1:-1;;;;;;;7179:387:0:o;10939:128::-;11023:5;;;11018:16;;;;11010:49;;;;;-1:-1:-1;;;11010:49:0;;;;;;;;;;;;-1:-1:-1;;;11010:49:0;;;;;;;;;;;;;;7847:321;7929:12;7972:1;7962:7;:11;7954:61;;;;-1:-1:-1;;;7954:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8045:1;8034:8;:12;:28;;;;;8061:1;8050:8;:12;8034:28;8026:81;;;;-1:-1:-1;;;8026:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8152:8;8128:21;:7;8140:8;8128:21;:11;:21;:::i;:::-;:32;;;;;;;7847:321;-1:-1:-1;;;;7847:321:0:o
Swarm Source
ipfs://d243c2f06d51a5ba6fa7411f78580fdbb14f5ed4386fe79deb46e5be08f63ddd
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
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.