ETH Price: $3,419.86 (-0.60%)
Gas: 2 Gwei

Contract

0x5fA54fdDF1870C344DbFaBb37dFab8700Ec0Def1
 

Overview

ETH Balance

7.654652248379853739 ETH

Eth Value

$26,177.84 (@ $3,419.86/ETH)

More Info

Private Name Tags

TokenTracker

FrogeX (FROGEX) (@$0.00)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Approve202033902024-06-30 8:44:472 days ago1719737087IN
Froge Finance: FROGEX Token
0 ETH0.000126142.70885496
Approve201397582024-06-21 11:20:1111 days ago1718968811IN
Froge Finance: FROGEX Token
0 ETH0.000182143.91160428
Transfer201125002024-06-17 15:48:1115 days ago1718639291IN
Froge Finance: FROGEX Token
0 ETH0.0007864213.62004945
Transfer201124812024-06-17 15:44:2315 days ago1718639063IN
Froge Finance: FROGEX Token
0 ETH0.0006771911.72831877
Transfer201124752024-06-17 15:43:1115 days ago1718638991IN
Froge Finance: FROGEX Token
0 ETH0.0007159612.3946731
Approve201115892024-06-17 12:45:1115 days ago1718628311IN
Froge Finance: FROGEX Token
0 ETH0.000170383.68175884
Transfer201072672024-06-16 22:14:5916 days ago1718576099IN
Froge Finance: FROGEX Token
0 ETH0.000491556.56681045
Transfer200820662024-06-13 9:39:4719 days ago1718271587IN
Froge Finance: FROGEX Token
0 ETH0.0009230310.03935254
Approve200819372024-06-13 9:13:5919 days ago1718270039IN
Froge Finance: FROGEX Token
0 ETH0.0005232511.30678205
Approve200333672024-06-06 14:25:2326 days ago1717683923IN
Froge Finance: FROGEX Token
0 ETH0.0012390426.60844129
Approve200234742024-06-05 5:15:4727 days ago1717564547IN
Froge Finance: FROGEX Token
0 ETH0.000356647.7106325
Approve200037552024-06-02 11:12:1130 days ago1717326731IN
Froge Finance: FROGEX Token
0 ETH0.000299816.4386022
Approve199674962024-05-28 9:33:2335 days ago1716888803IN
Froge Finance: FROGEX Token
0 ETH0.0008834818.94824705
Approve199674742024-05-28 9:28:5935 days ago1716888539IN
Froge Finance: FROGEX Token
0 ETH0.0007493216.07093391
Approve199644222024-05-27 23:15:2336 days ago1716851723IN
Froge Finance: FROGEX Token
0 ETH0.0005071610.89124756
Approve199637912024-05-27 21:08:1136 days ago1716844091IN
Froge Finance: FROGEX Token
0 ETH0.0005266618.0650788
Approve199635112024-05-27 20:12:1136 days ago1716840731IN
Froge Finance: FROGEX Token
0 ETH0.0009695820.82173884
X Claim199612342024-05-27 12:32:5936 days ago1716813179IN
Froge Finance: FROGEX Token
0 ETH0.0005073216.2712752
Approve199576342024-05-27 0:29:2337 days ago1716769763IN
Froge Finance: FROGEX Token
0 ETH0.000171263.69591347
Approve199571522024-05-26 22:52:1137 days ago1716763931IN
Froge Finance: FROGEX Token
0 ETH0.000171333.70234184
Transfer199500822024-05-25 23:10:1138 days ago1716678611IN
Froge Finance: FROGEX Token
0 ETH0.000644637.01037185
Approve199491772024-05-25 20:08:1138 days ago1716667691IN
Froge Finance: FROGEX Token
0 ETH0.000330637.10036458
Approve199179782024-05-21 11:27:1142 days ago1716290831IN
Froge Finance: FROGEX Token
0 ETH0.0005407611.68514364
Approve199154352024-05-21 2:55:4742 days ago1716260147IN
Froge Finance: FROGEX Token
0 ETH0.0005427211.65505644
Approve199078502024-05-20 1:26:4743 days ago1716168407IN
Froge Finance: FROGEX Token
0 ETH0.000130422.80094344
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To Value
201115912024-06-17 12:45:3515 days ago1718628335
Froge Finance: FROGEX Token
0.00564017 ETH
200820202024-06-13 9:30:3519 days ago1718271035
Froge Finance: FROGEX Token
0.02696715 ETH
200211902024-06-04 21:37:2328 days ago1717537043
Froge Finance: FROGEX Token
0.01408444 ETH
200101532024-06-03 8:37:5929 days ago1717403879
Froge Finance: FROGEX Token
0.03373953 ETH
199637932024-05-27 21:08:3536 days ago1716844115
Froge Finance: FROGEX Token
0.03383581 ETH
199576892024-05-27 0:40:2337 days ago1716770423
Froge Finance: FROGEX Token
0.02992483 ETH
199576892024-05-27 0:40:2337 days ago1716770423
Froge Finance: FROGEX Token
0.00462066 ETH
199115402024-05-20 13:49:1143 days ago1716212951
Froge Finance: FROGEX Token
0.03362381 ETH
198408142024-05-10 16:25:2353 days ago1715358323
Froge Finance: FROGEX Token
0.00300962 ETH
198328112024-05-09 13:33:1154 days ago1715261591
Froge Finance: FROGEX Token
0.00581443 ETH
198251242024-05-08 11:44:2355 days ago1715168663
Froge Finance: FROGEX Token
0.03641049 ETH
198204022024-05-07 19:53:4756 days ago1715111627
Froge Finance: FROGEX Token
0.00321928 ETH
197842692024-05-02 18:36:5961 days ago1714675019
Froge Finance: FROGEX Token
0.04189361 ETH
197776782024-05-01 20:29:5962 days ago1714595399
Froge Finance: FROGEX Token
0.00383077 ETH
197433622024-04-27 1:21:3566 days ago1714180895
Froge Finance: FROGEX Token
0.00452571 ETH
196869412024-04-19 3:54:3574 days ago1713498875
Froge Finance: FROGEX Token
0.0541679 ETH
196714332024-04-16 23:52:3577 days ago1713311555
Froge Finance: FROGEX Token
0.00430169 ETH
195979722024-04-06 16:47:1187 days ago1712422031
Froge Finance: FROGEX Token
0.04642749 ETH
195941822024-04-06 4:04:2387 days ago1712376263
Froge Finance: FROGEX Token
0.04209534 ETH
195385322024-03-29 8:40:3595 days ago1711701635
Froge Finance: FROGEX Token
0.08075533 ETH
195368702024-03-29 3:05:2395 days ago1711681523
Froge Finance: FROGEX Token
0.00325452 ETH
195310852024-03-28 7:20:4796 days ago1711610447
Froge Finance: FROGEX Token
0.08999625 ETH
195201912024-03-26 17:49:5998 days ago1711475399
Froge Finance: FROGEX Token
0.0037872 ETH
195055092024-03-24 16:12:59100 days ago1711296779
Froge Finance: FROGEX Token
0.00313902 ETH
195055092024-03-24 16:12:59100 days ago1711296779
Froge Finance: FROGEX Token
0.03205726 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
FrogeX

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-23
*/

// SPDX-License-Identifier: NONE

/** This file's constructs, patterns, and usages are proprietary.
    No licenses are granted for any use without the
    written permission of Todd Andrew Durica (@MooncoHodlings).
    Any unlicensed use will be followed up by a law suit.
*/
//  ███████╗██████╗  ██████╗  ██████╗ ███████╗██╗  ██╗
//  ██╔════╝██╔══██╗██╔═══██╗██╔════╝ ██╔════╝╚██╗██╔╝
//  █████╗  ██████╔╝██║   ██║██║  ███╗█████╗   ╚███╔╝
//  ██╔══╝  ██╔══██╗██║   ██║██║   ██║██╔══╝   ██╔██╗
//  ██║     ██║  ██║╚██████╔╝╚██████╔╝███████╗██╔╝ ██╗
//  ╚═╝     ╚═╝  ╚═╝ ╚═════╝  ╚═════╝ ╚══════╝╚═╝  ╚═╝
//    A (far) more efficient ETH Reflection ERC20!
//              Save our rainforests,
//                our biodiversity!
//                Froge revolution.

pragma solidity 0.8.10;

interface IWETH {
  function deposit() external payable;
  function transfer(address to, uint value) external returns (bool);
  function withdraw(uint) external;
}
interface IERC20 {
  function balanceOf(address owner) external view returns (uint);
}
interface IUniV2Factory {
  event PairCreated(address indexed token0, address indexed token1, address pair, uint);
  function getPair(address tokenA, address tokenB) external view returns (address pair);
  function createPair(address tokenA, address tokenB) external returns (address pair);
}
interface IUniV2Pair {
  event Approval(address indexed owner, address indexed spender, uint value);
  event Transfer(address indexed from, address indexed to, uint value);
  function name() external pure returns (string memory);
  function symbol() external pure returns (string memory);
  function decimals() external pure returns (uint8);
  function totalSupply() external view returns (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);
  function nonces(address owner) external view returns (uint);
  function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
  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 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 mint(address to) external returns (uint liquidity);
  function burn(address to) external returns (uint amount0, uint amount1);
  function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
  function initialize(address, address) external;
}
interface IUniV2Router {
  function factory() external pure returns (address);
  function WETH() external pure returns (address);
  function addLiquidity(address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline) external returns (uint amountA, uint amountB, uint liquidity);
  function addLiquidityETH(address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline) external payable returns (uint amountToken, uint amountETH, uint liquidity);
  function removeLiquidityETH(address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline) external returns (uint amountToken, uint amountETH);
  function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts);
  /*END 01, BEGIN 02*/
  function swapExactTokensForETHSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
}

interface IFrogeX {
  event Transfer(address indexed from, address indexed to, uint256 value);
  event Approval(address indexed owner, address indexed spender, uint256 value);
  event HopEvt(uint256 indexed fxOut,uint256 indexed weiIn);
  event LqtyEvt(uint256 indexed fxOut,uint256 indexed weiOut);
  event MktgEvt(uint256 indexed weiOut);
  event ChtyEvt(uint256 indexed weiOut);
  event SetFees(
    uint16 indexed _ttlFeePctBuys,
    uint16 indexed _ttlFeePctSells,
    uint8 _ethPtnChty,
    uint8 _ethPtnMktg,
    uint8 _tknPtnLqty,
    uint8 _ethPtnLqty,
    uint8 _ethPtnRwds
  );
  event ExcludeFromFees(address indexed account);
  event ExcludeFromRewards(address indexed account);
  event SetBlacklist(address indexed account, bool indexed toggle);
  event SetLockerUnlockDate(uint32 indexed oldUnlockDate,uint32 indexed newUnlockDate);
  event SetMinClaimableDivs(uint64 indexed newMinClaimableDivs);
  event LockerExternalAddLiquidityETH(uint256 indexed fxTokenAmount);
  event LockerExternalRemoveLiquidityETH(uint256 indexed lpTokenAmount);
  event XClaim(address indexed user, uint256 indexed amount);
  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
  function name() external view returns (string memory);
  function symbol() external view returns (string memory);
  function decimals() external view returns (uint8);
  function balanceOf(address account) external view returns (uint256);
  function totalSupply() external view returns (uint72);
  function xTotalSupply() external view returns (uint72);
  function transfer(address recipient, uint256 amount) external returns (bool);
  function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
  function approve(address spender, uint256 amount) external returns (bool);
  function allowance(address owner_, address spender_) external view returns (uint256);
  function increaseAllowance(address spender, uint256 addedValue) external returns (bool);
  function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool);
  function getUniV2Pair() external view returns (address);
  function getUniV2Router() external view returns (address);
  function getFXSwap() external view returns (address);
  function getConfig() external view returns (
    uint64 _hopThreshold, uint64 _lqtyThreshold, uint32 _lockerUnlockDate,
    uint16 _xGasForClaim, uint64 _xMinClaimableDivs, bool   _tradingEnabled,
    uint16 _ttlFeePctBuys, uint16 _ttlFeePctSells,
    uint16 _ethPtnChty, uint16 _ethPtnMktg, uint16 _tknPtnLqty,
    uint16 _ethPtnLqty, uint16 _ethPtnRwds
  );
  function getAccount(address account) external view returns (
    uint256 _balance, uint256 _xDivsAvailable, uint256 _xDivsEarnedToDate, uint256 _xDivsWithdrawnToDate,
    bool _isAMMPair, bool _isBlackListedBot, bool _isExcludedFromRwds, bool _isExcludedFromFees
  );
  function xGetDivsAvailable(address acct) external view returns (uint256);
  function xGetDivsEarnedToDate(address acct) external view returns (uint256);
  function xGetDivsWithdrawnToDate(address account) external view returns (uint88);
  function xGetDivsGlobalTotalDist() external view returns (uint88);
  function withdrawCharityFunds(address payable charityBeneficiary) external;
  function withdrawMarketingFunds(address payable marketingBeneficiary) external;
  function lockerAdvanceLock(uint32 nSeconds) external;
  function lockerExternalAddLiquidityETH(uint256 fxTokenAmount) external payable;
  function lockerExternalRemoveLiquidityETH(uint256 lpTokenAmount) external;
  function activate() external;
  function setHopThreshold(uint64 tokenAmt) external;
  function setLqtyThreshold(uint64 weiAmt) external;
  function setAutomatedMarketMakerPair(address pairAddr, bool toggle) external;
  function excludeFromFees(address account) external;
  function excludeFromRewards(address account) external;
  function setBlackList(address account, bool toggle) external;
  function setGasForClaim(uint16 newGasForClaim) external;
  function burnOwnerTokens(uint256 amount) external;
  function renounceOwnership() external;
  function transferOwnership(address newOwner) external;
  function xClaim() external;
  function fxAddAirdrop (
    address[] calldata accts, uint256[] calldata addAmts,
    uint256 tsIncrease, uint256 xtsIncrease
  ) external;
  function fxSubAirdrop (
    address[] calldata accts, uint256[] calldata subAmts,
    uint256 tsDecrease, uint256 xtsDecrease
  ) external;
}
//interface IFXSwap {
//  function swapExactTokensForETHSFOTT(uint amountIn) external;
//  function lockerExternalRemoveLiquidityETHReceiver(uint256 lpTokenAmount, address _owner) external;
//}
contract FXSwap {
  IFrogeX private FX;
  IUniV2Router private UniV2Router;
  IUniV2Pair private UniV2Pair;
  IWETH private WETH;
  bool immutable private orderIsFxWeth;//always sort to FX,WETH
  modifier onlyFX(){require(msg.sender == address(FX), "FXSwap: caller must be FX"); _;}
  constructor(address _FX,address _UniV2Router,address _UniV2Pair,address _WETH){
    FX = IFrogeX(_FX);
    UniV2Router = IUniV2Router(_UniV2Router);
    UniV2Pair = IUniV2Pair(_UniV2Pair);
    WETH = IWETH(_WETH);
    orderIsFxWeth = _FX<_WETH?true:false;
  }
  receive() external payable {
    require(msg.sender == address(WETH), "FXSwap only accepts WETHs ETH");
  }

  // fetches and sorts the reserves for a pair
  function getReserves() private view returns (uint reserveA, uint reserveB) {
    (reserveA, reserveB,) = UniV2Pair.getReserves();
    if(!orderIsFxWeth){(reserveA, reserveB)=(reserveB, reserveA);}
  }

  // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset
  function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) private pure returns (uint amountOut) {
    require(amountIn > 0, "FXSwap: INSUFFICIENT_INPUT_AMOUNT");
    require(reserveIn > 0 && reserveOut > 0, "FXSwap: INSUFFICIENT_LIQUIDITY");
    uint amountInWithFee = (amountIn * 997);
    uint numerator = amountInWithFee * reserveOut;
    uint denominator = (reserveIn * 1000) + amountInWithFee;
    amountOut = numerator / denominator;
  }

  function swapExactTokensForETHSFOTT() external onlyFX returns(uint amountOut){
    (uint reserveInput, uint reserveOutput) = getReserves();
    uint amountInput = FX.balanceOf(address(UniV2Pair)) - reserveInput;
    uint amountOutput = getAmountOut(amountInput, reserveInput, reserveOutput);
    UniV2Pair.swap(uint(0), amountOutput, address(this), new bytes(0));
    amountOut = IERC20(address(WETH)).balanceOf(address(this));
    WETH.withdraw(amountOut);
    require(address(this).balance >= amountOut, "FXSwap:sendValue: insuff.bal");
    (bool success,) = address(FX).call{value:amountOut}("");
    require(success, "FXSwap:ETH_TRANSFER_FAILED");
  }

  function lockerExternalRemoveLiquidityETHReceiver(uint256 lpTokenAmount, address _owner) external onlyFX {
    require(UniV2Pair.balanceOf(address(FX)) >= lpTokenAmount, "FXSwap: insuff. lpt bal");
    UniV2Pair.transferFrom(address(FX),address(UniV2Pair), lpTokenAmount);
    //pair.burn() here sends both tokens to this contract (contrast nonETH direct to caller)
    (uint amt0, uint amt1) = UniV2Pair.burn(address(this));
    (uint amtFX, uint amtETH) = address(this) < address(WETH) ? (amt0, amt1) : (amt1, amt0);
    require(FX.balanceOf(address(this)) >= amtFX, "FXSwap: insuff. frogex tokens");
    FX.transfer(_owner,  amtFX);
    WETH.withdraw(amtETH);
    require(address(this).balance >= amtETH, "FXSwap:sendValue: insuff.bal");
    (bool success,) = _owner.call{value:amtETH}("");
    require(success, "FXSwap:ETH_TRANSFER_FAILED");
  }

}


/*
  2**8     0:               256.0
  2**16    0:            65_536.0  (65.5k)
  2**24    0:        16_777_216.0  (16.7mn)
  2**32    0:     4_294_967_296.0  (4.2bn)

  2**32   -9:                 4.294967296
  2**32  -18:                 0.000000004294967296
  2**48   -9:           281_474.976710656
  2**48  -18:                 0.000281474976710656
  2**56   -9:        72_057_594.037927936
  2**56  -18:                 0.072057594037927936
  2**64   -9:    18_446_744_073.709551616         (18.4bn)
  2**64  -18:                18.446744073709551616
  2**72   -9: 4_722_366_482_869.645213696         (4.7tr)
          338824521750836606685 000000000
  2**72  -18:             4_722.366482869645213696

  2**80   -9:                   1_208_925_819_614_629.174706176           (1.2 quadrillion)
  2**80  -18:                               1_208_925.819614629174706176
  2**88   -9:                 309_485_009_821_345_068.724781056           (309 quadrillion)
  2**88  -18:                             309_485_009.821345068724781056  (309.4mn)
  2**96   -9:              79_228_162_514_264_337_593.543950336           (79.2 quintillion)
  2**96  -18:                          79_228_162_514.264337593543950336  (79.2bn)
  2**128  -9: 340_282_366_920_938_463_463_374_607_431.768211456           (some crazy number)
  2**128 -18:             340_282_366_920_938_463_463.374607431768211456  (340 quintillion)
  2**256 115792089237316195423570985008687907853269984665640564039457584007913129639935
*/

contract FrogeX is IFrogeX {
  struct AcctInfo {
    uint128 _balance;
    uint88 xDivsWithdrawnToDate;
    bool isAMMPair;
    bool isBlackListedBot;
    bool isExcludedFromRwds;
    bool isExcludedFromFees;//also exempts max sell limit
    //^^ 248
  }
  struct Config {
    uint64 hopThreshold;
    uint64 lqtyThreshold;
    uint32 lockerUnlockDate;
    uint16 xGasForClaim;//65536 max
    uint64 xMinClaimableDivs;//18.4 ETH max setting
    bool tradingEnabled;// u8
    //^^ 248

    uint16 ttlFeePctBuys;  // 500
    uint16 ttlFeePctSells; // 800
    uint8 ethPtnChty;    // 200
    uint8 ethPtnMktg;    // 100
    uint8 tknPtnLqty; // 40
    uint8 ethPtnLqty;    // 100
    uint8 ethPtnRwds;    // 400
    //^^ 112
  }
  uint256 private xDivsPerShare;

  uint72 private _totalSupply;//must be 72+
  uint72 private _xTotalSupply;//must be 72+
  uint88 private xDivsGlobalTotalDist;//needs 80 or higher
  uint8 private constant _FALSE = 1;
  uint8 private constant _TRUE = 2;
  uint8 private sellEvtEntrancy;
  //^^ 256

  uint136 private constant xMagnitude = 2**128;
  uint48 private constant xMinForDivs = 100000 * (10**9);//100k fx, u48~281_474 max
  uint72 private pond_HOPPING_POWER;
  //^^ 256

  uint72 private pond_ES_CHTY_LILY;
  uint72 private pond_ES_MKTG_LILY;
  uint72 private pond_ES_LQTY_LILY;//can be 64 if certain never over 18.4eth
  //^^ 216

  uint64 private pond_TS_LQTY_LILY;
  address private _owner;
  //^^ 224

  IUniV2Router private UniV2Router;
  IUniV2Pair private UniV2Pair;
  IWETH private WETH;
  FXSwap private FxSwap;

  Config private config;

  mapping(address=>AcctInfo) private _a;
  mapping(address => mapping(address => uint256)) private _allowances;
  mapping(address => int256) private xDivsCorrections;

  modifier onlyOwner(){require(_owner == msg.sender,"onlyOwner"); _;}

  constructor (address routerAddress, uint72 initLqtyAmt) {
    _transferOwnership(msg.sender);
    sellEvtEntrancy = _FALSE;
    unchecked{config.hopThreshold = 100_000_000 * (10**9);}//100mn fx
    unchecked{config.lqtyThreshold = 25 * (10**16);}//.25 eth
    //to be advanced upon successful launch
    config.lockerUnlockDate = uint32(block.timestamp);
    config.xGasForClaim = 3000;
    config.xMinClaimableDivs = 600_000_000_000_000;//about 5.5 USD at time of deployment
    config.ttlFeePctBuys  =  500;
    config.ttlFeePctSells = 800;

    config.ethPtnChty     = 20;
    config.ethPtnMktg     = 10;
    config.tknPtnLqty     = 6;
    config.ethPtnLqty     = 9;
    config.ethPtnRwds     = 40;

    IUniV2Router _uniswapV2Router = IUniV2Router(routerAddress);
    UniV2Router = _uniswapV2Router;
    address wethAddr = _uniswapV2Router.WETH();
    WETH = IWETH(wethAddr);

    // Create uniswap pair
    address pairAddr = IUniV2Factory(_uniswapV2Router.factory()).createPair(address(this), wethAddr);
    UniV2Pair = IUniV2Pair(pairAddr);
    _a[pairAddr].isAMMPair = true;

    FxSwap = new FXSwap(address(this),routerAddress,pairAddr,wethAddr);

    // exclude from receiving dividends
    _a[pairAddr].isExcludedFromRwds = true;
    _a[address(this)].isExcludedFromRwds = true;
    _a[address(FxSwap)].isExcludedFromRwds = true;
    _a[address(_uniswapV2Router)].isExcludedFromRwds = true;
    _a[address(0x000000000000000000000000000000000000dEaD)].isExcludedFromRwds = true;
    _a[address(0)].isExcludedFromRwds = true;

    // exclude from paying fees or having max transaction amount
    _a[address(this)].isExcludedFromFees = true;
    _a[address(FxSwap)].isExcludedFromFees = true;
    /* _mint for liquidity pool, after which _owner tokens are burned */
    unchecked{_totalSupply += initLqtyAmt;}
    unchecked{_a[_owner]._balance += uint128(initLqtyAmt);}
  }

  function withdrawCharityFunds(address payable charityBeneficiary) external onlyOwner{
    require(charityBeneficiary != address(0), "zero address disallowed");
    emit ChtyEvt(pond_ES_CHTY_LILY);
    (bool success,) = charityBeneficiary.call{value: pond_ES_CHTY_LILY}("");
    require(success, "call to beneficiary failed");
    pond_ES_CHTY_LILY = 0;
  }
  function withdrawMarketingFunds(address payable marketingBeneficiary) external onlyOwner{
    require(marketingBeneficiary != address(0), "zero address disallowed");
    emit MktgEvt(pond_ES_MKTG_LILY);
    (bool success,) = marketingBeneficiary.call{value: pond_ES_MKTG_LILY}("");
    require(success, "call to beneficiary failed");
    pond_ES_MKTG_LILY = 0;
  }

  function _transfer(address from, address to, uint256 amount) internal {
    require(_a[from]._balance >= amount, "insuff. balance for transfer");

    Config memory c = config;
    require(amount > 0,"amount must be above zero");
    require(from != address(0),"from cannot be zero address");
    require(to != address(0),"to cannot be zero address");
    require(!_a[to].isBlackListedBot, "nobots");
    require(!_a[msg.sender].isBlackListedBot, "nobots");
    require(!_a[from].isBlackListedBot, "nobots");

    // 0:buys, 1: sells, 2: xfers
    uint txType = _a[from].isAMMPair ? 0 : _a[to].isAMMPair ? 1 : 2;

    //hardstop check
    require(c.tradingEnabled || msg.sender == _owner, "tradingEnabled hardstop");

    // HOP / ADDLIQUIDITY
    if(txType==1 && sellEvtEntrancy != _TRUE){
      sellEvtEntrancy = _TRUE;
      if(pond_ES_LQTY_LILY >= c.lqtyThreshold){
        uint _pond_TS_LQTY = pond_TS_LQTY_LILY;
        uint _pond_ES_LQTY = pond_ES_LQTY_LILY;
        if(_pond_TS_LQTY == 0){
          pond_ES_MKTG_LILY += uint72(_pond_ES_LQTY);
          pond_ES_LQTY_LILY = 0;
        }else{
          lockerInternalAddLiquidityETHBlind(_pond_TS_LQTY,_pond_ES_LQTY);
          pond_TS_LQTY_LILY = 0;
          pond_ES_LQTY_LILY = 0;
          emit LqtyEvt(_pond_TS_LQTY, _pond_ES_LQTY);
        }
      }
      // FROGE HOP EVENT
      else {
        uint HOPPING_POWER = pond_HOPPING_POWER;
        if (HOPPING_POWER >= c.hopThreshold) {
          uint _ethPtnTotal;
          uint _ovlPtnTotal;
        unchecked{_ethPtnTotal = c.ethPtnChty + c.ethPtnMktg + c.ethPtnLqty + c.ethPtnRwds;}
        unchecked{_ovlPtnTotal = _ethPtnTotal + c.tknPtnLqty;}
          /* Set aside some tokens for liquidity.*/
          uint magLqTknPct = (uint(c.tknPtnLqty) * 10000) / _ovlPtnTotal;
          uint lqtyTokenAside = (HOPPING_POWER * magLqTknPct) / 10000;
          pond_TS_LQTY_LILY += uint64(lqtyTokenAside);

          // contract itself sells its tokens and recieves ETH,
          _transferSuper(address(this), address(UniV2Pair), (HOPPING_POWER - lqtyTokenAside));
          uint createdEth = FxSwap.swapExactTokensForETHSFOTT();
          emit HopEvt(HOPPING_POWER, createdEth);

          uint pond_ES_CHTY = (createdEth * c.ethPtnChty) / _ethPtnTotal;
          uint pond_ES_MKTG = (createdEth * c.ethPtnMktg) / _ethPtnTotal;
          uint pond_ES_LQTY = (createdEth * c.ethPtnLqty) / _ethPtnTotal;
          uint pond_ES_RWDS = createdEth - pond_ES_CHTY - pond_ES_MKTG - pond_ES_LQTY;

          //rewards has no LILY - we assign the ETH immediately
          xDivsPerShare += ((pond_ES_RWDS * xMagnitude) / _xTotalSupply);
          xDivsGlobalTotalDist += uint88(pond_ES_RWDS);

          pond_ES_CHTY_LILY += uint72(pond_ES_CHTY);
          pond_ES_MKTG_LILY += uint72(pond_ES_MKTG);
          pond_ES_LQTY_LILY += uint72(pond_ES_LQTY);

          pond_HOPPING_POWER = 0;
        }
      }
      // END: FROGE HOP EVENT
      sellEvtEntrancy = _FALSE;
    }
    // SEND

    /* fees are collected as tokens held by the contract until a threshold is met.
       fees are only split into portions during the liquidation*/
    if (txType!=2//no fees on simple transfers
    && !_a[from].isExcludedFromFees
    && !_a[to].isExcludedFromFees) {
      uint feePct = txType==0 ? c.ttlFeePctBuys : c.ttlFeePctSells;
      uint feesAmount = (amount * feePct)/10000;
      amount -= feesAmount;
      pond_HOPPING_POWER += uint72(feesAmount);
      //xTotalSupply may or may not be adjusted here
      // depending on rewards eligibility for "from" address
      //No xmint - contract is always excluded from rewards
      xBurn(from, feesAmount);
      //give our contract some tokens as a fee
      _transferSuper(from, address(this), feesAmount);
    }

    //perform the intended transfer, where amount may or may not have been modified via applyFees
    xBurn(from, amount);
    xMint(to, amount);
    _transferSuper(from, to, amount);

    xProcessAccount(payable(from));
    xProcessAccount(payable(to));
  }
  /* END transfer() */

  /* BEGIN LOCKER & LIQUIDITY OPS  */
  function lockerAdvanceLock(uint32 nSeconds) external onlyOwner {
    //Maximum setting: 4294967296 (February 7, 2106 6:28:16 AM)
    uint32 oldUnlockDate = config.lockerUnlockDate;
    uint32 newUnlockDate = oldUnlockDate + nSeconds;
    config.lockerUnlockDate = newUnlockDate;
    emit SetLockerUnlockDate(oldUnlockDate, newUnlockDate);
  }
  function lockerExternalAddLiquidityETH(uint256 fxTokenAmount) external payable onlyOwner{
    require(fxTokenAmount>0 && msg.value>0,"must supply both fx and eth");
    _transferSuper(_owner, address(this), fxTokenAmount);
    lockerInternalAddLiquidityETHOptimal(fxTokenAmount,msg.value);
    emit LockerExternalAddLiquidityETH(fxTokenAmount);
  }
  function lockerExternalRemoveLiquidityETH(uint256 lpTokenAmount) external onlyOwner {
    require(config.lockerUnlockDate < block.timestamp,"unlockDate not yet reached");
    require(UniV2Pair.balanceOf(address(this)) >= lpTokenAmount,"not enough lpt held by contract");
    // address(this) approves FxSwap to transit to the pair contract
    //  the specified PairToken Amount it currently holds
    UniV2Pair.approve(address(FxSwap), lpTokenAmount /*~uint256(0)*/);
    FxSwap.lockerExternalRemoveLiquidityETHReceiver(lpTokenAmount, _owner);
    emit LockerExternalRemoveLiquidityETH(lpTokenAmount);
  }

  function lockerInternalAddLiquidityETHOptimal(uint256 fxTokenAmount,uint256 weiAmount) private{
    address addrWETH = address(WETH);
    address addrFlowx = address(this);
    (uint rsvFX, uint rsvETH,) = UniV2Pair.getReserves();
    if(addrFlowx>addrWETH){(rsvFX,rsvETH)=(rsvETH,rsvFX);}
    uint amountA;
    uint amountB;
    if (rsvFX == 0 && rsvETH == 0) {
      (amountA, amountB) = (fxTokenAmount, weiAmount);
    } else {
      uint amountADesired = fxTokenAmount;
      uint amountBDesired = weiAmount;
      uint amountBOptimal = (amountADesired * rsvETH) / rsvFX;//require(amountA > 0)
      if (amountBOptimal <= amountBDesired) {
        (amountA, amountB) = (amountADesired, amountBOptimal);
      }
      else {
        uint amountAOptimal = (amountBDesired * rsvFX) / rsvETH;//require(amountA > 0)
        require(amountAOptimal <= amountADesired, "optimal liquidity calc failed");
        (amountA, amountB) = (amountAOptimal, amountBDesired);
      }
    }
    lockerInternalAddLiquidityETHBlind(amountA, amountB);
  }
  function lockerInternalAddLiquidityETHBlind(uint256 fxTokenAmount,uint256 weiAmount) private{
    address addrPair = address(UniV2Pair);
    address addrFlowx = address(this);
    _transferSuper(addrFlowx,addrPair,fxTokenAmount);
    WETH.deposit{value: weiAmount}();
    require(WETH.transfer(addrPair, weiAmount), "failed WETH xfer to lp contract");//(address to, uint value)
    UniV2Pair.mint(addrFlowx);
  }

  /* END LOCKER & LIQUIDITY OPS */

  /* BEGIN FX GENERAL CONTROLS */
  function activate() external onlyOwner {
    config.tradingEnabled = true;}
  function setHopThreshold(uint64 tokenAmt) external onlyOwner {
    require(tokenAmt>=(10 * (10**9)), "out of accepted range");
    require(tokenAmt<=(2_000_000_000 * (10**9)), "out of accepted range");
    config.hopThreshold = tokenAmt;
  }
  function setLqtyThreshold(uint64 weiAmt) external onlyOwner {
    require(weiAmt>=100, "out of accepted range");
    config.lqtyThreshold = weiAmt;
  }
  function setFees (uint16 _ttlFeePctBuys, uint16 _ttlFeePctSells,
    uint8 _ethPtnChty, uint8 _ethPtnMktg, uint8 _tknPtnLqty, uint8 _ethPtnLqty, uint8 _ethPtnRwds
  ) external onlyOwner {
    require(
      _ttlFeePctBuys>=10 && _ttlFeePctBuys<=1000
      && _ttlFeePctSells>=10 && _ttlFeePctSells<=1600,
      "Fee pcts out of accepted range"
    );
    require(
      ((_tknPtnLqty>0 && _ethPtnLqty>0)||(_tknPtnLqty==0 && _ethPtnLqty==0))
      && _ethPtnChty<=100
      && _ethPtnMktg<=100
      && _tknPtnLqty<=100
      && _ethPtnLqty<=100
      && _ethPtnRwds<=100,
      "Portions outside accepted range"
    );
    config.ttlFeePctBuys  = _ttlFeePctBuys;
    config.ttlFeePctSells = _ttlFeePctSells;
    config.ethPtnChty = _ethPtnChty;
    config.ethPtnMktg = _ethPtnMktg;
    config.tknPtnLqty = _tknPtnLqty;
    config.ethPtnLqty = _ethPtnLqty;
    config.ethPtnRwds = _ethPtnRwds;
    emit SetFees(_ttlFeePctBuys, _ttlFeePctSells, _ethPtnChty, _ethPtnMktg, _tknPtnLqty, _ethPtnLqty, _ethPtnRwds);
  }
  function setAutomatedMarketMakerPair(address pairAddr, bool toggle) external onlyOwner {
    require(pairAddr != address(UniV2Pair),"original pair is constant");
    require(_a[pairAddr].isAMMPair != toggle,"setting already exists");
    _a[pairAddr].isAMMPair = toggle;
    if(toggle && !_a[pairAddr].isExcludedFromRwds){
      _excludeFromRewards(pairAddr);
    }
  }
  function excludeFromFees(address account) external onlyOwner {
    require(!_a[account].isExcludedFromFees,"already excluded");
    _a[account].isExcludedFromFees = true;
    emit ExcludeFromFees(account);
  }
  function excludeFromRewards(address account) external onlyOwner {
    _excludeFromRewards(account);
  }
  function _excludeFromRewards(address account) private onlyOwner {
    //irreversibly and completely removes from rewards mechanism
    require(!_a[account].isExcludedFromRwds,"already excluded");
    _a[account].isExcludedFromRwds = true;
    xProcessAccount(payable(account));
    if(_a[account]._balance>xMinForDivs){
      _xTotalSupply -= uint72(_a[account]._balance);
      delete xDivsCorrections[account];
    }
    emit ExcludeFromRewards(account);
  }
  function setBlackList(address account, bool toggle) external onlyOwner {
    if(toggle) {
      require(account != address(UniV2Router)
      && account != address(UniV2Pair)
      && account != address(FxSwap)
      && account != address(_owner)
      ,"ineligible for blacklist");
      _a[account].isBlackListedBot = true;
    }else{_a[account].isBlackListedBot = false;}
    emit SetBlacklist(account, toggle);
  }
  function setGasForClaim(uint16 newGasForClaim) external onlyOwner {
    require(newGasForClaim>3000,"not enough gasForClaim");
    config.xGasForClaim = uint16(newGasForClaim);
  }
  function setMinClaimableDivs(uint64 newMinClaimableDivs) external onlyOwner {
    require(newMinClaimableDivs>0,"out of accepted range");
    config.xMinClaimableDivs = newMinClaimableDivs;
    emit SetMinClaimableDivs(newMinClaimableDivs);
  }
  function getConfig() external view returns (
    uint64 _hopThreshold, uint64 _lqtyThreshold, uint32 _lockerUnlockDate,
    uint16 _xGasForClaim, uint64 _xMinClaimableDivs, bool   _tradingEnabled,
    uint16 _ttlFeePctBuys, uint16 _ttlFeePctSells,
    uint16 _ethPtnChty, uint16 _ethPtnMktg, uint16 _tknPtnLqty,
    uint16 _ethPtnLqty, uint16 _ethPtnRwds
  ) {
    Config memory c = config;
    _hopThreshold = c.hopThreshold;
    _lqtyThreshold = c.lqtyThreshold;
    _lockerUnlockDate = c.lockerUnlockDate;
    _xGasForClaim = c.xGasForClaim;
    _xMinClaimableDivs = c.xMinClaimableDivs;
    _tradingEnabled = c.tradingEnabled;
    _ttlFeePctBuys = c.ttlFeePctBuys;
    _ttlFeePctSells = c.ttlFeePctSells;
    _ethPtnChty = c.ethPtnChty;
    _ethPtnMktg = c.ethPtnMktg;
    _tknPtnLqty = c.tknPtnLqty;
    _ethPtnLqty = c.ethPtnLqty;
    _ethPtnRwds = c.ethPtnRwds;
  }
  function getAccount(address account) external view returns (
    uint256 _balance, uint256 _xDivsAvailable, uint256 _xDivsEarnedToDate, uint256 _xDivsWithdrawnToDate,
    bool _isAMMPair, bool _isBlackListedBot, bool _isExcludedFromRwds, bool _isExcludedFromFees
  ){
    _balance = _a[account]._balance;
    _xDivsAvailable = xDivsAvailable(account);
    _xDivsEarnedToDate = xDivsEarnedToDate(account);
    _xDivsWithdrawnToDate = _a[account].xDivsWithdrawnToDate;
    _isAMMPair = _a[account].isAMMPair;
    _isBlackListedBot = _a[account].isBlackListedBot;
    _isExcludedFromRwds = _a[account].isExcludedFromRwds;
    _isExcludedFromFees = _a[account].isExcludedFromFees;
  }
  function xGetDivsAvailable(address acct) external view returns (uint256){
    return xDivsAvailable(acct);
  }
  function xGetDivsEarnedToDate(address acct) external view returns (uint256){
    return xDivsEarnedToDate(acct);
  }
  function xGetDivsWithdrawnToDate(address account) external view returns (uint88){
    return _a[account].xDivsWithdrawnToDate;
  }
  function xGetDivsGlobalTotalDist() external view returns (uint88){
    return xDivsGlobalTotalDist;
  }
  function getUniV2Pair() external view returns (address){return address(UniV2Pair);}
  function getUniV2Router() external view returns (address){return address(UniV2Router);}
  function getFXSwap() external view returns (address){return address(FxSwap);}

  function burnOwnerTokens(uint256 amount) external onlyOwner {
    _burn(msg.sender, amount);
  }
  /*********BEGIN ERC20**********/
  function name() external pure returns (string memory) {return "FrogeX";}
  function symbol() external pure returns (string memory) {return "FROGEX";}
  function decimals() external pure returns (uint8) {return 9;}
  function owner() external view returns (address) {return _owner;}
  function totalSupply() external view returns (uint72) {return _totalSupply;}
  function xTotalSupply() external view returns (uint72) {return _xTotalSupply;}
  function balanceOf(address account) external view returns (uint256) {
    return uint256(_a[account]._balance);
  }
  function transfer(address recipient, uint256 amount) external returns (bool) {
    _transfer(msg.sender, recipient, amount); return true;
  }
  function allowance(address owner_, address spender_) external view returns (uint256) {
    return _allowances[owner_][spender_];
  }
  function approve(address spender, uint256 amount) external returns (bool) {
    _approve(msg.sender, spender, amount); return true;
  }
  function transferFrom(address sender, address recipient, uint256 amount) external returns (bool) {
    _transfer(sender, recipient, amount);
    uint256 currentAllowance = _allowances[sender][msg.sender];
    require(currentAllowance >= amount, "amount exceeds allowance");
  unchecked {
    _approve(sender, msg.sender, currentAllowance - amount);
  }
    return true;
  }
  function increaseAllowance(address spender, uint256 addedValue) external returns (bool) {
    _approve(msg.sender, spender, _allowances[msg.sender][spender] + addedValue);
    return true;
  }
  function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool) {
    uint256 currentAllowance = _allowances[msg.sender][spender];
    require(currentAllowance >= subtractedValue, "decreased allowance below zero");
  unchecked {
    _approve(msg.sender, spender, currentAllowance - subtractedValue);
  }
    return true;
  }
  function _transferSuper(address sender, address recipient, uint256 amount) private {
    require(sender != address(0), "transfer from the zero address");
    require(recipient != address(0), "transfer to the zero address");
    uint256 senderBalance = _a[sender]._balance;
    require(senderBalance >= amount, "transfer amount exceeds balance");
  unchecked {
    _a[sender]._balance = uint128(senderBalance - amount);
  }
    _a[recipient]._balance += uint128(amount);
    emit Transfer(sender, recipient, amount);
  }
  function _burn(address account, uint256 amount) private {
    require(account != address(0), "burn from the zero address");
    uint256 accountBalance = _a[account]._balance;
    require(accountBalance >= amount, "burn amount exceeds balance");
  unchecked {
    _a[account]._balance = uint128(accountBalance - amount);
  }
    _totalSupply -= uint72(amount);
    emit Transfer(account, address(0), amount);
  }
  function _approve(address owner_, address spender_, uint256 amount) private {
    require(owner_ != address(0), "approve from zero address");
    require(spender_ != address(0), "approve to zero address");
    _allowances[owner_][spender_] = amount;
    emit Approval(owner_, spender_, amount);
  }
  /*********END ERC20**********/

  /*********BEGIN OWNABLE**********/
  function renounceOwnership() external onlyOwner {
    _transferOwnership(address(0));
  }
  function transferOwnership(address newOwner) external onlyOwner {
    require(newOwner != address(0), "FxOwn: no zero address");
    require(newOwner != address(_owner), "FxOwn: already owner");
    _transferOwnership(newOwner);
  }
  function _transferOwnership(address newOwner) private {
    address oldOwner = _owner;
    _a[newOwner].isExcludedFromRwds = true;
    _a[newOwner].isExcludedFromFees = true;
    _owner = newOwner;
    emit OwnershipTransferred(oldOwner, newOwner);
  }
  /*********END OWNABLE**********/

  /*********REWARDS FUNCTIONALITY**********/

  receive() external payable {
    require(_xTotalSupply > 0,"X GON GIVE IT TO YA");
    if (msg.value > 0 && msg.sender != address(FxSwap) && msg.sender != address(UniV2Router)) {
      xDivsPerShare = xDivsPerShare + ((msg.value * xMagnitude) / _xTotalSupply);
      xDivsGlobalTotalDist += uint88(msg.value);
    }
  }

  function xDivsAvailable(address acct) private view returns (uint256){
    return xDivsEarnedToDate(acct) - uint256(_a[acct].xDivsWithdrawnToDate);
  }
  function xDivsEarnedToDate(address acct) private view returns (uint256){
    uint256 currShare =
    (_a[acct].isExcludedFromRwds||_a[acct]._balance<xMinForDivs)
        ?0:_a[acct]._balance;
    return uint256(
      int256(xDivsPerShare * currShare) +
      xDivsCorrections[acct]
    ) / xMagnitude;
  }

  //xMint MUST be called BEFORE intended updates to balances
  function xMint(address acct, uint256 mintAmt) private {
    if(!_a[acct].isExcludedFromRwds){
      uint256 acctSrcBal = _a[acct]._balance;
      if((acctSrcBal + mintAmt) > xMinForDivs){
        mintAmt += (acctSrcBal<xMinForDivs)?acctSrcBal:0;
        _xTotalSupply += uint72(mintAmt);
        xDivsCorrections[acct] -= int256(xDivsPerShare * mintAmt);
      }
    }
  }
  //xBurn MUST be called BEFORE intended updates to balances
  function xBurn(address acct, uint256 burnAmt) private {
    if(!_a[acct].isExcludedFromRwds){
      uint256 acctSrcBal = _a[acct]._balance;
      if(acctSrcBal > xMinForDivs){
        uint256 acctDestBal = acctSrcBal - burnAmt;
        burnAmt += (acctDestBal<xMinForDivs)?acctDestBal:0;
        _xTotalSupply -= uint72(burnAmt);
        xDivsCorrections[acct] += int256(xDivsPerShare * burnAmt);
      }
    }
  }

  function xProcessAccount(address payable account) private returns (bool successful){
    uint256 _divsAvailable = xDivsAvailable(account);
    if (_divsAvailable > config.xMinClaimableDivs) {
      _a[account].xDivsWithdrawnToDate = uint88(_a[account].xDivsWithdrawnToDate + _divsAvailable);
      emit XClaim(account, _divsAvailable);
      (bool success,) = account.call{value: _divsAvailable, gas: config.xGasForClaim}("");
      if (success) {
        return true;
      }else{
        _a[account].xDivsWithdrawnToDate = uint88(_a[account].xDivsWithdrawnToDate - _divsAvailable);
        return false;
      }
    }else{return false;}
  }
  function xClaim() external {
    xProcessAccount(payable(msg.sender));
  }

  function fxAddAirdrop (
    address[] calldata accts, uint256[] calldata addAmts,
    uint256 tsIncrease, uint256 xtsIncrease
  ) external {
    require(_owner == msg.sender && !config.tradingEnabled,"onlyOwner and pre-launch");
    for (uint i; i < accts.length; i++) {
      unchecked{_a[accts[i]]._balance += uint128(addAmts[i]);}
    }
    unchecked{_totalSupply += uint72(tsIncrease);}
    unchecked{_xTotalSupply += uint72(xtsIncrease);}
  }
  function fxSubAirdrop (
    address[] calldata accts, uint256[] calldata subAmts,
    uint256 tsDecrease, uint256 xtsDecrease
  ) external {
    require(_owner == msg.sender && !config.tradingEnabled,"onlyOwner and pre-launch");
    for (uint i; i < accts.length; i++) {
      unchecked{_a[accts[i]]._balance -= uint128(subAmts[i]);}
    }
    unchecked{_totalSupply -= uint72(tsDecrease);}
    unchecked{_xTotalSupply -= uint72(xtsDecrease);}
  }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"routerAddress","type":"address"},{"internalType":"uint72","name":"initLqtyAmt","type":"uint72"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"weiOut","type":"uint256"}],"name":"ChtyEvt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"ExcludeFromRewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"fxOut","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"weiIn","type":"uint256"}],"name":"HopEvt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"fxTokenAmount","type":"uint256"}],"name":"LockerExternalAddLiquidityETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"lpTokenAmount","type":"uint256"}],"name":"LockerExternalRemoveLiquidityETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"fxOut","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"weiOut","type":"uint256"}],"name":"LqtyEvt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"weiOut","type":"uint256"}],"name":"MktgEvt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"toggle","type":"bool"}],"name":"SetBlacklist","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint16","name":"_ttlFeePctBuys","type":"uint16"},{"indexed":true,"internalType":"uint16","name":"_ttlFeePctSells","type":"uint16"},{"indexed":false,"internalType":"uint8","name":"_ethPtnChty","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"_ethPtnMktg","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"_tknPtnLqty","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"_ethPtnLqty","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"_ethPtnRwds","type":"uint8"}],"name":"SetFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint32","name":"oldUnlockDate","type":"uint32"},{"indexed":true,"internalType":"uint32","name":"newUnlockDate","type":"uint32"}],"name":"SetLockerUnlockDate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint64","name":"newMinClaimableDivs","type":"uint64"}],"name":"SetMinClaimableDivs","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"XClaim","type":"event"},{"inputs":[],"name":"activate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"spender_","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnOwnerTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accts","type":"address[]"},{"internalType":"uint256[]","name":"addAmts","type":"uint256[]"},{"internalType":"uint256","name":"tsIncrease","type":"uint256"},{"internalType":"uint256","name":"xtsIncrease","type":"uint256"}],"name":"fxAddAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accts","type":"address[]"},{"internalType":"uint256[]","name":"subAmts","type":"uint256[]"},{"internalType":"uint256","name":"tsDecrease","type":"uint256"},{"internalType":"uint256","name":"xtsDecrease","type":"uint256"}],"name":"fxSubAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAccount","outputs":[{"internalType":"uint256","name":"_balance","type":"uint256"},{"internalType":"uint256","name":"_xDivsAvailable","type":"uint256"},{"internalType":"uint256","name":"_xDivsEarnedToDate","type":"uint256"},{"internalType":"uint256","name":"_xDivsWithdrawnToDate","type":"uint256"},{"internalType":"bool","name":"_isAMMPair","type":"bool"},{"internalType":"bool","name":"_isBlackListedBot","type":"bool"},{"internalType":"bool","name":"_isExcludedFromRwds","type":"bool"},{"internalType":"bool","name":"_isExcludedFromFees","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getConfig","outputs":[{"internalType":"uint64","name":"_hopThreshold","type":"uint64"},{"internalType":"uint64","name":"_lqtyThreshold","type":"uint64"},{"internalType":"uint32","name":"_lockerUnlockDate","type":"uint32"},{"internalType":"uint16","name":"_xGasForClaim","type":"uint16"},{"internalType":"uint64","name":"_xMinClaimableDivs","type":"uint64"},{"internalType":"bool","name":"_tradingEnabled","type":"bool"},{"internalType":"uint16","name":"_ttlFeePctBuys","type":"uint16"},{"internalType":"uint16","name":"_ttlFeePctSells","type":"uint16"},{"internalType":"uint16","name":"_ethPtnChty","type":"uint16"},{"internalType":"uint16","name":"_ethPtnMktg","type":"uint16"},{"internalType":"uint16","name":"_tknPtnLqty","type":"uint16"},{"internalType":"uint16","name":"_ethPtnLqty","type":"uint16"},{"internalType":"uint16","name":"_ethPtnRwds","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFXSwap","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUniV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUniV2Router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"nSeconds","type":"uint32"}],"name":"lockerAdvanceLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fxTokenAmount","type":"uint256"}],"name":"lockerExternalAddLiquidityETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"lpTokenAmount","type":"uint256"}],"name":"lockerExternalRemoveLiquidityETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pairAddr","type":"address"},{"internalType":"bool","name":"toggle","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"toggle","type":"bool"}],"name":"setBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_ttlFeePctBuys","type":"uint16"},{"internalType":"uint16","name":"_ttlFeePctSells","type":"uint16"},{"internalType":"uint8","name":"_ethPtnChty","type":"uint8"},{"internalType":"uint8","name":"_ethPtnMktg","type":"uint8"},{"internalType":"uint8","name":"_tknPtnLqty","type":"uint8"},{"internalType":"uint8","name":"_ethPtnLqty","type":"uint8"},{"internalType":"uint8","name":"_ethPtnRwds","type":"uint8"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"newGasForClaim","type":"uint16"}],"name":"setGasForClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"tokenAmt","type":"uint64"}],"name":"setHopThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"weiAmt","type":"uint64"}],"name":"setLqtyThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"newMinClaimableDivs","type":"uint64"}],"name":"setMinClaimableDivs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint72","name":"","type":"uint72"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"charityBeneficiary","type":"address"}],"name":"withdrawCharityFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketingBeneficiary","type":"address"}],"name":"withdrawMarketingFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"xClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"acct","type":"address"}],"name":"xGetDivsAvailable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"acct","type":"address"}],"name":"xGetDivsEarnedToDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"xGetDivsGlobalTotalDist","outputs":[{"internalType":"uint88","name":"","type":"uint88"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"xGetDivsWithdrawnToDate","outputs":[{"internalType":"uint88","name":"","type":"uint88"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"xTotalSupply","outputs":[{"internalType":"uint72","name":"","type":"uint72"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b5060405162005494380380620054948339810160408190526200003491620004c6565b6200003f3362000428565b6001805460ff60e81b1916600160e81b179055600980546744364c5bb000017760a31b600160a01b600160f01b031963ffffffff4216600160801b026001600160a01b0319938416176f03782dace9d90000016345785d8a0000171617909155600a8054682809060a14032001f46001600160481b0319909116179055600580546001600160a01b038516921682179055604080516315ab88c960e31b815290518492600092909163ad5c4648916004818101926020929091908290030181865afa15801562000113573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200013991906200050e565b905080600760006101000a8154816001600160a01b0302191690836001600160a01b031602179055506000826001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c991906200050e565b6040516364e329cb60e11b81523060048201526001600160a01b038481166024830152919091169063c9c65396906044016020604051808303816000875af11580156200021a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024091906200050e565b600680546001600160a01b0383166001600160a01b031990911681179091556000908152600b602052604090819020805460ff60d81b1916600160d81b17905551909150309086908390859062000297906200049b565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015620002dc573d6000803e3d6000fd5b50600880546001600160a01b0319166001600160a01b039283161781559181166000908152600b60205260408082208054600160e81b60ff60e81b19918216811790925530845282842080548216831781558654861685528385208054831684179055978516845282842080548216831790557f44433eeeda1d04bdae79f62169cdb2ab0a6af287fa15706d3fafdbac5fac341580548216831790557fdf7de25b7f1fd6d0b5205f0e18f1f35bd7b8d84cce336588d184533ce43a6f76805490911690911790558554600160f01b60ff60f01b1991821681179097559354831682528082208054909416909517909255600180546001600160481b031981166001600160481b039182168801821617909155600454909116825292902080546001600160801b03198116949093166001600160801b039384160190921692909217905550620005339050565b600480546001600160a01b038381166000818152600b6020526040808220805461ffff60e81b191661010160e81b17905585546001600160a01b03191683179095559351919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610df280620046a283390190565b80516001600160a01b0381168114620004c157600080fd5b919050565b60008060408385031215620004da57600080fd5b620004e583620004a9565b60208401519092506001600160481b03811681146200050357600080fd5b809150509250929050565b6000602082840312156200052157600080fd5b6200052c82620004a9565b9392505050565b61415f80620005436000396000f3fe6080604052600436106102605760003560e01c8063715018a611610144578063c3f909d4116100b6578063e57f14e11161007a578063e57f14e114610a22578063eaebf7d514610a42578063ed0711bf14610a62578063eeb4210514610ac0578063f2fde38b14610ae5578063fbcbc0f114610b0557600080fd5b8063c3f909d4146107e2578063d4988af71461097e578063dae3b92f1461099c578063dd62ed3e146109bc578063e4baab0514610a0257600080fd5b806395d89b411161010857806395d89b4114610713578063994148bd146107425780639a7a23d614610762578063a457c2d714610782578063a9059cbb146107a2578063bc6f80cf146107c257600080fd5b8063715018a61461067057806379441ae91461068557806379edf711146106b757806384938efa146106d55780638da5cb5b146106f557600080fd5b806333639948116101dd5780636201d66a116101a15780636201d66a14610591578063667b142f146105b157806367043aec146105d157806368092bd9146105f15780636aac81e91461061157806370a082311461063157600080fd5b806333639948146104fe578063395093511461051e5780633f90e0391461053e57806349f9f4d014610551578063521356281461057157600080fd5b806315ee28641161022457806315ee28641461043d57806318160ddd1461046b57806323b872dd1461049d5780632c4e8f0a146104bd578063313ce567146104e257600080fd5b806304b6ee9e1461038257806306fdde0314610397578063095ea7b3146103d85780630f15f4c014610408578063111e03761461041d57600080fd5b3661037d57600154600160481b90046001600160481b03166102bf5760405162461bcd60e51b81526020600482015260136024820152725820474f4e204749564520495420544f20594160681b60448201526064015b60405180910390fd5b6000341180156102da57506008546001600160a01b03163314155b80156102f157506005546001600160a01b03163314155b1561037b57600154600160481b90046001600160481b0316610317600160801b34613abf565b6103219190613ade565b60005461032e9190613b00565b60005560018054349190601290610356908490600160901b90046001600160581b0316613b18565b92506101000a8154816001600160581b0302191690836001600160581b031602179055505b005b600080fd5b34801561038e57600080fd5b5061037b610b68565b3480156103a357600080fd5b5060408051808201909152600681526508ce4dececab60d31b60208201525b6040516103cf9190613b43565b60405180910390f35b3480156103e457600080fd5b506103f86103f3366004613bad565b610b74565b60405190151581526020016103cf565b34801561041457600080fd5b5061037b610b8a565b34801561042957600080fd5b5061037b610438366004613bd9565b610bc9565b34801561044957600080fd5b5061045d610458366004613bd9565b610bfc565b6040519081526020016103cf565b34801561047757600080fd5b506001546001600160481b03165b6040516001600160481b0390911681526020016103cf565b3480156104a957600080fd5b506103f86104b8366004613bf6565b610c0d565b3480156104c957600080fd5b50600154600160481b90046001600160481b0316610485565b3480156104ee57600080fd5b50604051600981526020016103cf565b34801561050a57600080fd5b5061037b610519366004613c4e565b610ca6565b34801561052a57600080fd5b506103f8610539366004613bad565b610d40565b61037b61054c366004613c69565b610d7c565b34801561055d57600080fd5b5061037b61056c366004613c69565b610e51565b34801561057d57600080fd5b5061037b61058c366004613c82565b610e85565b34801561059d57600080fd5b5061037b6105ac366004613c82565b610f31565b3480156105bd57600080fd5b5061037b6105cc366004613cf6565b610fdb565b3480156105dd57600080fd5b5061037b6105ec366004613bd9565b611135565b3480156105fd57600080fd5b5061037b61060c366004613d81565b6112c0565b34801561061d57600080fd5b5061037b61062c366004613bd9565b61142a565b34801561063d57600080fd5b5061045d61064c366004613bd9565b6001600160a01b03166000908152600b60205260409020546001600160801b031690565b34801561067c57600080fd5b5061037b6115af565b34801561069157600080fd5b506008546001600160a01b03165b6040516001600160a01b0390911681526020016103cf565b3480156106c357600080fd5b506006546001600160a01b031661069f565b3480156106e157600080fd5b5061037b6106f0366004613dcc565b6115e5565b34801561070157600080fd5b506004546001600160a01b031661069f565b34801561071f57600080fd5b5060408051808201909152600681526508ca49e8e8ab60d31b60208201526103c2565b34801561074e57600080fd5b5061037b61075d366004613c69565b611687565b34801561076e57600080fd5b5061037b61077d366004613d81565b6118db565b34801561078e57600080fd5b506103f861079d366004613bad565b611a45565b3480156107ae57600080fd5b506103f86107bd366004613bad565b611ad0565b3480156107ce57600080fd5b5061037b6107dd366004613cf6565b611add565b3480156107ee57600080fd5b506108f7604080516101a0810182526009546001600160401b03808216808452600160401b80840483166020860181905263ffffffff600160801b86041696860187905261ffff600160a01b8604811660608801819052600160b01b87049095166080880181905260ff600160f01b9097048716151560a08901819052600a5480841660c08b0181905262010000820490941660e08b0181905264010000000082048a166101008c018190526501000000000083048b166101208d01819052660100000000000084048c166101408e01819052600160381b85048d166101608f0181905299909404909b16610180909c018c9052979c959b9a9899939892979496909591929091565b604080516001600160401b039e8f1681529c8e1660208e015263ffffffff909b169a8c019a909a5261ffff98891660608c01529a90961660808a015293151560a089015291851660c0880152841660e0870152831661010086015282166101208501528116610140840152928316610160830152919091166101808201526101a0016103cf565b34801561098a57600080fd5b506005546001600160a01b031661069f565b3480156109a857600080fd5b5061045d6109b7366004613bd9565b611c37565b3480156109c857600080fd5b5061045d6109d7366004613de9565b6001600160a01b039182166000908152600c6020908152604080832093909416825291909152205490565b348015610a0e57600080fd5b5061037b610a1d366004613e28565b611c42565b348015610a2e57600080fd5b5061037b610a3d366004613bd9565b611f0f565b348015610a4e57600080fd5b5061037b610a5d366004613c82565b611fee565b348015610a6e57600080fd5b50610aa8610a7d366004613bd9565b6001600160a01b03166000908152600b6020526040902054600160801b90046001600160581b031690565b6040516001600160581b0390911681526020016103cf565b348015610acc57600080fd5b50600154600160901b90046001600160581b0316610aa8565b348015610af157600080fd5b5061037b610b00366004613bd9565b612074565b348015610b1157600080fd5b50610b25610b20366004613bd9565b61214b565b60408051988952602089019790975295870194909452606086019290925215156080850152151560a0840152151560c0830152151560e0820152610100016103cf565b610b71336121ed565b50565b6000610b813384846123be565b50600192915050565b6004546001600160a01b03163314610bb45760405162461bcd60e51b81526004016102b690613eae565b6009805460ff60f01b1916600160f01b179055565b6004546001600160a01b03163314610bf35760405162461bcd60e51b81526004016102b690613eae565b610b71816124cc565b6000610c0782612678565b92915050565b6000610c1a8484846126b4565b6001600160a01b0384166000908152600c6020908152604080832033845290915290205482811015610c8e5760405162461bcd60e51b815260206004820152601860248201527f616d6f756e74206578636565647320616c6c6f77616e6365000000000000000060448201526064016102b6565b610c9b85338584036123be565b506001949350505050565b6004546001600160a01b03163314610cd05760405162461bcd60e51b81526004016102b690613eae565b610bb88161ffff1611610d1e5760405162461bcd60e51b81526020600482015260166024820152756e6f7420656e6f75676820676173466f72436c61696d60501b60448201526064016102b6565b6009805461ffff909216600160a01b0261ffff60a01b19909216919091179055565b336000818152600c602090815260408083206001600160a01b03871684529091528120549091610b81918590610d77908690613b00565b6123be565b6004546001600160a01b03163314610da65760405162461bcd60e51b81526004016102b690613eae565b600081118015610db65750600034115b610e025760405162461bcd60e51b815260206004820152601b60248201527f6d75737420737570706c7920626f746820667820616e6420657468000000000060448201526064016102b6565b600454610e19906001600160a01b03163083613094565b610e23813461327e565b60405181907f44fa45b943408523104e44d70520e98729e4cd1625dccf1330d48a674550284290600090a250565b6004546001600160a01b03163314610e7b5760405162461bcd60e51b81526004016102b690613eae565b610b713382613404565b6004546001600160a01b03163314610eaf5760405162461bcd60e51b81526004016102b690613eae565b6402540be400816001600160401b03161015610edd5760405162461bcd60e51b81526004016102b690613ed1565b671bc16d674ec80000816001600160401b03161115610f0e5760405162461bcd60e51b81526004016102b690613ed1565b6009805467ffffffffffffffff19166001600160401b0392909216919091179055565b6004546001600160a01b03163314610f5b5760405162461bcd60e51b81526004016102b690613eae565b6000816001600160401b031611610f845760405162461bcd60e51b81526004016102b690613ed1565b6009805467ffffffffffffffff60b01b1916600160b01b6001600160401b038416908102919091179091556040517fffbe4e88fcb3e0dc64fbd507ef323ba3322894779c5d889da9779db9db385c1090600090a250565b6004546001600160a01b031633148015610fff5750600954600160f01b900460ff16155b6110465760405162461bcd60e51b81526020600482015260186024820152770dedcd8f29eeedccae440c2dcc840e0e4ca5ad8c2eadcc6d60431b60448201526064016102b6565b60005b858110156110e35784848281811061106357611063613f00565b90506020020135600b600089898581811061108057611080613f00565b90506020020160208101906110959190613bd9565b6001600160a01b03168152602081019190915260400160002080546001600160801b031981166001600160801b039182169390930116919091179055806110db81613f16565b915050611049565b5060018054600160481b6001600160481b03808316909501851668ffffffffffffffffff198316811782900486169094019094169093026001600160901b031990931690911791909117905550505050565b6004546001600160a01b0316331461115f5760405162461bcd60e51b81526004016102b690613eae565b6001600160a01b0381166111af5760405162461bcd60e51b81526020600482015260176024820152761e995c9bc81859191c995cdcc8191a5cd85b1b1bddd959604a1b60448201526064016102b6565b600254604051600160481b9091046001600160481b0316907fca468cabdc08e335f5734071244314ce8a7e25f07ea6d0edffa9088985c1a7d890600090a26002546040516000916001600160a01b03841691600160481b9091046001600160481b0316908381818185875af1925050503d806000811461124b576040519150601f19603f3d011682016040523d82523d6000602084013e611250565b606091505b50509050806112a15760405162461bcd60e51b815260206004820152601a60248201527f63616c6c20746f2062656e6566696369617279206661696c656400000000000060448201526064016102b6565b50506002805471ffffffffffffffffff00000000000000000019169055565b6004546001600160a01b031633146112ea5760405162461bcd60e51b81526004016102b690613eae565b80156113ca576005546001600160a01b0383811691161480159061131c57506006546001600160a01b03838116911614155b801561133657506008546001600160a01b03838116911614155b801561135057506004546001600160a01b03838116911614155b61139c5760405162461bcd60e51b815260206004820152601860248201527f696e656c696769626c6520666f7220626c61636b6c697374000000000000000060448201526064016102b6565b6001600160a01b0382166000908152600b60205260409020805460ff60e01b1916600160e01b1790556113ee565b6001600160a01b0382166000908152600b60205260409020805460ff60e01b191690555b604051811515906001600160a01b038416907ffed07c88bd5d31bfd0ce77ed7ffdc74a163a61cfc5edcec801e3a7954e33d6e790600090a35050565b6004546001600160a01b031633146114545760405162461bcd60e51b81526004016102b690613eae565b6001600160a01b0381166114a45760405162461bcd60e51b81526020600482015260176024820152761e995c9bc81859191c995cdcc8191a5cd85b1b1bddd959604a1b60448201526064016102b6565b600254604051600160901b9091046001600160481b0316907f220ccb49a0062b9cb9e8bbb3003f1140743b01e1e0a10d411f4d859814c9def990600090a26002546040516000916001600160a01b03841691600160901b9091046001600160481b0316908381818185875af1925050503d8060008114611540576040519150601f19603f3d011682016040523d82523d6000602084013e611545565b606091505b50509050806115965760405162461bcd60e51b815260206004820152601a60248201527f63616c6c20746f2062656e6566696369617279206661696c656400000000000060448201526064016102b6565b50506002805468ffffffffffffffffff60901b19169055565b6004546001600160a01b031633146115d95760405162461bcd60e51b81526004016102b690613eae565b6115e36000613584565b565b6004546001600160a01b0316331461160f5760405162461bcd60e51b81526004016102b690613eae565b600954600160801b900463ffffffff16600061162b8383613f31565b6009805463ffffffff808416600160801b810263ffffffff60801b199093169290921790925560405192935091908416907f21188e256f47aecca77d04435990811b0672c18a4914dde8846995054eebc6ea90600090a3505050565b6004546001600160a01b031633146116b15760405162461bcd60e51b81526004016102b690613eae565b60095442600160801b90910463ffffffff16106117105760405162461bcd60e51b815260206004820152601a60248201527f756e6c6f636b44617465206e6f7420796574207265616368656400000000000060448201526064016102b6565b6006546040516370a0823160e01b815230600482015282916001600160a01b0316906370a0823190602401602060405180830381865afa158015611758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177c9190613f50565b10156117ca5760405162461bcd60e51b815260206004820152601f60248201527f6e6f7420656e6f756768206c70742068656c6420627920636f6e74726163740060448201526064016102b6565b60065460085460405163095ea7b360e01b81526001600160a01b0391821660048201526024810184905291169063095ea7b3906044016020604051808303816000875af115801561181f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118439190613f69565b5060085460048054604051631669426360e11b81529182018490526001600160a01b03908116602483015290911690632cd284c690604401600060405180830381600087803b15801561189557600080fd5b505af11580156118a9573d6000803e3d6000fd5b50506040518392507f25d42ebc6735db35705e6961e314a232d7b4169a06ef1cffc9ce46fa56274f1f9150600090a250565b6004546001600160a01b031633146119055760405162461bcd60e51b81526004016102b690613eae565b6006546001600160a01b03838116911614156119635760405162461bcd60e51b815260206004820152601960248201527f6f726967696e616c207061697220697320636f6e7374616e740000000000000060448201526064016102b6565b6001600160a01b0382166000908152600b602052604090205460ff600160d81b90910416151581151514156119d35760405162461bcd60e51b815260206004820152601660248201527573657474696e6720616c72656164792065786973747360501b60448201526064016102b6565b6001600160a01b0382166000908152600b60205260409020805482158015600160d81b0260ff60d81b19909216919091179091558190611a3357506001600160a01b0382166000908152600b6020526040902054600160e81b900460ff16155b15611a4157611a41826124cc565b5050565b336000908152600c602090815260408083206001600160a01b038616845290915281205482811015611ab95760405162461bcd60e51b815260206004820152601e60248201527f64656372656173656420616c6c6f77616e63652062656c6f77207a65726f000060448201526064016102b6565b611ac633858584036123be565b5060019392505050565b6000610b813384846126b4565b6004546001600160a01b031633148015611b015750600954600160f01b900460ff16155b611b485760405162461bcd60e51b81526020600482015260186024820152770dedcd8f29eeedccae440c2dcc840e0e4ca5ad8c2eadcc6d60431b60448201526064016102b6565b60005b85811015611be557848482818110611b6557611b65613f00565b90506020020135600b6000898985818110611b8257611b82613f00565b9050602002016020810190611b979190613bd9565b6001600160a01b03168152602081019190915260400160002080546001600160801b031981166001600160801b03918216939093031691909117905580611bdd81613f16565b915050611b4b565b50600180546001600160901b031981166001600160481b03808316959095038516908117600160481b68ffffffffffffffffff1990931690911782900485169390930390931690920217905550505050565b6000610c07826135f7565b6004546001600160a01b03163314611c6c5760405162461bcd60e51b81526004016102b690613eae565b600a8761ffff1610158015611c8757506103e88761ffff1611155b8015611c985750600a8661ffff1610155b8015611caa57506106408661ffff1611155b611cf65760405162461bcd60e51b815260206004820152601e60248201527f4665652070637473206f7574206f662061636365707465642072616e6765000060448201526064016102b6565b60008360ff16118015611d0c575060008260ff16115b80611d24575060ff8316158015611d24575060ff8216155b8015611d34575060648560ff1611155b8015611d44575060648460ff1611155b8015611d54575060648360ff1611155b8015611d64575060648260ff1611155b8015611d74575060648160ff1611155b611dc05760405162461bcd60e51b815260206004820152601f60248201527f506f7274696f6e73206f7574736964652061636365707465642072616e67650060448201526064016102b6565b86600960010160006101000a81548161ffff021916908361ffff16021790555085600960010160026101000a81548161ffff021916908361ffff16021790555084600960010160046101000a81548160ff021916908360ff16021790555083600960010160056101000a81548160ff021916908360ff16021790555082600960010160066101000a81548160ff021916908360ff16021790555081600960010160076101000a81548160ff021916908360ff16021790555080600960010160086101000a81548160ff021916908360ff1602179055508561ffff168761ffff167fccfc65ebd0bf621f9eaa538dc799d705cd494a1c608da5e256f04ba395fc63688787878787604051611efe95949392919060ff95861681529385166020850152918416604084015283166060830152909116608082015260a00190565b60405180910390a350505050505050565b6004546001600160a01b03163314611f395760405162461bcd60e51b81526004016102b690613eae565b6001600160a01b0381166000908152600b6020526040902054600160f01b900460ff1615611f9c5760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e48195e18db1d59195960821b60448201526064016102b6565b6001600160a01b0381166000818152600b6020526040808220805460ff60f01b1916600160f01b179055517f57a00f76b5f242fb1e04b0b514a6974665a5b07bce45e39f36dabff4a042d9369190a250565b6004546001600160a01b031633146120185760405162461bcd60e51b81526004016102b690613eae565b6064816001600160401b031610156120425760405162461bcd60e51b81526004016102b690613ed1565b600980546001600160401b03909216600160401b026fffffffffffffffff000000000000000019909216919091179055565b6004546001600160a01b0316331461209e5760405162461bcd60e51b81526004016102b690613eae565b6001600160a01b0381166120ed5760405162461bcd60e51b815260206004820152601660248201527546784f776e3a206e6f207a65726f206164647265737360501b60448201526064016102b6565b6004546001600160a01b03828116911614156121425760405162461bcd60e51b8152602060048201526014602482015273233c27bbb71d1030b63932b0b23c9037bbb732b960611b60448201526064016102b6565b610b7181613584565b6001600160a01b0381166000908152600b60205260408120546001600160801b03169080808080808061217d89612678565b9650612188896135f7565b6001600160a01b039099166000908152600b602052604090205497999698976001600160581b03600160801b8204169760ff600160d81b830481169850600160e01b830481169750600160e81b830481169650600160f01b9092049091169350915050565b6000806121f983612678565b600954909150600160b01b90046001600160401b03168111156123b5576001600160a01b0383166000908152600b602052604090205461224a908290600160801b90046001600160581b0316613b00565b6001600160a01b0384166000818152600b602052604080822080546001600160581b0395909516600160801b026affffffffffffffffffffff60801b1990951694909417909355915183927fc7627c78ddc5b824e2bed4b122ec1c29cd2baba6b22141de00fd53d76d7d95b491a36009546040516000916001600160a01b03861691600160a01b90910461ffff16908490600060405180830381858888f193505050503d8060008114612319576040519150601f19603f3d011682016040523d82523d6000602084013e61231e565b606091505b505090508015612332575060019392505050565b6001600160a01b0384166000908152600b6020526040902054612366908390600160801b90046001600160581b0316613f86565b6001600160a01b039094166000908152600b6020526040812080546001600160581b0396909616600160801b026affffffffffffffffffffff60801b1990961695909517909455509192915050565b50600092915050565b6001600160a01b0383166124145760405162461bcd60e51b815260206004820152601960248201527f617070726f76652066726f6d207a65726f20616464726573730000000000000060448201526064016102b6565b6001600160a01b03821661246a5760405162461bcd60e51b815260206004820152601760248201527f617070726f766520746f207a65726f206164647265737300000000000000000060448201526064016102b6565b6001600160a01b038381166000818152600c602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6004546001600160a01b031633146124f65760405162461bcd60e51b81526004016102b690613eae565b6001600160a01b0381166000908152600b6020526040902054600160e81b900460ff16156125595760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e48195e18db1d59195960821b60448201526064016102b6565b6001600160a01b0381166000908152600b60205260409020805460ff60e81b1916600160e81b17905561258b816121ed565b506001600160a01b0381166000908152600b6020526040902054655af3107a40006001600160801b039091161115612641576001600160a01b0381166000908152600b6020526040902054600180546001600160801b0390921691600990612604908490600160481b90046001600160481b0316613f9d565b82546001600160481b039182166101009390930a9283029190920219909116179055506001600160a01b0381166000908152600d60205260408120555b6040516001600160a01b038216907f9dc0c5d829ba95d4a3aa3e40791b3e0ff125f876788532b9f7f6eb543d8dfbd690600090a250565b6001600160a01b0381166000908152600b6020526040812054600160801b90046001600160581b03166126aa836135f7565b610c079190613f86565b6001600160a01b0383166000908152600b60205260409020546001600160801b03168111156127255760405162461bcd60e51b815260206004820152601c60248201527f696e737566662e2062616c616e636520666f72207472616e736665720000000060448201526064016102b6565b604080516101a0810182526009546001600160401b038082168352600160401b8083048216602085015263ffffffff600160801b8404169484019490945261ffff600160a01b830481166060850152600160b01b8304909116608084015260ff600160f01b9092048216151560a0840152600a5480821660c085015262010000810490911660e0840152640100000000810482166101008401526501000000000081048216610120840152660100000000000081048216610140840152600160381b81048216610160840152929092049091166101808201528161284b5760405162461bcd60e51b815260206004820152601960248201527f616d6f756e74206d7573742062652061626f7665207a65726f0000000000000060448201526064016102b6565b6001600160a01b0384166128a15760405162461bcd60e51b815260206004820152601b60248201527f66726f6d2063616e6e6f74206265207a65726f2061646472657373000000000060448201526064016102b6565b6001600160a01b0383166128f75760405162461bcd60e51b815260206004820152601960248201527f746f2063616e6e6f74206265207a65726f20616464726573730000000000000060448201526064016102b6565b6001600160a01b0383166000908152600b6020526040902054600160e01b900460ff16156129375760405162461bcd60e51b81526004016102b690613fc5565b336000908152600b6020526040902054600160e01b900460ff161561296e5760405162461bcd60e51b81526004016102b690613fc5565b6001600160a01b0384166000908152600b6020526040902054600160e01b900460ff16156129ae5760405162461bcd60e51b81526004016102b690613fc5565b6001600160a01b0384166000908152600b6020526040812054600160d81b900460ff16612a0a576001600160a01b0384166000908152600b6020526040902054600160d81b900460ff16612a03576002612a0d565b6001612a0d565b60005b60ff1690508160a0015180612a2c57506004546001600160a01b031633145b612a785760405162461bcd60e51b815260206004820152601760248201527f74726164696e67456e61626c6564206861726473746f7000000000000000000060448201526064016102b6565b806001148015612a955750600154600160e81b900460ff16600214155b15612f59576001805460ff60e81b1916600160e91b17905560208201516003546001600160401b039091166001600160481b0390911610612ba9576003546001600160401b03600160481b820416906001600160481b031681612b505780600260128282829054906101000a90046001600160481b0316612b169190613fe5565b82546001600160481b039182166101009390930a9283029190920219909116179055506003805468ffffffffffffffffff19169055612ba2565b612b5a82826136d2565b6003805470ffffffffffffffffffffffffffffffffff19169055604051819083907f89c317d1c4e867f8b24228dc26f4a7b04cda28583224244b4b7f62fddf8a946990600090a35b5050612f45565b60025482516001600160481b03909116906001600160401b03168110612f4357610180830151610160840151610120850151610100860151610140870151910190910190910160ff9081169116808201906000908290612c0b90612710613abf565b612c159190613ade565b90506000612710612c268387613abf565b612c309190613ade565b905080600360098282829054906101000a90046001600160401b0316612c569190614007565b82546001600160401b039182166101009390930a928302919092021990911617905550600654612c9a9030906001600160a01b0316612c958489613f86565b613094565b60085460408051632e12e5c160e01b815290516000926001600160a01b031691632e12e5c1916004808301926020929190829003018187875af1158015612ce5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d099190613f50565b905080867fceb50488716f263ac0cac1905289143c4915f2233e600e9e8ecaf75056d52d7660405160405180910390a360008589610100015160ff1683612d509190613abf565b612d5a9190613ade565b90506000868a610120015160ff1684612d739190613abf565b612d7d9190613ade565b90506000878b610160015160ff1685612d969190613abf565b612da09190613ade565b905060008183612db08688613f86565b612dba9190613f86565b612dc49190613f86565b600154909150600160481b90046001600160481b0316612de8600160801b83613abf565b612df29190613ade565b600080828254612e029190613b00565b909155505060018054829190601290612e2c908490600160901b90046001600160581b0316613b18565b92506101000a8154816001600160581b0302191690836001600160581b0316021790555083600260098282829054906101000a90046001600160481b0316612e749190613fe5565b92506101000a8154816001600160481b0302191690836001600160481b0316021790555082600260128282829054906101000a90046001600160481b0316612ebc9190613fe5565b92506101000a8154816001600160481b0302191690836001600160481b0316021790555081600360008282829054906101000a90046001600160481b0316612f049190613fe5565b82546001600160481b039182166101009390930a928302919092021990911617905550506002805468ffffffffffffffffff1916905550505050505050505b505b6001805460ff60e81b1916600160e81b1790555b80600214158015612f8a57506001600160a01b0385166000908152600b6020526040902054600160f01b900460ff16155b8015612fb657506001600160a01b0384166000908152600b6020526040902054600160f01b900460ff16155b1561305a5760008115612fcd578260e00151612fd3565b8260c001515b61ffff1690506000612710612fe88387613abf565b612ff29190613ade565b9050612ffe8186613f86565b60028054919650829160009061301e9084906001600160481b0316613fe5565b92506101000a8154816001600160481b0302191690836001600160481b0316021790555061304c878261388e565b613057873083613094565b50505b613064858461388e565b61306e848461399f565b613079858585613094565b613082856121ed565b5061308c846121ed565b505050505050565b6001600160a01b0383166130ea5760405162461bcd60e51b815260206004820152601e60248201527f7472616e736665722066726f6d20746865207a65726f2061646472657373000060448201526064016102b6565b6001600160a01b0382166131405760405162461bcd60e51b815260206004820152601c60248201527f7472616e7366657220746f20746865207a65726f20616464726573730000000060448201526064016102b6565b6001600160a01b0383166000908152600b60205260409020546001600160801b0316818110156131b25760405162461bcd60e51b815260206004820152601f60248201527f7472616e7366657220616d6f756e7420657863656564732062616c616e63650060448201526064016102b6565b6001600160a01b038481166000908152600b602052604080822080546001600160801b0319168686036001600160801b0390811691909117909155928616825281208054859391929161320791859116614029565b92506101000a8154816001600160801b0302191690836001600160801b03160217905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161327091815260200190565b60405180910390a350505050565b60075460065460408051630240bc6b60e21b815290516001600160a01b0393841693309360009384939190921691630902f1ac9160048083019260609291908290030181865afa1580156132d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132fa9190614062565b506001600160701b031691506001600160701b03169150836001600160a01b0316836001600160a01b0316111561332d57905b6000808315801561333c575082155b1561334b5750869050856133f0565b878760008661335a8785613abf565b6133649190613ade565b905081811161337b579193509091508290826133ec565b6000866133888985613abf565b6133929190613ade565b9050838111156133e45760405162461bcd60e51b815260206004820152601d60248201527f6f7074696d616c206c69717569646974792063616c63206661696c656400000060448201526064016102b6565b945090925082905b5050505b6133fa82826136d2565b5050505050505050565b6001600160a01b03821661345a5760405162461bcd60e51b815260206004820152601a60248201527f6275726e2066726f6d20746865207a65726f206164647265737300000000000060448201526064016102b6565b6001600160a01b0382166000908152600b60205260409020546001600160801b0316818110156134cc5760405162461bcd60e51b815260206004820152601b60248201527f6275726e20616d6f756e7420657863656564732062616c616e6365000000000060448201526064016102b6565b6001600160a01b0383166000908152600b6020526040812080546001600160801b0319168484036001600160801b03161790556001805484929061351a9084906001600160481b0316613f9d565b92506101000a8154816001600160481b0302191690836001600160481b0316021790555060006001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516124bf91815260200190565b600480546001600160a01b038381166000818152600b6020526040808220805461ffff60e81b191661010160e81b17905585546001600160a01b03191683179095559351919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381166000908152600b60205260408120548190600160e81b900460ff168061364f57506001600160a01b0383166000908152600b6020526040902054655af3107a40006001600160801b03909116105b61367a576001600160a01b0383166000908152600b60205260409020546001600160801b031661367d565b60005b6001600160a01b0384166000908152600d602052604081205490546001600160801b03929092169250600160801b916136b7908490613abf565b6136c191906140a9565b6136cb9190613ade565b9392505050565b6006546001600160a01b0316306136ea818386613094565b600760009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b15801561373a57600080fd5b505af115801561374e573d6000803e3d6000fd5b505060075460405163a9059cbb60e01b81526001600160a01b03878116600483015260248201899052909116935063a9059cbb925060440190506020604051808303816000875af11580156137a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137cb9190613f69565b6138175760405162461bcd60e51b815260206004820152601f60248201527f6661696c65642057455448207866657220746f206c7020636f6e74726163740060448201526064016102b6565b6006546040516335313c2160e11b81526001600160a01b03838116600483015290911690636a627842906024016020604051808303816000875af1158015613863573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138879190613f50565b5050505050565b6001600160a01b0382166000908152600b6020526040902054600160e81b900460ff16611a41576001600160a01b0382166000908152600b60205260409020546001600160801b0316655af3107a400081111561399a5760006138f18383613f86565b9050655af3107a40008110613907576000613909565b805b6139139084613b00565b925082600160098282829054906101000a90046001600160481b03166139399190613f9d565b92506101000a8154816001600160481b0302191690836001600160481b031602179055508260005461396b9190613abf565b6001600160a01b0385166000908152600d6020526040812080549091906139939084906140a9565b9091555050505b505050565b6001600160a01b0382166000908152600b6020526040902054600160e81b900460ff16611a41576001600160a01b0382166000908152600b60205260409020546001600160801b0316655af3107a40006139f98383613b00565b111561399a57655af3107a40008110613a13576000613a15565b805b613a1f9083613b00565b915081600160098282829054906101000a90046001600160481b0316613a459190613fe5565b92506101000a8154816001600160481b0302191690836001600160481b0316021790555081600054613a779190613abf565b6001600160a01b0384166000908152600d602052604081208054909190613a9f9084906140ea565b9091555050505050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615613ad957613ad9613aa9565b500290565b600082613afb57634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115613b1357613b13613aa9565b500190565b60006001600160581b03808316818516808303821115613b3a57613b3a613aa9565b01949350505050565b600060208083528351808285015260005b81811015613b7057858101830151858201604001528201613b54565b81811115613b82576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610b7157600080fd5b60008060408385031215613bc057600080fd5b8235613bcb81613b98565b946020939093013593505050565b600060208284031215613beb57600080fd5b81356136cb81613b98565b600080600060608486031215613c0b57600080fd5b8335613c1681613b98565b92506020840135613c2681613b98565b929592945050506040919091013590565b803561ffff81168114613c4957600080fd5b919050565b600060208284031215613c6057600080fd5b6136cb82613c37565b600060208284031215613c7b57600080fd5b5035919050565b600060208284031215613c9457600080fd5b81356001600160401b03811681146136cb57600080fd5b60008083601f840112613cbd57600080fd5b5081356001600160401b03811115613cd457600080fd5b6020830191508360208260051b8501011115613cef57600080fd5b9250929050565b60008060008060008060808789031215613d0f57600080fd5b86356001600160401b0380821115613d2657600080fd5b613d328a838b01613cab565b90985096506020890135915080821115613d4b57600080fd5b50613d5889828a01613cab565b979a9699509760408101359660609091013595509350505050565b8015158114610b7157600080fd5b60008060408385031215613d9457600080fd5b8235613d9f81613b98565b91506020830135613daf81613d73565b809150509250929050565b63ffffffff81168114610b7157600080fd5b600060208284031215613dde57600080fd5b81356136cb81613dba565b60008060408385031215613dfc57600080fd5b8235613e0781613b98565b91506020830135613daf81613b98565b803560ff81168114613c4957600080fd5b600080600080600080600060e0888a031215613e4357600080fd5b613e4c88613c37565b9650613e5a60208901613c37565b9550613e6860408901613e17565b9450613e7660608901613e17565b9350613e8460808901613e17565b9250613e9260a08901613e17565b9150613ea060c08901613e17565b905092959891949750929550565b60208082526009908201526837b7363ca7bbb732b960b91b604082015260600190565b6020808252601590820152746f7574206f662061636365707465642072616e676560581b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415613f2a57613f2a613aa9565b5060010190565b600063ffffffff808316818516808303821115613b3a57613b3a613aa9565b600060208284031215613f6257600080fd5b5051919050565b600060208284031215613f7b57600080fd5b81516136cb81613d73565b600082821015613f9857613f98613aa9565b500390565b60006001600160481b0383811690831681811015613fbd57613fbd613aa9565b039392505050565b6020808252600690820152656e6f626f747360d01b604082015260600190565b60006001600160481b03808316818516808303821115613b3a57613b3a613aa9565b60006001600160401b03808316818516808303821115613b3a57613b3a613aa9565b60006001600160801b03808316818516808303821115613b3a57613b3a613aa9565b80516001600160701b0381168114613c4957600080fd5b60008060006060848603121561407757600080fd5b6140808461404b565b925061408e6020850161404b565b9150604084015161409e81613dba565b809150509250925092565b600080821280156001600160ff1b03849003851316156140cb576140cb613aa9565b600160ff1b83900384128116156140e4576140e4613aa9565b50500190565b60008083128015600160ff1b85018412161561410857614108613aa9565b6001600160ff1b038401831381161561412357614123613aa9565b5050039056fea2646970667358221220ac449eb9a8783422cc3f46408651ff5d65150194a01a33b8d0c1adb6390e5f5f64736f6c634300080a003360a060405234801561001057600080fd5b50604051610df2380380610df283398101604081905261002f916100b3565b600080546001600160a01b038087166001600160a01b0319928316811790935560018054878316908416179055600280548683169084161790556003805491851691909216811790915511610085576000610088565b60015b15156080525061010792505050565b80516001600160a01b03811681146100ae57600080fd5b919050565b600080600080608085870312156100c957600080fd5b6100d285610097565b93506100e060208601610097565b92506100ee60408601610097565b91506100fc60608601610097565b905092959194509250565b608051610cd061012260003960006109650152610cd06000f3fe60806040526004361061002d5760003560e01c80632cd284c6146100985780632e12e5c1146100b857600080fd5b36610093576003546001600160a01b031633146100915760405162461bcd60e51b815260206004820152601d60248201527f465853776170206f6e6c7920616363657074732057455448732045544800000060448201526064015b60405180910390fd5b005b600080fd5b3480156100a457600080fd5b506100916100b3366004610a93565b6100df565b3480156100c457600080fd5b506100cd6105a4565b60405190815260200160405180910390f35b6000546001600160a01b031633146101355760405162461bcd60e51b815260206004820152601960248201527808cb0a6eec2e07440c6c2d8d8cae440daeae6e840c4ca408cb603b1b6044820152606401610088565b6002546000546040516370a0823160e01b81526001600160a01b039182166004820152849291909116906370a0823190602401602060405180830381865afa158015610185573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101a99190610acf565b10156101f75760405162461bcd60e51b815260206004820152601760248201527f4658537761703a20696e737566662e206c70742062616c0000000000000000006044820152606401610088565b6002546000546040516323b872dd60e01b81526001600160a01b03918216600482015291166024820181905260448201849052906323b872dd906064016020604051808303816000875af1158015610253573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102779190610ae8565b5060025460405163226bf2d160e21b815230600482015260009182916001600160a01b03909116906389afcb449060240160408051808303816000875af11580156102c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102ea9190610b11565b600354919350915060009081906001600160a01b0316301061030d578284610310565b83835b6000546040516370a0823160e01b815230600482015292945090925083916001600160a01b03909116906370a0823190602401602060405180830381865afa158015610360573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103849190610acf565b10156103d25760405162461bcd60e51b815260206004820152601d60248201527f4658537761703a20696e737566662e2066726f67657820746f6b656e730000006044820152606401610088565b60005460405163a9059cbb60e01b81526001600160a01b038781166004830152602482018590529091169063a9059cbb906044016020604051808303816000875af1158015610425573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104499190610ae8565b50600354604051632e1a7d4d60e01b8152600481018390526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b15801561049057600080fd5b505af11580156104a4573d6000803e3d6000fd5b50505050804710156104f85760405162461bcd60e51b815260206004820152601c60248201527f4658537761703a73656e6456616c75653a20696e737566662e62616c000000006044820152606401610088565b6000856001600160a01b03168260405160006040518083038185875af1925050503d8060008114610545576040519150601f19603f3d011682016040523d82523d6000602084013e61054a565b606091505b505090508061059b5760405162461bcd60e51b815260206004820152601a60248201527f4658537761703a4554485f5452414e534645525f4641494c45440000000000006044820152606401610088565b50505050505050565b600080546001600160a01b031633146105fb5760405162461bcd60e51b815260206004820152601960248201527808cb0a6eec2e07440c6c2d8d8cae440daeae6e840c4ca408cb603b1b6044820152606401610088565b6000806106066108d8565b600080546002546040516370a0823160e01b81526001600160a01b03918216600482015294965092945090928592909116906370a0823190602401602060405180830381865afa15801561065e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106829190610acf565b61068c9190610b4b565b9050600061069b82858561098e565b600254604080516000808252602082019283905263022c0d9f60e01b9092529293506001600160a01b039091169163022c0d9f916106e0918590309060248101610b62565b600060405180830381600087803b1580156106fa57600080fd5b505af115801561070e573d6000803e3d6000fd5b50506003546040516370a0823160e01b81523060048201526001600160a01b0390911692506370a082319150602401602060405180830381865afa15801561075a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077e9190610acf565b600354604051632e1a7d4d60e01b8152600481018390529196506001600160a01b031690632e1a7d4d90602401600060405180830381600087803b1580156107c557600080fd5b505af11580156107d9573d6000803e3d6000fd5b505050508447101561082d5760405162461bcd60e51b815260206004820152601c60248201527f4658537761703a73656e6456616c75653a20696e737566662e62616c000000006044820152606401610088565b600080546040516001600160a01b039091169087908381818185875af1925050503d806000811461087a576040519150601f19603f3d011682016040523d82523d6000602084013e61087f565b606091505b50509050806108d05760405162461bcd60e51b815260206004820152601a60248201527f4658537761703a4554485f5452414e534645525f4641494c45440000000000006044820152606401610088565b505050505090565b600080600260009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109529190610bf1565b506001600160701b0391821693501690507f000000000000000000000000000000000000000000000000000000000000000061098a57905b9091565b60008084116109e95760405162461bcd60e51b815260206004820152602160248201527f4658537761703a20494e53554646494349454e545f494e5055545f414d4f554e6044820152601560fa1b6064820152608401610088565b6000831180156109f95750600082115b610a455760405162461bcd60e51b815260206004820152601e60248201527f4658537761703a20494e53554646494349454e545f4c495155494449545900006044820152606401610088565b6000610a53856103e5610c41565b90506000610a618483610c41565b9050600082610a72876103e8610c41565b610a7c9190610c60565b9050610a888183610c78565b979650505050505050565b60008060408385031215610aa657600080fd5b8235915060208301356001600160a01b0381168114610ac457600080fd5b809150509250929050565b600060208284031215610ae157600080fd5b5051919050565b600060208284031215610afa57600080fd5b81518015158114610b0a57600080fd5b9392505050565b60008060408385031215610b2457600080fd5b505080516020909101519092909150565b634e487b7160e01b600052601160045260246000fd5b600082821015610b5d57610b5d610b35565b500390565b84815260006020858184015260018060a01b038516604084015260806060840152835180608085015260005b81811015610baa5785810183015185820160a001528201610b8e565b81811115610bbc57600060a083870101525b50601f01601f19169290920160a0019695505050505050565b80516001600160701b0381168114610bec57600080fd5b919050565b600080600060608486031215610c0657600080fd5b610c0f84610bd5565b9250610c1d60208501610bd5565b9150604084015163ffffffff81168114610c3657600080fd5b809150509250925092565b6000816000190483118215151615610c5b57610c5b610b35565b500290565b60008219821115610c7357610c73610b35565b500190565b600082610c9557634e487b7160e01b600052601260045260246000fd5b50049056fea264697066735822122030a880777b528dc886cd44823da20dc151dbd0bf0ac554c080673c1ef60137db64736f6c634300080a00330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d00000000000000000000000000000000000000000000000098a7d9b8314c0000

Deployed Bytecode

0x6080604052600436106102605760003560e01c8063715018a611610144578063c3f909d4116100b6578063e57f14e11161007a578063e57f14e114610a22578063eaebf7d514610a42578063ed0711bf14610a62578063eeb4210514610ac0578063f2fde38b14610ae5578063fbcbc0f114610b0557600080fd5b8063c3f909d4146107e2578063d4988af71461097e578063dae3b92f1461099c578063dd62ed3e146109bc578063e4baab0514610a0257600080fd5b806395d89b411161010857806395d89b4114610713578063994148bd146107425780639a7a23d614610762578063a457c2d714610782578063a9059cbb146107a2578063bc6f80cf146107c257600080fd5b8063715018a61461067057806379441ae91461068557806379edf711146106b757806384938efa146106d55780638da5cb5b146106f557600080fd5b806333639948116101dd5780636201d66a116101a15780636201d66a14610591578063667b142f146105b157806367043aec146105d157806368092bd9146105f15780636aac81e91461061157806370a082311461063157600080fd5b806333639948146104fe578063395093511461051e5780633f90e0391461053e57806349f9f4d014610551578063521356281461057157600080fd5b806315ee28641161022457806315ee28641461043d57806318160ddd1461046b57806323b872dd1461049d5780632c4e8f0a146104bd578063313ce567146104e257600080fd5b806304b6ee9e1461038257806306fdde0314610397578063095ea7b3146103d85780630f15f4c014610408578063111e03761461041d57600080fd5b3661037d57600154600160481b90046001600160481b03166102bf5760405162461bcd60e51b81526020600482015260136024820152725820474f4e204749564520495420544f20594160681b60448201526064015b60405180910390fd5b6000341180156102da57506008546001600160a01b03163314155b80156102f157506005546001600160a01b03163314155b1561037b57600154600160481b90046001600160481b0316610317600160801b34613abf565b6103219190613ade565b60005461032e9190613b00565b60005560018054349190601290610356908490600160901b90046001600160581b0316613b18565b92506101000a8154816001600160581b0302191690836001600160581b031602179055505b005b600080fd5b34801561038e57600080fd5b5061037b610b68565b3480156103a357600080fd5b5060408051808201909152600681526508ce4dececab60d31b60208201525b6040516103cf9190613b43565b60405180910390f35b3480156103e457600080fd5b506103f86103f3366004613bad565b610b74565b60405190151581526020016103cf565b34801561041457600080fd5b5061037b610b8a565b34801561042957600080fd5b5061037b610438366004613bd9565b610bc9565b34801561044957600080fd5b5061045d610458366004613bd9565b610bfc565b6040519081526020016103cf565b34801561047757600080fd5b506001546001600160481b03165b6040516001600160481b0390911681526020016103cf565b3480156104a957600080fd5b506103f86104b8366004613bf6565b610c0d565b3480156104c957600080fd5b50600154600160481b90046001600160481b0316610485565b3480156104ee57600080fd5b50604051600981526020016103cf565b34801561050a57600080fd5b5061037b610519366004613c4e565b610ca6565b34801561052a57600080fd5b506103f8610539366004613bad565b610d40565b61037b61054c366004613c69565b610d7c565b34801561055d57600080fd5b5061037b61056c366004613c69565b610e51565b34801561057d57600080fd5b5061037b61058c366004613c82565b610e85565b34801561059d57600080fd5b5061037b6105ac366004613c82565b610f31565b3480156105bd57600080fd5b5061037b6105cc366004613cf6565b610fdb565b3480156105dd57600080fd5b5061037b6105ec366004613bd9565b611135565b3480156105fd57600080fd5b5061037b61060c366004613d81565b6112c0565b34801561061d57600080fd5b5061037b61062c366004613bd9565b61142a565b34801561063d57600080fd5b5061045d61064c366004613bd9565b6001600160a01b03166000908152600b60205260409020546001600160801b031690565b34801561067c57600080fd5b5061037b6115af565b34801561069157600080fd5b506008546001600160a01b03165b6040516001600160a01b0390911681526020016103cf565b3480156106c357600080fd5b506006546001600160a01b031661069f565b3480156106e157600080fd5b5061037b6106f0366004613dcc565b6115e5565b34801561070157600080fd5b506004546001600160a01b031661069f565b34801561071f57600080fd5b5060408051808201909152600681526508ca49e8e8ab60d31b60208201526103c2565b34801561074e57600080fd5b5061037b61075d366004613c69565b611687565b34801561076e57600080fd5b5061037b61077d366004613d81565b6118db565b34801561078e57600080fd5b506103f861079d366004613bad565b611a45565b3480156107ae57600080fd5b506103f86107bd366004613bad565b611ad0565b3480156107ce57600080fd5b5061037b6107dd366004613cf6565b611add565b3480156107ee57600080fd5b506108f7604080516101a0810182526009546001600160401b03808216808452600160401b80840483166020860181905263ffffffff600160801b86041696860187905261ffff600160a01b8604811660608801819052600160b01b87049095166080880181905260ff600160f01b9097048716151560a08901819052600a5480841660c08b0181905262010000820490941660e08b0181905264010000000082048a166101008c018190526501000000000083048b166101208d01819052660100000000000084048c166101408e01819052600160381b85048d166101608f0181905299909404909b16610180909c018c9052979c959b9a9899939892979496909591929091565b604080516001600160401b039e8f1681529c8e1660208e015263ffffffff909b169a8c019a909a5261ffff98891660608c01529a90961660808a015293151560a089015291851660c0880152841660e0870152831661010086015282166101208501528116610140840152928316610160830152919091166101808201526101a0016103cf565b34801561098a57600080fd5b506005546001600160a01b031661069f565b3480156109a857600080fd5b5061045d6109b7366004613bd9565b611c37565b3480156109c857600080fd5b5061045d6109d7366004613de9565b6001600160a01b039182166000908152600c6020908152604080832093909416825291909152205490565b348015610a0e57600080fd5b5061037b610a1d366004613e28565b611c42565b348015610a2e57600080fd5b5061037b610a3d366004613bd9565b611f0f565b348015610a4e57600080fd5b5061037b610a5d366004613c82565b611fee565b348015610a6e57600080fd5b50610aa8610a7d366004613bd9565b6001600160a01b03166000908152600b6020526040902054600160801b90046001600160581b031690565b6040516001600160581b0390911681526020016103cf565b348015610acc57600080fd5b50600154600160901b90046001600160581b0316610aa8565b348015610af157600080fd5b5061037b610b00366004613bd9565b612074565b348015610b1157600080fd5b50610b25610b20366004613bd9565b61214b565b60408051988952602089019790975295870194909452606086019290925215156080850152151560a0840152151560c0830152151560e0820152610100016103cf565b610b71336121ed565b50565b6000610b813384846123be565b50600192915050565b6004546001600160a01b03163314610bb45760405162461bcd60e51b81526004016102b690613eae565b6009805460ff60f01b1916600160f01b179055565b6004546001600160a01b03163314610bf35760405162461bcd60e51b81526004016102b690613eae565b610b71816124cc565b6000610c0782612678565b92915050565b6000610c1a8484846126b4565b6001600160a01b0384166000908152600c6020908152604080832033845290915290205482811015610c8e5760405162461bcd60e51b815260206004820152601860248201527f616d6f756e74206578636565647320616c6c6f77616e6365000000000000000060448201526064016102b6565b610c9b85338584036123be565b506001949350505050565b6004546001600160a01b03163314610cd05760405162461bcd60e51b81526004016102b690613eae565b610bb88161ffff1611610d1e5760405162461bcd60e51b81526020600482015260166024820152756e6f7420656e6f75676820676173466f72436c61696d60501b60448201526064016102b6565b6009805461ffff909216600160a01b0261ffff60a01b19909216919091179055565b336000818152600c602090815260408083206001600160a01b03871684529091528120549091610b81918590610d77908690613b00565b6123be565b6004546001600160a01b03163314610da65760405162461bcd60e51b81526004016102b690613eae565b600081118015610db65750600034115b610e025760405162461bcd60e51b815260206004820152601b60248201527f6d75737420737570706c7920626f746820667820616e6420657468000000000060448201526064016102b6565b600454610e19906001600160a01b03163083613094565b610e23813461327e565b60405181907f44fa45b943408523104e44d70520e98729e4cd1625dccf1330d48a674550284290600090a250565b6004546001600160a01b03163314610e7b5760405162461bcd60e51b81526004016102b690613eae565b610b713382613404565b6004546001600160a01b03163314610eaf5760405162461bcd60e51b81526004016102b690613eae565b6402540be400816001600160401b03161015610edd5760405162461bcd60e51b81526004016102b690613ed1565b671bc16d674ec80000816001600160401b03161115610f0e5760405162461bcd60e51b81526004016102b690613ed1565b6009805467ffffffffffffffff19166001600160401b0392909216919091179055565b6004546001600160a01b03163314610f5b5760405162461bcd60e51b81526004016102b690613eae565b6000816001600160401b031611610f845760405162461bcd60e51b81526004016102b690613ed1565b6009805467ffffffffffffffff60b01b1916600160b01b6001600160401b038416908102919091179091556040517fffbe4e88fcb3e0dc64fbd507ef323ba3322894779c5d889da9779db9db385c1090600090a250565b6004546001600160a01b031633148015610fff5750600954600160f01b900460ff16155b6110465760405162461bcd60e51b81526020600482015260186024820152770dedcd8f29eeedccae440c2dcc840e0e4ca5ad8c2eadcc6d60431b60448201526064016102b6565b60005b858110156110e35784848281811061106357611063613f00565b90506020020135600b600089898581811061108057611080613f00565b90506020020160208101906110959190613bd9565b6001600160a01b03168152602081019190915260400160002080546001600160801b031981166001600160801b039182169390930116919091179055806110db81613f16565b915050611049565b5060018054600160481b6001600160481b03808316909501851668ffffffffffffffffff198316811782900486169094019094169093026001600160901b031990931690911791909117905550505050565b6004546001600160a01b0316331461115f5760405162461bcd60e51b81526004016102b690613eae565b6001600160a01b0381166111af5760405162461bcd60e51b81526020600482015260176024820152761e995c9bc81859191c995cdcc8191a5cd85b1b1bddd959604a1b60448201526064016102b6565b600254604051600160481b9091046001600160481b0316907fca468cabdc08e335f5734071244314ce8a7e25f07ea6d0edffa9088985c1a7d890600090a26002546040516000916001600160a01b03841691600160481b9091046001600160481b0316908381818185875af1925050503d806000811461124b576040519150601f19603f3d011682016040523d82523d6000602084013e611250565b606091505b50509050806112a15760405162461bcd60e51b815260206004820152601a60248201527f63616c6c20746f2062656e6566696369617279206661696c656400000000000060448201526064016102b6565b50506002805471ffffffffffffffffff00000000000000000019169055565b6004546001600160a01b031633146112ea5760405162461bcd60e51b81526004016102b690613eae565b80156113ca576005546001600160a01b0383811691161480159061131c57506006546001600160a01b03838116911614155b801561133657506008546001600160a01b03838116911614155b801561135057506004546001600160a01b03838116911614155b61139c5760405162461bcd60e51b815260206004820152601860248201527f696e656c696769626c6520666f7220626c61636b6c697374000000000000000060448201526064016102b6565b6001600160a01b0382166000908152600b60205260409020805460ff60e01b1916600160e01b1790556113ee565b6001600160a01b0382166000908152600b60205260409020805460ff60e01b191690555b604051811515906001600160a01b038416907ffed07c88bd5d31bfd0ce77ed7ffdc74a163a61cfc5edcec801e3a7954e33d6e790600090a35050565b6004546001600160a01b031633146114545760405162461bcd60e51b81526004016102b690613eae565b6001600160a01b0381166114a45760405162461bcd60e51b81526020600482015260176024820152761e995c9bc81859191c995cdcc8191a5cd85b1b1bddd959604a1b60448201526064016102b6565b600254604051600160901b9091046001600160481b0316907f220ccb49a0062b9cb9e8bbb3003f1140743b01e1e0a10d411f4d859814c9def990600090a26002546040516000916001600160a01b03841691600160901b9091046001600160481b0316908381818185875af1925050503d8060008114611540576040519150601f19603f3d011682016040523d82523d6000602084013e611545565b606091505b50509050806115965760405162461bcd60e51b815260206004820152601a60248201527f63616c6c20746f2062656e6566696369617279206661696c656400000000000060448201526064016102b6565b50506002805468ffffffffffffffffff60901b19169055565b6004546001600160a01b031633146115d95760405162461bcd60e51b81526004016102b690613eae565b6115e36000613584565b565b6004546001600160a01b0316331461160f5760405162461bcd60e51b81526004016102b690613eae565b600954600160801b900463ffffffff16600061162b8383613f31565b6009805463ffffffff808416600160801b810263ffffffff60801b199093169290921790925560405192935091908416907f21188e256f47aecca77d04435990811b0672c18a4914dde8846995054eebc6ea90600090a3505050565b6004546001600160a01b031633146116b15760405162461bcd60e51b81526004016102b690613eae565b60095442600160801b90910463ffffffff16106117105760405162461bcd60e51b815260206004820152601a60248201527f756e6c6f636b44617465206e6f7420796574207265616368656400000000000060448201526064016102b6565b6006546040516370a0823160e01b815230600482015282916001600160a01b0316906370a0823190602401602060405180830381865afa158015611758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177c9190613f50565b10156117ca5760405162461bcd60e51b815260206004820152601f60248201527f6e6f7420656e6f756768206c70742068656c6420627920636f6e74726163740060448201526064016102b6565b60065460085460405163095ea7b360e01b81526001600160a01b0391821660048201526024810184905291169063095ea7b3906044016020604051808303816000875af115801561181f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118439190613f69565b5060085460048054604051631669426360e11b81529182018490526001600160a01b03908116602483015290911690632cd284c690604401600060405180830381600087803b15801561189557600080fd5b505af11580156118a9573d6000803e3d6000fd5b50506040518392507f25d42ebc6735db35705e6961e314a232d7b4169a06ef1cffc9ce46fa56274f1f9150600090a250565b6004546001600160a01b031633146119055760405162461bcd60e51b81526004016102b690613eae565b6006546001600160a01b03838116911614156119635760405162461bcd60e51b815260206004820152601960248201527f6f726967696e616c207061697220697320636f6e7374616e740000000000000060448201526064016102b6565b6001600160a01b0382166000908152600b602052604090205460ff600160d81b90910416151581151514156119d35760405162461bcd60e51b815260206004820152601660248201527573657474696e6720616c72656164792065786973747360501b60448201526064016102b6565b6001600160a01b0382166000908152600b60205260409020805482158015600160d81b0260ff60d81b19909216919091179091558190611a3357506001600160a01b0382166000908152600b6020526040902054600160e81b900460ff16155b15611a4157611a41826124cc565b5050565b336000908152600c602090815260408083206001600160a01b038616845290915281205482811015611ab95760405162461bcd60e51b815260206004820152601e60248201527f64656372656173656420616c6c6f77616e63652062656c6f77207a65726f000060448201526064016102b6565b611ac633858584036123be565b5060019392505050565b6000610b813384846126b4565b6004546001600160a01b031633148015611b015750600954600160f01b900460ff16155b611b485760405162461bcd60e51b81526020600482015260186024820152770dedcd8f29eeedccae440c2dcc840e0e4ca5ad8c2eadcc6d60431b60448201526064016102b6565b60005b85811015611be557848482818110611b6557611b65613f00565b90506020020135600b6000898985818110611b8257611b82613f00565b9050602002016020810190611b979190613bd9565b6001600160a01b03168152602081019190915260400160002080546001600160801b031981166001600160801b03918216939093031691909117905580611bdd81613f16565b915050611b4b565b50600180546001600160901b031981166001600160481b03808316959095038516908117600160481b68ffffffffffffffffff1990931690911782900485169390930390931690920217905550505050565b6000610c07826135f7565b6004546001600160a01b03163314611c6c5760405162461bcd60e51b81526004016102b690613eae565b600a8761ffff1610158015611c8757506103e88761ffff1611155b8015611c985750600a8661ffff1610155b8015611caa57506106408661ffff1611155b611cf65760405162461bcd60e51b815260206004820152601e60248201527f4665652070637473206f7574206f662061636365707465642072616e6765000060448201526064016102b6565b60008360ff16118015611d0c575060008260ff16115b80611d24575060ff8316158015611d24575060ff8216155b8015611d34575060648560ff1611155b8015611d44575060648460ff1611155b8015611d54575060648360ff1611155b8015611d64575060648260ff1611155b8015611d74575060648160ff1611155b611dc05760405162461bcd60e51b815260206004820152601f60248201527f506f7274696f6e73206f7574736964652061636365707465642072616e67650060448201526064016102b6565b86600960010160006101000a81548161ffff021916908361ffff16021790555085600960010160026101000a81548161ffff021916908361ffff16021790555084600960010160046101000a81548160ff021916908360ff16021790555083600960010160056101000a81548160ff021916908360ff16021790555082600960010160066101000a81548160ff021916908360ff16021790555081600960010160076101000a81548160ff021916908360ff16021790555080600960010160086101000a81548160ff021916908360ff1602179055508561ffff168761ffff167fccfc65ebd0bf621f9eaa538dc799d705cd494a1c608da5e256f04ba395fc63688787878787604051611efe95949392919060ff95861681529385166020850152918416604084015283166060830152909116608082015260a00190565b60405180910390a350505050505050565b6004546001600160a01b03163314611f395760405162461bcd60e51b81526004016102b690613eae565b6001600160a01b0381166000908152600b6020526040902054600160f01b900460ff1615611f9c5760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e48195e18db1d59195960821b60448201526064016102b6565b6001600160a01b0381166000818152600b6020526040808220805460ff60f01b1916600160f01b179055517f57a00f76b5f242fb1e04b0b514a6974665a5b07bce45e39f36dabff4a042d9369190a250565b6004546001600160a01b031633146120185760405162461bcd60e51b81526004016102b690613eae565b6064816001600160401b031610156120425760405162461bcd60e51b81526004016102b690613ed1565b600980546001600160401b03909216600160401b026fffffffffffffffff000000000000000019909216919091179055565b6004546001600160a01b0316331461209e5760405162461bcd60e51b81526004016102b690613eae565b6001600160a01b0381166120ed5760405162461bcd60e51b815260206004820152601660248201527546784f776e3a206e6f207a65726f206164647265737360501b60448201526064016102b6565b6004546001600160a01b03828116911614156121425760405162461bcd60e51b8152602060048201526014602482015273233c27bbb71d1030b63932b0b23c9037bbb732b960611b60448201526064016102b6565b610b7181613584565b6001600160a01b0381166000908152600b60205260408120546001600160801b03169080808080808061217d89612678565b9650612188896135f7565b6001600160a01b039099166000908152600b602052604090205497999698976001600160581b03600160801b8204169760ff600160d81b830481169850600160e01b830481169750600160e81b830481169650600160f01b9092049091169350915050565b6000806121f983612678565b600954909150600160b01b90046001600160401b03168111156123b5576001600160a01b0383166000908152600b602052604090205461224a908290600160801b90046001600160581b0316613b00565b6001600160a01b0384166000818152600b602052604080822080546001600160581b0395909516600160801b026affffffffffffffffffffff60801b1990951694909417909355915183927fc7627c78ddc5b824e2bed4b122ec1c29cd2baba6b22141de00fd53d76d7d95b491a36009546040516000916001600160a01b03861691600160a01b90910461ffff16908490600060405180830381858888f193505050503d8060008114612319576040519150601f19603f3d011682016040523d82523d6000602084013e61231e565b606091505b505090508015612332575060019392505050565b6001600160a01b0384166000908152600b6020526040902054612366908390600160801b90046001600160581b0316613f86565b6001600160a01b039094166000908152600b6020526040812080546001600160581b0396909616600160801b026affffffffffffffffffffff60801b1990961695909517909455509192915050565b50600092915050565b6001600160a01b0383166124145760405162461bcd60e51b815260206004820152601960248201527f617070726f76652066726f6d207a65726f20616464726573730000000000000060448201526064016102b6565b6001600160a01b03821661246a5760405162461bcd60e51b815260206004820152601760248201527f617070726f766520746f207a65726f206164647265737300000000000000000060448201526064016102b6565b6001600160a01b038381166000818152600c602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6004546001600160a01b031633146124f65760405162461bcd60e51b81526004016102b690613eae565b6001600160a01b0381166000908152600b6020526040902054600160e81b900460ff16156125595760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e48195e18db1d59195960821b60448201526064016102b6565b6001600160a01b0381166000908152600b60205260409020805460ff60e81b1916600160e81b17905561258b816121ed565b506001600160a01b0381166000908152600b6020526040902054655af3107a40006001600160801b039091161115612641576001600160a01b0381166000908152600b6020526040902054600180546001600160801b0390921691600990612604908490600160481b90046001600160481b0316613f9d565b82546001600160481b039182166101009390930a9283029190920219909116179055506001600160a01b0381166000908152600d60205260408120555b6040516001600160a01b038216907f9dc0c5d829ba95d4a3aa3e40791b3e0ff125f876788532b9f7f6eb543d8dfbd690600090a250565b6001600160a01b0381166000908152600b6020526040812054600160801b90046001600160581b03166126aa836135f7565b610c079190613f86565b6001600160a01b0383166000908152600b60205260409020546001600160801b03168111156127255760405162461bcd60e51b815260206004820152601c60248201527f696e737566662e2062616c616e636520666f72207472616e736665720000000060448201526064016102b6565b604080516101a0810182526009546001600160401b038082168352600160401b8083048216602085015263ffffffff600160801b8404169484019490945261ffff600160a01b830481166060850152600160b01b8304909116608084015260ff600160f01b9092048216151560a0840152600a5480821660c085015262010000810490911660e0840152640100000000810482166101008401526501000000000081048216610120840152660100000000000081048216610140840152600160381b81048216610160840152929092049091166101808201528161284b5760405162461bcd60e51b815260206004820152601960248201527f616d6f756e74206d7573742062652061626f7665207a65726f0000000000000060448201526064016102b6565b6001600160a01b0384166128a15760405162461bcd60e51b815260206004820152601b60248201527f66726f6d2063616e6e6f74206265207a65726f2061646472657373000000000060448201526064016102b6565b6001600160a01b0383166128f75760405162461bcd60e51b815260206004820152601960248201527f746f2063616e6e6f74206265207a65726f20616464726573730000000000000060448201526064016102b6565b6001600160a01b0383166000908152600b6020526040902054600160e01b900460ff16156129375760405162461bcd60e51b81526004016102b690613fc5565b336000908152600b6020526040902054600160e01b900460ff161561296e5760405162461bcd60e51b81526004016102b690613fc5565b6001600160a01b0384166000908152600b6020526040902054600160e01b900460ff16156129ae5760405162461bcd60e51b81526004016102b690613fc5565b6001600160a01b0384166000908152600b6020526040812054600160d81b900460ff16612a0a576001600160a01b0384166000908152600b6020526040902054600160d81b900460ff16612a03576002612a0d565b6001612a0d565b60005b60ff1690508160a0015180612a2c57506004546001600160a01b031633145b612a785760405162461bcd60e51b815260206004820152601760248201527f74726164696e67456e61626c6564206861726473746f7000000000000000000060448201526064016102b6565b806001148015612a955750600154600160e81b900460ff16600214155b15612f59576001805460ff60e81b1916600160e91b17905560208201516003546001600160401b039091166001600160481b0390911610612ba9576003546001600160401b03600160481b820416906001600160481b031681612b505780600260128282829054906101000a90046001600160481b0316612b169190613fe5565b82546001600160481b039182166101009390930a9283029190920219909116179055506003805468ffffffffffffffffff19169055612ba2565b612b5a82826136d2565b6003805470ffffffffffffffffffffffffffffffffff19169055604051819083907f89c317d1c4e867f8b24228dc26f4a7b04cda28583224244b4b7f62fddf8a946990600090a35b5050612f45565b60025482516001600160481b03909116906001600160401b03168110612f4357610180830151610160840151610120850151610100860151610140870151910190910190910160ff9081169116808201906000908290612c0b90612710613abf565b612c159190613ade565b90506000612710612c268387613abf565b612c309190613ade565b905080600360098282829054906101000a90046001600160401b0316612c569190614007565b82546001600160401b039182166101009390930a928302919092021990911617905550600654612c9a9030906001600160a01b0316612c958489613f86565b613094565b60085460408051632e12e5c160e01b815290516000926001600160a01b031691632e12e5c1916004808301926020929190829003018187875af1158015612ce5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d099190613f50565b905080867fceb50488716f263ac0cac1905289143c4915f2233e600e9e8ecaf75056d52d7660405160405180910390a360008589610100015160ff1683612d509190613abf565b612d5a9190613ade565b90506000868a610120015160ff1684612d739190613abf565b612d7d9190613ade565b90506000878b610160015160ff1685612d969190613abf565b612da09190613ade565b905060008183612db08688613f86565b612dba9190613f86565b612dc49190613f86565b600154909150600160481b90046001600160481b0316612de8600160801b83613abf565b612df29190613ade565b600080828254612e029190613b00565b909155505060018054829190601290612e2c908490600160901b90046001600160581b0316613b18565b92506101000a8154816001600160581b0302191690836001600160581b0316021790555083600260098282829054906101000a90046001600160481b0316612e749190613fe5565b92506101000a8154816001600160481b0302191690836001600160481b0316021790555082600260128282829054906101000a90046001600160481b0316612ebc9190613fe5565b92506101000a8154816001600160481b0302191690836001600160481b0316021790555081600360008282829054906101000a90046001600160481b0316612f049190613fe5565b82546001600160481b039182166101009390930a928302919092021990911617905550506002805468ffffffffffffffffff1916905550505050505050505b505b6001805460ff60e81b1916600160e81b1790555b80600214158015612f8a57506001600160a01b0385166000908152600b6020526040902054600160f01b900460ff16155b8015612fb657506001600160a01b0384166000908152600b6020526040902054600160f01b900460ff16155b1561305a5760008115612fcd578260e00151612fd3565b8260c001515b61ffff1690506000612710612fe88387613abf565b612ff29190613ade565b9050612ffe8186613f86565b60028054919650829160009061301e9084906001600160481b0316613fe5565b92506101000a8154816001600160481b0302191690836001600160481b0316021790555061304c878261388e565b613057873083613094565b50505b613064858461388e565b61306e848461399f565b613079858585613094565b613082856121ed565b5061308c846121ed565b505050505050565b6001600160a01b0383166130ea5760405162461bcd60e51b815260206004820152601e60248201527f7472616e736665722066726f6d20746865207a65726f2061646472657373000060448201526064016102b6565b6001600160a01b0382166131405760405162461bcd60e51b815260206004820152601c60248201527f7472616e7366657220746f20746865207a65726f20616464726573730000000060448201526064016102b6565b6001600160a01b0383166000908152600b60205260409020546001600160801b0316818110156131b25760405162461bcd60e51b815260206004820152601f60248201527f7472616e7366657220616d6f756e7420657863656564732062616c616e63650060448201526064016102b6565b6001600160a01b038481166000908152600b602052604080822080546001600160801b0319168686036001600160801b0390811691909117909155928616825281208054859391929161320791859116614029565b92506101000a8154816001600160801b0302191690836001600160801b03160217905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161327091815260200190565b60405180910390a350505050565b60075460065460408051630240bc6b60e21b815290516001600160a01b0393841693309360009384939190921691630902f1ac9160048083019260609291908290030181865afa1580156132d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132fa9190614062565b506001600160701b031691506001600160701b03169150836001600160a01b0316836001600160a01b0316111561332d57905b6000808315801561333c575082155b1561334b5750869050856133f0565b878760008661335a8785613abf565b6133649190613ade565b905081811161337b579193509091508290826133ec565b6000866133888985613abf565b6133929190613ade565b9050838111156133e45760405162461bcd60e51b815260206004820152601d60248201527f6f7074696d616c206c69717569646974792063616c63206661696c656400000060448201526064016102b6565b945090925082905b5050505b6133fa82826136d2565b5050505050505050565b6001600160a01b03821661345a5760405162461bcd60e51b815260206004820152601a60248201527f6275726e2066726f6d20746865207a65726f206164647265737300000000000060448201526064016102b6565b6001600160a01b0382166000908152600b60205260409020546001600160801b0316818110156134cc5760405162461bcd60e51b815260206004820152601b60248201527f6275726e20616d6f756e7420657863656564732062616c616e6365000000000060448201526064016102b6565b6001600160a01b0383166000908152600b6020526040812080546001600160801b0319168484036001600160801b03161790556001805484929061351a9084906001600160481b0316613f9d565b92506101000a8154816001600160481b0302191690836001600160481b0316021790555060006001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516124bf91815260200190565b600480546001600160a01b038381166000818152600b6020526040808220805461ffff60e81b191661010160e81b17905585546001600160a01b03191683179095559351919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381166000908152600b60205260408120548190600160e81b900460ff168061364f57506001600160a01b0383166000908152600b6020526040902054655af3107a40006001600160801b03909116105b61367a576001600160a01b0383166000908152600b60205260409020546001600160801b031661367d565b60005b6001600160a01b0384166000908152600d602052604081205490546001600160801b03929092169250600160801b916136b7908490613abf565b6136c191906140a9565b6136cb9190613ade565b9392505050565b6006546001600160a01b0316306136ea818386613094565b600760009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b15801561373a57600080fd5b505af115801561374e573d6000803e3d6000fd5b505060075460405163a9059cbb60e01b81526001600160a01b03878116600483015260248201899052909116935063a9059cbb925060440190506020604051808303816000875af11580156137a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137cb9190613f69565b6138175760405162461bcd60e51b815260206004820152601f60248201527f6661696c65642057455448207866657220746f206c7020636f6e74726163740060448201526064016102b6565b6006546040516335313c2160e11b81526001600160a01b03838116600483015290911690636a627842906024016020604051808303816000875af1158015613863573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138879190613f50565b5050505050565b6001600160a01b0382166000908152600b6020526040902054600160e81b900460ff16611a41576001600160a01b0382166000908152600b60205260409020546001600160801b0316655af3107a400081111561399a5760006138f18383613f86565b9050655af3107a40008110613907576000613909565b805b6139139084613b00565b925082600160098282829054906101000a90046001600160481b03166139399190613f9d565b92506101000a8154816001600160481b0302191690836001600160481b031602179055508260005461396b9190613abf565b6001600160a01b0385166000908152600d6020526040812080549091906139939084906140a9565b9091555050505b505050565b6001600160a01b0382166000908152600b6020526040902054600160e81b900460ff16611a41576001600160a01b0382166000908152600b60205260409020546001600160801b0316655af3107a40006139f98383613b00565b111561399a57655af3107a40008110613a13576000613a15565b805b613a1f9083613b00565b915081600160098282829054906101000a90046001600160481b0316613a459190613fe5565b92506101000a8154816001600160481b0302191690836001600160481b0316021790555081600054613a779190613abf565b6001600160a01b0384166000908152600d602052604081208054909190613a9f9084906140ea565b9091555050505050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615613ad957613ad9613aa9565b500290565b600082613afb57634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115613b1357613b13613aa9565b500190565b60006001600160581b03808316818516808303821115613b3a57613b3a613aa9565b01949350505050565b600060208083528351808285015260005b81811015613b7057858101830151858201604001528201613b54565b81811115613b82576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610b7157600080fd5b60008060408385031215613bc057600080fd5b8235613bcb81613b98565b946020939093013593505050565b600060208284031215613beb57600080fd5b81356136cb81613b98565b600080600060608486031215613c0b57600080fd5b8335613c1681613b98565b92506020840135613c2681613b98565b929592945050506040919091013590565b803561ffff81168114613c4957600080fd5b919050565b600060208284031215613c6057600080fd5b6136cb82613c37565b600060208284031215613c7b57600080fd5b5035919050565b600060208284031215613c9457600080fd5b81356001600160401b03811681146136cb57600080fd5b60008083601f840112613cbd57600080fd5b5081356001600160401b03811115613cd457600080fd5b6020830191508360208260051b8501011115613cef57600080fd5b9250929050565b60008060008060008060808789031215613d0f57600080fd5b86356001600160401b0380821115613d2657600080fd5b613d328a838b01613cab565b90985096506020890135915080821115613d4b57600080fd5b50613d5889828a01613cab565b979a9699509760408101359660609091013595509350505050565b8015158114610b7157600080fd5b60008060408385031215613d9457600080fd5b8235613d9f81613b98565b91506020830135613daf81613d73565b809150509250929050565b63ffffffff81168114610b7157600080fd5b600060208284031215613dde57600080fd5b81356136cb81613dba565b60008060408385031215613dfc57600080fd5b8235613e0781613b98565b91506020830135613daf81613b98565b803560ff81168114613c4957600080fd5b600080600080600080600060e0888a031215613e4357600080fd5b613e4c88613c37565b9650613e5a60208901613c37565b9550613e6860408901613e17565b9450613e7660608901613e17565b9350613e8460808901613e17565b9250613e9260a08901613e17565b9150613ea060c08901613e17565b905092959891949750929550565b60208082526009908201526837b7363ca7bbb732b960b91b604082015260600190565b6020808252601590820152746f7574206f662061636365707465642072616e676560581b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415613f2a57613f2a613aa9565b5060010190565b600063ffffffff808316818516808303821115613b3a57613b3a613aa9565b600060208284031215613f6257600080fd5b5051919050565b600060208284031215613f7b57600080fd5b81516136cb81613d73565b600082821015613f9857613f98613aa9565b500390565b60006001600160481b0383811690831681811015613fbd57613fbd613aa9565b039392505050565b6020808252600690820152656e6f626f747360d01b604082015260600190565b60006001600160481b03808316818516808303821115613b3a57613b3a613aa9565b60006001600160401b03808316818516808303821115613b3a57613b3a613aa9565b60006001600160801b03808316818516808303821115613b3a57613b3a613aa9565b80516001600160701b0381168114613c4957600080fd5b60008060006060848603121561407757600080fd5b6140808461404b565b925061408e6020850161404b565b9150604084015161409e81613dba565b809150509250925092565b600080821280156001600160ff1b03849003851316156140cb576140cb613aa9565b600160ff1b83900384128116156140e4576140e4613aa9565b50500190565b60008083128015600160ff1b85018412161561410857614108613aa9565b6001600160ff1b038401831381161561412357614123613aa9565b5050039056fea2646970667358221220ac449eb9a8783422cc3f46408651ff5d65150194a01a33b8d0c1adb6390e5f5f64736f6c634300080a0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d00000000000000000000000000000000000000000000000098a7d9b8314c0000

-----Decoded View---------------
Arg [0] : routerAddress (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : initLqtyAmt (uint72): 11000000000000000000

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 00000000000000000000000000000000000000000000000098a7d9b8314c0000


Deployed Bytecode Sourcemap

14195:25070:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35897:13;;-1:-1:-1;;;35897:13:0;;-1:-1:-1;;;;;35897:13:0;35889:48;;;;-1:-1:-1;;;35889:48:0;;216:2:1;35889:48:0;;;198:21:1;255:2;235:18;;;228:30;-1:-1:-1;;;274:18:1;;;267:49;333:18;;35889:48:0;;;;;;;;;35960:1;35948:9;:13;:46;;;;-1:-1:-1;35987:6:0;;-1:-1:-1;;;;;35987:6:0;35965:10;:29;;35948:46;:84;;;;-1:-1:-1;36020:11:0;;-1:-1:-1;;;;;36020:11:0;35998:10;:34;;35948:84;35944:231;;;36103:13;;-1:-1:-1;;;36103:13:0;;-1:-1:-1;;;;;36103:13:0;36077:22;-1:-1:-1;;;36077:9:0;:22;:::i;:::-;36076:40;;;;:::i;:::-;36059:13;;:58;;;;:::i;:::-;36043:13;:74;36126:20;:41;;36157:9;;36126:20;;;:41;;36157:9;;-1:-1:-1;;;36126:41:0;;-1:-1:-1;;;;;36126:41:0;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;36126:41:0;;;;;-1:-1:-1;;;;;36126:41:0;;;;;;35944:231;14195:25070;;;;;38260:76;;;;;;;;;;;;;:::i;31889:72::-;;;;;;;;;;-1:-1:-1;31944:15:0;;;;;;;;;;;;-1:-1:-1;;;31944:15:0;;;;31889:72;;;;;;;:::i;:::-;;;;;;;;32745:137;;;;;;;;;;-1:-1:-1;32745:137:0;;;;;:::i;:::-;;:::i;:::-;;;2588:14:1;;2581:22;2563:41;;2551:2;2536:18;32745:137:0;2423:187:1;25835:76:0;;;;;;;;;;;;;:::i;27960:105::-;;;;;;;;;;-1:-1:-1;27960:105:0;;;;;:::i;:::-;;:::i;31007:112::-;;;;;;;;;;-1:-1:-1;31007:112:0;;;;;:::i;:::-;;:::i;:::-;;;3013:25:1;;;3001:2;2986:18;31007:112:0;2867:177:1;32177:76:0;;;;;;;;;;-1:-1:-1;32239:12:0;;-1:-1:-1;;;;;32239:12:0;32177:76;;;-1:-1:-1;;;;;3211:33:1;;;3193:52;;3181:2;3166:18;32177:76:0;3049:202:1;32886:381:0;;;;;;;;;;-1:-1:-1;32886:381:0;;;;;:::i;:::-;;:::i;32257:78::-;;;;;;;;;;-1:-1:-1;32320:13:0;;-1:-1:-1;;;32320:13:0;;-1:-1:-1;;;;;32320:13:0;32257:78;;32043:61;;;;;;;;;;-1:-1:-1;32043:61:0;;32101:1;3859:36:1;;3847:2;3832:18;32043:61:0;3717:184:1;28975:183:0;;;;;;;;;;-1:-1:-1;28975:183:0;;;;;:::i;:::-;;:::i;33271:195::-;;;;;;;;;;-1:-1:-1;33271:195:0;;;;;:::i;:::-;;:::i;23296:353::-;;;;;;:::i;:::-;;:::i;31751:98::-;;;;;;;;;;-1:-1:-1;31751:98:0;;;;;:::i;:::-;;:::i;25915:245::-;;;;;;;;;;-1:-1:-1;25915:245:0;;;;;:::i;:::-;;:::i;29162:248::-;;;;;;;;;;-1:-1:-1;29162:248:0;;;;;:::i;:::-;;:::i;38342:457::-;;;;;;;;;;-1:-1:-1;38342:457:0;;;;;:::i;:::-;;:::i;18016:362::-;;;;;;;;;;-1:-1:-1;18016:362:0;;;;;:::i;:::-;;:::i;28543:428::-;;;;;;;;;;-1:-1:-1;28543:428:0;;;;;:::i;:::-;;:::i;18382:370::-;;;;;;;;;;-1:-1:-1;18382:370:0;;;;;:::i;:::-;;:::i;32339:117::-;;;;;;;;;;-1:-1:-1;32339:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;32429:11:0;32398:7;32429:11;;;:2;:11;;;;;:20;-1:-1:-1;;;;;32429:20:0;;32339:117;35172:91;;;;;;;;;;;;;:::i;31668:77::-;;;;;;;;;;-1:-1:-1;31736:6:0;;-1:-1:-1;;;;;31736:6:0;31668:77;;;-1:-1:-1;;;;;6954:32:1;;;6936:51;;6924:2;6909:18;31668:77:0;6790:203:1;31490:83:0;;;;;;;;;;-1:-1:-1;31561:9:0;;-1:-1:-1;;;;;31561:9:0;31490:83;;22944:348;;;;;;;;;;-1:-1:-1;22944:348:0;;;;;:::i;:::-;;:::i;32108:65::-;;;;;;;;;;-1:-1:-1;32165:6:0;;-1:-1:-1;;;;;32165:6:0;32108:65;;31965:74;;;;;;;;;;-1:-1:-1;32022:15:0;;;;;;;;;;;;-1:-1:-1;;;32022:15:0;;;;31965:74;;23653:614;;;;;;;;;;-1:-1:-1;23653:614:0;;;;;:::i;:::-;;:::i;27363:376::-;;;;;;;;;;-1:-1:-1;27363:376:0;;;;;:::i;:::-;;:::i;33470:360::-;;;;;;;;;;-1:-1:-1;33470:360:0;;;;;:::i;:::-;;:::i;32460:143::-;;;;;;;;;;-1:-1:-1;32460:143:0;;;;;:::i;:::-;;:::i;38803:457::-;;;;;;;;;;-1:-1:-1;38803:457:0;;;;;:::i;:::-;;:::i;29414:893::-;;;;;;;;;;;;29786:24;;;;;;;;29804:6;29786:24;-1:-1:-1;;;;;29786:24:0;;;;;;-1:-1:-1;;;29786:24:0;;;;;;;;;;;;-1:-1:-1;;;29786:24:0;;;;;;;;;;-1:-1:-1;;;29786:24:0;;;;;;;;;;-1:-1:-1;;;29786:24:0;;;;;;;;;;;;-1:-1:-1;;;29786:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;29786:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29414:893;;;;;-1:-1:-1;;;;;8050:31:1;;;8032:50;;8118:31;;;8113:2;8098:18;;8091:59;8198:10;8186:23;;;8166:18;;;8159:51;;;;8258:6;8246:19;;;8241:2;8226:18;;8219:47;7439:30;;;;8316:3;8301:19;;7427:43;2397:13;;2390:21;8369:3;8354:19;;2378:34;7546:18;;;8424:3;8409:19;;7534:31;7546:18;;8479:3;8464:19;;7534:31;7546:18;;8534:3;8519:19;;7534:31;7546:18;;8589:3;8574:19;;7534:31;7546:18;;8645:3;8630:19;;7534:31;7546:18;;;8701:3;8686:19;;7534:31;7546:18;;;;8757:3;8742:19;;7534:31;8019:3;8004:19;29414:893:0;7576:1192:1;31577:87:0;;;;;;;;;;-1:-1:-1;31650:11:0;;-1:-1:-1;;;;;31650:11:0;31577:87;;31123:118;;;;;;;;;;-1:-1:-1;31123:118:0;;;;;:::i;:::-;;:::i;32607:134::-;;;;;;;;;;-1:-1:-1;32607:134:0;;;;;:::i;:::-;-1:-1:-1;;;;;32706:19:0;;;32683:7;32706:19;;;:11;:19;;;;;;;;:29;;;;;;;;;;;;;32607:134;26322:1037;;;;;;;;;;-1:-1:-1;26322:1037:0;;;;;:::i;:::-;;:::i;27743:213::-;;;;;;;;;;-1:-1:-1;27743:213:0;;;;;:::i;:::-;;:::i;26164:154::-;;;;;;;;;;-1:-1:-1;26164:154:0;;;;;:::i;:::-;;:::i;31245:132::-;;;;;;;;;;-1:-1:-1;31245:132:0;;;;;:::i;:::-;-1:-1:-1;;;;;31339:11:0;31318:6;31339:11;;;:2;:11;;;;;:32;-1:-1:-1;;;31339:32:0;;-1:-1:-1;;;;;31339:32:0;;31245:132;;;;-1:-1:-1;;;;;10104:37:1;;;10086:56;;10074:2;10059:18;31245:132:0;9942:206:1;31381:105:0;;;;;;;;;;-1:-1:-1;31460:20:0;;-1:-1:-1;;;31460:20:0;;-1:-1:-1;;;;;31460:20:0;31381:105;;35267:236;;;;;;;;;;-1:-1:-1;35267:236:0;;;;;:::i;:::-;;:::i;30311:692::-;;;;;;;;;;-1:-1:-1;30311:692:0;;;;;:::i;:::-;;:::i;:::-;;;;10472:25:1;;;10528:2;10513:18;;10506:34;;;;10556:18;;;10549:34;;;;10614:2;10599:18;;10592:34;;;;10670:14;10663:22;10657:3;10642:19;;10635:51;10730:14;10723:22;10717:3;10702:19;;10695:51;10790:14;10783:22;10777:3;10762:19;;10755:51;10850:14;10843:22;10837:3;10822:19;;10815:51;10459:3;10444:19;30311:692:0;10153:719:1;38260:76:0;38294:36;38318:10;38294:15;:36::i;:::-;;38260:76::o;32745:137::-;32813:4;32826:37;32835:10;32847:7;32856:6;32826:8;:37::i;:::-;-1:-1:-1;32872:4:0;32745:137;;;;:::o;25835:76::-;16041:6;;-1:-1:-1;;;;;16041:6:0;16051:10;16041:20;16033:41;;;;-1:-1:-1;;;16033:41:0;;;;;;;:::i;:::-;25881:6:::1;:28:::0;;-1:-1:-1;;;;25881:28:0::1;-1:-1:-1::0;;;25881:28:0::1;::::0;;25835:76::o;27960:105::-;16041:6;;-1:-1:-1;;;;;16041:6:0;16051:10;16041:20;16033:41;;;;-1:-1:-1;;;16033:41:0;;;;;;;:::i;:::-;28031:28:::1;28051:7;28031:19;:28::i;31007:112::-:0;31071:7;31093:20;31108:4;31093:14;:20::i;:::-;31086:27;31007:112;-1:-1:-1;;31007:112:0:o;32886:381::-;32977:4;32990:36;33000:6;33008:9;33019:6;32990:9;:36::i;:::-;-1:-1:-1;;;;;33060:19:0;;33033:24;33060:19;;;:11;:19;;;;;;;;33080:10;33060:31;;;;;;;;33106:26;;;;33098:63;;;;-1:-1:-1;;;33098:63:0;;11416:2:1;33098:63:0;;;11398:21:1;11455:2;11435:18;;;11428:30;11494:26;11474:18;;;11467:54;11538:18;;33098:63:0;11214:348:1;33098:63:0;33183:55;33192:6;33200:10;33231:6;33212:16;:25;33183:8;:55::i;:::-;-1:-1:-1;33257:4:0;;32886:381;-1:-1:-1;;;;32886:381:0:o;28975:183::-;16041:6;;-1:-1:-1;;;;;16041:6:0;16051:10;16041:20;16033:41;;;;-1:-1:-1;;;16033:41:0;;;;;;;:::i;:::-;29071:4:::1;29056:14;:19;;;29048:53;;;::::0;-1:-1:-1;;;29048:53:0;;11769:2:1;29048:53:0::1;::::0;::::1;11751:21:1::0;11808:2;11788:18;;;11781:30;-1:-1:-1;;;11827:18:1;;;11820:52;11889:18;;29048:53:0::1;11567:346:1::0;29048:53:0::1;29108:6;:44:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;29108:44:0::1;-1:-1:-1::0;;;;29108:44:0;;::::1;::::0;;;::::1;::::0;;28975:183::o;33271:195::-;33375:10;33353:4;33396:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;33396:32:0;;;;;;;;;;33353:4;;33366:76;;33387:7;;33396:45;;33431:10;;33396:45;:::i;:::-;33366:8;:76::i;23296:353::-;16041:6;;-1:-1:-1;;;;;16041:6:0;16051:10;16041:20;16033:41;;;;-1:-1:-1;;;16033:41:0;;;;;;;:::i;:::-;23413:1:::1;23399:13;:15;:30;;;;;23428:1;23418:9;:11;23399:30;23391:69;;;::::0;-1:-1:-1;;;23391:69:0;;12120:2:1;23391:69:0::1;::::0;::::1;12102:21:1::0;12159:2;12139:18;;;12132:30;12198:29;12178:18;;;12171:57;12245:18;;23391:69:0::1;11918:351:1::0;23391:69:0::1;23482:6;::::0;23467:52:::1;::::0;-1:-1:-1;;;;;23482:6:0::1;23498:4;23505:13:::0;23467:14:::1;:52::i;:::-;23526:61;23563:13;23577:9;23526:36;:61::i;:::-;23599:44;::::0;23629:13;;23599:44:::1;::::0;;;::::1;23296:353:::0;:::o;31751:98::-;16041:6;;-1:-1:-1;;;;;16041:6:0;16051:10;16041:20;16033:41;;;;-1:-1:-1;;;16033:41:0;;;;;;;:::i;:::-;31818:25:::1;31824:10;31836:6;31818:5;:25::i;25915:245::-:0;16041:6;;-1:-1:-1;;;;;16041:6:0;16051:10;16041:20;16033:41;;;;-1:-1:-1;;;16033:41:0;;;;;;;:::i;:::-;26002:12:::1;25991:8;-1:-1:-1::0;;;;;25991:24:0::1;;;25983:58;;;;-1:-1:-1::0;;;25983:58:0::1;;;;;;;:::i;:::-;26067:23;26056:8;-1:-1:-1::0;;;;;26056:35:0::1;;;26048:69;;;;-1:-1:-1::0;;;26048:69:0::1;;;;;;;:::i;:::-;26124:6;:30:::0;;-1:-1:-1;;26124:30:0::1;-1:-1:-1::0;;;;;26124:30:0;;;::::1;::::0;;;::::1;::::0;;25915:245::o;29162:248::-;16041:6;;-1:-1:-1;;;;;16041:6:0;16051:10;16041:20;16033:41;;;;-1:-1:-1;;;16033:41:0;;;;;;;:::i;:::-;29273:1:::1;29253:19;-1:-1:-1::0;;;;;29253:21:0::1;;29245:54;;;;-1:-1:-1::0;;;29245:54:0::1;;;;;;;:::i;:::-;29306:6;:46:::0;;-1:-1:-1;;;;29306:46:0::1;-1:-1:-1::0;;;;;;;;29306:46:0;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;29364:40:::1;::::0;::::1;::::0;-1:-1:-1;;29364:40:0::1;29162:248:::0;:::o;38342:457::-;38499:6;;-1:-1:-1;;;;;38499:6:0;38509:10;38499:20;:46;;;;-1:-1:-1;38524:6:0;:21;-1:-1:-1;;;38524:21:0;;;;38523:22;38499:46;38491:82;;;;-1:-1:-1;;;38491:82:0;;12826:2:1;38491:82:0;;;12808:21:1;12865:2;12845:18;;;12838:30;-1:-1:-1;;;12884:18:1;;;12877:54;12948:18;;38491:82:0;12624:348:1;38491:82:0;38585:6;38580:108;38593:16;;;38580:108;;;38668:7;;38676:1;38668:10;;;;;;;:::i;:::-;;;;;;;38635:2;:12;38638:5;;38644:1;38638:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;38635:12:0;;;;;;;;;;;;-1:-1:-1;38635:12:0;:44;;-1:-1:-1;;;;;;38635:44:0;;-1:-1:-1;;;;;38635:44:0;;;;;;;;;;;;;;38611:3;;;;:::i;:::-;;;;38580:108;;;-1:-1:-1;38704:12:0;:34;;-1:-1:-1;;;;;;;;38704:34:0;;;;;;;;-1:-1:-1;;38704:34:0;;;;38756:36;;;;;;;;;;;;;;-1:-1:-1;;;;;;38756:36:0;;;;;;;;;;;;-1:-1:-1;;;;38342:457:0:o;18016:362::-;16041:6;;-1:-1:-1;;;;;16041:6:0;16051:10;16041:20;16033:41;;;;-1:-1:-1;;;16033:41:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18115:32:0;::::1;18107:68;;;::::0;-1:-1:-1;;;18107:68:0;;13451:2:1;18107:68:0::1;::::0;::::1;13433:21:1::0;13490:2;13470:18;;;13463:30;-1:-1:-1;;;13509:18:1;;;13502:53;13572:18;;18107:68:0::1;13249:347:1::0;18107:68:0::1;18195:17;::::0;18187:26:::1;::::0;-1:-1:-1;;;18195:17:0;;::::1;-1:-1:-1::0;;;;;18195:17:0::1;::::0;18187:26:::1;::::0;;;::::1;18269:17;::::0;18238:53:::1;::::0;18221:12:::1;::::0;-1:-1:-1;;;;;18238:23:0;::::1;::::0;-1:-1:-1;;;18269:17:0;;::::1;-1:-1:-1::0;;;;;18269:17:0::1;::::0;18221:12;18238:53;18221:12;18238:53;18269:17;18238:23;:53:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18220:71;;;18306:7;18298:46;;;::::0;-1:-1:-1;;;18298:46:0;;14013:2:1;18298:46:0::1;::::0;::::1;13995:21:1::0;14052:2;14032:18;;;14025:30;14091:28;14071:18;;;14064:56;14137:18;;18298:46:0::1;13811:350:1::0;18298:46:0::1;-1:-1:-1::0;;18351:17:0::1;:21:::0;;-1:-1:-1;;18351:21:0::1;::::0;;18016:362::o;28543:428::-;16041:6;;-1:-1:-1;;;;;16041:6:0;16051:10;16041:20;16033:41;;;;-1:-1:-1;;;16033:41:0;;;;;;;:::i;:::-;28624:6:::1;28621:304;;;28668:11;::::0;-1:-1:-1;;;;;28649:31:0;;::::1;28668:11:::0;::::1;28649:31;::::0;::::1;::::0;:71:::1;;-1:-1:-1::0;28710:9:0::1;::::0;-1:-1:-1;;;;;28691:29:0;;::::1;28710:9:::0;::::1;28691:29;;28649:71;:108;;;;-1:-1:-1::0;28750:6:0::1;::::0;-1:-1:-1;;;;;28731:26:0;;::::1;28750:6:::0;::::1;28731:26;;28649:108;:145;;;;-1:-1:-1::0;28787:6:0::1;::::0;-1:-1:-1;;;;;28768:26:0;;::::1;28787:6:::0;::::1;28768:26;;28649:145;28641:189;;;::::0;-1:-1:-1;;;28641:189:0;;14368:2:1;28641:189:0::1;::::0;::::1;14350:21:1::0;14407:2;14387:18;;;14380:30;14446:26;14426:18;;;14419:54;14490:18;;28641:189:0::1;14166:348:1::0;28641:189:0::1;-1:-1:-1::0;;;;;28839:11:0;::::1;;::::0;;;:2:::1;:11;::::0;;;;:35;;-1:-1:-1;;;;28839:35:0::1;-1:-1:-1::0;;;28839:35:0::1;::::0;;28621:304:::1;;;-1:-1:-1::0;;;;;28887:11:0;::::1;28918:5;28887:11:::0;;;:2:::1;:11;::::0;;;;:36;;-1:-1:-1;;;;28887:36:0::1;::::0;;28621:304:::1;28936:29;::::0;;::::1;;::::0;-1:-1:-1;;;;;28936:29:0;::::1;::::0;::::1;::::0;;;::::1;28543:428:::0;;:::o;18382:370::-;16041:6;;-1:-1:-1;;;;;16041:6:0;16051:10;16041:20;16033:41;;;;-1:-1:-1;;;16033:41:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18485:34:0;::::1;18477:70;;;::::0;-1:-1:-1;;;18477:70:0;;13451:2:1;18477:70:0::1;::::0;::::1;13433:21:1::0;13490:2;13470:18;;;13463:30;-1:-1:-1;;;13509:18:1;;;13502:53;13572:18;;18477:70:0::1;13249:347:1::0;18477:70:0::1;18567:17;::::0;18559:26:::1;::::0;-1:-1:-1;;;18567:17:0;;::::1;-1:-1:-1::0;;;;;18567:17:0::1;::::0;18559:26:::1;::::0;;;::::1;18643:17;::::0;18610:55:::1;::::0;18593:12:::1;::::0;-1:-1:-1;;;;;18610:25:0;::::1;::::0;-1:-1:-1;;;18643:17:0;;::::1;-1:-1:-1::0;;;;;18643:17:0::1;::::0;18593:12;18610:55;18593:12;18610:55;18643:17;18610:25;:55:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18592:73;;;18680:7;18672:46;;;::::0;-1:-1:-1;;;18672:46:0;;14013:2:1;18672:46:0::1;::::0;::::1;13995:21:1::0;14052:2;14032:18;;;14025:30;14091:28;14071:18;;;14064:56;14137:18;;18672:46:0::1;13811:350:1::0;18672:46:0::1;-1:-1:-1::0;;18725:17:0::1;:21:::0;;-1:-1:-1;;;;18725:21:0::1;::::0;;18382:370::o;35172:91::-;16041:6;;-1:-1:-1;;;;;16041:6:0;16051:10;16041:20;16033:41;;;;-1:-1:-1;;;16033:41:0;;;;;;;:::i;:::-;35227:30:::1;35254:1;35227:18;:30::i;:::-;35172:91::o:0;22944:348::-;16041:6;;-1:-1:-1;;;;;16041:6:0;16051:10;16041:20;16033:41;;;;-1:-1:-1;;;16033:41:0;;;;;;;:::i;:::-;23102:6:::1;:23:::0;-1:-1:-1;;;23102:23:0;::::1;;;23079:20;23155:24;23171:8:::0;23102:23;23155:24:::1;:::i;:::-;23186:6;:39:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;23186:39:0;::::1;-1:-1:-1::0;;;;23186:39:0;;::::1;::::0;;;::::1;::::0;;;23237:49:::1;::::0;23132:47;;-1:-1:-1;23186:39:0;23237:49;;::::1;::::0;::::1;::::0;23186:23:::1;::::0;23237:49:::1;23007:285;;22944:348:::0;:::o;23653:614::-;16041:6;;-1:-1:-1;;;;;16041:6:0;16051:10;16041:20;16033:41;;;;-1:-1:-1;;;16033:41:0;;;;;;;:::i;:::-;23752:6:::1;:23:::0;23778:15:::1;-1:-1:-1::0;;;23752:23:0;;::::1;;;:41;23744:79;;;::::0;-1:-1:-1;;;23744:79:0;;14954:2:1;23744:79:0::1;::::0;::::1;14936:21:1::0;14993:2;14973:18;;;14966:30;15032:28;15012:18;;;15005:56;15078:18;;23744:79:0::1;14752:350:1::0;23744:79:0::1;23838:9;::::0;:34:::1;::::0;-1:-1:-1;;;23838:34:0;;23866:4:::1;23838:34;::::0;::::1;6936:51:1::0;23876:13:0;;-1:-1:-1;;;;;23838:9:0::1;::::0;:19:::1;::::0;6909:18:1;;23838:34:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;;23830:94;;;::::0;-1:-1:-1;;;23830:94:0;;15498:2:1;23830:94:0::1;::::0;::::1;15480:21:1::0;15537:2;15517:18;;;15510:30;15576:33;15556:18;;;15549:61;15627:18;;23830:94:0::1;15296:355:1::0;23830:94:0::1;24060:9;::::0;24086:6:::1;::::0;24060:65:::1;::::0;-1:-1:-1;;;24060:65:0;;-1:-1:-1;;;;;24086:6:0;;::::1;24060:65;::::0;::::1;15830:51:1::0;15897:18;;;15890:34;;;24060:9:0;::::1;::::0;:17:::1;::::0;15803:18:1;;24060:65:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;24132:6:0::1;::::0;24195::::1;::::0;;24132:70:::1;::::0;-1:-1:-1;;;24132:70:0;;;;::::1;16359:25:1::0;;;-1:-1:-1;;;;;24195:6:0;;::::1;16400:18:1::0;;;16393:60;24132:6:0;;::::1;::::0;:47:::1;::::0;16332:18:1;;24132:70:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;24214:47:0::1;::::0;24247:13;;-1:-1:-1;24214:47:0::1;::::0;-1:-1:-1;24214:47:0;;::::1;23653:614:::0;:::o;27363:376::-;16041:6;;-1:-1:-1;;;;;16041:6:0;16051:10;16041:20;16033:41;;;;-1:-1:-1;;;16033:41:0;;;;;;;:::i;:::-;27485:9:::1;::::0;-1:-1:-1;;;;;27465:30:0;;::::1;27485:9:::0;::::1;27465:30;;27457:67;;;::::0;-1:-1:-1;;;27457:67:0;;16666:2:1;27457:67:0::1;::::0;::::1;16648:21:1::0;16705:2;16685:18;;;16678:30;16744:27;16724:18;;;16717:55;16789:18;;27457:67:0::1;16464:349:1::0;27457:67:0::1;-1:-1:-1::0;;;;;27539:12:0;::::1;;::::0;;;:2:::1;:12;::::0;;;;:22;::::1;-1:-1:-1::0;;;27539:22:0;;::::1;;:32;;::::0;::::1;;;;27531:66;;;::::0;-1:-1:-1;;;27531:66:0;;17020:2:1;27531:66:0::1;::::0;::::1;17002:21:1::0;17059:2;17039:18;;;17032:30;-1:-1:-1;;;17078:18:1;;;17071:52;17140:18;;27531:66:0::1;16818:346:1::0;27531:66:0::1;-1:-1:-1::0;;;;;27604:12:0;::::1;;::::0;;;:2:::1;:12;::::0;;;;:31;;;::::1;::::0;::::1;-1:-1:-1::0;;;27604:31:0::1;-1:-1:-1::0;;;;27604:31:0;;::::1;::::0;;;::::1;::::0;;;27629:6;;27645:42:::1;;-1:-1:-1::0;;;;;;27656:12:0;::::1;;::::0;;;:2:::1;:12;::::0;;;;:31;-1:-1:-1;;;27656:31:0;::::1;;;27655:32;27645:42;27642:92;;;27697:29;27717:8;27697:19;:29::i;:::-;27363:376:::0;;:::o;33470:360::-;33609:10;33557:4;33597:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;33597:32:0;;;;;;;;;;33644:35;;;;33636:78;;;;-1:-1:-1;;;33636:78:0;;17371:2:1;33636:78:0;;;17353:21:1;17410:2;17390:18;;;17383:30;17449:32;17429:18;;;17422:60;17499:18;;33636:78:0;17169:354:1;33636:78:0;33736:65;33745:10;33757:7;33785:15;33766:16;:34;33736:8;:65::i;:::-;-1:-1:-1;33820:4:0;;33470:360;-1:-1:-1;;;33470:360:0:o;32460:143::-;32531:4;32544:40;32554:10;32566:9;32577:6;32544:9;:40::i;38803:457::-;38960:6;;-1:-1:-1;;;;;38960:6:0;38970:10;38960:20;:46;;;;-1:-1:-1;38985:6:0;:21;-1:-1:-1;;;38985:21:0;;;;38984:22;38960:46;38952:82;;;;-1:-1:-1;;;38952:82:0;;12826:2:1;38952:82:0;;;12808:21:1;12865:2;12845:18;;;12838:30;-1:-1:-1;;;12884:18:1;;;12877:54;12948:18;;38952:82:0;12624:348:1;38952:82:0;39046:6;39041:108;39054:16;;;39041:108;;;39129:7;;39137:1;39129:10;;;;;;;:::i;:::-;;;;;;;39096:2;:12;39099:5;;39105:1;39099:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;39096:12:0;;;;;;;;;;;;-1:-1:-1;39096:12:0;:44;;-1:-1:-1;;;;;;39096:44:0;;-1:-1:-1;;;;;39096:44:0;;;;;;;;;;;;;;39072:3;;;;:::i;:::-;;;;39041:108;;;-1:-1:-1;39165:12:0;:34;;-1:-1:-1;;;;;;39217:36:0;;-1:-1:-1;;;;;39165:34:0;;;;;;;;;39217:36;;;-1:-1:-1;;;;;39165:34:0;;;;;;39217:36;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;38803:457:0:o;31123:118::-;31190:7;31212:23;31230:4;31212:17;:23::i;26322:1037::-;16041:6;;-1:-1:-1;;;;;16041:6:0;16051:10;16041:20;16033:41;;;;-1:-1:-1;;;16033:41:0;;;;;;;:::i;:::-;26549:2:::1;26533:14;:18;;;;:42;;;;;26571:4;26555:14;:20;;;;26533:42;:72;;;;;26603:2;26586:15;:19;;;;26533:72;:97;;;;;26626:4;26609:15;:21;;;;26533:97;26517:161;;;::::0;-1:-1:-1;;;26517:161:0;;17730:2:1;26517:161:0::1;::::0;::::1;17712:21:1::0;17769:2;17749:18;;;17742:30;17808:32;17788:18;;;17781:60;17858:18;;26517:161:0::1;17528:354:1::0;26517:161:0::1;26715:1;26703:11;:13;;;:30;;;;;26732:1;26720:11;:13;;;26703:30;26702:68;;;-1:-1:-1::0;26737:14:0::1;::::0;::::1;::::0;:32;::::1;;;-1:-1:-1::0;26755:14:0::1;::::0;::::1;::::0;26737:32:::1;26701:97;;;;;26795:3;26782:11;:16;;;;26701:97;:124;;;;;26822:3;26809:11;:16;;;;26701:124;:151;;;;;26849:3;26836:11;:16;;;;26701:151;:178;;;;;26876:3;26863:11;:16;;;;26701:178;:205;;;;;26903:3;26890:11;:16;;;;26701:205;26685:270;;;::::0;-1:-1:-1;;;26685:270:0;;18089:2:1;26685:270:0::1;::::0;::::1;18071:21:1::0;18128:2;18108:18;;;18101:30;18167:33;18147:18;;;18140:61;18218:18;;26685:270:0::1;17887:355:1::0;26685:270:0::1;26986:14;26962:6;:20;;;:38;;;;;;;;;;;;;;;;;;27031:15;27007:6;:21;;;:39;;;;;;;;;;;;;;;;;;27073:11;27053:6;:17;;;:31;;;;;;;;;;;;;;;;;;27111:11;27091:6;:17;;;:31;;;;;;;;;;;;;;;;;;27149:11;27129:6;:17;;;:31;;;;;;;;;;;;;;;;;;27187:11;27167:6;:17;;;:31;;;;;;;;;;;;;;;;;;27225:11;27205:6;:17;;;:31;;;;;;;;;;;;;;;;;;27272:15;27248:105;;27256:14;27248:105;;;27289:11;27302;27315;27328;27341;27248:105;;;;;;;;;18516:4:1::0;18504:17;;;18486:36;;18558:17;;;18553:2;18538:18;;18531:45;18612:17;;;18607:2;18592:18;;18585:45;18666:17;;18661:2;18646:18;;18639:45;18721:17;;;18715:3;18700:19;;18693:46;18473:3;18458:19;;18247:498;27248:105:0::1;;;;;;;;26322:1037:::0;;;;;;;:::o;27743:213::-;16041:6;;-1:-1:-1;;;;;16041:6:0;16051:10;16041:20;16033:41;;;;-1:-1:-1;;;16033:41:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27820:11:0;::::1;;::::0;;;:2:::1;:11;::::0;;;;:30;-1:-1:-1;;;27820:30:0;::::1;;;27819:31;27811:59;;;::::0;-1:-1:-1;;;27811:59:0;;18952:2:1;27811:59:0::1;::::0;::::1;18934:21:1::0;18991:2;18971:18;;;18964:30;-1:-1:-1;;;19010:18:1;;;19003:46;19066:18;;27811:59:0::1;18750:340:1::0;27811:59:0::1;-1:-1:-1::0;;;;;27877:11:0;::::1;;::::0;;;:2:::1;:11;::::0;;;;;:37;;-1:-1:-1;;;;27877:37:0::1;-1:-1:-1::0;;;27877:37:0::1;::::0;;27926:24;::::1;::::0;27877:11;27926:24:::1;27743:213:::0;:::o;26164:154::-;16041:6;;-1:-1:-1;;;;;16041:6:0;16051:10;16041:20;16033:41;;;;-1:-1:-1;;;16033:41:0;;;;;;;:::i;:::-;26247:3:::1;26239:6;-1:-1:-1::0;;;;;26239:11:0::1;;;26231:45;;;;-1:-1:-1::0;;;26231:45:0::1;;;;;;;:::i;:::-;26283:6;:29:::0;;-1:-1:-1;;;;;26283:29:0;;::::1;-1:-1:-1::0;;;26283:29:0::1;-1:-1:-1::0;;26283:29:0;;::::1;::::0;;;::::1;::::0;;26164:154::o;35267:236::-;16041:6;;-1:-1:-1;;;;;16041:6:0;16051:10;16041:20;16033:41;;;;-1:-1:-1;;;16033:41:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35346:22:0;::::1;35338:57;;;::::0;-1:-1:-1;;;35338:57:0;;19297:2:1;35338:57:0::1;::::0;::::1;19279:21:1::0;19336:2;19316:18;;;19309:30;-1:-1:-1;;;19355:18:1;;;19348:52;19417:18;;35338:57:0::1;19095:346:1::0;35338:57:0::1;35430:6;::::0;-1:-1:-1;;;;;35410:27:0;;::::1;35430:6:::0;::::1;35410:27;;35402:60;;;::::0;-1:-1:-1;;;35402:60:0;;19648:2:1;35402:60:0::1;::::0;::::1;19630:21:1::0;19687:2;19667:18;;;19660:30;-1:-1:-1;;;19706:18:1;;;19699:50;19766:18;;35402:60:0::1;19446:344:1::0;35402:60:0::1;35469:28;35488:8;35469:18;:28::i;30311:692::-:0;-1:-1:-1;;;;;30598:11:0;;30377:16;30598:11;;;:2;:11;;;;;:20;-1:-1:-1;;;;;30598:20:0;;30377:16;;;;;;30643:23;30601:7;30643:14;:23::i;:::-;30625:41;;30694:26;30712:7;30694:17;:26::i;:::-;-1:-1:-1;;;;;30751:11:0;;;;;;;:2;:11;;;;;:32;30311:692;;;;30673:47;-1:-1:-1;;;;;;;;30751:32:0;;;;30803:21;-1:-1:-1;;;30803:21:0;;;;;-1:-1:-1;;;;30851:28:0;;;;;-1:-1:-1;;;;30908:30:0;;;;;-1:-1:-1;;;;30967:30:0;;;;;;;-1:-1:-1;30311:692:0;-1:-1:-1;;30311:692:0:o;37601:655::-;37668:15;37691:22;37716:23;37731:7;37716:14;:23::i;:::-;37767:6;:24;37691:48;;-1:-1:-1;;;;37767:24:0;;-1:-1:-1;;;;;37767:24:0;37750:41;;37746:505;;;-1:-1:-1;;;;;37844:11:0;;;;;;:2;:11;;;;;:32;:49;;37879:14;;-1:-1:-1;;;37844:32:0;;-1:-1:-1;;;;;37844:32:0;:49;:::i;:::-;-1:-1:-1;;;;;37802:11:0;;;;;;:2;:11;;;;;;:92;;-1:-1:-1;;;;;37802:92:0;;;;-1:-1:-1;;;37802:92:0;-1:-1:-1;;;;37802:92:0;;;;;;;;;;37908:31;;37924:14;;37908:31;;;38007:6;:19;37966:65;;37949:12;;-1:-1:-1;;;;;37966:12:0;;;-1:-1:-1;;;38007:19:0;;;;;;37986:14;;37966:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37948:83;;;38044:7;38040:185;;;-1:-1:-1;38071:4:0;;37601:655;-1:-1:-1;;;37601:655:0:o;38040:185::-;-1:-1:-1;;;;;38142:11:0;;;;;;:2;:11;;;;;:32;:49;;38177:14;;-1:-1:-1;;;38142:32:0;;-1:-1:-1;;;;;38142:32:0;:49;:::i;:::-;-1:-1:-1;;;;;38100:11:0;;;;;;;:2;:11;;;;;:92;;-1:-1:-1;;;;;38100:92:0;;;;-1:-1:-1;;;38100:92:0;-1:-1:-1;;;;38100:92:0;;;;;;;;;;-1:-1:-1;38100:11:0;;37601:655;-1:-1:-1;;37601:655:0:o;37746:505::-;-1:-1:-1;38244:5:0;;37601:655;-1:-1:-1;;37601:655:0:o;34791:303::-;-1:-1:-1;;;;;34882:20:0;;34874:58;;;;-1:-1:-1;;;34874:58:0;;20127:2:1;34874:58:0;;;20109:21:1;20166:2;20146:18;;;20139:30;20205:27;20185:18;;;20178:55;20250:18;;34874:58:0;19925:349:1;34874:58:0;-1:-1:-1;;;;;34947:22:0;;34939:58;;;;-1:-1:-1;;;34939:58:0;;20481:2:1;34939:58:0;;;20463:21:1;20520:2;20500:18;;;20493:30;20559:25;20539:18;;;20532:53;20602:18;;34939:58:0;20279:347:1;34939:58:0;-1:-1:-1;;;;;35004:19:0;;;;;;;:11;:19;;;;;;;;:29;;;;;;;;;;;;;:38;;;35054:34;;3013:25:1;;;35054:34:0;;2986:18:1;35054:34:0;;;;;;;;34791:303;;;:::o;28069:470::-;16041:6;;-1:-1:-1;;;;;16041:6:0;16051:10;16041:20;16033:41;;;;-1:-1:-1;;;16033:41:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28215:11:0;::::1;;::::0;;;:2:::1;:11;::::0;;;;:30;-1:-1:-1;;;28215:30:0;::::1;;;28214:31;28206:59;;;::::0;-1:-1:-1;;;28206:59:0;;18952:2:1;28206:59:0::1;::::0;::::1;18934:21:1::0;18991:2;18971:18;;;18964:30;-1:-1:-1;;;19010:18:1;;;19003:46;19066:18;;28206:59:0::1;18750:340:1::0;28206:59:0::1;-1:-1:-1::0;;;;;28272:11:0;::::1;;::::0;;;:2:::1;:11;::::0;;;;:37;;-1:-1:-1;;;;28272:37:0::1;-1:-1:-1::0;;;28272:37:0::1;::::0;;28316:33:::1;28275:7:::0;28316:15:::1;:33::i;:::-;-1:-1:-1::0;;;;;;28359:11:0;::::1;;::::0;;;:2:::1;:11;::::0;;;;:20;15348:16:::1;-1:-1:-1::0;;;;;28359:20:0;;::::1;:32;28356:139;;;-1:-1:-1::0;;;;;28425:11:0;::::1;;::::0;;;:2:::1;:11;::::0;;;;:20;;28401:45;;-1:-1:-1;;;;;28425:20:0;;::::1;::::0;28401:13:::1;::::0;:45:::1;::::0;28425:20;;-1:-1:-1;;;28401:45:0;::::1;-1:-1:-1::0;;;;;28401:45:0::1;;:::i;:::-;::::0;;-1:-1:-1;;;;;28401:45:0;;::::1;;::::0;;;::::1;::::0;;::::1;::::0;;;::::1;;::::0;;::::1;;::::0;;-1:-1:-1;;;;;;28462:25:0;::::1;-1:-1:-1::0;28462:25:0;;;:16:::1;:25;::::0;;;;28455:32;28356:139:::1;28506:27;::::0;-1:-1:-1;;;;;28506:27:0;::::1;::::0;::::1;::::0;;;::::1;28069:470:::0;:::o;36186:152::-;-1:-1:-1;;;;;36302:8:0;;36246:7;36302:8;;;:2;:8;;;;;:29;-1:-1:-1;;;36302:29:0;;-1:-1:-1;;;;;36302:29:0;36268:23;36302:8;36268:17;:23::i;:::-;:64;;;;:::i;18758:4117::-;-1:-1:-1;;;;;18843:8:0;;;;;;:2;:8;;;;;:17;-1:-1:-1;;;;;18843:17:0;:27;-1:-1:-1;18843:27:0;18835:68;;;;-1:-1:-1;;;18835:68:0;;21069:2:1;18835:68:0;;;21051:21:1;21108:2;21088:18;;;21081:30;21147;21127:18;;;21120:58;21195:18;;18835:68:0;20867:352:1;18835:68:0;18912:24;;;;;;;;18930:6;18912:24;-1:-1:-1;;;;;18912:24:0;;;;;-1:-1:-1;;;18912:24:0;;;;;;;;;;-1:-1:-1;;;18912:24:0;;;;;;;;;;;-1:-1:-1;;;18912:24:0;;;;;;;;-1:-1:-1;;;18912:24:0;;;;;;;;;;-1:-1:-1;;;18912:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;18912:24:0;;;;;;;;;;;;;;;;;;;18951:10;18943:47;;;;-1:-1:-1;;;18943:47:0;;21426:2:1;18943:47:0;;;21408:21:1;21465:2;21445:18;;;21438:30;21504:27;21484:18;;;21477:55;21549:18;;18943:47:0;21224:349:1;18943:47:0;-1:-1:-1;;;;;19005:18:0;;18997:57;;;;-1:-1:-1;;;18997:57:0;;21780:2:1;18997:57:0;;;21762:21:1;21819:2;21799:18;;;21792:30;21858:29;21838:18;;;21831:57;21905:18;;18997:57:0;21578:351:1;18997:57:0;-1:-1:-1;;;;;19069:16:0;;19061:53;;;;-1:-1:-1;;;19061:53:0;;22136:2:1;19061:53:0;;;22118:21:1;22175:2;22155:18;;;22148:30;22214:27;22194:18;;;22187:55;22259:18;;19061:53:0;21934:349:1;19061:53:0;-1:-1:-1;;;;;19130:6:0;;;;;;:2;:6;;;;;:23;-1:-1:-1;;;19130:23:0;;;;19129:24;19121:43;;;;-1:-1:-1;;;19121:43:0;;;;;;;:::i;:::-;19183:10;19180:14;;;;:2;:14;;;;;:31;-1:-1:-1;;;19180:31:0;;;;19179:32;19171:51;;;;-1:-1:-1;;;19171:51:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19238:8:0;;;;;;:2;:8;;;;;:25;-1:-1:-1;;;19238:25:0;;;;19237:26;19229:45;;;;-1:-1:-1;;;19229:45:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19332:8:0;;19318:11;19332:8;;;:2;:8;;;;;:18;-1:-1:-1;;;19332:18:0;;;;:49;;-1:-1:-1;;;;;19357:6:0;;;;;;:2;:6;;;;;:16;-1:-1:-1;;;19357:16:0;;;;:24;;19380:1;19332:49;;19357:24;19376:1;19332:49;;;19353:1;19332:49;19318:63;;;;19420:1;:16;;;:40;;;-1:-1:-1;19454:6:0;;-1:-1:-1;;;;;19454:6:0;19440:10;:20;19420:40;19412:76;;;;-1:-1:-1;;;19412:76:0;;22824:2:1;19412:76:0;;;22806:21:1;22863:2;22843:18;;;22836:30;22902:25;22882:18;;;22875:53;22945:18;;19412:76:0;22622:347:1;19412:76:0;19527:6;19535:1;19527:9;:37;;;;-1:-1:-1;19540:15:0;;-1:-1:-1;;;19540:15:0;;:24;:15;15207:1;19540:24;;19527:37;19524:2276;;;19574:15;:23;;-1:-1:-1;;;;19574:23:0;-1:-1:-1;;;19574:23:0;;;19630:15;;;;19609:17;;-1:-1:-1;;;;;19609:36:0;;;-1:-1:-1;;;;;19609:17:0;;;:36;19606:2123;;19678:17;;-1:-1:-1;;;;;;;;19678:17:0;;;;-1:-1:-1;;;;;19727:17:0;19758:18;19755:338;;19818:13;19790:17;;:42;;;;;;;;;;-1:-1:-1;;;;;19790:42:0;;;;;:::i;:::-;;;-1:-1:-1;;;;;19790:42:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19845:17:0;:21;;-1:-1:-1;;19845:21:0;;;19755:338;;;19895:63;19930:13;19944;19895:34;:63::i;:::-;19971:17;:21;;-1:-1:-1;;20005:21:0;;;20044:37;;20067:13;;20052;;20044:37;;19991:1;;20044:37;19755:338;19646:456;;19606:2123;;;20173:18;;20223:14;;-1:-1:-1;;;;;20173:18:0;;;;-1:-1:-1;;;;;20206:31:0;;;20202:1518;;20380:12;;;;20365;;;;20350;;;;20335;;;;20444;;;;20335:27;;:42;;;:57;;;20320:72;;;;;20429:27;;;;;20252:17;;20429:27;;20543:26;;20564:5;20543:26;:::i;:::-;20542:43;;;;:::i;:::-;20523:62;-1:-1:-1;20598:19:0;20652:5;20621:27;20523:62;20621:13;:27;:::i;:::-;20620:37;;;;:::i;:::-;20598:59;;20698:14;20670:17;;:43;;;;;;;;;;-1:-1:-1;;;;;20670:43:0;;;;;:::i;:::-;;;-1:-1:-1;;;;;20670:43:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20831:9:0;;20793:83;;20816:4;;-1:-1:-1;;;;;20831:9:0;20844:30;20860:14;20844:13;:30;:::i;:::-;20793:14;:83::i;:::-;20907:6;;:35;;;-1:-1:-1;;;20907:35:0;;;;20889:15;;-1:-1:-1;;;;;20907:6:0;;:33;;:35;;;;;;;;;;;;;;20889:15;20907:6;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20889:53;;20982:10;20967:13;20960:33;;;;;;;;;;21008:17;21058:12;21042:1;:12;;;21029:25;;:10;:25;;;;:::i;:::-;21028:42;;;;:::i;:::-;21008:62;;21083:17;21133:12;21117:1;:12;;;21104:25;;:10;:25;;;;:::i;:::-;21103:42;;;;:::i;:::-;21083:62;;21158:17;21208:12;21192:1;:12;;;21179:25;;:10;:25;;;;:::i;:::-;21178:42;;;;:::i;:::-;21158:62;-1:-1:-1;21233:17:0;21158:62;21281:12;21253:25;21266:12;21253:10;:25;:::i;:::-;:40;;;;:::i;:::-;:55;;;;:::i;:::-;21436:13;;21233:75;;-1:-1:-1;;;;21436:13:0;;-1:-1:-1;;;;;21436:13:0;21407:25;-1:-1:-1;;;21233:75:0;21407:25;:::i;:::-;21406:43;;;;:::i;:::-;21388:13;;:62;;;;;;;:::i;:::-;;;;-1:-1:-1;;21463:20:0;:44;;21494:12;;21463:20;;;:44;;21494:12;;-1:-1:-1;;;21463:44:0;;-1:-1:-1;;;;;21463:44:0;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;21463:44:0;;;;;-1:-1:-1;;;;;21463:44:0;;;;;;21550:12;21522:17;;:41;;;;;;;;;;-1:-1:-1;;;;;21522:41:0;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;21522:41:0;;;;;-1:-1:-1;;;;;21522:41:0;;;;;;21604:12;21576:17;;:41;;;;;;;;;;-1:-1:-1;;;;;21576:41:0;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;21576:41:0;;;;;-1:-1:-1;;;;;21576:41:0;;;;;;21658:12;21630:17;;:41;;;;;;;;;;-1:-1:-1;;;;;21630:41:0;;;;;:::i;:::-;;;-1:-1:-1;;;;;21630:41:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21686:18:0;:22;;-1:-1:-1;;21686:22:0;;;-1:-1:-1;;;;;;;;20202:1518:0;20141:1588;19606:2123;15170:1;21768:24;;-1:-1:-1;;;;21768:24:0;-1:-1:-1;;;21768:24:0;;;19524:2276;21976:6;21984:1;21976:9;;:75;;;;-1:-1:-1;;;;;;22024:8:0;;;;;;:2;:8;;;;;:27;-1:-1:-1;;;22024:27:0;;;;22023:28;21976:75;:110;;;;-1:-1:-1;;;;;;22061:6:0;;;;;;:2;:6;;;;;:25;-1:-1:-1;;;22061:25:0;;;;22060:26;21976:110;21972:634;;;22097:11;22111:9;;:46;;22141:1;:16;;;22111:46;;;22123:1;:15;;;22111:46;22097:60;;;-1:-1:-1;22166:15:0;22202:5;22185:15;22097:60;22185:6;:15;:::i;:::-;22184:23;;;;:::i;:::-;22166:41;-1:-1:-1;22216:20:0;22166:41;22216:20;;:::i;:::-;22245:18;:40;;22216:20;;-1:-1:-1;22274:10:0;;22245:18;;:40;;22274:10;;-1:-1:-1;;;;;22245:40:0;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;22245:40:0;;;;;-1:-1:-1;;;;;22245:40:0;;;;;;22471:23;22477:4;22483:10;22471:5;:23::i;:::-;22551:47;22566:4;22580;22587:10;22551:14;:47::i;:::-;22088:518;;21972:634;22713:19;22719:4;22725:6;22713:5;:19::i;:::-;22739:17;22745:2;22749:6;22739:5;:17::i;:::-;22763:32;22778:4;22784:2;22788:6;22763:14;:32::i;:::-;22804:30;22828:4;22804:15;:30::i;:::-;;22841:28;22865:2;22841:15;:28::i;:::-;;18828:4047;;18758:4117;;;:::o;33834:529::-;-1:-1:-1;;;;;33932:20:0;;33924:63;;;;-1:-1:-1;;;33924:63:0;;23660:2:1;33924:63:0;;;23642:21:1;23699:2;23679:18;;;23672:30;23738:32;23718:18;;;23711:60;23788:18;;33924:63:0;23458:354:1;33924:63:0;-1:-1:-1;;;;;34002:23:0;;33994:64;;;;-1:-1:-1;;;33994:64:0;;24019:2:1;33994:64:0;;;24001:21:1;24058:2;24038:18;;;24031:30;24097;24077:18;;;24070:58;24145:18;;33994:64:0;23817:352:1;33994:64:0;-1:-1:-1;;;;;34089:10:0;;34065:21;34089:10;;;:2;:10;;;;;:19;-1:-1:-1;;;;;34089:19:0;34123:23;;;;34115:67;;;;-1:-1:-1;;;34115:67:0;;24376:2:1;34115:67:0;;;24358:21:1;24415:2;24395:18;;;24388:30;24454:33;24434:18;;;24427:61;24505:18;;34115:67:0;24174:355:1;34115:67:0;-1:-1:-1;;;;;34204:10:0;;;;;;;:2;:10;;;;;;:53;;-1:-1:-1;;;;;;34204:53:0;34234:22;;;-1:-1:-1;;;;;34204:53:0;;;;;;;;;;34269:13;;;;;;;:41;;34234:22;;34269:13;;34204:10;34269:41;;34234:22;;34269:41;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;34269:41:0;;;;;-1:-1:-1;;;;;34269:41:0;;;;;;34339:9;-1:-1:-1;;;;;34322:35:0;34331:6;-1:-1:-1;;;;;34322:35:0;;34350:6;34322:35;;;;3013:25:1;;3001:2;2986:18;;2867:177;34322:35:0;;;;;;;;33917:446;33834:529;;;:::o;24273:1060::-;24401:4;;24482:9;;:23;;;-1:-1:-1;;;24482:23:0;;;;-1:-1:-1;;;;;24401:4:0;;;;24441;;24374:16;;;;24482:9;;;;;:21;;:23;;;;;;;;;;;;;;:9;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24453:52;-1:-1:-1;;;;;24453:52:0;;;-1:-1:-1;;;;;24453:52:0;;;24525:8;-1:-1:-1;;;;;24515:18:0;:9;-1:-1:-1;;;;;24515:18:0;;24512:54;;;24551:6;24512:54;24572:12;;24614:10;;:25;;;;-1:-1:-1;24628:11:0;;24614:25;24610:659;;;-1:-1:-1;24672:13:0;;-1:-1:-1;24687:9:0;24610:659;;;24742:13;24786:9;24720:19;24854:5;24827:23;24844:6;24742:13;24827:23;:::i;:::-;24826:33;;;;:::i;:::-;24804:55;;24912:14;24894;:32;24890:372;;24961:14;;-1:-1:-1;24977:14:0;;-1:-1:-1;24961:14:0;;24977;24890:372;;;25026:19;25075:6;25049:22;25066:5;25049:14;:22;:::i;:::-;25048:33;;;;:::i;:::-;25026:55;;25140:14;25122;:32;;25114:74;;;;-1:-1:-1;;;25114:74:0;;25611:2:1;25114:74:0;;;25593:21:1;25650:2;25630:18;;;25623:30;25689:31;25669:18;;;25662:59;25738:18;;25114:74:0;25409:353:1;25114:74:0;25221:14;-1:-1:-1;25237:14:0;;-1:-1:-1;25237:14:0;;24890:372;24711:558;;;24610:659;25275:52;25310:7;25319;25275:34;:52::i;:::-;24367:966;;;;;;24273:1060;;:::o;34367:420::-;-1:-1:-1;;;;;34438:21:0;;34430:60;;;;-1:-1:-1;;;34430:60:0;;25969:2:1;34430:60:0;;;25951:21:1;26008:2;25988:18;;;25981:30;26047:28;26027:18;;;26020:56;26093:18;;34430:60:0;25767:350:1;34430:60:0;-1:-1:-1;;;;;34522:11:0;;34497:22;34522:11;;;:2;:11;;;;;:20;-1:-1:-1;;;;;34522:20:0;34557:24;;;;34549:64;;;;-1:-1:-1;;;34549:64:0;;26324:2:1;34549:64:0;;;26306:21:1;26363:2;26343:18;;;26336:30;26402:29;26382:18;;;26375:57;26449:18;;34549:64:0;26122:351:1;34549:64:0;-1:-1:-1;;;;;34635:11:0;;;;;;:2;:11;;;;;:55;;-1:-1:-1;;;;;;34635:55:0;34666:23;;;-1:-1:-1;;;;;34635:55:0;;;;-1:-1:-1;34702:30:0;;34666:23;;34635:11;34702:30;;34666:23;;-1:-1:-1;;;;;34702:30:0;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;34702:30:0;;;;;-1:-1:-1;;;;;34702:30:0;;;;;;34770:1;-1:-1:-1;;;;;34744:37:0;34753:7;-1:-1:-1;;;;;34744:37:0;;34774:6;34744:37;;;;3013:25:1;;3001:2;2986:18;;2867:177;35507:258:0;35587:6;;;-1:-1:-1;;;;;35600:12:0;;;35568:16;35600:12;;;:2;:12;;;;;;:38;;-1:-1:-1;;;;35645:38:0;-1:-1:-1;;;35645:38:0;;;35690:17;;-1:-1:-1;;;;;;35690:17:0;;;;;;35719:40;;35587:6;;;;;;;35719:40;;35568:16;35719:40;35561:204;35507:258;:::o;36342:314::-;-1:-1:-1;;;;;36446:8:0;;36405:7;36446:8;;;:2;:8;;;;;:27;36405:7;;-1:-1:-1;;;36446:27:0;;;;;:58;;-1:-1:-1;;;;;;36475:8:0;;;;;;:2;:8;;;;;:17;15348:16;-1:-1:-1;;;;;36475:17:0;;;:29;36446:58;36445:90;;-1:-1:-1;;;;;36518:8:0;;;;;;:2;:8;;;;;:17;-1:-1:-1;;;;;36518:17:0;36445:90;;;36516:1;36445:90;-1:-1:-1;;;;;36608:22:0;;;;;;:16;:22;;;;;;36572:13;;-1:-1:-1;;;;;36420:115:0;;;;;-1:-1:-1;;;;15299:6:0;36572:25;;36420:115;;36572:25;:::i;:::-;36565:65;;;;:::i;:::-;36549:101;;;;:::i;:::-;36542:108;36342:314;-1:-1:-1;;;36342:314:0:o;25337:419::-;25463:9;;-1:-1:-1;;;;;25463:9:0;25508:4;25520:48;25508:4;25463:9;25554:13;25520:14;:48::i;:::-;25575:4;;;;;;;;;-1:-1:-1;;;;;25575:4:0;-1:-1:-1;;;;;25575:12:0;;25595:9;25575:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25622:4:0;;:34;;-1:-1:-1;;;25622:34:0;;-1:-1:-1;;;;;15848:32:1;;;25622:34:0;;;15830:51:1;15897:18;;;15890:34;;;25622:4:0;;;;-1:-1:-1;25622:13:0;;-1:-1:-1;15803:18:1;;;-1:-1:-1;25622:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25614:78;;;;-1:-1:-1;;;25614:78:0;;26950:2:1;25614:78:0;;;26932:21:1;26989:2;26969:18;;;26962:30;27028:33;27008:18;;;27001:61;27079:18;;25614:78:0;26748:355:1;25614:78:0;25725:9;;:25;;-1:-1:-1;;;25725:25:0;;-1:-1:-1;;;;;6954:32:1;;;25725:25:0;;;6936:51:1;25725:9:0;;;;:14;;6909:18:1;;25725:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25429:327;;25337:419;;:::o;37171:424::-;-1:-1:-1;;;;;37236:8:0;;;;;;:2;:8;;;;;:27;-1:-1:-1;;;37236:27:0;;;;37232:358;;-1:-1:-1;;;;;37294:8:0;;37273:18;37294:8;;;:2;:8;;;;;:17;-1:-1:-1;;;;;37294:17:0;15348:16;37323:24;;37320:263;;;37359:19;37381:20;37394:7;37381:10;:20;:::i;:::-;37359:42;-1:-1:-1;15348:16:0;37424:23;;37423:39;;37461:1;37423:39;;;37449:11;37423:39;37412:50;;;;:::i;:::-;;;37497:7;37473:13;;:32;;;;;;;;;;-1:-1:-1;;;;;37473:32:0;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;37473:32:0;;;;;-1:-1:-1;;;;;37473:32:0;;;;;;37565:7;37549:13;;:23;;;;:::i;:::-;-1:-1:-1;;;;;37516:22:0;;;;;;:16;:22;;;;;:57;;:22;;;:57;;;;;:::i;:::-;;;;-1:-1:-1;;;37320:263:0;37264:326;37171:424;;:::o;36724:381::-;-1:-1:-1;;;;;36789:8:0;;;;;;:2;:8;;;;;:27;-1:-1:-1;;;36789:27:0;;;;36785:315;;-1:-1:-1;;;;;36847:8:0;;36826:18;36847:8;;;:2;:8;;;;;:17;-1:-1:-1;;;;;36847:17:0;15348:16;36877:20;36890:7;36847:17;36877:20;:::i;:::-;36876:36;36873:220;;;15348:16;36936:22;;36935:37;;36971:1;36935:37;;;36960:10;36935:37;36924:48;;;;:::i;:::-;;;37007:7;36983:13;;:32;;;;;;;;;;-1:-1:-1;;;;;36983:32:0;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;36983:32:0;;;;;-1:-1:-1;;;;;36983:32:0;;;;;;37075:7;37059:13;;:23;;;;:::i;:::-;-1:-1:-1;;;;;37026:22:0;;;;;;:16;:22;;;;;:57;;:22;;;:57;;;;;:::i;:::-;;;;-1:-1:-1;;36817:283:0;36724:381;;:::o;362:127:1:-;423:10;418:3;414:20;411:1;404:31;454:4;451:1;444:15;478:4;475:1;468:15;494:168;534:7;600:1;596;592:6;588:14;585:1;582:21;577:1;570:9;563:17;559:45;556:71;;;607:18;;:::i;:::-;-1:-1:-1;647:9:1;;494:168::o;667:217::-;707:1;733;723:132;;777:10;772:3;768:20;765:1;758:31;812:4;809:1;802:15;840:4;837:1;830:15;723:132;-1:-1:-1;869:9:1;;667:217::o;889:128::-;929:3;960:1;956:6;953:1;950:13;947:39;;;966:18;;:::i;:::-;-1:-1:-1;1002:9:1;;889:128::o;1022:242::-;1061:3;-1:-1:-1;;;;;1140:2:1;1137:1;1133:10;1170:2;1167:1;1163:10;1201:3;1197:2;1193:12;1188:3;1185:21;1182:47;;;1209:18;;:::i;:::-;1245:13;;1022:242;-1:-1:-1;;;;1022:242:1:o;1269:597::-;1381:4;1410:2;1439;1428:9;1421:21;1471:6;1465:13;1514:6;1509:2;1498:9;1494:18;1487:34;1539:1;1549:140;1563:6;1560:1;1557:13;1549:140;;;1658:14;;;1654:23;;1648:30;1624:17;;;1643:2;1620:26;1613:66;1578:10;;1549:140;;;1707:6;1704:1;1701:13;1698:91;;;1777:1;1772:2;1763:6;1752:9;1748:22;1744:31;1737:42;1698:91;-1:-1:-1;1850:2:1;1829:15;-1:-1:-1;;1825:29:1;1810:45;;;;1857:2;1806:54;;1269:597;-1:-1:-1;;;1269:597:1:o;1871:131::-;-1:-1:-1;;;;;1946:31:1;;1936:42;;1926:70;;1992:1;1989;1982:12;2007:315;2075:6;2083;2136:2;2124:9;2115:7;2111:23;2107:32;2104:52;;;2152:1;2149;2142:12;2104:52;2191:9;2178:23;2210:31;2235:5;2210:31;:::i;:::-;2260:5;2312:2;2297:18;;;;2284:32;;-1:-1:-1;;;2007:315:1:o;2615:247::-;2674:6;2727:2;2715:9;2706:7;2702:23;2698:32;2695:52;;;2743:1;2740;2733:12;2695:52;2782:9;2769:23;2801:31;2826:5;2801:31;:::i;3256:456::-;3333:6;3341;3349;3402:2;3390:9;3381:7;3377:23;3373:32;3370:52;;;3418:1;3415;3408:12;3370:52;3457:9;3444:23;3476:31;3501:5;3476:31;:::i;:::-;3526:5;-1:-1:-1;3583:2:1;3568:18;;3555:32;3596:33;3555:32;3596:33;:::i;:::-;3256:456;;3648:7;;-1:-1:-1;;;3702:2:1;3687:18;;;;3674:32;;3256:456::o;3906:159::-;3973:20;;4033:6;4022:18;;4012:29;;4002:57;;4055:1;4052;4045:12;4002:57;3906:159;;;:::o;4070:184::-;4128:6;4181:2;4169:9;4160:7;4156:23;4152:32;4149:52;;;4197:1;4194;4187:12;4149:52;4220:28;4238:9;4220:28;:::i;4259:180::-;4318:6;4371:2;4359:9;4350:7;4346:23;4342:32;4339:52;;;4387:1;4384;4377:12;4339:52;-1:-1:-1;4410:23:1;;4259:180;-1:-1:-1;4259:180:1:o;4444:284::-;4502:6;4555:2;4543:9;4534:7;4530:23;4526:32;4523:52;;;4571:1;4568;4561:12;4523:52;4610:9;4597:23;-1:-1:-1;;;;;4653:5:1;4649:30;4642:5;4639:41;4629:69;;4694:1;4691;4684:12;4733:367;4796:8;4806:6;4860:3;4853:4;4845:6;4841:17;4837:27;4827:55;;4878:1;4875;4868:12;4827:55;-1:-1:-1;4901:20:1;;-1:-1:-1;;;;;4933:30:1;;4930:50;;;4976:1;4973;4966:12;4930:50;5013:4;5005:6;5001:17;4989:29;;5073:3;5066:4;5056:6;5053:1;5049:14;5041:6;5037:27;5033:38;5030:47;5027:67;;;5090:1;5087;5080:12;5027:67;4733:367;;;;;:::o;5105:910::-;5245:6;5253;5261;5269;5277;5285;5338:3;5326:9;5317:7;5313:23;5309:33;5306:53;;;5355:1;5352;5345:12;5306:53;5395:9;5382:23;-1:-1:-1;;;;;5465:2:1;5457:6;5454:14;5451:34;;;5481:1;5478;5471:12;5451:34;5520:70;5582:7;5573:6;5562:9;5558:22;5520:70;:::i;:::-;5609:8;;-1:-1:-1;5494:96:1;-1:-1:-1;5697:2:1;5682:18;;5669:32;;-1:-1:-1;5713:16:1;;;5710:36;;;5742:1;5739;5732:12;5710:36;;5781:72;5845:7;5834:8;5823:9;5819:24;5781:72;:::i;:::-;5105:910;;;;-1:-1:-1;5872:8:1;5954:2;5939:18;;5926:32;;6005:2;5990:18;;;5977:32;;-1:-1:-1;5105:910:1;-1:-1:-1;;;;5105:910:1:o;6280:118::-;6366:5;6359:13;6352:21;6345:5;6342:32;6332:60;;6388:1;6385;6378:12;6403:382;6468:6;6476;6529:2;6517:9;6508:7;6504:23;6500:32;6497:52;;;6545:1;6542;6535:12;6497:52;6584:9;6571:23;6603:31;6628:5;6603:31;:::i;:::-;6653:5;-1:-1:-1;6710:2:1;6695:18;;6682:32;6723:30;6682:32;6723:30;:::i;:::-;6772:7;6762:17;;;6403:382;;;;;:::o;6998:121::-;7083:10;7076:5;7072:22;7065:5;7062:33;7052:61;;7109:1;7106;7099:12;7124:245;7182:6;7235:2;7223:9;7214:7;7210:23;7206:32;7203:52;;;7251:1;7248;7241:12;7203:52;7290:9;7277:23;7309:30;7333:5;7309:30;:::i;8773:388::-;8841:6;8849;8902:2;8890:9;8881:7;8877:23;8873:32;8870:52;;;8918:1;8915;8908:12;8870:52;8957:9;8944:23;8976:31;9001:5;8976:31;:::i;:::-;9026:5;-1:-1:-1;9083:2:1;9068:18;;9055:32;9096:33;9055:32;9096:33;:::i;9166:156::-;9232:20;;9292:4;9281:16;;9271:27;;9261:55;;9312:1;9309;9302:12;9327:610;9428:6;9436;9444;9452;9460;9468;9476;9529:3;9517:9;9508:7;9504:23;9500:33;9497:53;;;9546:1;9543;9536:12;9497:53;9569:28;9587:9;9569:28;:::i;:::-;9559:38;;9616:37;9649:2;9638:9;9634:18;9616:37;:::i;:::-;9606:47;;9672:36;9704:2;9693:9;9689:18;9672:36;:::i;:::-;9662:46;;9727:36;9759:2;9748:9;9744:18;9727:36;:::i;:::-;9717:46;;9782:37;9814:3;9803:9;9799:19;9782:37;:::i;:::-;9772:47;;9838:37;9870:3;9859:9;9855:19;9838:37;:::i;:::-;9828:47;;9894:37;9926:3;9915:9;9911:19;9894:37;:::i;:::-;9884:47;;9327:610;;;;;;;;;;:::o;10877:332::-;11079:2;11061:21;;;11118:1;11098:18;;;11091:29;-1:-1:-1;;;11151:2:1;11136:18;;11129:39;11200:2;11185:18;;10877:332::o;12274:345::-;12476:2;12458:21;;;12515:2;12495:18;;;12488:30;-1:-1:-1;;;12549:2:1;12534:18;;12527:51;12610:2;12595:18;;12274:345::o;12977:127::-;13038:10;13033:3;13029:20;13026:1;13019:31;13069:4;13066:1;13059:15;13093:4;13090:1;13083:15;13109:135;13148:3;-1:-1:-1;;13169:17:1;;13166:43;;;13189:18;;:::i;:::-;-1:-1:-1;13236:1:1;13225:13;;13109:135::o;14519:228::-;14558:3;14586:10;14623:2;14620:1;14616:10;14653:2;14650:1;14646:10;14684:3;14680:2;14676:12;14671:3;14668:21;14665:47;;;14692:18;;:::i;15107:184::-;15177:6;15230:2;15218:9;15209:7;15205:23;15201:32;15198:52;;;15246:1;15243;15236:12;15198:52;-1:-1:-1;15269:16:1;;15107:184;-1:-1:-1;15107:184:1:o;15935:245::-;16002:6;16055:2;16043:9;16034:7;16030:23;16026:32;16023:52;;;16071:1;16068;16061:12;16023:52;16103:9;16097:16;16122:28;16144:5;16122:28;:::i;19795:125::-;19835:4;19863:1;19860;19857:8;19854:34;;;19868:18;;:::i;:::-;-1:-1:-1;19905:9:1;;19795:125::o;20631:231::-;20670:4;-1:-1:-1;;;;;20769:10:1;;;;20739;;20791:12;;;20788:38;;;20806:18;;:::i;:::-;20843:13;;20631:231;-1:-1:-1;;;20631:231:1:o;22288:329::-;22490:2;22472:21;;;22529:1;22509:18;;;22502:29;-1:-1:-1;;;22562:2:1;22547:18;;22540:36;22608:2;22593:18;;22288:329::o;22974:238::-;23013:3;-1:-1:-1;;;;;23088:2:1;23085:1;23081:10;23118:2;23115:1;23111:10;23149:3;23145:2;23141:12;23136:3;23133:21;23130:47;;;23157:18;;:::i;23217:236::-;23256:3;-1:-1:-1;;;;;23329:2:1;23326:1;23322:10;23359:2;23356:1;23352:10;23390:3;23386:2;23382:12;23377:3;23374:21;23371:47;;;23398:18;;:::i;24534:253::-;24574:3;-1:-1:-1;;;;;24663:2:1;24660:1;24656:10;24693:2;24690:1;24686:10;24724:3;24720:2;24716:12;24711:3;24708:21;24705:47;;;24732:18;;:::i;24792:188::-;24871:13;;-1:-1:-1;;;;;24913:42:1;;24903:53;;24893:81;;24970:1;24967;24960:12;24985:419;25072:6;25080;25088;25141:2;25129:9;25120:7;25116:23;25112:32;25109:52;;;25157:1;25154;25147:12;25109:52;25180:40;25210:9;25180:40;:::i;:::-;25170:50;;25239:49;25284:2;25273:9;25269:18;25239:49;:::i;:::-;25229:59;;25331:2;25320:9;25316:18;25310:25;25344:30;25368:5;25344:30;:::i;:::-;25393:5;25383:15;;;24985:419;;;;;:::o;26478:265::-;26517:3;26545:9;;;26570:10;;-1:-1:-1;;;;;26589:27:1;;;26582:35;;26566:52;26563:78;;;26621:18;;:::i;:::-;-1:-1:-1;;;26668:19:1;;;26661:27;;26653:36;;26650:62;;;26692:18;;:::i;:::-;-1:-1:-1;;26728:9:1;;26478:265::o;27108:267::-;27147:4;27176:9;;;27201:10;;-1:-1:-1;;;27220:19:1;;27213:27;;27197:44;27194:70;;;27244:18;;:::i;:::-;-1:-1:-1;;;;;27291:27:1;;27284:35;;27276:44;;27273:70;;;27323:18;;:::i;:::-;-1:-1:-1;;27360:9:1;;27108:267::o

Swarm Source

ipfs://30a880777b528dc886cd44823da20dc151dbd0bf0ac554c080673c1ef60137db

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

OVERVIEW

FrogeX is an ETH reflection contract, but features a 40-70% reduction in base costs from all competitors, making it the undisputed champion of ETH reflection tokens; as user-friendly to trade with as USDT!

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
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.