Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
32,175 WG
Holders
19
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 0 Decimals)
Balance
2 WGValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
WhalesGame
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-11-28 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.10; /* . ":" ___:____ |"\/"| ,' `. \ / | O \___/ | ~^~^~^~^~^~^~^~^~^~^~^~^~ Whales Game | Generative Yield NFTs Mint tokens and earn KRILL with this new blockchain based game! Battle it out to see who can generate the most yield. Website: https://whales.game/ */ interface MetadataInterface { function name() external view returns (string memory); function symbol() external view returns (string memory); function tokenURI(uint256 _tokenId) external view returns (string memory); function deploySetWhalesGame(WhalesGame _wg) external; } interface Callable { function tokenCallback(address _from, uint256 _tokens, bytes calldata _data) external returns (bool); } interface Receiver { function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes calldata _data) external returns (bytes4); } interface Router { function WETH() external pure returns (address); function factory() external pure returns (address); } interface Factory { function getPair(address, address) external view returns (address); function createPair(address, address) external returns (address); } interface Pair { function token0() external view returns (address); function totalSupply() external view returns (uint256); function balanceOf(address) external view returns (uint256); function allowance(address, address) external view returns (uint256); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function transfer(address, uint256) external returns (bool); function transferFrom(address, address, uint256) external returns (bool); } contract KRILL { uint256 constant private UINT_MAX = type(uint256).max; uint256 constant private TRANSFER_FEE = 1; // 1% per transfer string constant public name = "Krill Token"; string constant public symbol = "KRILL"; uint8 constant public decimals = 18; struct User { uint256 balance; mapping(address => uint256) allowance; } struct Info { uint256 totalSupply; mapping(address => User) users; mapping(address => bool) toWhitelist; mapping(address => bool) fromWhitelist; address owner; Router router; Pair pair; bool weth0; WhalesGame wg; StakingRewards stakingRewards; } Info private info; event Transfer(address indexed from, address indexed to, uint256 tokens); event Approval(address indexed owner, address indexed spender, uint256 tokens); event WhitelistUpdated(address indexed user, bool fromWhitelisted, bool toWhitelisted); modifier _onlyOwner() { require(msg.sender == owner()); _; } constructor() { info.router = Router(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); info.pair = Pair(Factory(info.router.factory()).createPair(info.router.WETH(), address(this))); info.weth0 = info.pair.token0() == info.router.WETH(); info.owner = msg.sender; } function setOwner(address _owner) external _onlyOwner { info.owner = _owner; } function setWhitelisted(address _address, bool _fromWhitelisted, bool _toWhitelisted) external _onlyOwner { info.fromWhitelist[_address] = _fromWhitelisted; info.toWhitelist[_address] = _toWhitelisted; emit WhitelistUpdated(_address, _fromWhitelisted, _toWhitelisted); } function deploySetWhalesGame(WhalesGame _wg) external { require(tx.origin == owner() && stakingRewardsAddress() == address(0x0)); info.wg = _wg; info.stakingRewards = new StakingRewards(info.wg, info.pair); _approve(address(this), stakingRewardsAddress(), UINT_MAX); } function mint(address _receiver, uint256 _tokens) external { require(msg.sender == address(info.wg)); info.totalSupply += _tokens; info.users[_receiver].balance += _tokens; emit Transfer(address(0x0), _receiver, _tokens); } function burn(uint256 _tokens) external { require(balanceOf(msg.sender) >= _tokens); info.totalSupply -= _tokens; info.users[msg.sender].balance -= _tokens; emit Transfer(msg.sender, address(0x0), _tokens); } function transfer(address _to, uint256 _tokens) external returns (bool) { return _transfer(msg.sender, _to, _tokens); } function approve(address _spender, uint256 _tokens) external returns (bool) { return _approve(msg.sender, _spender, _tokens); } function transferFrom(address _from, address _to, uint256 _tokens) external returns (bool) { uint256 _allowance = allowance(_from, msg.sender); require(_allowance >= _tokens); if (_allowance != UINT_MAX) { info.users[_from].allowance[msg.sender] -= _tokens; } return _transfer(_from, _to, _tokens); } function transferAndCall(address _to, uint256 _tokens, bytes calldata _data) external returns (bool) { uint256 _balanceBefore = balanceOf(_to); _transfer(msg.sender, _to, _tokens); uint256 _tokensReceived = balanceOf(_to) - _balanceBefore; uint32 _size; assembly { _size := extcodesize(_to) } if (_size > 0) { require(Callable(_to).tokenCallback(msg.sender, _tokensReceived, _data)); } return true; } function whalesGameAddress() public view returns (address) { return address(info.wg); } function pairAddress() external view returns (address) { return address(info.pair); } function stakingRewardsAddress() public view returns (address) { return address(info.stakingRewards); } function owner() public view returns (address) { return info.owner; } function isFromWhitelisted(address _address) public view returns (bool) { return info.fromWhitelist[_address]; } function isToWhitelisted(address _address) public view returns (bool) { return info.toWhitelist[_address]; } function totalSupply() public view returns (uint256) { return info.totalSupply; } function balanceOf(address _user) public view returns (uint256) { return info.users[_user].balance; } function allowance(address _user, address _spender) public view returns (uint256) { return info.users[_user].allowance[_spender]; } function allInfoFor(address _user) external view returns (uint256 totalTokens, uint256 totalLPTokens, uint256 wethReserve, uint256 krillReserve, uint256 userAllowance, uint256 userBalance, uint256 userLPBalance) { totalTokens = totalSupply(); totalLPTokens = info.pair.totalSupply(); (uint256 _res0, uint256 _res1, ) = info.pair.getReserves(); wethReserve = info.weth0 ? _res0 : _res1; krillReserve = info.weth0 ? _res1 : _res0; userAllowance = allowance(_user, whalesGameAddress()); userBalance = balanceOf(_user); userLPBalance = info.pair.balanceOf(_user); } function _approve(address _owner, address _spender, uint256 _tokens) internal returns (bool) { info.users[_owner].allowance[_spender] = _tokens; emit Approval(_owner, _spender, _tokens); return true; } function _transfer(address _from, address _to, uint256 _tokens) internal returns (bool) { require(balanceOf(_from) >= _tokens); info.users[_from].balance -= _tokens; uint256 _fee = 0; if (!(_from == stakingRewardsAddress() || _to == stakingRewardsAddress() || _to == whalesGameAddress() || isFromWhitelisted(_from) || isToWhitelisted(_to))) { _fee = _tokens * TRANSFER_FEE / 100; address _this = address(this); info.users[_this].balance += _fee; emit Transfer(_from, _this, _fee); info.stakingRewards.disburse(balanceOf(_this)); } info.users[_to].balance += _tokens - _fee; emit Transfer(_from, _to, _tokens - _fee); return true; } } contract StakingRewards { uint256 constant private FLOAT_SCALAR = 2**64; struct User { uint256 deposited; int256 scaledPayout; } struct Info { uint256 totalDeposited; uint256 scaledRewardsPerToken; uint256 pendingRewards; mapping(address => User) users; WhalesGame wg; KRILL krill; Pair pair; } Info private info; event Deposit(address indexed user, uint256 amount); event Withdraw(address indexed user, uint256 amount); event Claim(address indexed user, uint256 amount); event Reward(uint256 amount); constructor(WhalesGame _wg, Pair _pair) { info.wg = _wg; info.krill = KRILL(msg.sender); info.pair = _pair; } function disburse(uint256 _amount) external { if (_amount > 0) { info.krill.transferFrom(msg.sender, address(this), _amount); _disburse(_amount); } } function deposit(uint256 _amount) external { depositFor(_amount, msg.sender); } function depositFor(uint256 _amount, address _user) public { require(_amount > 0); _update(); info.pair.transferFrom(msg.sender, address(this), _amount); info.totalDeposited += _amount; info.users[_user].deposited += _amount; info.users[_user].scaledPayout += int256(_amount * info.scaledRewardsPerToken); emit Deposit(_user, _amount); } function withdrawAll() external { uint256 _deposited = depositedOf(msg.sender); if (_deposited > 0) { withdraw(_deposited); } } function withdraw(uint256 _amount) public { require(_amount > 0 && _amount <= depositedOf(msg.sender)); _update(); info.totalDeposited -= _amount; info.users[msg.sender].deposited -= _amount; info.users[msg.sender].scaledPayout -= int256(_amount * info.scaledRewardsPerToken); info.pair.transfer(msg.sender, _amount); emit Withdraw(msg.sender, _amount); } function claim() external { _update(); uint256 _rewards = rewardsOf(msg.sender); if (_rewards > 0) { info.users[msg.sender].scaledPayout += int256(_rewards * FLOAT_SCALAR); info.krill.transfer(msg.sender, _rewards); emit Claim(msg.sender, _rewards); } } function totalDeposited() public view returns (uint256) { return info.totalDeposited; } function depositedOf(address _user) public view returns (uint256) { return info.users[_user].deposited; } function rewardsOf(address _user) public view returns (uint256) { return uint256(int256(info.scaledRewardsPerToken * depositedOf(_user)) - info.users[_user].scaledPayout) / FLOAT_SCALAR; } function allInfoFor(address _user) external view returns (uint256 totalLPDeposited, uint256 totalLPTokens, uint256 wethReserve, uint256 krillReserve, uint256 userBalance, uint256 userAllowance, uint256 userDeposited, uint256 userRewards) { totalLPDeposited = totalDeposited(); ( , totalLPTokens, wethReserve, krillReserve, , , ) = info.krill.allInfoFor(address(this)); userBalance = info.pair.balanceOf(_user); userAllowance = info.pair.allowance(_user, address(this)); userDeposited = depositedOf(_user); userRewards = rewardsOf(_user); } function _update() internal { address _this = address(this); uint256 _balanceBefore = info.krill.balanceOf(_this); info.wg.claim(); _disburse(info.krill.balanceOf(_this) - _balanceBefore); } function _disburse(uint256 _amount) internal { if (_amount > 0) { if (totalDeposited() == 0) { info.pendingRewards += _amount; } else { info.scaledRewardsPerToken += (_amount + info.pendingRewards) * FLOAT_SCALAR / totalDeposited(); info.pendingRewards = 0; } emit Reward(_amount); } } } contract WhalesGame { uint256 constant public ETH_MINTABLE_SUPPLY = 2000; uint256 constant public WHITELIST_ETH_MINTABLE_SUPPLY = 8000; uint256 constant public KRILL_MINTABLE_SUPPLY = 40000; uint256 constant public MAX_SUPPLY = ETH_MINTABLE_SUPPLY + WHITELIST_ETH_MINTABLE_SUPPLY + KRILL_MINTABLE_SUPPLY; uint256 constant public INITIAL_MINT_COST_ETH = 0.05 ether; uint256 constant public KRILL_PER_DAY_PER_FISHERMAN = 1e22; // 10,000 uint256 constant private KRILL_COST_ADD = 1e4; uint256 constant private KRILL_COST_EXPONENT = 3; uint256 constant private KRILL_COST_SCALER = 2e10; // KRILL minted tokens = 0, minting cost = 20,000 // KRILL minted tokens = 40k, minting cost = 2,500,000 uint256 constant private FLOAT_SCALAR = 2**64; uint256 constant private WHALE_MODULUS = 10; // 1 in 10 uint256 constant private WHALES_CUT = 20; // 20% of all yield uint256 constant private STAKING_CUT = 25; // 25% of minting costs uint256 constant private DEV_TOKENS = 50; uint256 constant private OPENING_DELAY = 2 hours; uint256 constant private WHITELIST_DURATION = 8 hours; struct User { uint256 balance; mapping(uint256 => uint256) list; mapping(address => bool) approved; mapping(uint256 => uint256) indexOf; uint256 rewards; uint256 lastUpdated; uint256 krillPerDay; uint256 whales; int256 scaledPayout; } struct Token { address owner; address approved; bytes32 seed; bool isWhale; } struct Info { uint256 totalSupply; uint256 totalWhales; uint256 ethMintedTokens; uint256 krillMintedTokens; uint256 scaledRewardsPerWhale; uint256 openingTime; uint256 whitelistExpiry; mapping(uint256 => Token) list; mapping(address => User) users; mapping(uint256 => uint256) claimedBitMap; bytes32 merkleRoot; MetadataInterface metadata; address owner; KRILL krill; StakingRewards stakingRewards; } Info private info; mapping(bytes4 => bool) public supportsInterface; event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); event ApprovalForAll(address indexed owner, address indexed operator, bool approved); event Mint(address indexed owner, uint256 indexed tokenId, bytes32 seed, bool isWhale); event ClaimFishermenRewards(address indexed user, uint256 amount); event ClaimWhaleRewards(address indexed user, uint256 amount); event Reward(address indexed user, uint256 amount); event WhalesReward(uint256 amount); event StakingReward(uint256 amount); modifier _onlyOwner() { require(msg.sender == owner()); _; } constructor(MetadataInterface _metadata, KRILL _krill, bytes32 _merkleRoot) { info.metadata = _metadata; info.metadata.deploySetWhalesGame(this); info.krill = _krill; info.krill.deploySetWhalesGame(this); info.stakingRewards = StakingRewards(info.krill.stakingRewardsAddress()); info.krill.approve(stakingRewardsAddress(), type(uint256).max); info.merkleRoot = _merkleRoot; info.owner = 0x99A768bd14Ea62FaADA61F2c7f123303CDAa69fC; info.openingTime = block.timestamp + OPENING_DELAY; info.whitelistExpiry = block.timestamp + OPENING_DELAY + WHITELIST_DURATION; supportsInterface[0x01ffc9a7] = true; // ERC-165 supportsInterface[0x80ac58cd] = true; // ERC-721 supportsInterface[0x5b5e139f] = true; // Metadata supportsInterface[0x780e9d63] = true; // Enumerable for (uint256 i = 0; i < DEV_TOKENS; i++) { _mint(0xa1450E7D547b4748fc94C8C98C9dB667eaD31cF8); } } function setOwner(address _owner) external _onlyOwner { info.owner = _owner; } function setMetadata(MetadataInterface _metadata) external _onlyOwner { info.metadata = _metadata; } function withdraw() external { address _this = address(this); require(_this.balance > 0); payable(0xFaDED72464D6e76e37300B467673b36ECc4d2ccF).transfer(_this.balance / 2); // 50% total payable(0x1cC79d49ce5b9519C912D810E39025DD27d1F033).transfer(_this.balance / 10); // 5% total payable(0xa1450E7D547b4748fc94C8C98C9dB667eaD31cF8).transfer(_this.balance); // 45% total } receive() external payable { mintManyWithETH(msg.value / INITIAL_MINT_COST_ETH); } function mintWithETH() external payable { mintManyWithETH(1); } function mintManyWithETH(uint256 _tokens) public payable { require(isOpen()); require(_tokens > 0); if (whitelistExpired()) { require(totalSupply() - krillMintedTokens() + _tokens <= ETH_MINTABLE_SUPPLY + WHITELIST_ETH_MINTABLE_SUPPLY); } else { require(ethMintedTokens() + _tokens <= ETH_MINTABLE_SUPPLY); } uint256 _cost = _tokens * INITIAL_MINT_COST_ETH; require(msg.value >= _cost); info.ethMintedTokens += _tokens; for (uint256 i = 0; i < _tokens; i++) { _mint(msg.sender); } if (msg.value > _cost) { payable(msg.sender).transfer(msg.value - _cost); } } function mintWithProof(uint256 _index, address _account, bytes32[] calldata _merkleProof) external payable { require(isOpen()); require(!whitelistExpired() && whitelistMintedTokens() < WHITELIST_ETH_MINTABLE_SUPPLY); require(msg.value >= INITIAL_MINT_COST_ETH); require(!proofClaimed(_index)); bytes32 _node = keccak256(abi.encodePacked(_index, _account)); require(_verify(_merkleProof, _node)); uint256 _claimedWordIndex = _index / 256; uint256 _claimedBitIndex = _index % 256; info.claimedBitMap[_claimedWordIndex] = info.claimedBitMap[_claimedWordIndex] | (1 << _claimedBitIndex); _mint(_account); if (msg.value > INITIAL_MINT_COST_ETH) { payable(msg.sender).transfer(msg.value - INITIAL_MINT_COST_ETH); } } function mint() external { mintMany(1); } function mintMany(uint256 _tokens) public { require(isOpen()); require(_tokens > 0 && krillMintedTokens() + _tokens <= KRILL_MINTABLE_SUPPLY); uint256 _cost = calculateKrillMintCost(_tokens); info.krill.transferFrom(msg.sender, address(this), _cost); uint256 _stakingReward = _cost * STAKING_CUT / 100; info.stakingRewards.disburse(_stakingReward); emit StakingReward(_stakingReward); info.krill.burn(info.krill.balanceOf(address(this))); info.krillMintedTokens += _tokens; for (uint256 i = 0; i < _tokens; i++) { _mint(msg.sender); } } function claim() external { claimFishermenRewards(); claimWhaleRewards(); } function claimFishermenRewards() public { _update(msg.sender); uint256 _rewards = info.users[msg.sender].rewards; if (_rewards > 0) { info.users[msg.sender].rewards = 0; info.krill.mint(msg.sender, _rewards); emit ClaimFishermenRewards(msg.sender, _rewards); } } function claimWhaleRewards() public { uint256 _rewards = whaleRewardsOf(msg.sender); if (_rewards > 0) { info.users[msg.sender].scaledPayout += int256(_rewards * FLOAT_SCALAR); info.krill.mint(msg.sender, _rewards); emit ClaimWhaleRewards(msg.sender, _rewards); } } function approve(address _approved, uint256 _tokenId) external { require(msg.sender == ownerOf(_tokenId)); info.list[_tokenId].approved = _approved; emit Approval(msg.sender, _approved, _tokenId); } function setApprovalForAll(address _operator, bool _approved) external { info.users[msg.sender].approved[_operator] = _approved; emit ApprovalForAll(msg.sender, _operator, _approved); } function transferFrom(address _from, address _to, uint256 _tokenId) external { _transfer(_from, _to, _tokenId); } function safeTransferFrom(address _from, address _to, uint256 _tokenId) external { safeTransferFrom(_from, _to, _tokenId, ""); } function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes memory _data) public { _transfer(_from, _to, _tokenId); uint32 _size; assembly { _size := extcodesize(_to) } if (_size > 0) { require(Receiver(_to).onERC721Received(msg.sender, _from, _tokenId, _data) == 0x150b7a02); } } function name() external view returns (string memory) { return info.metadata.name(); } function symbol() external view returns (string memory) { return info.metadata.symbol(); } function tokenURI(uint256 _tokenId) external view returns (string memory) { return info.metadata.tokenURI(_tokenId); } function krillAddress() external view returns (address) { return address(info.krill); } function pairAddress() external view returns (address) { return info.krill.pairAddress(); } function stakingRewardsAddress() public view returns (address) { return address(info.stakingRewards); } function merkleRoot() public view returns (bytes32) { return info.merkleRoot; } function openingTime() public view returns (uint256) { return info.openingTime; } function isOpen() public view returns (bool) { return block.timestamp > openingTime(); } function whitelistExpiry() public view returns (uint256) { return info.whitelistExpiry; } function whitelistExpired() public view returns (bool) { return block.timestamp > whitelistExpiry(); } function owner() public view returns (address) { return info.owner; } function totalSupply() public view returns (uint256) { return info.totalSupply; } function ethMintedTokens() public view returns (uint256) { return info.ethMintedTokens; } function krillMintedTokens() public view returns (uint256) { return info.krillMintedTokens; } function whitelistMintedTokens() public view returns (uint256) { return totalSupply() - ethMintedTokens() - krillMintedTokens(); } function totalWhales() public view returns (uint256) { return info.totalWhales; } function totalFishermen() public view returns (uint256) { return totalSupply() - totalWhales(); } function totalKrillPerDay() external view returns (uint256) { return totalFishermen() * KRILL_PER_DAY_PER_FISHERMAN; } function currentKrillMintCost() public view returns (uint256) { return krillMintCost(krillMintedTokens()); } function krillMintCost(uint256 _krillMintedTokens) public pure returns (uint256) { return (_krillMintedTokens + KRILL_COST_ADD)**KRILL_COST_EXPONENT * KRILL_COST_SCALER; } function calculateKrillMintCost(uint256 _tokens) public view returns (uint256 cost) { cost = 0; for (uint256 i = 0; i < _tokens; i++) { cost += krillMintCost(krillMintedTokens() + i); } } function fishermenRewardsOf(address _owner) public view returns (uint256) { uint256 _pending = 0; uint256 _last = info.users[_owner].lastUpdated; if (_last < block.timestamp) { uint256 _diff = block.timestamp - _last; _pending += ownerKrillPerDay(_owner) * _diff * (100 - WHALES_CUT) / 8640000; } return info.users[_owner].rewards + _pending; } function whaleRewardsOf(address _owner) public view returns (uint256) { return uint256(int256(info.scaledRewardsPerWhale * whalesOf(_owner)) - info.users[_owner].scaledPayout) / FLOAT_SCALAR; } function balanceOf(address _owner) public view returns (uint256) { return info.users[_owner].balance; } function whalesOf(address _owner) public view returns (uint256) { return info.users[_owner].whales; } function fishermenOf(address _owner) public view returns (uint256) { return balanceOf(_owner) - whalesOf(_owner); } function ownerOf(uint256 _tokenId) public view returns (address) { require(_tokenId < totalSupply()); return info.list[_tokenId].owner; } function getApproved(uint256 _tokenId) public view returns (address) { require(_tokenId < totalSupply()); return info.list[_tokenId].approved; } function isApprovedForAll(address _owner, address _operator) public view returns (bool) { return info.users[_owner].approved[_operator]; } function getSeed(uint256 _tokenId) public view returns (bytes32) { require(_tokenId < totalSupply()); return info.list[_tokenId].seed; } function getIsWhale(uint256 _tokenId) public view returns (bool) { require(_tokenId < totalSupply()); return info.list[_tokenId].isWhale; } function tokenByIndex(uint256 _index) public view returns (uint256) { require(_index < totalSupply()); return _index; } function tokenOfOwnerByIndex(address _owner, uint256 _index) public view returns (uint256) { require(_index < balanceOf(_owner)); return info.users[_owner].list[_index]; } function ownerKrillPerDay(address _owner) public view returns (uint256 amount) { return info.users[_owner].krillPerDay; } function proofClaimed(uint256 _index) public view returns (bool) { uint256 _claimedWordIndex = _index / 256; uint256 _claimedBitIndex = _index % 256; uint256 _claimedWord = info.claimedBitMap[_claimedWordIndex]; uint256 _mask = (1 << _claimedBitIndex); return _claimedWord & _mask == _mask; } function getToken(uint256 _tokenId) public view returns (address tokenOwner, address approved, bytes32 seed, bool isWhale) { return (ownerOf(_tokenId), getApproved(_tokenId), getSeed(_tokenId), getIsWhale(_tokenId)); } function getTokens(uint256[] memory _tokenIds) public view returns (address[] memory owners, address[] memory approveds, bytes32[] memory seeds, bool[] memory isWhales) { uint256 _length = _tokenIds.length; owners = new address[](_length); approveds = new address[](_length); seeds = new bytes32[](_length); isWhales = new bool[](_length); for (uint256 i = 0; i < _length; i++) { (owners[i], approveds[i], seeds[i], isWhales[i]) = getToken(_tokenIds[i]); } } function getTokensTable(uint256 _limit, uint256 _page, bool _isAsc) external view returns (uint256[] memory tokenIds, address[] memory owners, address[] memory approveds, bytes32[] memory seeds, bool[] memory isWhales, uint256 totalTokens, uint256 totalPages) { require(_limit > 0); totalTokens = totalSupply(); if (totalTokens > 0) { totalPages = (totalTokens / _limit) + (totalTokens % _limit == 0 ? 0 : 1); require(_page < totalPages); uint256 _offset = _limit * _page; if (_page == totalPages - 1 && totalTokens % _limit != 0) { _limit = totalTokens % _limit; } tokenIds = new uint256[](_limit); for (uint256 i = 0; i < _limit; i++) { tokenIds[i] = tokenByIndex(_isAsc ? _offset + i : totalTokens - _offset - i - 1); } } else { totalPages = 0; tokenIds = new uint256[](0); } (owners, approveds, seeds, isWhales) = getTokens(tokenIds); } function getOwnerTokensTable(address _owner, uint256 _limit, uint256 _page, bool _isAsc) external view returns (uint256[] memory tokenIds, address[] memory approveds, bytes32[] memory seeds, bool[] memory isWhales, uint256 totalTokens, uint256 totalPages) { require(_limit > 0); totalTokens = balanceOf(_owner); if (totalTokens > 0) { totalPages = (totalTokens / _limit) + (totalTokens % _limit == 0 ? 0 : 1); require(_page < totalPages); uint256 _offset = _limit * _page; if (_page == totalPages - 1 && totalTokens % _limit != 0) { _limit = totalTokens % _limit; } tokenIds = new uint256[](_limit); for (uint256 i = 0; i < _limit; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, _isAsc ? _offset + i : totalTokens - _offset - i - 1); } } else { totalPages = 0; tokenIds = new uint256[](0); } ( , approveds, seeds, isWhales) = getTokens(tokenIds); } function allMintingInfo() external view returns (uint256 ethMinted, uint256 whitelistMinted, uint256 krillMinted, uint256 currentKrillCost, uint256 whitelistExpiryTime, bool hasWhitelistExpired, uint256 openTime, bool open) { return (ethMintedTokens(), whitelistMintedTokens(), krillMintedTokens(), currentKrillMintCost(), whitelistExpiry(), whitelistExpired(), openingTime(), isOpen()); } function allInfoFor(address _owner) external view returns (uint256 supply, uint256 whales, uint256 ownerBalance, uint256 ownerWhales, uint256 ownerFishermenRewards, uint256 ownerWhaleRewards, uint256 ownerDailyKrill) { return (totalSupply(), totalWhales(), balanceOf(_owner), whalesOf(_owner), fishermenRewardsOf(_owner), whaleRewardsOf(_owner), ownerKrillPerDay(_owner)); } function _mint(address _receiver) internal { require(msg.sender == tx.origin); require(totalSupply() < MAX_SUPPLY); uint256 _tokenId = info.totalSupply++; Token storage _newToken = info.list[_tokenId]; _newToken.owner = _receiver; bytes32 _seed = keccak256(abi.encodePacked(_tokenId, _receiver, blockhash(block.number - 1), gasleft())); _newToken.seed = _seed; _newToken.isWhale = _tokenId < DEV_TOKENS || _tokenId % WHALE_MODULUS == 0; if (_newToken.isWhale) { info.totalWhales++; info.users[_receiver].whales++; info.users[_receiver].scaledPayout += int256(info.scaledRewardsPerWhale); } else { _update(_receiver); info.users[_receiver].krillPerDay += KRILL_PER_DAY_PER_FISHERMAN; } uint256 _index = info.users[_receiver].balance++; info.users[_receiver].indexOf[_tokenId] = _index + 1; info.users[_receiver].list[_index] = _tokenId; emit Transfer(address(0x0), _receiver, _tokenId); emit Mint(_receiver, _tokenId, _seed, _newToken.isWhale); } function _transfer(address _from, address _to, uint256 _tokenId) internal { address _owner = ownerOf(_tokenId); address _approved = getApproved(_tokenId); require(_from == _owner); require(msg.sender == _owner || msg.sender == _approved || isApprovedForAll(_owner, msg.sender)); info.list[_tokenId].owner = _to; if (_approved != address(0x0)) { info.list[_tokenId].approved = address(0x0); emit Approval(address(0x0), address(0x0), _tokenId); } if (getIsWhale(_tokenId)) { info.users[_from].whales--; info.users[_from].scaledPayout -= int256(info.scaledRewardsPerWhale); info.users[_to].whales++; info.users[_to].scaledPayout += int256(info.scaledRewardsPerWhale); } else { _update(_from); info.users[_from].krillPerDay -= KRILL_PER_DAY_PER_FISHERMAN; _update(_to); info.users[_to].krillPerDay += KRILL_PER_DAY_PER_FISHERMAN; } uint256 _index = info.users[_from].indexOf[_tokenId] - 1; uint256 _moved = info.users[_from].list[info.users[_from].balance - 1]; info.users[_from].list[_index] = _moved; info.users[_from].indexOf[_moved] = _index + 1; info.users[_from].balance--; delete info.users[_from].indexOf[_tokenId]; uint256 _newIndex = info.users[_to].balance++; info.users[_to].indexOf[_tokenId] = _newIndex + 1; info.users[_to].list[_newIndex] = _tokenId; emit Transfer(_from, _to, _tokenId); } function _update(address _owner) internal { uint256 _last = info.users[_owner].lastUpdated; if (_last < block.timestamp) { uint256 _diff = block.timestamp - _last; uint256 _rewards = ownerKrillPerDay(_owner) * _diff / 86400; uint256 _whalesCut = _rewards * WHALES_CUT / 100; info.scaledRewardsPerWhale += _whalesCut * FLOAT_SCALAR / totalWhales(); emit WhalesReward(_whalesCut); info.users[_owner].lastUpdated = block.timestamp; info.users[_owner].rewards += _rewards - _whalesCut; emit Reward(_owner, _rewards - _whalesCut); } } function _verify(bytes32[] memory _proof, bytes32 _leaf) internal view returns (bool) { require(_leaf != merkleRoot()); bytes32 _computedHash = _leaf; for (uint256 i = 0; i < _proof.length; i++) { bytes32 _proofElement = _proof[i]; if (_computedHash <= _proofElement) { _computedHash = keccak256(abi.encodePacked(_computedHash, _proofElement)); } else { _computedHash = keccak256(abi.encodePacked(_proofElement, _computedHash)); } } return _computedHash == merkleRoot(); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract MetadataInterface","name":"_metadata","type":"address"},{"internalType":"contract KRILL","name":"_krill","type":"address"},{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ClaimFishermenRewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ClaimWhaleRewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"seed","type":"bytes32"},{"indexed":false,"internalType":"bool","name":"isWhale","type":"bool"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Reward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"StakingReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WhalesReward","type":"event"},{"inputs":[],"name":"ETH_MINTABLE_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INITIAL_MINT_COST_ETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"KRILL_MINTABLE_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"KRILL_PER_DAY_PER_FISHERMAN","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WHITELIST_ETH_MINTABLE_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"allInfoFor","outputs":[{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"whales","type":"uint256"},{"internalType":"uint256","name":"ownerBalance","type":"uint256"},{"internalType":"uint256","name":"ownerWhales","type":"uint256"},{"internalType":"uint256","name":"ownerFishermenRewards","type":"uint256"},{"internalType":"uint256","name":"ownerWhaleRewards","type":"uint256"},{"internalType":"uint256","name":"ownerDailyKrill","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allMintingInfo","outputs":[{"internalType":"uint256","name":"ethMinted","type":"uint256"},{"internalType":"uint256","name":"whitelistMinted","type":"uint256"},{"internalType":"uint256","name":"krillMinted","type":"uint256"},{"internalType":"uint256","name":"currentKrillCost","type":"uint256"},{"internalType":"uint256","name":"whitelistExpiryTime","type":"uint256"},{"internalType":"bool","name":"hasWhitelistExpired","type":"bool"},{"internalType":"uint256","name":"openTime","type":"uint256"},{"internalType":"bool","name":"open","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_approved","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokens","type":"uint256"}],"name":"calculateKrillMintCost","outputs":[{"internalType":"uint256","name":"cost","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimFishermenRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimWhaleRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentKrillMintCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ethMintedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"fishermenOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"fishermenRewardsOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getIsWhale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_limit","type":"uint256"},{"internalType":"uint256","name":"_page","type":"uint256"},{"internalType":"bool","name":"_isAsc","type":"bool"}],"name":"getOwnerTokensTable","outputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"address[]","name":"approveds","type":"address[]"},{"internalType":"bytes32[]","name":"seeds","type":"bytes32[]"},{"internalType":"bool[]","name":"isWhales","type":"bool[]"},{"internalType":"uint256","name":"totalTokens","type":"uint256"},{"internalType":"uint256","name":"totalPages","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getSeed","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getToken","outputs":[{"internalType":"address","name":"tokenOwner","type":"address"},{"internalType":"address","name":"approved","type":"address"},{"internalType":"bytes32","name":"seed","type":"bytes32"},{"internalType":"bool","name":"isWhale","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"getTokens","outputs":[{"internalType":"address[]","name":"owners","type":"address[]"},{"internalType":"address[]","name":"approveds","type":"address[]"},{"internalType":"bytes32[]","name":"seeds","type":"bytes32[]"},{"internalType":"bool[]","name":"isWhales","type":"bool[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"},{"internalType":"uint256","name":"_page","type":"uint256"},{"internalType":"bool","name":"_isAsc","type":"bool"}],"name":"getTokensTable","outputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"address[]","name":"owners","type":"address[]"},{"internalType":"address[]","name":"approveds","type":"address[]"},{"internalType":"bytes32[]","name":"seeds","type":"bytes32[]"},{"internalType":"bool[]","name":"isWhales","type":"bool[]"},{"internalType":"uint256","name":"totalTokens","type":"uint256"},{"internalType":"uint256","name":"totalPages","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"krillAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_krillMintedTokens","type":"uint256"}],"name":"krillMintCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"krillMintedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokens","type":"uint256"}],"name":"mintMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokens","type":"uint256"}],"name":"mintManyWithETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintWithETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"address","name":"_account","type":"address"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"mintWithProof","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openingTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"ownerKrillPerDay","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pairAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"proofClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract MetadataInterface","name":"_metadata","type":"address"}],"name":"setMetadata","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingRewardsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFishermen","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalKrillPerDay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalWhales","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"whaleRewardsOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"whalesOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistExpired","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistExpiry","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistMintedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162006db738038062006db7833981810160405281019062000037919062000e93565b826000600b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663080ad555306040518263ffffffff1660e01b8152600401620000db919062000f5a565b600060405180830381600087803b158015620000f657600080fd5b505af11580156200010b573d6000803e3d6000fd5b50505050816000600d0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600d0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663080ad555306040518263ffffffff1660e01b8152600401620001b3919062000f5a565b600060405180830381600087803b158015620001ce57600080fd5b505af1158015620001e3573d6000803e3d6000fd5b505050506000600d0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663788bff686040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000258573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200027e919062000fa8565b6000600e0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600d0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b362000312620005d660201b60201c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016200035292919062001006565b6020604051808303816000875af115801562000372573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000398919062001070565b50806000600a01819055507399a768bd14ea62faada61f2c7f123303cdaa69fc6000600c0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611c20426200040b9190620010d1565b600060050181905550617080611c2042620004279190620010d1565b620004339190620010d1565b6000600601819055506001600f60006301ffc9a760e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f60006380ac58cd60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f6000635b5e139f60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f600063780e9d6360e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555060005b6032811015620005cc57620005b673a1450e7d547b4748fc94c8c98c9db667ead31cf86200060260201b60201c565b8080620005c3906200112e565b91505062000587565b50505050620014bb565b600080600e0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146200063b57600080fd5b619c40611f406107d0620006509190620010d1565b6200065c9190620010d1565b6200066c62000ad560201b60201c565b106200067757600080fd5b600080600001600081548092919062000690906200112e565b91905055905060008060070160008381526020019081526020016000209050828160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600082846001436200070591906200117c565b405a6040516020016200071c949392919062001251565b60405160208183030381529060405280519060200120905080826002018190555060328310806200075b57506000600a84620007599190620012d6565b145b8260030160006101000a81548160ff0219169083151502179055508160030160009054906101000a900460ff1615620008715760006001016000815480929190620007a6906200112e565b9190505550600060080160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600701600081548092919062000803906200112e565b9190505550600060040154600060080160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600801600082825462000864919062001318565b92505081905550620008eb565b620008828462000ae160201b60201c565b69021e19e0c9bab2400000600060080160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206006016000828254620008e39190620010d1565b925050819055505b60008060080160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600081548092919062000944906200112e565b919050559050600181620009599190620010d1565b600060080160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160008681526020019081526020016000208190555083600060080160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101600083815260200190815260200160002081905550838573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4838573ffffffffffffffffffffffffffffffffffffffff167f91b669be8d0541c7bb3b6a6089960291a5ab13b10abd6ce7b92e69dbc227aa81848660030160009054906101000a900460ff1660405162000ac6929190620013d8565b60405180910390a35050505050565b60008060000154905090565b60008060080160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206005015490504281101562000d37576000814262000b4391906200117c565b90506000620151808262000b5d8662000d3b60201b60201c565b62000b69919062001405565b62000b75919062001466565b90506000606460148362000b8a919062001405565b62000b96919062001466565b905062000ba862000d8960201b60201c565b680100000000000000008262000bbf919062001405565b62000bcb919062001466565b6000600401600082825462000be19190620010d1565b925050819055507f4301691b7bae3db84d8f99bfbcc21642c27b642aa84095fca01b743332274c638160405162000c1991906200149e565b60405180910390a142600060080160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050181905550808262000c7991906200117c565b600060080160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401600082825462000ccf9190620010d1565b925050819055508473ffffffffffffffffffffffffffffffffffffffff167f619caafabdd75649b302ba8419e48cccf64f37f1983ac4727cfb38b57703ffc9828462000d1c91906200117c565b60405162000d2b91906200149e565b60405180910390a25050505b5050565b60008060080160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601549050919050565b60008060010154905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000dc78262000d9a565b9050919050565b600062000ddb8262000dba565b9050919050565b62000ded8162000dce565b811462000df957600080fd5b50565b60008151905062000e0d8162000de2565b92915050565b600062000e208262000dba565b9050919050565b62000e328162000e13565b811462000e3e57600080fd5b50565b60008151905062000e528162000e27565b92915050565b6000819050919050565b62000e6d8162000e58565b811462000e7957600080fd5b50565b60008151905062000e8d8162000e62565b92915050565b60008060006060848603121562000eaf5762000eae62000d95565b5b600062000ebf8682870162000dfc565b935050602062000ed28682870162000e41565b925050604062000ee58682870162000e7c565b9150509250925092565b6000819050919050565b600062000f1a62000f1462000f0e8462000d9a565b62000eef565b62000d9a565b9050919050565b600062000f2e8262000ef9565b9050919050565b600062000f428262000f21565b9050919050565b62000f548162000f35565b82525050565b600060208201905062000f71600083018462000f49565b92915050565b62000f828162000dba565b811462000f8e57600080fd5b50565b60008151905062000fa28162000f77565b92915050565b60006020828403121562000fc15762000fc062000d95565b5b600062000fd18482850162000f91565b91505092915050565b62000fe58162000dba565b82525050565b6000819050919050565b620010008162000feb565b82525050565b60006040820190506200101d600083018562000fda565b6200102c602083018462000ff5565b9392505050565b60008115159050919050565b6200104a8162001033565b81146200105657600080fd5b50565b6000815190506200106a816200103f565b92915050565b60006020828403121562001089576200108862000d95565b5b6000620010998482850162001059565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620010de8262000feb565b9150620010eb8362000feb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620011235762001122620010a2565b5b828201905092915050565b60006200113b8262000feb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620011715762001170620010a2565b5b600182019050919050565b6000620011898262000feb565b9150620011968362000feb565b925082821015620011ac57620011ab620010a2565b5b828203905092915050565b6000819050919050565b620011d6620011d08262000feb565b620011b7565b82525050565b60008160601b9050919050565b6000620011f682620011dc565b9050919050565b60006200120a82620011e9565b9050919050565b62001226620012208262000dba565b620011fd565b82525050565b6000819050919050565b6200124b620012458262000e58565b6200122c565b82525050565b60006200125f8287620011c1565b60208201915062001271828662001211565b60148201915062001283828562001236565b602082019150620012958284620011c1565b60208201915081905095945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620012e38262000feb565b9150620012f08362000feb565b925082620013035762001302620012a7565b5b828206905092915050565b6000819050919050565b600062001325826200130e565b915062001332836200130e565b9250817f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0383136000831215161562001370576200136f620010a2565b5b817f8000000000000000000000000000000000000000000000000000000000000000038312600083121615620013ab57620013aa620010a2565b5b828201905092915050565b620013c18162000e58565b82525050565b620013d28162001033565b82525050565b6000604082019050620013ef6000830185620013b6565b620013fe6020830184620013c7565b9392505050565b6000620014128262000feb565b91506200141f8362000feb565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200145b576200145a620010a2565b5b828202905092915050565b6000620014738262000feb565b9150620014808362000feb565b925082620014935762001492620012a7565b5b828204905092915050565b6000602082019050620014b5600083018462000ff5565b92915050565b6158ec80620014cb6000396000f3fe6080604052600436106103d25760003560e01c80636bd5ff2f116101fd578063a22cb46511610118578063c3c37e69116100ab578063e4b50cb81161007a578063e4b50cb814610eda578063e985e9c514610f1a578063ee1981d614610f57578063f006379514610f82578063f3cb838514610fc4576103f4565b8063c3c37e6914610df8578063c87b56dd14610e35578063cfc9160814610e72578063e0d4ea3714610e9d576103f4565b8063af556a57116100e7578063af556a5714610d4e578063b720001b14610d79578063b7a8807c14610da4578063b88d4fde14610dcf576103f4565b8063a22cb46514610c92578063a52a138814610cbb578063a8b0898214610ce6578063a9fc2f9114610d11576103f4565b80638da5cb5b116101905780639912682a1161015f5780639912682a14610bb05780639f8de88014610bed578063a0ae52cd14610c18578063a0ced6fd14610c55576103f4565b80638da5cb5b14610b395780638f2aef5b14610b6457806394166be714610b6e57806395d89b4114610b85576103f4565b8063788bff68116101cc578063788bff6814610a8a57806379400dc114610ab55780638145dd7a14610af25780638c3fe89a14610b0e576103f4565b80636bd5ff2f146109b45780636ea0ef1c146109f757806370a0823114610a225780637738fb0c14610a5f576103f4565b806332cb6b0c116102ed57806347535d7b1161028057806359e6d8591161024f57806359e6d859146108e45780635ae6a9de1461090f5780636352211e1461093a5780636adca3a414610977576103f4565b806347535d7b146108225780634e71d92d1461084d5780634f6ccce71461086457806357f6b812146108a1576103f4565b80633ccfd60b116102bc5780633ccfd60b1461078557806342842e0e1461079c5780634586d95f146107c55780634703afbd146107f0576103f4565b806332cb6b0c146106c757806332d5c78c146106f2578063335e07b91461072f57806333e6d8191461075a576103f4565b806318160ddd11610365578063275086861161033457806327508686146106035780632eb4a7ab1461061f5780632f745c591461064a57806332ba0a1e14610687576103f4565b806318160ddd14610547578063189a1860146105725780631f31383d146105af57806323b872dd146105da576103f4565b8063095ea7b3116103a1578063095ea7b3146104c757806311d7efcb146104f05780631249c58b1461050757806313af40351461051e576103f4565b806301ffc9a7146103f9578063059513a61461043657806306fdde031461045f578063081812fc1461048a576103f4565b366103f4576103f266b1a2bc2ec50000346103ed9190614146565b610fed565b005b600080fd5b34801561040557600080fd5b50610420600480360381019061041b91906141e3565b611146565b60405161042d919061422b565b60405180910390f35b34801561044257600080fd5b5061045d60048036038101906104589190614272565b611166565b005b34801561046b57600080fd5b506104746114b2565b6040516104819190614338565b60405180910390f35b34801561049657600080fd5b506104b160048036038101906104ac9190614272565b611552565b6040516104be919061439b565b60405180910390f35b3480156104d357600080fd5b506104ee60048036038101906104e991906143e2565b6115a8565b005b3480156104fc57600080fd5b5061050561169f565b005b34801561051357600080fd5b5061051c611809565b005b34801561052a57600080fd5b5061054560048036038101906105409190614422565b611815565b005b34801561055357600080fd5b5061055c61189b565b604051610569919061445e565b60405180910390f35b34801561057e57600080fd5b5061059960048036038101906105949190614422565b6118a7565b6040516105a6919061445e565b60405180910390f35b3480156105bb57600080fd5b506105c46118f5565b6040516105d1919061445e565b60405180910390f35b3480156105e657600080fd5b5061060160048036038101906105fc9190614479565b61190c565b005b61061d60048036038101906106189190614531565b61191c565b005b34801561062b57600080fd5b50610634611ad1565b60405161064191906145be565b60405180910390f35b34801561065657600080fd5b50610671600480360381019061066c91906143e2565b611add565b60405161067e919061445e565b60405180910390f35b34801561069357600080fd5b506106ae60048036038101906106a99190614717565b611b52565b6040516106be949392919061499a565b60405180910390f35b3480156106d357600080fd5b506106dc611dac565b6040516106e9919061445e565b60405180910390f35b3480156106fe57600080fd5b5061071960048036038101906107149190614422565b611dcc565b604051610726919061445e565b60405180910390f35b34801561073b57600080fd5b50610744611e52565b604051610751919061422b565b60405180910390f35b34801561076657600080fd5b5061076f611e63565b60405161077c919061445e565b60405180910390f35b34801561079157600080fd5b5061079a611e87565b005b3480156107a857600080fd5b506107c360048036038101906107be9190614479565b612021565b005b3480156107d157600080fd5b506107da612041565b6040516107e7919061445e565b60405180910390f35b3480156107fc57600080fd5b50610805612074565b6040516108199897969594939291906149fb565b60405180910390f35b34801561082e57600080fd5b506108376120da565b604051610844919061422b565b60405180910390f35b34801561085957600080fd5b506108626120eb565b005b34801561087057600080fd5b5061088b60048036038101906108869190614272565b6120fd565b604051610898919061445e565b60405180910390f35b3480156108ad57600080fd5b506108c860048036038101906108c39190614422565b61211a565b6040516108db9796959493929190614a79565b60405180910390f35b3480156108f057600080fd5b506108f961217b565b604051610906919061445e565b60405180910390f35b34801561091b57600080fd5b50610924612181565b604051610931919061445e565b60405180910390f35b34801561094657600080fd5b50610961600480360381019061095c9190614272565b612187565b60405161096e919061439b565b60405180910390f35b34801561098357600080fd5b5061099e60048036038101906109999190614272565b6121dd565b6040516109ab919061422b565b60405180910390f35b3480156109c057600080fd5b506109db60048036038101906109d69190614b14565b612235565b6040516109ee9796959493929190614c25565b60405180910390f35b348015610a0357600080fd5b50610a0c612437565b604051610a19919061445e565b60405180910390f35b348015610a2e57600080fd5b50610a496004803603810190610a449190614422565b612443565b604051610a56919061445e565b60405180910390f35b348015610a6b57600080fd5b50610a74612491565b604051610a81919061439b565b60405180910390f35b348015610a9657600080fd5b50610a9f6124bd565b604051610aac919061439b565b60405180910390f35b348015610ac157600080fd5b50610adc6004803603810190610ad79190614422565b6124e9565b604051610ae9919061445e565b60405180910390f35b610b0c6004803603810190610b079190614272565b610fed565b005b348015610b1a57600080fd5b50610b2361250e565b604051610b30919061445e565b60405180910390f35b348015610b4557600080fd5b50610b4e612514565b604051610b5b919061439b565b60405180910390f35b610b6c612540565b005b348015610b7a57600080fd5b50610b8361254c565b005b348015610b9157600080fd5b50610b9a6126d5565b604051610ba79190614338565b60405180910390f35b348015610bbc57600080fd5b50610bd76004803603810190610bd29190614272565b612775565b604051610be4919061445e565b60405180910390f35b348015610bf957600080fd5b50610c026127a8565b604051610c0f919061445e565b60405180910390f35b348015610c2457600080fd5b50610c3f6004803603810190610c3a9190614422565b6127b3565b604051610c4c919061445e565b60405180910390f35b348015610c6157600080fd5b50610c7c6004803603810190610c779190614272565b612801565b604051610c89919061422b565b60405180910390f35b348015610c9e57600080fd5b50610cb96004803603810190610cb49190614cb7565b612844565b005b348015610cc757600080fd5b50610cd0612947565b604051610cdd919061445e565b60405180910390f35b348015610cf257600080fd5b50610cfb612968565b604051610d08919061439b565b60405180910390f35b348015610d1d57600080fd5b50610d386004803603810190610d339190614422565b612a02565b604051610d45919061445e565b60405180910390f35b348015610d5a57600080fd5b50610d63612b0d565b604051610d70919061445e565b60405180910390f35b348015610d8557600080fd5b50610d8e612b19565b604051610d9b919061445e565b60405180910390f35b348015610db057600080fd5b50610db9612b25565b604051610dc6919061445e565b60405180910390f35b348015610ddb57600080fd5b50610df66004803603810190610df19190614dac565b612b31565b005b348015610e0457600080fd5b50610e1f6004803603810190610e1a9190614272565b612c0c565b604051610e2c919061445e565b60405180910390f35b348015610e4157600080fd5b50610e5c6004803603810190610e579190614272565b612c59565b604051610e699190614338565b60405180910390f35b348015610e7e57600080fd5b50610e87612d06565b604051610e94919061445e565b60405180910390f35b348015610ea957600080fd5b50610ec46004803603810190610ebf9190614272565b612d12565b604051610ed191906145be565b60405180910390f35b348015610ee657600080fd5b50610f016004803603810190610efc9190614272565b612d48565b604051610f119493929190614e2f565b60405180910390f35b348015610f2657600080fd5b50610f416004803603810190610f3c9190614e74565b612d81565b604051610f4e919061422b565b60405180910390f35b348015610f6357600080fd5b50610f6c612e1a565b604051610f79919061445e565b60405180910390f35b348015610f8e57600080fd5b50610fa96004803603810190610fa49190614eb4565b612e28565b604051610fbb96959493929190614f1b565b60405180910390f35b348015610fd057600080fd5b50610feb6004803603810190610fe69190614fd6565b61302a565b005b610ff56120da565b610ffe57600080fd5b6000811161100b57600080fd5b611013611e52565b1561105d57611f406107d06110289190615003565b81611031612b19565b61103961189b565b6110439190615059565b61104d9190615003565b111561105857600080fd5b61107f565b6107d081611069612b0d565b6110739190615003565b111561107e57600080fd5b5b600066b1a2bc2ec5000082611094919061508d565b9050803410156110a357600080fd5b81600060020160008282546110b89190615003565b9250508190555060005b828110156110e6576110d3336130b0565b80806110de906150e7565b9150506110c2565b5080341115611142573373ffffffffffffffffffffffffffffffffffffffff166108fc82346111159190615059565b9081150290604051600060405180830381858888f19350505050158015611140573d6000803e3d6000fd5b505b5050565b600f6020528060005260406000206000915054906101000a900460ff1681565b61116e6120da565b61117757600080fd5b60008111801561119b5750619c408161118e612b19565b6111989190615003565b11155b6111a457600080fd5b60006111af82612c0c565b90506000600d0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b815260040161121393929190615130565b6020604051808303816000875af1158015611232573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611256919061517c565b5060006064601983611268919061508d565b6112729190614146565b90506000600e0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd77ac2c826040518263ffffffff1660e01b81526004016112d2919061445e565b600060405180830381600087803b1580156112ec57600080fd5b505af1158015611300573d6000803e3d6000fd5b505050507f5549eba7caee3b4e06c29f7b61d79a88035ed58961e51f4492784c90f934724e81604051611333919061445e565b60405180910390a16000600d0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342966c686000600d0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016113da919061439b565b602060405180830381865afa1580156113f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141b91906151be565b6040518263ffffffff1660e01b8152600401611437919061445e565b600060405180830381600087803b15801561145157600080fd5b505af1158015611465573d6000803e3d6000fd5b50505050826000600301600082825461147e9190615003565b9250508190555060005b838110156114ac57611499336130b0565b80806114a4906150e7565b915050611488565b50505050565b60606000600b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015611524573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061154d919061528c565b905090565b600061155c61189b565b821061156757600080fd5b6000600701600083815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6115b181612187565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115e857600080fd5b816000600701600083815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006116aa33611dcc565b905060008111156118065768010000000000000000816116ca919061508d565b600060080160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600801600082825461171e91906152df565b925050819055506000600d0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1933836040518363ffffffff1660e01b8152600401611785929190615373565b600060405180830381600087803b15801561179f57600080fd5b505af11580156117b3573d6000803e3d6000fd5b505050503373ffffffffffffffffffffffffffffffffffffffff167f4a66b3fae96efca82ee96c0a33e5e1d40647354f59dfb675be3014876761a6f9826040516117fd919061445e565b60405180910390a25b50565b6118136001611166565b565b61181d612514565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461185457600080fd5b806000600c0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060000154905090565b60008060080160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600701549050919050565b6000611907611902612b19565b612775565b905090565b611917838383613554565b505050565b6119246120da565b61192d57600080fd5b611935611e52565b15801561194a5750611f40611948612041565b105b61195357600080fd5b66b1a2bc2ec5000034101561196757600080fd5b611970846121dd565b1561197a57600080fd5b6000848460405160200161198f929190615405565b6040516020818303038152906040528051906020012090506119f2838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505082613dde565b6119fb57600080fd5b600061010086611a0b9190614146565b9050600061010087611a1d9190615431565b9050806001901b6000600901600084815260200190815260200160002054176000600901600084815260200190815260200160002081905550611a5f866130b0565b66b1a2bc2ec50000341115611ac8573373ffffffffffffffffffffffffffffffffffffffff166108fc66b1a2bc2ec5000034611a9b9190615059565b9081150290604051600060405180830381858888f19350505050158015611ac6573d6000803e3d6000fd5b505b50505050505050565b600080600a0154905090565b6000611ae883612443565b8210611af357600080fd5b600060080160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101600083815260200190815260200160002054905092915050565b6060806060806000855190508067ffffffffffffffff811115611b7857611b776145d9565b5b604051908082528060200260200182016040528015611ba65781602001602082028036833780820191505090505b5094508067ffffffffffffffff811115611bc357611bc26145d9565b5b604051908082528060200260200182016040528015611bf15781602001602082028036833780820191505090505b5093508067ffffffffffffffff811115611c0e57611c0d6145d9565b5b604051908082528060200260200182016040528015611c3c5781602001602082028036833780820191505090505b5092508067ffffffffffffffff811115611c5957611c586145d9565b5b604051908082528060200260200182016040528015611c875781602001602082028036833780820191505090505b50915060005b81811015611da357611cb8878281518110611cab57611caa615462565b5b6020026020010151612d48565b898581518110611ccb57611cca615462565b5b60200260200101898681518110611ce557611ce4615462565b5b60200260200101898781518110611cff57611cfe615462565b5b60200260200101898881518110611d1957611d18615462565b5b602002602001018415151515815250848152508473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152508473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250505050508080611d9b906150e7565b915050611c8d565b50509193509193565b619c40611f406107d0611dbf9190615003565b611dc99190615003565b81565b600068010000000000000000600060080160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060080154611e27846118a7565b600060040154611e37919061508d565b611e419190615491565b611e4b9190614146565b9050919050565b6000611e5c612437565b4211905090565b600069021e19e0c9bab2400000611e78612947565b611e82919061508d565b905090565b600030905060008173ffffffffffffffffffffffffffffffffffffffff163111611eb057600080fd5b73faded72464d6e76e37300b467673b36ecc4d2ccf73ffffffffffffffffffffffffffffffffffffffff166108fc60028373ffffffffffffffffffffffffffffffffffffffff1631611f029190614146565b9081150290604051600060405180830381858888f19350505050158015611f2d573d6000803e3d6000fd5b50731cc79d49ce5b9519c912d810e39025dd27d1f03373ffffffffffffffffffffffffffffffffffffffff166108fc600a8373ffffffffffffffffffffffffffffffffffffffff1631611f809190614146565b9081150290604051600060405180830381858888f19350505050158015611fab573d6000803e3d6000fd5b5073a1450e7d547b4748fc94c8c98c9db667ead31cf873ffffffffffffffffffffffffffffffffffffffff166108fc8273ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f1935050505015801561201d573d6000803e3d6000fd5b5050565b61203c83838360405180602001604052806000815250612b31565b505050565b600061204b612b19565b612053612b0d565b61205b61189b565b6120659190615059565b61206f9190615059565b905090565b600080600080600080600080612088612b0d565b612090612041565b612098612b19565b6120a06118f5565b6120a8612437565b6120b0611e52565b6120b8612b25565b6120c06120da565b975097509750975097509750975097509091929394959697565b60006120e4612b25565b4211905090565b6120f361254c565b6120fb61169f565b565b600061210761189b565b821061211257600080fd5b819050919050565b600080600080600080600061212d61189b565b612135612d06565b61213e8a612443565b6121478b6118a7565b6121508c612a02565b6121598d611dcc565b6121628e6127b3565b9650965096509650965096509650919395979092949650565b6107d081565b611f4081565b600061219161189b565b821061219c57600080fd5b6000600701600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600080610100836121ee9190614146565b90506000610100846122009190615431565b905060008060090160008481526020019081526020016000205490506000826001901b90508081831614945050505050919050565b606080606080606060008060008a1161224d57600080fd5b61225561189b565b915060008211156123c05760008a8361226e9190615431565b1461227a57600161227d565b60005b60ff168a8361228c9190614146565b6122969190615003565b90508089106122a457600080fd5b6000898b6122b2919061508d565b90506001826122c19190615059565b8a1480156122db575060008b846122d89190615431565b14155b156122ef578a836122ec9190615431565b9a505b8a67ffffffffffffffff811115612309576123086145d9565b5b6040519080825280602002602001820160405280156123375781602001602082028036833780820191505090505b50975060005b8b8110156123b9576123878a61237557600182848761235c9190615059565b6123669190615059565b6123709190615059565b612382565b81836123819190615003565b5b6120fd565b89828151811061239a57612399615462565b5b60200260200101818152505080806123b1906150e7565b91505061233d565b5050612411565b60009050600067ffffffffffffffff8111156123df576123de6145d9565b5b60405190808252806020026020018201604052801561240d5781602001602082028036833780820191505090505b5096505b61241a87611b52565b809650819750829850839950505050509397509397509397909450565b60008060060154905090565b60008060080160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b600080600d0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080600e0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006124f4826118a7565b6124fd83612443565b6125079190615059565b9050919050565b619c4081565b600080600c0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61254a6001610fed565b565b61255533613eaf565b60008060080160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040154905060008111156126d25760008060080160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401819055506000600d0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1933836040518363ffffffff1660e01b8152600401612651929190615373565b600060405180830381600087803b15801561266b57600080fd5b505af115801561267f573d6000803e3d6000fd5b505050503373ffffffffffffffffffffffffffffffffffffffff167f9f5ab2720702a425bd92b1cc2696aac5b7c29a2d826000cc68d1932c117481ba826040516126c9919061445e565b60405180910390a25b50565b60606000600b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015612747573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190612770919061528c565b905090565b60006404a817c80060036127108461278d9190615003565b6127979190615658565b6127a1919061508d565b9050919050565b66b1a2bc2ec5000081565b60008060080160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601549050919050565b600061280b61189b565b821061281657600080fd5b6000600701600083815260200190815260200160002060030160009054906101000a900460ff169050919050565b80600060080160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161293b919061422b565b60405180910390a35050565b6000612951612d06565b61295961189b565b6129639190615059565b905090565b600080600d0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a8b089826040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129fd91906156b8565b905090565b6000806000905060008060080160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050154905042811015612ab35760008142612a689190615059565b90506283d60060146064612a7c9190615059565b82612a86886127b3565b612a90919061508d565b612a9a919061508d565b612aa49190614146565b83612aaf9190615003565b9250505b81600060080160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040154612b049190615003565b92505050919050565b60008060020154905090565b60008060030154905090565b60008060050154905090565b612b3c848484613554565b6000833b905060008163ffffffff161115612c055763150b7a0260e01b8473ffffffffffffffffffffffffffffffffffffffff1663150b7a02338887876040518563ffffffff1660e01b8152600401612b98949392919061573a565b6020604051808303816000875af1158015612bb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bdb919061579b565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612c0457600080fd5b5b5050505050565b6000805b82811015612c5357612c3381612c24612b19565b612c2e9190615003565b612775565b82612c3e9190615003565b91508080612c4b906150e7565b915050612c10565b50919050565b60606000600b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c87b56dd836040518263ffffffff1660e01b8152600401612cb9919061445e565b600060405180830381865afa158015612cd6573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190612cff919061528c565b9050919050565b60008060010154905090565b6000612d1c61189b565b8210612d2757600080fd5b60006007016000838152602001908152602001600020600201549050919050565b600080600080612d5785612187565b612d6086611552565b612d6987612d12565b612d7288612801565b93509350935093509193509193565b60008060080160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b69021e19e0c9bab240000081565b60608060608060008060008911612e3e57600080fd5b612e478a612443565b91506000821115612fb35760008983612e609190615431565b14612e6c576001612e6f565b60005b60ff168983612e7e9190614146565b612e889190615003565b9050808810612e9657600080fd5b6000888a612ea4919061508d565b9050600182612eb39190615059565b89148015612ecd575060008a84612eca9190615431565b14155b15612ee1578983612ede9190615431565b99505b8967ffffffffffffffff811115612efb57612efa6145d9565b5b604051908082528060200260200182016040528015612f295781602001602082028036833780820191505090505b50965060005b8a811015612fac57612f7a8c8a612f68576001838588612f4f9190615059565b612f599190615059565b612f639190615059565b612f75565b8284612f749190615003565b5b611add565b888281518110612f8d57612f8c615462565b5b6020026020010181815250508080612fa4906150e7565b915050612f2f565b5050613004565b60009050600067ffffffffffffffff811115612fd257612fd16145d9565b5b6040519080825280602002602001820160405280156130005781602001602082028036833780820191505090505b5095505b61300d86611b52565b909192508095508196508297505050509499939850945094509450565b613032612514565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461306957600080fd5b806000600b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146130e857600080fd5b619c40611f406107d06130fb9190615003565b6131059190615003565b61310d61189b565b1061311757600080fd5b600080600001600081548092919061312e906150e7565b91905055905060008060070160008381526020019081526020016000209050828160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600082846001436131a19190615059565b405a6040516020016131b694939291906157e9565b60405160208183030381529060405280519060200120905080826002018190555060328310806131f257506000600a846131f09190615431565b145b8260030160006101000a81548160ff0219169083151502179055508160030160009054906101000a900460ff1615613300576000600101600081548092919061323a906150e7565b9190505550600060080160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206007016000815480929190613295906150e7565b9190505550600060040154600060080160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060080160008282546132f491906152df565b92505081905550613370565b61330984613eaf565b69021e19e0c9bab2400000600060080160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060160008282546133689190615003565b925050819055505b60008060080160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008154809291906133c7906150e7565b9190505590506001816133da9190615003565b600060080160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160008681526020019081526020016000208190555083600060080160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101600083815260200190815260200160002081905550838573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4838573ffffffffffffffffffffffffffffffffffffffff167f91b669be8d0541c7bb3b6a6089960291a5ab13b10abd6ce7b92e69dbc227aa81848660030160009054906101000a900460ff16604051613545929190615837565b60405180910390a35050505050565b600061355f82612187565b9050600061356c83611552565b90508173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146135a657600080fd5b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061360b57508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b8061361c575061361b8233612d81565b5b61362557600080fd5b836000600701600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461376757600080600701600085815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b61377083612801565b156138f257600060080160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060070160008154809291906137cb90615860565b9190505550600060040154600060080160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600801600082825461382a9190615491565b92505081905550600060080160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206007016000815480929190613887906150e7565b9190505550600060040154600060080160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060080160008282546138e691906152df565b925050819055506139d1565b6138fb85613eaf565b69021e19e0c9bab2400000600060080160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601600082825461395a9190615059565b9250508190555061396a84613eaf565b69021e19e0c9bab2400000600060080160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060160008282546139c99190615003565b925050819055505b60006001600060080160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301600086815260200190815260200160002054613a369190615059565b905060008060080160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006001600060080160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154613ad29190615059565b815260200190815260200160002054905080600060080160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101600084815260200190815260200160002081905550600182613b4b9190615003565b600060080160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301600083815260200190815260200160002081905550600060080160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000815480929190613bfb90615860565b9190505550600060080160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160008681526020019081526020016000206000905560008060080160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000815480929190613cb1906150e7565b919050559050600181613cc49190615003565b600060080160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160008881526020019081526020016000208190555085600060080160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101600083815260200190815260200160002081905550858773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050505050505050565b6000613de8611ad1565b821415613df457600080fd5b600082905060005b8451811015613e9b576000858281518110613e1a57613e19615462565b5b60200260200101519050808311613e5b578281604051602001613e3e92919061588a565b604051602081830303815290604052805190602001209250613e87565b8083604051602001613e6e92919061588a565b6040516020818303038152906040528051906020012092505b508080613e93906150e7565b915050613dfc565b50613ea4611ad1565b811491505092915050565b60008060080160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600501549050428110156140da5760008142613f0e9190615059565b905060006201518082613f20866127b3565b613f2a919061508d565b613f349190614146565b905060006064601483613f47919061508d565b613f519190614146565b9050613f5b612d06565b6801000000000000000082613f70919061508d565b613f7a9190614146565b60006004016000828254613f8e9190615003565b925050819055507f4301691b7bae3db84d8f99bfbcc21642c27b642aa84095fca01b743332274c6381604051613fc4919061445e565b60405180910390a142600060080160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206005018190555080826140229190615059565b600060080160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160008282546140769190615003565b925050819055508473ffffffffffffffffffffffffffffffffffffffff167f619caafabdd75649b302ba8419e48cccf64f37f1983ac4727cfb38b57703ffc982846140c19190615059565b6040516140ce919061445e565b60405180910390a25050505b5050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614151826140de565b915061415c836140de565b92508261416c5761416b6140e8565b5b828204905092915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6141c08161418b565b81146141cb57600080fd5b50565b6000813590506141dd816141b7565b92915050565b6000602082840312156141f9576141f8614181565b5b6000614207848285016141ce565b91505092915050565b60008115159050919050565b61422581614210565b82525050565b6000602082019050614240600083018461421c565b92915050565b61424f816140de565b811461425a57600080fd5b50565b60008135905061426c81614246565b92915050565b60006020828403121561428857614287614181565b5b60006142968482850161425d565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156142d95780820151818401526020810190506142be565b838111156142e8576000848401525b50505050565b6000601f19601f8301169050919050565b600061430a8261429f565b61431481856142aa565b93506143248185602086016142bb565b61432d816142ee565b840191505092915050565b6000602082019050818103600083015261435281846142ff565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006143858261435a565b9050919050565b6143958161437a565b82525050565b60006020820190506143b0600083018461438c565b92915050565b6143bf8161437a565b81146143ca57600080fd5b50565b6000813590506143dc816143b6565b92915050565b600080604083850312156143f9576143f8614181565b5b6000614407858286016143cd565b92505060206144188582860161425d565b9150509250929050565b60006020828403121561443857614437614181565b5b6000614446848285016143cd565b91505092915050565b614458816140de565b82525050565b6000602082019050614473600083018461444f565b92915050565b60008060006060848603121561449257614491614181565b5b60006144a0868287016143cd565b93505060206144b1868287016143cd565b92505060406144c28682870161425d565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f8401126144f1576144f06144cc565b5b8235905067ffffffffffffffff81111561450e5761450d6144d1565b5b60208301915083602082028301111561452a576145296144d6565b5b9250929050565b6000806000806060858703121561454b5761454a614181565b5b60006145598782880161425d565b945050602061456a878288016143cd565b935050604085013567ffffffffffffffff81111561458b5761458a614186565b5b614597878288016144db565b925092505092959194509250565b6000819050919050565b6145b8816145a5565b82525050565b60006020820190506145d360008301846145af565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614611826142ee565b810181811067ffffffffffffffff821117156146305761462f6145d9565b5b80604052505050565b6000614643614177565b905061464f8282614608565b919050565b600067ffffffffffffffff82111561466f5761466e6145d9565b5b602082029050602081019050919050565b600061469361468e84614654565b614639565b905080838252602082019050602084028301858111156146b6576146b56144d6565b5b835b818110156146df57806146cb888261425d565b8452602084019350506020810190506146b8565b5050509392505050565b600082601f8301126146fe576146fd6144cc565b5b813561470e848260208601614680565b91505092915050565b60006020828403121561472d5761472c614181565b5b600082013567ffffffffffffffff81111561474b5761474a614186565b5b614757848285016146e9565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6147958161437a565b82525050565b60006147a7838361478c565b60208301905092915050565b6000602082019050919050565b60006147cb82614760565b6147d5818561476b565b93506147e08361477c565b8060005b838110156148115781516147f8888261479b565b9750614803836147b3565b9250506001810190506147e4565b5085935050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614853816145a5565b82525050565b6000614865838361484a565b60208301905092915050565b6000602082019050919050565b60006148898261481e565b6148938185614829565b935061489e8361483a565b8060005b838110156148cf5781516148b68882614859565b97506148c183614871565b9250506001810190506148a2565b5085935050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61491181614210565b82525050565b60006149238383614908565b60208301905092915050565b6000602082019050919050565b6000614947826148dc565b61495181856148e7565b935061495c836148f8565b8060005b8381101561498d5781516149748882614917565b975061497f8361492f565b925050600181019050614960565b5085935050505092915050565b600060808201905081810360008301526149b481876147c0565b905081810360208301526149c881866147c0565b905081810360408301526149dc818561487e565b905081810360608301526149f0818461493c565b905095945050505050565b600061010082019050614a11600083018b61444f565b614a1e602083018a61444f565b614a2b604083018961444f565b614a38606083018861444f565b614a45608083018761444f565b614a5260a083018661421c565b614a5f60c083018561444f565b614a6c60e083018461421c565b9998505050505050505050565b600060e082019050614a8e600083018a61444f565b614a9b602083018961444f565b614aa8604083018861444f565b614ab5606083018761444f565b614ac2608083018661444f565b614acf60a083018561444f565b614adc60c083018461444f565b98975050505050505050565b614af181614210565b8114614afc57600080fd5b50565b600081359050614b0e81614ae8565b92915050565b600080600060608486031215614b2d57614b2c614181565b5b6000614b3b8682870161425d565b9350506020614b4c8682870161425d565b9250506040614b5d86828701614aff565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614b9c816140de565b82525050565b6000614bae8383614b93565b60208301905092915050565b6000602082019050919050565b6000614bd282614b67565b614bdc8185614b72565b9350614be783614b83565b8060005b83811015614c18578151614bff8882614ba2565b9750614c0a83614bba565b925050600181019050614beb565b5085935050505092915050565b600060e0820190508181036000830152614c3f818a614bc7565b90508181036020830152614c5381896147c0565b90508181036040830152614c6781886147c0565b90508181036060830152614c7b818761487e565b90508181036080830152614c8f818661493c565b9050614c9e60a083018561444f565b614cab60c083018461444f565b98975050505050505050565b60008060408385031215614cce57614ccd614181565b5b6000614cdc858286016143cd565b9250506020614ced85828601614aff565b9150509250929050565b600080fd5b600067ffffffffffffffff821115614d1757614d166145d9565b5b614d20826142ee565b9050602081019050919050565b82818337600083830152505050565b6000614d4f614d4a84614cfc565b614639565b905082815260208101848484011115614d6b57614d6a614cf7565b5b614d76848285614d2d565b509392505050565b600082601f830112614d9357614d926144cc565b5b8135614da3848260208601614d3c565b91505092915050565b60008060008060808587031215614dc657614dc5614181565b5b6000614dd4878288016143cd565b9450506020614de5878288016143cd565b9350506040614df68782880161425d565b925050606085013567ffffffffffffffff811115614e1757614e16614186565b5b614e2387828801614d7e565b91505092959194509250565b6000608082019050614e44600083018761438c565b614e51602083018661438c565b614e5e60408301856145af565b614e6b606083018461421c565b95945050505050565b60008060408385031215614e8b57614e8a614181565b5b6000614e99858286016143cd565b9250506020614eaa858286016143cd565b9150509250929050565b60008060008060808587031215614ece57614ecd614181565b5b6000614edc878288016143cd565b9450506020614eed8782880161425d565b9350506040614efe8782880161425d565b9250506060614f0f87828801614aff565b91505092959194509250565b600060c0820190508181036000830152614f358189614bc7565b90508181036020830152614f4981886147c0565b90508181036040830152614f5d818761487e565b90508181036060830152614f71818661493c565b9050614f80608083018561444f565b614f8d60a083018461444f565b979650505050505050565b6000614fa38261437a565b9050919050565b614fb381614f98565b8114614fbe57600080fd5b50565b600081359050614fd081614faa565b92915050565b600060208284031215614fec57614feb614181565b5b6000614ffa84828501614fc1565b91505092915050565b600061500e826140de565b9150615019836140de565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561504e5761504d614117565b5b828201905092915050565b6000615064826140de565b915061506f836140de565b92508282101561508257615081614117565b5b828203905092915050565b6000615098826140de565b91506150a3836140de565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156150dc576150db614117565b5b828202905092915050565b60006150f2826140de565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561512557615124614117565b5b600182019050919050565b6000606082019050615145600083018661438c565b615152602083018561438c565b61515f604083018461444f565b949350505050565b60008151905061517681614ae8565b92915050565b60006020828403121561519257615191614181565b5b60006151a084828501615167565b91505092915050565b6000815190506151b881614246565b92915050565b6000602082840312156151d4576151d3614181565b5b60006151e2848285016151a9565b91505092915050565b600067ffffffffffffffff821115615206576152056145d9565b5b61520f826142ee565b9050602081019050919050565b600061522f61522a846151eb565b614639565b90508281526020810184848401111561524b5761524a614cf7565b5b6152568482856142bb565b509392505050565b600082601f830112615273576152726144cc565b5b815161528384826020860161521c565b91505092915050565b6000602082840312156152a2576152a1614181565b5b600082015167ffffffffffffffff8111156152c0576152bf614186565b5b6152cc8482850161525e565b91505092915050565b6000819050919050565b60006152ea826152d5565b91506152f5836152d5565b9250817f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038313600083121516156153305761532f614117565b5b817f800000000000000000000000000000000000000000000000000000000000000003831260008312161561536857615367614117565b5b828201905092915050565b6000604082019050615388600083018561438c565b615395602083018461444f565b9392505050565b6000819050919050565b6153b76153b2826140de565b61539c565b82525050565b60008160601b9050919050565b60006153d5826153bd565b9050919050565b60006153e7826153ca565b9050919050565b6153ff6153fa8261437a565b6153dc565b82525050565b600061541182856153a6565b60208201915061542182846153ee565b6014820191508190509392505050565b600061543c826140de565b9150615447836140de565b925082615457576154566140e8565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061549c826152d5565b91506154a7836152d5565b9250827f8000000000000000000000000000000000000000000000000000000000000000018212600084121516156154e2576154e1614117565b5b827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01821360008412161561551a57615519614117565b5b828203905092915050565b60008160011c9050919050565b6000808291508390505b600185111561557c5780860481111561555857615557614117565b5b60018516156155675780820291505b808102905061557585615525565b945061553c565b94509492505050565b6000826155955760019050615651565b816155a35760009050615651565b81600181146155b957600281146155c3576155f2565b6001915050615651565b60ff8411156155d5576155d4614117565b5b8360020a9150848211156155ec576155eb614117565b5b50615651565b5060208310610133831016604e8410600b84101617156156275782820a90508381111561562257615621614117565b5b615651565b6156348484846001615532565b9250905081840481111561564b5761564a614117565b5b81810290505b9392505050565b6000615663826140de565b915061566e836140de565b925061569b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484615585565b905092915050565b6000815190506156b2816143b6565b92915050565b6000602082840312156156ce576156cd614181565b5b60006156dc848285016156a3565b91505092915050565b600081519050919050565b600082825260208201905092915050565b600061570c826156e5565b61571681856156f0565b93506157268185602086016142bb565b61572f816142ee565b840191505092915050565b600060808201905061574f600083018761438c565b61575c602083018661438c565b615769604083018561444f565b818103606083015261577b8184615701565b905095945050505050565b600081519050615795816141b7565b92915050565b6000602082840312156157b1576157b0614181565b5b60006157bf84828501615786565b91505092915050565b6000819050919050565b6157e36157de826145a5565b6157c8565b82525050565b60006157f582876153a6565b60208201915061580582866153ee565b60148201915061581582856157d2565b60208201915061582582846153a6565b60208201915081905095945050505050565b600060408201905061584c60008301856145af565b615859602083018461421c565b9392505050565b600061586b826140de565b9150600082141561587f5761587e614117565b5b600182039050919050565b600061589682856157d2565b6020820191506158a682846157d2565b602082019150819050939250505056fea2646970667358221220a8db13bd32eba361a40cf9b5c8f0cb16a4d5dae4971ae3bbe7f3433e35fae68364736f6c634300080a00330000000000000000000000004cae1f5ee6d3d348a3cf4dfb0753fed08520dd0b000000000000000000000000f59bfeed034092e399cc43ff79edab15e2e1873584d39dee962800a31723bd828a91f84ac58fa4bb1619aa7006d7c3722154593a
Deployed Bytecode
0x6080604052600436106103d25760003560e01c80636bd5ff2f116101fd578063a22cb46511610118578063c3c37e69116100ab578063e4b50cb81161007a578063e4b50cb814610eda578063e985e9c514610f1a578063ee1981d614610f57578063f006379514610f82578063f3cb838514610fc4576103f4565b8063c3c37e6914610df8578063c87b56dd14610e35578063cfc9160814610e72578063e0d4ea3714610e9d576103f4565b8063af556a57116100e7578063af556a5714610d4e578063b720001b14610d79578063b7a8807c14610da4578063b88d4fde14610dcf576103f4565b8063a22cb46514610c92578063a52a138814610cbb578063a8b0898214610ce6578063a9fc2f9114610d11576103f4565b80638da5cb5b116101905780639912682a1161015f5780639912682a14610bb05780639f8de88014610bed578063a0ae52cd14610c18578063a0ced6fd14610c55576103f4565b80638da5cb5b14610b395780638f2aef5b14610b6457806394166be714610b6e57806395d89b4114610b85576103f4565b8063788bff68116101cc578063788bff6814610a8a57806379400dc114610ab55780638145dd7a14610af25780638c3fe89a14610b0e576103f4565b80636bd5ff2f146109b45780636ea0ef1c146109f757806370a0823114610a225780637738fb0c14610a5f576103f4565b806332cb6b0c116102ed57806347535d7b1161028057806359e6d8591161024f57806359e6d859146108e45780635ae6a9de1461090f5780636352211e1461093a5780636adca3a414610977576103f4565b806347535d7b146108225780634e71d92d1461084d5780634f6ccce71461086457806357f6b812146108a1576103f4565b80633ccfd60b116102bc5780633ccfd60b1461078557806342842e0e1461079c5780634586d95f146107c55780634703afbd146107f0576103f4565b806332cb6b0c146106c757806332d5c78c146106f2578063335e07b91461072f57806333e6d8191461075a576103f4565b806318160ddd11610365578063275086861161033457806327508686146106035780632eb4a7ab1461061f5780632f745c591461064a57806332ba0a1e14610687576103f4565b806318160ddd14610547578063189a1860146105725780631f31383d146105af57806323b872dd146105da576103f4565b8063095ea7b3116103a1578063095ea7b3146104c757806311d7efcb146104f05780631249c58b1461050757806313af40351461051e576103f4565b806301ffc9a7146103f9578063059513a61461043657806306fdde031461045f578063081812fc1461048a576103f4565b366103f4576103f266b1a2bc2ec50000346103ed9190614146565b610fed565b005b600080fd5b34801561040557600080fd5b50610420600480360381019061041b91906141e3565b611146565b60405161042d919061422b565b60405180910390f35b34801561044257600080fd5b5061045d60048036038101906104589190614272565b611166565b005b34801561046b57600080fd5b506104746114b2565b6040516104819190614338565b60405180910390f35b34801561049657600080fd5b506104b160048036038101906104ac9190614272565b611552565b6040516104be919061439b565b60405180910390f35b3480156104d357600080fd5b506104ee60048036038101906104e991906143e2565b6115a8565b005b3480156104fc57600080fd5b5061050561169f565b005b34801561051357600080fd5b5061051c611809565b005b34801561052a57600080fd5b5061054560048036038101906105409190614422565b611815565b005b34801561055357600080fd5b5061055c61189b565b604051610569919061445e565b60405180910390f35b34801561057e57600080fd5b5061059960048036038101906105949190614422565b6118a7565b6040516105a6919061445e565b60405180910390f35b3480156105bb57600080fd5b506105c46118f5565b6040516105d1919061445e565b60405180910390f35b3480156105e657600080fd5b5061060160048036038101906105fc9190614479565b61190c565b005b61061d60048036038101906106189190614531565b61191c565b005b34801561062b57600080fd5b50610634611ad1565b60405161064191906145be565b60405180910390f35b34801561065657600080fd5b50610671600480360381019061066c91906143e2565b611add565b60405161067e919061445e565b60405180910390f35b34801561069357600080fd5b506106ae60048036038101906106a99190614717565b611b52565b6040516106be949392919061499a565b60405180910390f35b3480156106d357600080fd5b506106dc611dac565b6040516106e9919061445e565b60405180910390f35b3480156106fe57600080fd5b5061071960048036038101906107149190614422565b611dcc565b604051610726919061445e565b60405180910390f35b34801561073b57600080fd5b50610744611e52565b604051610751919061422b565b60405180910390f35b34801561076657600080fd5b5061076f611e63565b60405161077c919061445e565b60405180910390f35b34801561079157600080fd5b5061079a611e87565b005b3480156107a857600080fd5b506107c360048036038101906107be9190614479565b612021565b005b3480156107d157600080fd5b506107da612041565b6040516107e7919061445e565b60405180910390f35b3480156107fc57600080fd5b50610805612074565b6040516108199897969594939291906149fb565b60405180910390f35b34801561082e57600080fd5b506108376120da565b604051610844919061422b565b60405180910390f35b34801561085957600080fd5b506108626120eb565b005b34801561087057600080fd5b5061088b60048036038101906108869190614272565b6120fd565b604051610898919061445e565b60405180910390f35b3480156108ad57600080fd5b506108c860048036038101906108c39190614422565b61211a565b6040516108db9796959493929190614a79565b60405180910390f35b3480156108f057600080fd5b506108f961217b565b604051610906919061445e565b60405180910390f35b34801561091b57600080fd5b50610924612181565b604051610931919061445e565b60405180910390f35b34801561094657600080fd5b50610961600480360381019061095c9190614272565b612187565b60405161096e919061439b565b60405180910390f35b34801561098357600080fd5b5061099e60048036038101906109999190614272565b6121dd565b6040516109ab919061422b565b60405180910390f35b3480156109c057600080fd5b506109db60048036038101906109d69190614b14565b612235565b6040516109ee9796959493929190614c25565b60405180910390f35b348015610a0357600080fd5b50610a0c612437565b604051610a19919061445e565b60405180910390f35b348015610a2e57600080fd5b50610a496004803603810190610a449190614422565b612443565b604051610a56919061445e565b60405180910390f35b348015610a6b57600080fd5b50610a74612491565b604051610a81919061439b565b60405180910390f35b348015610a9657600080fd5b50610a9f6124bd565b604051610aac919061439b565b60405180910390f35b348015610ac157600080fd5b50610adc6004803603810190610ad79190614422565b6124e9565b604051610ae9919061445e565b60405180910390f35b610b0c6004803603810190610b079190614272565b610fed565b005b348015610b1a57600080fd5b50610b2361250e565b604051610b30919061445e565b60405180910390f35b348015610b4557600080fd5b50610b4e612514565b604051610b5b919061439b565b60405180910390f35b610b6c612540565b005b348015610b7a57600080fd5b50610b8361254c565b005b348015610b9157600080fd5b50610b9a6126d5565b604051610ba79190614338565b60405180910390f35b348015610bbc57600080fd5b50610bd76004803603810190610bd29190614272565b612775565b604051610be4919061445e565b60405180910390f35b348015610bf957600080fd5b50610c026127a8565b604051610c0f919061445e565b60405180910390f35b348015610c2457600080fd5b50610c3f6004803603810190610c3a9190614422565b6127b3565b604051610c4c919061445e565b60405180910390f35b348015610c6157600080fd5b50610c7c6004803603810190610c779190614272565b612801565b604051610c89919061422b565b60405180910390f35b348015610c9e57600080fd5b50610cb96004803603810190610cb49190614cb7565b612844565b005b348015610cc757600080fd5b50610cd0612947565b604051610cdd919061445e565b60405180910390f35b348015610cf257600080fd5b50610cfb612968565b604051610d08919061439b565b60405180910390f35b348015610d1d57600080fd5b50610d386004803603810190610d339190614422565b612a02565b604051610d45919061445e565b60405180910390f35b348015610d5a57600080fd5b50610d63612b0d565b604051610d70919061445e565b60405180910390f35b348015610d8557600080fd5b50610d8e612b19565b604051610d9b919061445e565b60405180910390f35b348015610db057600080fd5b50610db9612b25565b604051610dc6919061445e565b60405180910390f35b348015610ddb57600080fd5b50610df66004803603810190610df19190614dac565b612b31565b005b348015610e0457600080fd5b50610e1f6004803603810190610e1a9190614272565b612c0c565b604051610e2c919061445e565b60405180910390f35b348015610e4157600080fd5b50610e5c6004803603810190610e579190614272565b612c59565b604051610e699190614338565b60405180910390f35b348015610e7e57600080fd5b50610e87612d06565b604051610e94919061445e565b60405180910390f35b348015610ea957600080fd5b50610ec46004803603810190610ebf9190614272565b612d12565b604051610ed191906145be565b60405180910390f35b348015610ee657600080fd5b50610f016004803603810190610efc9190614272565b612d48565b604051610f119493929190614e2f565b60405180910390f35b348015610f2657600080fd5b50610f416004803603810190610f3c9190614e74565b612d81565b604051610f4e919061422b565b60405180910390f35b348015610f6357600080fd5b50610f6c612e1a565b604051610f79919061445e565b60405180910390f35b348015610f8e57600080fd5b50610fa96004803603810190610fa49190614eb4565b612e28565b604051610fbb96959493929190614f1b565b60405180910390f35b348015610fd057600080fd5b50610feb6004803603810190610fe69190614fd6565b61302a565b005b610ff56120da565b610ffe57600080fd5b6000811161100b57600080fd5b611013611e52565b1561105d57611f406107d06110289190615003565b81611031612b19565b61103961189b565b6110439190615059565b61104d9190615003565b111561105857600080fd5b61107f565b6107d081611069612b0d565b6110739190615003565b111561107e57600080fd5b5b600066b1a2bc2ec5000082611094919061508d565b9050803410156110a357600080fd5b81600060020160008282546110b89190615003565b9250508190555060005b828110156110e6576110d3336130b0565b80806110de906150e7565b9150506110c2565b5080341115611142573373ffffffffffffffffffffffffffffffffffffffff166108fc82346111159190615059565b9081150290604051600060405180830381858888f19350505050158015611140573d6000803e3d6000fd5b505b5050565b600f6020528060005260406000206000915054906101000a900460ff1681565b61116e6120da565b61117757600080fd5b60008111801561119b5750619c408161118e612b19565b6111989190615003565b11155b6111a457600080fd5b60006111af82612c0c565b90506000600d0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b815260040161121393929190615130565b6020604051808303816000875af1158015611232573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611256919061517c565b5060006064601983611268919061508d565b6112729190614146565b90506000600e0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd77ac2c826040518263ffffffff1660e01b81526004016112d2919061445e565b600060405180830381600087803b1580156112ec57600080fd5b505af1158015611300573d6000803e3d6000fd5b505050507f5549eba7caee3b4e06c29f7b61d79a88035ed58961e51f4492784c90f934724e81604051611333919061445e565b60405180910390a16000600d0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342966c686000600d0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016113da919061439b565b602060405180830381865afa1580156113f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141b91906151be565b6040518263ffffffff1660e01b8152600401611437919061445e565b600060405180830381600087803b15801561145157600080fd5b505af1158015611465573d6000803e3d6000fd5b50505050826000600301600082825461147e9190615003565b9250508190555060005b838110156114ac57611499336130b0565b80806114a4906150e7565b915050611488565b50505050565b60606000600b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015611524573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061154d919061528c565b905090565b600061155c61189b565b821061156757600080fd5b6000600701600083815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6115b181612187565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115e857600080fd5b816000600701600083815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006116aa33611dcc565b905060008111156118065768010000000000000000816116ca919061508d565b600060080160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600801600082825461171e91906152df565b925050819055506000600d0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1933836040518363ffffffff1660e01b8152600401611785929190615373565b600060405180830381600087803b15801561179f57600080fd5b505af11580156117b3573d6000803e3d6000fd5b505050503373ffffffffffffffffffffffffffffffffffffffff167f4a66b3fae96efca82ee96c0a33e5e1d40647354f59dfb675be3014876761a6f9826040516117fd919061445e565b60405180910390a25b50565b6118136001611166565b565b61181d612514565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461185457600080fd5b806000600c0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060000154905090565b60008060080160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600701549050919050565b6000611907611902612b19565b612775565b905090565b611917838383613554565b505050565b6119246120da565b61192d57600080fd5b611935611e52565b15801561194a5750611f40611948612041565b105b61195357600080fd5b66b1a2bc2ec5000034101561196757600080fd5b611970846121dd565b1561197a57600080fd5b6000848460405160200161198f929190615405565b6040516020818303038152906040528051906020012090506119f2838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505082613dde565b6119fb57600080fd5b600061010086611a0b9190614146565b9050600061010087611a1d9190615431565b9050806001901b6000600901600084815260200190815260200160002054176000600901600084815260200190815260200160002081905550611a5f866130b0565b66b1a2bc2ec50000341115611ac8573373ffffffffffffffffffffffffffffffffffffffff166108fc66b1a2bc2ec5000034611a9b9190615059565b9081150290604051600060405180830381858888f19350505050158015611ac6573d6000803e3d6000fd5b505b50505050505050565b600080600a0154905090565b6000611ae883612443565b8210611af357600080fd5b600060080160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101600083815260200190815260200160002054905092915050565b6060806060806000855190508067ffffffffffffffff811115611b7857611b776145d9565b5b604051908082528060200260200182016040528015611ba65781602001602082028036833780820191505090505b5094508067ffffffffffffffff811115611bc357611bc26145d9565b5b604051908082528060200260200182016040528015611bf15781602001602082028036833780820191505090505b5093508067ffffffffffffffff811115611c0e57611c0d6145d9565b5b604051908082528060200260200182016040528015611c3c5781602001602082028036833780820191505090505b5092508067ffffffffffffffff811115611c5957611c586145d9565b5b604051908082528060200260200182016040528015611c875781602001602082028036833780820191505090505b50915060005b81811015611da357611cb8878281518110611cab57611caa615462565b5b6020026020010151612d48565b898581518110611ccb57611cca615462565b5b60200260200101898681518110611ce557611ce4615462565b5b60200260200101898781518110611cff57611cfe615462565b5b60200260200101898881518110611d1957611d18615462565b5b602002602001018415151515815250848152508473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152508473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250505050508080611d9b906150e7565b915050611c8d565b50509193509193565b619c40611f406107d0611dbf9190615003565b611dc99190615003565b81565b600068010000000000000000600060080160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060080154611e27846118a7565b600060040154611e37919061508d565b611e419190615491565b611e4b9190614146565b9050919050565b6000611e5c612437565b4211905090565b600069021e19e0c9bab2400000611e78612947565b611e82919061508d565b905090565b600030905060008173ffffffffffffffffffffffffffffffffffffffff163111611eb057600080fd5b73faded72464d6e76e37300b467673b36ecc4d2ccf73ffffffffffffffffffffffffffffffffffffffff166108fc60028373ffffffffffffffffffffffffffffffffffffffff1631611f029190614146565b9081150290604051600060405180830381858888f19350505050158015611f2d573d6000803e3d6000fd5b50731cc79d49ce5b9519c912d810e39025dd27d1f03373ffffffffffffffffffffffffffffffffffffffff166108fc600a8373ffffffffffffffffffffffffffffffffffffffff1631611f809190614146565b9081150290604051600060405180830381858888f19350505050158015611fab573d6000803e3d6000fd5b5073a1450e7d547b4748fc94c8c98c9db667ead31cf873ffffffffffffffffffffffffffffffffffffffff166108fc8273ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f1935050505015801561201d573d6000803e3d6000fd5b5050565b61203c83838360405180602001604052806000815250612b31565b505050565b600061204b612b19565b612053612b0d565b61205b61189b565b6120659190615059565b61206f9190615059565b905090565b600080600080600080600080612088612b0d565b612090612041565b612098612b19565b6120a06118f5565b6120a8612437565b6120b0611e52565b6120b8612b25565b6120c06120da565b975097509750975097509750975097509091929394959697565b60006120e4612b25565b4211905090565b6120f361254c565b6120fb61169f565b565b600061210761189b565b821061211257600080fd5b819050919050565b600080600080600080600061212d61189b565b612135612d06565b61213e8a612443565b6121478b6118a7565b6121508c612a02565b6121598d611dcc565b6121628e6127b3565b9650965096509650965096509650919395979092949650565b6107d081565b611f4081565b600061219161189b565b821061219c57600080fd5b6000600701600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600080610100836121ee9190614146565b90506000610100846122009190615431565b905060008060090160008481526020019081526020016000205490506000826001901b90508081831614945050505050919050565b606080606080606060008060008a1161224d57600080fd5b61225561189b565b915060008211156123c05760008a8361226e9190615431565b1461227a57600161227d565b60005b60ff168a8361228c9190614146565b6122969190615003565b90508089106122a457600080fd5b6000898b6122b2919061508d565b90506001826122c19190615059565b8a1480156122db575060008b846122d89190615431565b14155b156122ef578a836122ec9190615431565b9a505b8a67ffffffffffffffff811115612309576123086145d9565b5b6040519080825280602002602001820160405280156123375781602001602082028036833780820191505090505b50975060005b8b8110156123b9576123878a61237557600182848761235c9190615059565b6123669190615059565b6123709190615059565b612382565b81836123819190615003565b5b6120fd565b89828151811061239a57612399615462565b5b60200260200101818152505080806123b1906150e7565b91505061233d565b5050612411565b60009050600067ffffffffffffffff8111156123df576123de6145d9565b5b60405190808252806020026020018201604052801561240d5781602001602082028036833780820191505090505b5096505b61241a87611b52565b809650819750829850839950505050509397509397509397909450565b60008060060154905090565b60008060080160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b600080600d0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080600e0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006124f4826118a7565b6124fd83612443565b6125079190615059565b9050919050565b619c4081565b600080600c0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61254a6001610fed565b565b61255533613eaf565b60008060080160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040154905060008111156126d25760008060080160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401819055506000600d0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1933836040518363ffffffff1660e01b8152600401612651929190615373565b600060405180830381600087803b15801561266b57600080fd5b505af115801561267f573d6000803e3d6000fd5b505050503373ffffffffffffffffffffffffffffffffffffffff167f9f5ab2720702a425bd92b1cc2696aac5b7c29a2d826000cc68d1932c117481ba826040516126c9919061445e565b60405180910390a25b50565b60606000600b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015612747573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190612770919061528c565b905090565b60006404a817c80060036127108461278d9190615003565b6127979190615658565b6127a1919061508d565b9050919050565b66b1a2bc2ec5000081565b60008060080160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601549050919050565b600061280b61189b565b821061281657600080fd5b6000600701600083815260200190815260200160002060030160009054906101000a900460ff169050919050565b80600060080160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161293b919061422b565b60405180910390a35050565b6000612951612d06565b61295961189b565b6129639190615059565b905090565b600080600d0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a8b089826040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129fd91906156b8565b905090565b6000806000905060008060080160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050154905042811015612ab35760008142612a689190615059565b90506283d60060146064612a7c9190615059565b82612a86886127b3565b612a90919061508d565b612a9a919061508d565b612aa49190614146565b83612aaf9190615003565b9250505b81600060080160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040154612b049190615003565b92505050919050565b60008060020154905090565b60008060030154905090565b60008060050154905090565b612b3c848484613554565b6000833b905060008163ffffffff161115612c055763150b7a0260e01b8473ffffffffffffffffffffffffffffffffffffffff1663150b7a02338887876040518563ffffffff1660e01b8152600401612b98949392919061573a565b6020604051808303816000875af1158015612bb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bdb919061579b565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612c0457600080fd5b5b5050505050565b6000805b82811015612c5357612c3381612c24612b19565b612c2e9190615003565b612775565b82612c3e9190615003565b91508080612c4b906150e7565b915050612c10565b50919050565b60606000600b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c87b56dd836040518263ffffffff1660e01b8152600401612cb9919061445e565b600060405180830381865afa158015612cd6573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190612cff919061528c565b9050919050565b60008060010154905090565b6000612d1c61189b565b8210612d2757600080fd5b60006007016000838152602001908152602001600020600201549050919050565b600080600080612d5785612187565b612d6086611552565b612d6987612d12565b612d7288612801565b93509350935093509193509193565b60008060080160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b69021e19e0c9bab240000081565b60608060608060008060008911612e3e57600080fd5b612e478a612443565b91506000821115612fb35760008983612e609190615431565b14612e6c576001612e6f565b60005b60ff168983612e7e9190614146565b612e889190615003565b9050808810612e9657600080fd5b6000888a612ea4919061508d565b9050600182612eb39190615059565b89148015612ecd575060008a84612eca9190615431565b14155b15612ee1578983612ede9190615431565b99505b8967ffffffffffffffff811115612efb57612efa6145d9565b5b604051908082528060200260200182016040528015612f295781602001602082028036833780820191505090505b50965060005b8a811015612fac57612f7a8c8a612f68576001838588612f4f9190615059565b612f599190615059565b612f639190615059565b612f75565b8284612f749190615003565b5b611add565b888281518110612f8d57612f8c615462565b5b6020026020010181815250508080612fa4906150e7565b915050612f2f565b5050613004565b60009050600067ffffffffffffffff811115612fd257612fd16145d9565b5b6040519080825280602002602001820160405280156130005781602001602082028036833780820191505090505b5095505b61300d86611b52565b909192508095508196508297505050509499939850945094509450565b613032612514565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461306957600080fd5b806000600b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146130e857600080fd5b619c40611f406107d06130fb9190615003565b6131059190615003565b61310d61189b565b1061311757600080fd5b600080600001600081548092919061312e906150e7565b91905055905060008060070160008381526020019081526020016000209050828160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600082846001436131a19190615059565b405a6040516020016131b694939291906157e9565b60405160208183030381529060405280519060200120905080826002018190555060328310806131f257506000600a846131f09190615431565b145b8260030160006101000a81548160ff0219169083151502179055508160030160009054906101000a900460ff1615613300576000600101600081548092919061323a906150e7565b9190505550600060080160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206007016000815480929190613295906150e7565b9190505550600060040154600060080160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060080160008282546132f491906152df565b92505081905550613370565b61330984613eaf565b69021e19e0c9bab2400000600060080160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060160008282546133689190615003565b925050819055505b60008060080160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008154809291906133c7906150e7565b9190505590506001816133da9190615003565b600060080160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160008681526020019081526020016000208190555083600060080160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101600083815260200190815260200160002081905550838573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4838573ffffffffffffffffffffffffffffffffffffffff167f91b669be8d0541c7bb3b6a6089960291a5ab13b10abd6ce7b92e69dbc227aa81848660030160009054906101000a900460ff16604051613545929190615837565b60405180910390a35050505050565b600061355f82612187565b9050600061356c83611552565b90508173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146135a657600080fd5b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061360b57508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b8061361c575061361b8233612d81565b5b61362557600080fd5b836000600701600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461376757600080600701600085815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b61377083612801565b156138f257600060080160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060070160008154809291906137cb90615860565b9190505550600060040154600060080160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600801600082825461382a9190615491565b92505081905550600060080160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206007016000815480929190613887906150e7565b9190505550600060040154600060080160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060080160008282546138e691906152df565b925050819055506139d1565b6138fb85613eaf565b69021e19e0c9bab2400000600060080160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601600082825461395a9190615059565b9250508190555061396a84613eaf565b69021e19e0c9bab2400000600060080160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060160008282546139c99190615003565b925050819055505b60006001600060080160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301600086815260200190815260200160002054613a369190615059565b905060008060080160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006001600060080160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154613ad29190615059565b815260200190815260200160002054905080600060080160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101600084815260200190815260200160002081905550600182613b4b9190615003565b600060080160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301600083815260200190815260200160002081905550600060080160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000815480929190613bfb90615860565b9190505550600060080160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160008681526020019081526020016000206000905560008060080160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000815480929190613cb1906150e7565b919050559050600181613cc49190615003565b600060080160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160008881526020019081526020016000208190555085600060080160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101600083815260200190815260200160002081905550858773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050505050505050565b6000613de8611ad1565b821415613df457600080fd5b600082905060005b8451811015613e9b576000858281518110613e1a57613e19615462565b5b60200260200101519050808311613e5b578281604051602001613e3e92919061588a565b604051602081830303815290604052805190602001209250613e87565b8083604051602001613e6e92919061588a565b6040516020818303038152906040528051906020012092505b508080613e93906150e7565b915050613dfc565b50613ea4611ad1565b811491505092915050565b60008060080160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600501549050428110156140da5760008142613f0e9190615059565b905060006201518082613f20866127b3565b613f2a919061508d565b613f349190614146565b905060006064601483613f47919061508d565b613f519190614146565b9050613f5b612d06565b6801000000000000000082613f70919061508d565b613f7a9190614146565b60006004016000828254613f8e9190615003565b925050819055507f4301691b7bae3db84d8f99bfbcc21642c27b642aa84095fca01b743332274c6381604051613fc4919061445e565b60405180910390a142600060080160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206005018190555080826140229190615059565b600060080160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160008282546140769190615003565b925050819055508473ffffffffffffffffffffffffffffffffffffffff167f619caafabdd75649b302ba8419e48cccf64f37f1983ac4727cfb38b57703ffc982846140c19190615059565b6040516140ce919061445e565b60405180910390a25050505b5050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614151826140de565b915061415c836140de565b92508261416c5761416b6140e8565b5b828204905092915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6141c08161418b565b81146141cb57600080fd5b50565b6000813590506141dd816141b7565b92915050565b6000602082840312156141f9576141f8614181565b5b6000614207848285016141ce565b91505092915050565b60008115159050919050565b61422581614210565b82525050565b6000602082019050614240600083018461421c565b92915050565b61424f816140de565b811461425a57600080fd5b50565b60008135905061426c81614246565b92915050565b60006020828403121561428857614287614181565b5b60006142968482850161425d565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156142d95780820151818401526020810190506142be565b838111156142e8576000848401525b50505050565b6000601f19601f8301169050919050565b600061430a8261429f565b61431481856142aa565b93506143248185602086016142bb565b61432d816142ee565b840191505092915050565b6000602082019050818103600083015261435281846142ff565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006143858261435a565b9050919050565b6143958161437a565b82525050565b60006020820190506143b0600083018461438c565b92915050565b6143bf8161437a565b81146143ca57600080fd5b50565b6000813590506143dc816143b6565b92915050565b600080604083850312156143f9576143f8614181565b5b6000614407858286016143cd565b92505060206144188582860161425d565b9150509250929050565b60006020828403121561443857614437614181565b5b6000614446848285016143cd565b91505092915050565b614458816140de565b82525050565b6000602082019050614473600083018461444f565b92915050565b60008060006060848603121561449257614491614181565b5b60006144a0868287016143cd565b93505060206144b1868287016143cd565b92505060406144c28682870161425d565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f8401126144f1576144f06144cc565b5b8235905067ffffffffffffffff81111561450e5761450d6144d1565b5b60208301915083602082028301111561452a576145296144d6565b5b9250929050565b6000806000806060858703121561454b5761454a614181565b5b60006145598782880161425d565b945050602061456a878288016143cd565b935050604085013567ffffffffffffffff81111561458b5761458a614186565b5b614597878288016144db565b925092505092959194509250565b6000819050919050565b6145b8816145a5565b82525050565b60006020820190506145d360008301846145af565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614611826142ee565b810181811067ffffffffffffffff821117156146305761462f6145d9565b5b80604052505050565b6000614643614177565b905061464f8282614608565b919050565b600067ffffffffffffffff82111561466f5761466e6145d9565b5b602082029050602081019050919050565b600061469361468e84614654565b614639565b905080838252602082019050602084028301858111156146b6576146b56144d6565b5b835b818110156146df57806146cb888261425d565b8452602084019350506020810190506146b8565b5050509392505050565b600082601f8301126146fe576146fd6144cc565b5b813561470e848260208601614680565b91505092915050565b60006020828403121561472d5761472c614181565b5b600082013567ffffffffffffffff81111561474b5761474a614186565b5b614757848285016146e9565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6147958161437a565b82525050565b60006147a7838361478c565b60208301905092915050565b6000602082019050919050565b60006147cb82614760565b6147d5818561476b565b93506147e08361477c565b8060005b838110156148115781516147f8888261479b565b9750614803836147b3565b9250506001810190506147e4565b5085935050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614853816145a5565b82525050565b6000614865838361484a565b60208301905092915050565b6000602082019050919050565b60006148898261481e565b6148938185614829565b935061489e8361483a565b8060005b838110156148cf5781516148b68882614859565b97506148c183614871565b9250506001810190506148a2565b5085935050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61491181614210565b82525050565b60006149238383614908565b60208301905092915050565b6000602082019050919050565b6000614947826148dc565b61495181856148e7565b935061495c836148f8565b8060005b8381101561498d5781516149748882614917565b975061497f8361492f565b925050600181019050614960565b5085935050505092915050565b600060808201905081810360008301526149b481876147c0565b905081810360208301526149c881866147c0565b905081810360408301526149dc818561487e565b905081810360608301526149f0818461493c565b905095945050505050565b600061010082019050614a11600083018b61444f565b614a1e602083018a61444f565b614a2b604083018961444f565b614a38606083018861444f565b614a45608083018761444f565b614a5260a083018661421c565b614a5f60c083018561444f565b614a6c60e083018461421c565b9998505050505050505050565b600060e082019050614a8e600083018a61444f565b614a9b602083018961444f565b614aa8604083018861444f565b614ab5606083018761444f565b614ac2608083018661444f565b614acf60a083018561444f565b614adc60c083018461444f565b98975050505050505050565b614af181614210565b8114614afc57600080fd5b50565b600081359050614b0e81614ae8565b92915050565b600080600060608486031215614b2d57614b2c614181565b5b6000614b3b8682870161425d565b9350506020614b4c8682870161425d565b9250506040614b5d86828701614aff565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614b9c816140de565b82525050565b6000614bae8383614b93565b60208301905092915050565b6000602082019050919050565b6000614bd282614b67565b614bdc8185614b72565b9350614be783614b83565b8060005b83811015614c18578151614bff8882614ba2565b9750614c0a83614bba565b925050600181019050614beb565b5085935050505092915050565b600060e0820190508181036000830152614c3f818a614bc7565b90508181036020830152614c5381896147c0565b90508181036040830152614c6781886147c0565b90508181036060830152614c7b818761487e565b90508181036080830152614c8f818661493c565b9050614c9e60a083018561444f565b614cab60c083018461444f565b98975050505050505050565b60008060408385031215614cce57614ccd614181565b5b6000614cdc858286016143cd565b9250506020614ced85828601614aff565b9150509250929050565b600080fd5b600067ffffffffffffffff821115614d1757614d166145d9565b5b614d20826142ee565b9050602081019050919050565b82818337600083830152505050565b6000614d4f614d4a84614cfc565b614639565b905082815260208101848484011115614d6b57614d6a614cf7565b5b614d76848285614d2d565b509392505050565b600082601f830112614d9357614d926144cc565b5b8135614da3848260208601614d3c565b91505092915050565b60008060008060808587031215614dc657614dc5614181565b5b6000614dd4878288016143cd565b9450506020614de5878288016143cd565b9350506040614df68782880161425d565b925050606085013567ffffffffffffffff811115614e1757614e16614186565b5b614e2387828801614d7e565b91505092959194509250565b6000608082019050614e44600083018761438c565b614e51602083018661438c565b614e5e60408301856145af565b614e6b606083018461421c565b95945050505050565b60008060408385031215614e8b57614e8a614181565b5b6000614e99858286016143cd565b9250506020614eaa858286016143cd565b9150509250929050565b60008060008060808587031215614ece57614ecd614181565b5b6000614edc878288016143cd565b9450506020614eed8782880161425d565b9350506040614efe8782880161425d565b9250506060614f0f87828801614aff565b91505092959194509250565b600060c0820190508181036000830152614f358189614bc7565b90508181036020830152614f4981886147c0565b90508181036040830152614f5d818761487e565b90508181036060830152614f71818661493c565b9050614f80608083018561444f565b614f8d60a083018461444f565b979650505050505050565b6000614fa38261437a565b9050919050565b614fb381614f98565b8114614fbe57600080fd5b50565b600081359050614fd081614faa565b92915050565b600060208284031215614fec57614feb614181565b5b6000614ffa84828501614fc1565b91505092915050565b600061500e826140de565b9150615019836140de565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561504e5761504d614117565b5b828201905092915050565b6000615064826140de565b915061506f836140de565b92508282101561508257615081614117565b5b828203905092915050565b6000615098826140de565b91506150a3836140de565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156150dc576150db614117565b5b828202905092915050565b60006150f2826140de565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561512557615124614117565b5b600182019050919050565b6000606082019050615145600083018661438c565b615152602083018561438c565b61515f604083018461444f565b949350505050565b60008151905061517681614ae8565b92915050565b60006020828403121561519257615191614181565b5b60006151a084828501615167565b91505092915050565b6000815190506151b881614246565b92915050565b6000602082840312156151d4576151d3614181565b5b60006151e2848285016151a9565b91505092915050565b600067ffffffffffffffff821115615206576152056145d9565b5b61520f826142ee565b9050602081019050919050565b600061522f61522a846151eb565b614639565b90508281526020810184848401111561524b5761524a614cf7565b5b6152568482856142bb565b509392505050565b600082601f830112615273576152726144cc565b5b815161528384826020860161521c565b91505092915050565b6000602082840312156152a2576152a1614181565b5b600082015167ffffffffffffffff8111156152c0576152bf614186565b5b6152cc8482850161525e565b91505092915050565b6000819050919050565b60006152ea826152d5565b91506152f5836152d5565b9250817f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038313600083121516156153305761532f614117565b5b817f800000000000000000000000000000000000000000000000000000000000000003831260008312161561536857615367614117565b5b828201905092915050565b6000604082019050615388600083018561438c565b615395602083018461444f565b9392505050565b6000819050919050565b6153b76153b2826140de565b61539c565b82525050565b60008160601b9050919050565b60006153d5826153bd565b9050919050565b60006153e7826153ca565b9050919050565b6153ff6153fa8261437a565b6153dc565b82525050565b600061541182856153a6565b60208201915061542182846153ee565b6014820191508190509392505050565b600061543c826140de565b9150615447836140de565b925082615457576154566140e8565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061549c826152d5565b91506154a7836152d5565b9250827f8000000000000000000000000000000000000000000000000000000000000000018212600084121516156154e2576154e1614117565b5b827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01821360008412161561551a57615519614117565b5b828203905092915050565b60008160011c9050919050565b6000808291508390505b600185111561557c5780860481111561555857615557614117565b5b60018516156155675780820291505b808102905061557585615525565b945061553c565b94509492505050565b6000826155955760019050615651565b816155a35760009050615651565b81600181146155b957600281146155c3576155f2565b6001915050615651565b60ff8411156155d5576155d4614117565b5b8360020a9150848211156155ec576155eb614117565b5b50615651565b5060208310610133831016604e8410600b84101617156156275782820a90508381111561562257615621614117565b5b615651565b6156348484846001615532565b9250905081840481111561564b5761564a614117565b5b81810290505b9392505050565b6000615663826140de565b915061566e836140de565b925061569b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484615585565b905092915050565b6000815190506156b2816143b6565b92915050565b6000602082840312156156ce576156cd614181565b5b60006156dc848285016156a3565b91505092915050565b600081519050919050565b600082825260208201905092915050565b600061570c826156e5565b61571681856156f0565b93506157268185602086016142bb565b61572f816142ee565b840191505092915050565b600060808201905061574f600083018761438c565b61575c602083018661438c565b615769604083018561444f565b818103606083015261577b8184615701565b905095945050505050565b600081519050615795816141b7565b92915050565b6000602082840312156157b1576157b0614181565b5b60006157bf84828501615786565b91505092915050565b6000819050919050565b6157e36157de826145a5565b6157c8565b82525050565b60006157f582876153a6565b60208201915061580582866153ee565b60148201915061581582856157d2565b60208201915061582582846153a6565b60208201915081905095945050505050565b600060408201905061584c60008301856145af565b615859602083018461421c565b9392505050565b600061586b826140de565b9150600082141561587f5761587e614117565b5b600182039050919050565b600061589682856157d2565b6020820191506158a682846157d2565b602082019150819050939250505056fea2646970667358221220a8db13bd32eba361a40cf9b5c8f0cb16a4d5dae4971ae3bbe7f3433e35fae68364736f6c634300080a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000004cae1f5ee6d3d348a3cf4dfb0753fed08520dd0b000000000000000000000000f59bfeed034092e399cc43ff79edab15e2e1873584d39dee962800a31723bd828a91f84ac58fa4bb1619aa7006d7c3722154593a
-----Decoded View---------------
Arg [0] : _metadata (address): 0x4Cae1F5ee6D3D348A3cf4Dfb0753fED08520Dd0B
Arg [1] : _krill (address): 0xf59BfEED034092E399Cc43Ff79EdAb15e2e18735
Arg [2] : _merkleRoot (bytes32): 0x84d39dee962800a31723bd828a91f84ac58fa4bb1619aa7006d7c3722154593a
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000004cae1f5ee6d3d348a3cf4dfb0753fed08520dd0b
Arg [1] : 000000000000000000000000f59bfeed034092e399cc43ff79edab15e2e18735
Arg [2] : 84d39dee962800a31723bd828a91f84ac58fa4bb1619aa7006d7c3722154593a
Deployed Bytecode Sourcemap
11328:19869:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15577:50;11693:10;15593:9;:33;;;;:::i;:::-;15577:15;:50::i;:::-;11328:19869;;;;;13278:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17136:575;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19397:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22942:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18391:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18097:288;;;;;;;;;;;;;:::i;:::-;;17085:46;;;;;;;;;;;;;:::i;:::-;;14953:83;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20600:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22556:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21359:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18803:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16328:752;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20032:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23680:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24537:485;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;11529:112;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22240:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20409:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21231:123;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15151:386;;;;;;;;;;;;;:::i;:::-;;18926:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20893:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26879:394;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;20212:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17716:83;;;;;;;;;;;;;:::i;:::-;;23548:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27278:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;11354:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11408:60;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22792:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23995:309;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25027:916;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;20310:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22443:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19721:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19919:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22667:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15711:612;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11472:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20521:74;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15638:68;;;:::i;:::-;;17804:288;;;;;;;;;;;;;:::i;:::-;;19493:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21477:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11645:58;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23864:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23396:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18605:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21124:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19818:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21865:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20691:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20790:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20121:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19064:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21658:202;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19593:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21033:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23247:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24309:223;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;23099:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11707:58;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25948:926;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;15041:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15711:612;15781:8;:6;:8::i;:::-;15773:17;;;;;;15813:1;15803:7;:11;15795:20;;;;;;15824:18;:16;:18::i;:::-;15820:222;;;11464:4;11400;15907:51;;;;:::i;:::-;15896:7;15874:19;:17;:19::i;:::-;15858:13;:11;:13::i;:::-;:35;;;;:::i;:::-;:45;;;;:::i;:::-;:100;;15850:109;;;;;;15820:222;;;11400:4;16005:7;15985:17;:15;:17::i;:::-;:27;;;;:::i;:::-;:50;;15977:59;;;;;;15820:222;16046:13;11693:10;16062:7;:31;;;;:::i;:::-;16046:47;;16119:5;16106:9;:18;;16098:27;;;;;;16154:7;16130:4;:20;;;:31;;;;;;;:::i;:::-;;;;;;;;16171:9;16166:67;16190:7;16186:1;:11;16166:67;;;16210:17;16216:10;16210:5;:17::i;:::-;16199:3;;;;;:::i;:::-;;;;16166:67;;;;16253:5;16241:9;:17;16237:82;;;16274:10;16266:28;;:47;16307:5;16295:9;:17;;;;:::i;:::-;16266:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16237:82;15768:555;15711:612;:::o;13278:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;17136:575::-;17191:8;:6;:8::i;:::-;17183:17;;;;;;17223:1;17213:7;:11;:69;;;;;11520:5;17250:7;17228:19;:17;:19::i;:::-;:29;;;;:::i;:::-;:54;;17213:69;17205:78;;;;;;17288:13;17304:31;17327:7;17304:22;:31::i;:::-;17288:47;;17340:4;:10;;;;;;;;;;;;:23;;;17364:10;17384:4;17391:5;17340:57;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17402:22;17449:3;12256:2;17427:5;:19;;;;:::i;:::-;:25;;;;:::i;:::-;17402:50;;17457:4;:19;;;;;;;;;;;;:28;;;17486:14;17457:44;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17511:29;17525:14;17511:29;;;;;;:::i;:::-;;;;;;;;17545:4;:10;;;;;;;;;;;;:15;;;17561:4;:10;;;;;;;;;;;;:20;;;17590:4;17561:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17545:52;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17628:7;17602:4;:22;;;:33;;;;;;;:::i;:::-;;;;;;;;17645:9;17640:67;17664:7;17660:1;:11;17640:67;;;17684:17;17690:10;17684:5;:17::i;:::-;17673:3;;;;;:::i;:::-;;;;17640:67;;;;17178:533;;17136:575;:::o;19397:91::-;19436:13;19463:4;:13;;;;;;;;;;;;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19456:27;;19397:91;:::o;22942:152::-;23002:7;23035:13;:11;:13::i;:::-;23024:8;:24;23016:33;;;;;;23061:4;:9;;:19;23071:8;23061:19;;;;;;;;;;;:28;;;;;;;;;;;;23054:35;;22942:152;;;:::o;18391:209::-;18481:17;18489:8;18481:7;:17::i;:::-;18467:31;;:10;:31;;;18459:40;;;;;;18535:9;18504:4;:9;;:19;18514:8;18504:19;;;;;;;;;;;:28;;;:40;;;;;;;;;;;;;;;;;;18586:8;18575:9;18554:41;;18563:10;18554:41;;;;;;;;;;;;18391:209;;:::o;18097:288::-;18138:16;18157:26;18172:10;18157:14;:26::i;:::-;18138:45;;18203:1;18192:8;:12;18188:193;;;12086:5;18258:8;:23;;;;:::i;:::-;18212:4;:10;;:22;18223:10;18212:22;;;;;;;;;;;;;;;:35;;;:70;;;;;;;:::i;:::-;;;;;;;;18288:4;:10;;;;;;;;;;;;:15;;;18304:10;18316:8;18288:37;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18354:10;18336:39;;;18366:8;18336:39;;;;;;:::i;:::-;;;;;;;;18188:193;18133:252;18097:288::o;17085:46::-;17115:11;17124:1;17115:8;:11::i;:::-;17085:46::o;14953:83::-;14007:7;:5;:7::i;:::-;13993:21;;:10;:21;;;13985:30;;;;;;15025:6:::1;15012:4;:10;;;:19;;;;;;;;;;;;;;;;;;14953:83:::0;:::o;20600:86::-;20644:7;20665:4;:16;;;20658:23;;20600:86;:::o;22556:106::-;22611:7;22632:4;:10;;:18;22643:6;22632:18;;;;;;;;;;;;;;;:25;;;22625:32;;22556:106;;;:::o;21359:113::-;21412:7;21433:34;21447:19;:17;:19::i;:::-;21433:13;:34::i;:::-;21426:41;;21359:113;:::o;18803:118::-;18885:31;18895:5;18902:3;18907:8;18885:9;:31::i;:::-;18803:118;;;:::o;16328:752::-;16448:8;:6;:8::i;:::-;16440:17;;;;;;16471:18;:16;:18::i;:::-;16470:19;:78;;;;;11464:4;16493:23;:21;:23::i;:::-;:55;16470:78;16462:87;;;;;;11693:10;16562:9;:34;;16554:43;;;;;;16611:20;16624:6;16611:12;:20::i;:::-;16610:21;16602:30;;;;;;16637:13;16680:6;16688:8;16663:34;;;;;;;;;:::i;:::-;;;;;;;;;;;;;16653:45;;;;;;16637:61;;16711:28;16719:12;;16711:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16733:5;16711:7;:28::i;:::-;16703:37;;;;;;16745:25;16782:3;16773:6;:12;;;;:::i;:::-;16745:40;;16790:24;16826:3;16817:6;:12;;;;:::i;:::-;16790:39;;16920:16;16915:1;:21;;16874:4;:18;;:37;16893:17;16874:37;;;;;;;;;;;;:63;16834:4;:18;;:37;16853:17;16834:37;;;;;;;;;;;:103;;;;16942:15;16948:8;16942:5;:15::i;:::-;11693:10;16966:9;:33;16962:114;;;17015:10;17007:28;;:63;11693:10;17036:9;:33;;;;:::i;:::-;17007:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16962:114;16435:645;;;16328:752;;;;:::o;20032:84::-;20075:7;20096:4;:15;;;20089:22;;20032:84;:::o;23680:179::-;23762:7;23793:17;23803:6;23793:9;:17::i;:::-;23784:6;:26;23776:35;;;;;;23823:4;:10;;:18;23834:6;23823:18;;;;;;;;;;;;;;;:23;;:31;23847:6;23823:31;;;;;;;;;;;;23816:38;;23680:179;;;;:::o;24537:485::-;24605:23;24630:26;24658:22;24682;24711:15;24729:9;:16;24711:34;;24773:7;24759:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24750:31;;24812:7;24798:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24786:34;;24847:7;24833:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24825:30;;24882:7;24871:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24860:30;;24900:9;24895:123;24919:7;24915:1;:11;24895:123;;;24990:22;24999:9;25009:1;24999:12;;;;;;;;:::i;:::-;;;;;;;;24990:8;:22::i;:::-;24940:6;24947:1;24940:9;;;;;;;;:::i;:::-;;;;;;;24951;24961:1;24951:12;;;;;;;;:::i;:::-;;;;;;;24965:5;24971:1;24965:8;;;;;;;;:::i;:::-;;;;;;;24975;24984:1;24975:11;;;;;;;;:::i;:::-;;;;;;;24939:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24928:3;;;;;:::i;:::-;;;;24895:123;;;;24706:316;24537:485;;;;;:::o;11529:112::-;11520:5;11464:4;11400;11566:51;;;;:::i;:::-;:75;;;;:::i;:::-;11529:112;:::o;22240:198::-;22301:7;12086:5;22386:4;:10;;:18;22397:6;22386:18;;;;;;;;;;;;;;;:31;;;22366:16;22375:6;22366:8;:16::i;:::-;22337:4;:26;;;:45;;;;:::i;:::-;22330:87;;;;:::i;:::-;22322:111;;;;:::i;:::-;22315:118;;22240:198;;;:::o;20409:107::-;20458:4;20494:17;:15;:17::i;:::-;20476:15;:35;20469:42;;20409:107;:::o;21231:123::-;21282:7;11761:4;21303:16;:14;:16::i;:::-;:46;;;;:::i;:::-;21296:53;;21231:123;:::o;15151:386::-;15185:13;15209:4;15185:29;;15243:1;15227:5;:13;;;:17;15219:26;;;;;;15258:42;15250:60;;:79;15327:1;15311:5;:13;;;:17;;;;:::i;:::-;15250:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15355:42;15347:60;;:80;15424:2;15408:5;:13;;;:18;;;;:::i;:::-;15347:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15452:42;15444:60;;:75;15505:5;:13;;;15444:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15180:357;15151:386::o;18926:133::-;19012:42;19029:5;19036:3;19041:8;19012:42;;;;;;;;;;;;:16;:42::i;:::-;18926:133;;;:::o;20893:135::-;20947:7;21004:19;:17;:19::i;:::-;20984:17;:15;:17::i;:::-;20968:13;:11;:13::i;:::-;:33;;;;:::i;:::-;:55;;;;:::i;:::-;20961:62;;20893:135;:::o;26879:394::-;26928:17;26947:23;26972:19;26993:24;27019:27;27048:24;27074:16;27092:9;27116:17;:15;:17::i;:::-;27135:23;:21;:23::i;:::-;27160:19;:17;:19::i;:::-;27181:22;:20;:22::i;:::-;27205:17;:15;:17::i;:::-;27224:18;:16;:18::i;:::-;27244:13;:11;:13::i;:::-;27259:8;:6;:8::i;:::-;27108:160;;;;;;;;;;;;;;;;26879:394;;;;;;;;:::o;20212:93::-;20251:4;20287:13;:11;:13::i;:::-;20269:15;:31;20262:38;;20212:93;:::o;17716:83::-;17747:23;:21;:23::i;:::-;17775:19;:17;:19::i;:::-;17716:83::o;23548:127::-;23607:7;23638:13;:11;:13::i;:::-;23629:6;:22;23621:31;;;;;;23664:6;23657:13;;23548:127;;;:::o;27278:379::-;27337:14;27353;27369:20;27391:19;27412:29;27443:25;27470:23;27508:13;:11;:13::i;:::-;27523;:11;:13::i;:::-;27538:17;27548:6;27538:9;:17::i;:::-;27557:16;27566:6;27557:8;:16::i;:::-;27575:26;27594:6;27575:18;:26::i;:::-;27603:22;27618:6;27603:14;:22::i;:::-;27627:24;27644:6;27627:16;:24::i;:::-;27500:152;;;;;;;;;;;;;;27278:379;;;;;;;;;:::o;11354:50::-;11400:4;11354:50;:::o;11408:60::-;11464:4;11408:60;:::o;22792:145::-;22848:7;22881:13;:11;:13::i;:::-;22870:8;:24;22862:33;;;;;;22907:4;:9;;:19;22917:8;22907:19;;;;;;;;;;;:25;;;;;;;;;;;;22900:32;;22792:145;;;:::o;23995:309::-;24054:4;24065:25;24102:3;24093:6;:12;;;;:::i;:::-;24065:40;;24110:24;24146:3;24137:6;:12;;;;:::i;:::-;24110:39;;24154:20;24177:4;:18;;:37;24196:17;24177:37;;;;;;;;;;;;24154:60;;24219:13;24241:16;24236:1;:21;;24219:39;;24294:5;24285;24270:12;:20;:29;24263:36;;;;;;23995:309;;;:::o;25027:916::-;25118:25;25145:23;25170:26;25198:22;25222;25246:19;25267:18;25309:1;25300:6;:10;25292:19;;;;;;25330:13;:11;:13::i;:::-;25316:27;;25368:1;25354:11;:15;25350:526;;;25440:1;25430:6;25416:11;:20;;;;:::i;:::-;:25;:33;;25448:1;25416:33;;;25444:1;25416:33;25390:60;;25405:6;25391:11;:20;;;;:::i;:::-;25390:60;;;;:::i;:::-;25377:73;;25472:10;25464:5;:18;25456:27;;;;;;25491:15;25518:5;25509:6;:14;;;;:::i;:::-;25491:32;;25555:1;25542:10;:14;;;;:::i;:::-;25533:5;:23;:52;;;;;25584:1;25574:6;25560:11;:20;;;;:::i;:::-;:25;;25533:52;25529:101;;;25617:6;25603:11;:20;;;;:::i;:::-;25594:29;;25529:101;25662:6;25648:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25637:32;;25680:9;25675:131;25699:6;25695:1;:10;25675:131;;;25733:66;25746:6;:52;;25797:1;25793;25783:7;25769:11;:21;;;;:::i;:::-;:25;;;;:::i;:::-;:29;;;;:::i;:::-;25746:52;;;25765:1;25755:7;:11;;;;:::i;:::-;25746:52;25733:12;:66::i;:::-;25719:8;25728:1;25719:11;;;;;;;;:::i;:::-;;;;;;;:80;;;;;25707:3;;;;;:::i;:::-;;;;25675:131;;;;25371:440;25350:526;;;25836:1;25823:14;;25868:1;25854:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25843:27;;25350:526;25919:19;25929:8;25919:9;:19::i;:::-;25880:58;;;;;;;;;;;;;;;;25027:916;;;;;;;;;;;:::o;20310:94::-;20358:7;20379:4;:20;;;20372:27;;20310:94;:::o;22443:108::-;22499:7;22520:4;:10;;:18;22531:6;22520:18;;;;;;;;;;;;;;;:26;;;22513:33;;22443:108;;;:::o;19721:92::-;19768:7;19797:4;:10;;;;;;;;;;;;19782:26;;19721:92;:::o;19919:108::-;19973:7;20002:4;:19;;;;;;;;;;;;19987:35;;19919:108;:::o;22667:120::-;22725:7;22766:16;22775:6;22766:8;:16::i;:::-;22746:17;22756:6;22746:9;:17::i;:::-;:36;;;;:::i;:::-;22739:43;;22667:120;;;:::o;11472:53::-;11520:5;11472:53;:::o;20521:74::-;20559:7;20580:4;:10;;;;;;;;;;;;20573:17;;20521:74;:::o;15638:68::-;15683:18;15699:1;15683:15;:18::i;:::-;15638:68::o;17804:288::-;17849:19;17857:10;17849:7;:19::i;:::-;17873:16;17892:4;:10;;:22;17903:10;17892:22;;;;;;;;;;;;;;;:30;;;17873:49;;17942:1;17931:8;:12;17927:161;;;17984:1;17951:4;:10;;:22;17962:10;17951:22;;;;;;;;;;;;;;;:30;;:34;;;;17991:4;:10;;;;;;;;;;;;:15;;;18007:10;18019:8;17991:37;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18061:10;18039:43;;;18073:8;18039:43;;;;;;:::i;:::-;;;;;;;;17927:161;17844:248;17804:288::o;19493:95::-;19534:13;19561:4;:13;;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19554:29;;19493:95;:::o;21477:176::-;21549:7;11927:4;11877:1;11823:3;21571:18;:35;;;;:::i;:::-;21570:58;;;;:::i;:::-;:78;;;;:::i;:::-;21563:85;;21477:176;;;:::o;11645:58::-;11693:10;11645:58;:::o;23864:126::-;23927:14;23955:4;:10;;:18;23966:6;23955:18;;;;;;;;;;;;;;;:30;;;23948:37;;23864:126;;;:::o;23396:147::-;23455:4;23485:13;:11;:13::i;:::-;23474:8;:24;23466:33;;;;;;23511:4;:9;;:19;23521:8;23511:19;;;;;;;;;;;:27;;;;;;;;;;;;23504:34;;23396:147;;;:::o;18605:193::-;18726:9;18681:4;:10;;:22;18692:10;18681:22;;;;;;;;;;;;;;;:31;;:42;18713:9;18681:42;;;;;;;;;;;;;;;;:54;;;;;;;;;;;;;;;;;;18772:9;18745:48;;18760:10;18745:48;;;18783:9;18745:48;;;;;;:::i;:::-;;;;;;;;18605:193;;:::o;21124:102::-;21171:7;21208:13;:11;:13::i;:::-;21192;:11;:13::i;:::-;:29;;;;:::i;:::-;21185:36;;21124:102;:::o;19818:96::-;19864:7;19885:4;:10;;;;;;;;;;;;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19878:31;;19818:96;:::o;21865:369::-;21930:7;21944:16;21963:1;21944:20;;21969:13;21985:4;:10;;:18;21996:6;21985:18;;;;;;;;;;;;;;;:30;;;21969:46;;22032:15;22024:5;:23;22020:161;;;22055:13;22089:5;22071:15;:23;;;;:::i;:::-;22055:39;;22168:7;12191:2;22148:3;:16;;;;:::i;:::-;22139:5;22112:24;22129:6;22112:16;:24::i;:::-;:32;;;;:::i;:::-;:53;;;;:::i;:::-;:63;;;;:::i;:::-;22100:75;;;;;:::i;:::-;;;22049:132;22020:161;22221:8;22192:4;:10;;:18;22203:6;22192:18;;;;;;;;;;;;;;;:26;;;:37;;;;:::i;:::-;22185:44;;;;21865:369;;;:::o;20691:94::-;20739:7;20760:4;:20;;;20753:27;;20691:94;:::o;20790:98::-;20840:7;20861:4;:22;;;20854:29;;20790:98;:::o;20121:86::-;20165:7;20186:4;:16;;;20179:23;;20121:86;:::o;19064:326::-;19168:31;19178:5;19185:3;19190:8;19168:9;:31::i;:::-;19204:12;19257:3;19245:16;19236:25;;19282:1;19274:5;:9;;;19270:116;;;19369:10;19299:80;;19308:3;19299:30;;;19330:10;19342:5;19349:8;19359:5;19299:66;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:80;;;;19291:89;;;;;;19270:116;19163:227;19064:326;;;;:::o;21658:202::-;21728:12;21765:9;21760:96;21784:7;21780:1;:11;21760:96;;;21812:38;21848:1;21826:19;:17;:19::i;:::-;:23;;;;:::i;:::-;21812:13;:38::i;:::-;21804:46;;;;;:::i;:::-;;;21793:3;;;;;:::i;:::-;;;;21760:96;;;;21658:202;;;:::o;19593:123::-;19652:13;19679:4;:13;;;;;;;;;;;;:22;;;19702:8;19679:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19672:39;;19593:123;;;:::o;21033:86::-;21077:7;21098:4;:16;;;21091:23;;21033:86;:::o;23247:144::-;23303:7;23336:13;:11;:13::i;:::-;23325:8;:24;23317:33;;;;;;23362:4;:9;;:19;23372:8;23362:19;;;;;;;;;;;:24;;;23355:31;;23247:144;;;:::o;24309:223::-;24366:18;24386:16;24404:12;24418;24445:17;24453:8;24445:7;:17::i;:::-;24464:21;24476:8;24464:11;:21::i;:::-;24487:17;24495:8;24487:7;:17::i;:::-;24506:20;24517:8;24506:10;:20::i;:::-;24437:90;;;;;;;;24309:223;;;;;:::o;23099:143::-;23181:4;23199;:10;;:18;23210:6;23199:18;;;;;;;;;;;;;;;:27;;:38;23227:9;23199:38;;;;;;;;;;;;;;;;;;;;;;;;;23192:45;;23099:143;;;;:::o;11707:58::-;11761:4;11707:58;:::o;25948:926::-;26060:25;26087:26;26115:22;26139;26163:19;26184:18;26226:1;26217:6;:10;26209:19;;;;;;26247:17;26257:6;26247:9;:17::i;:::-;26233:31;;26289:1;26275:11;:15;26271:541;;;26361:1;26351:6;26337:11;:20;;;;:::i;:::-;:25;:33;;26369:1;26337:33;;;26365:1;26337:33;26311:60;;26326:6;26312:11;:20;;;;:::i;:::-;26311:60;;;;:::i;:::-;26298:73;;26393:10;26385:5;:18;26377:27;;;;;;26412:15;26439:5;26430:6;:14;;;;:::i;:::-;26412:32;;26476:1;26463:10;:14;;;;:::i;:::-;26454:5;:23;:52;;;;;26505:1;26495:6;26481:11;:20;;;;:::i;:::-;:25;;26454:52;26450:101;;;26538:6;26524:11;:20;;;;:::i;:::-;26515:29;;26450:101;26583:6;26569:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26558:32;;26601:9;26596:146;26620:6;26616:1;:10;26596:146;;;26654:81;26674:6;26682;:52;;26733:1;26729;26719:7;26705:11;:21;;;;:::i;:::-;:25;;;;:::i;:::-;:29;;;;:::i;:::-;26682:52;;;26701:1;26691:7;:11;;;;:::i;:::-;26682:52;26654:19;:81::i;:::-;26640:8;26649:1;26640:11;;;;;;;;:::i;:::-;;;;;;;:95;;;;;26628:3;;;;;:::i;:::-;;;;26596:146;;;;26292:455;26271:541;;;26772:1;26759:14;;26804:1;26790:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26779:27;;26271:541;26850:19;26860:8;26850:9;:19::i;:::-;26816:53;;;;;;;;;;;;;;;;25948:926;;;;;;;;;;;:::o;15041:105::-;14007:7;:5;:7::i;:::-;13993:21;;:10;:21;;;13985:30;;;;;;15132:9:::1;15116:4;:13;;;:25;;;;;;;;;;;;;;;;;;15041:105:::0;:::o;27664:1017::-;27734:9;27720:23;;:10;:23;;;27712:32;;;;;;11520:5;11464:4;11400;11566:51;;;;:::i;:::-;:75;;;;:::i;:::-;27757:13;:11;:13::i;:::-;:26;27749:35;;;;;;27789:16;27808:4;:16;;;:18;;;;;;;;;:::i;:::-;;;;;27789:37;;27831:23;27857:4;:9;;:19;27867:8;27857:19;;;;;;;;;;;27831:45;;27899:9;27881;:15;;;:27;;;;;;;;;;;;;;;;;;27913:13;27956:8;27966:9;28002:1;27987:12;:16;;;;:::i;:::-;27977:27;28006:9;27939:77;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;27929:88;;;;;;27913:104;;28039:5;28022:9;:14;;:22;;;;12324:2;28069:8;:21;:54;;;;28122:1;12136:2;28094:8;:24;;;;:::i;:::-;:29;28069:54;28049:9;:17;;;:74;;;;;;;;;;;;;;;;;;28134:9;:17;;;;;;;;;;;;28130:273;;;28159:4;:16;;;:18;;;;;;;;;:::i;:::-;;;;;;28183:4;:10;;:21;28194:9;28183:21;;;;;;;;;;;;;;;:28;;;:30;;;;;;;;;:::i;:::-;;;;;;28264:4;:26;;;28219:4;:10;;:21;28230:9;28219:21;;;;;;;;;;;;;;;:34;;;:72;;;;;;;:::i;:::-;;;;;;;;28130:273;;;28309:18;28317:9;28309:7;:18::i;:::-;11761:4;28333;:10;;:21;28344:9;28333:21;;;;;;;;;;;;;;;:33;;;:64;;;;;;;:::i;:::-;;;;;;;;28130:273;28407:14;28424:4;:10;;:21;28435:9;28424:21;;;;;;;;;;;;;;;:29;;;:31;;;;;;;;;:::i;:::-;;;;;28407:48;;28511:1;28502:6;:10;;;;:::i;:::-;28460:4;:10;;:21;28471:9;28460:21;;;;;;;;;;;;;;;:29;;:39;28490:8;28460:39;;;;;;;;;;;:52;;;;28554:8;28517:4;:10;;:21;28528:9;28517:21;;;;;;;;;;;;;;;:26;;:34;28544:6;28517:34;;;;;;;;;;;:45;;;;28606:8;28595:9;28572:43;;28589:3;28572:43;;;;;;;;;;;;28641:8;28630:9;28625:51;;;28651:5;28658:9;:17;;;;;;;;;;;;28625:51;;;;;;;:::i;:::-;;;;;;;;27707:974;;;;27664:1017;:::o;28687:1408::-;28766:14;28783:17;28791:8;28783:7;:17::i;:::-;28766:34;;28805:17;28825:21;28837:8;28825:11;:21::i;:::-;28805:41;;28868:6;28859:15;;:5;:15;;;28851:24;;;;;;28902:6;28888:20;;:10;:20;;;:47;;;;28926:9;28912:23;;:10;:23;;;28888:47;:87;;;;28939:36;28956:6;28964:10;28939:16;:36::i;:::-;28888:87;28880:96;;;;;;29011:3;28983:4;:9;;:19;28993:8;28983:19;;;;;;;;;;;:25;;;:31;;;;;;;;;;;;;;;;;;29044:3;29023:25;;:9;:25;;;29019:143;;29095:3;29056:4;:9;;:19;29066:8;29056:19;;;;;;;;;;;:28;;;:43;;;;;;;;;;;;;;;;;;29147:8;29141:3;29110:46;;29127:3;29110:46;;;;;;;;;;;;29019:143;29172:20;29183:8;29172:10;:20::i;:::-;29168:420;;;29200:4;:10;;:17;29211:5;29200:17;;;;;;;;;;;;;;;:24;;;:26;;;;;;;;;:::i;:::-;;;;;;29273:4;:26;;;29232:4;:10;;:17;29243:5;29232:17;;;;;;;;;;;;;;;:30;;;:68;;;;;;;:::i;:::-;;;;;;;;29306:4;:10;;:15;29317:3;29306:15;;;;;;;;;;;;;;;:22;;;:24;;;;;;;;;:::i;:::-;;;;;;29375:4;:26;;;29336:4;:10;;:15;29347:3;29336:15;;;;;;;;;;;;;;;:28;;;:66;;;;;;;:::i;:::-;;;;;;;;29168:420;;;29420:14;29428:5;29420:7;:14::i;:::-;11761:4;29440;:10;;:17;29451:5;29440:17;;;;;;;;;;;;;;;:29;;;:60;;;;;;;:::i;:::-;;;;;;;;29506:12;29514:3;29506:7;:12::i;:::-;11761:4;29524;:10;;:15;29535:3;29524:15;;;;;;;;;;;;;;;:27;;;:58;;;;;;;:::i;:::-;;;;;;;;29168:420;29594:14;29649:1;29611:4;:10;;:17;29622:5;29611:17;;;;;;;;;;;;;;;:25;;:35;29637:8;29611:35;;;;;;;;;;;;:39;;;;:::i;:::-;29594:56;;29655:14;29672:4;:10;;:17;29683:5;29672:17;;;;;;;;;;;;;;;:22;;:53;29723:1;29695:4;:10;;:17;29706:5;29695:17;;;;;;;;;;;;;;;:25;;;:29;;;;:::i;:::-;29672:53;;;;;;;;;;;;29655:70;;29763:6;29730:4;:10;;:17;29741:5;29730:17;;;;;;;;;;;;;;;:22;;:30;29753:6;29730:30;;;;;;;;;;;:39;;;;29819:1;29810:6;:10;;;;:::i;:::-;29774:4;:10;;:17;29785:5;29774:17;;;;;;;;;;;;;;;:25;;:33;29800:6;29774:33;;;;;;;;;;;:46;;;;29825:4;:10;;:17;29836:5;29825:17;;;;;;;;;;;;;;;:25;;;:27;;;;;;;;;:::i;:::-;;;;;;29864:4;:10;;:17;29875:5;29864:17;;;;;;;;;;;;;;;:25;;:35;29890:8;29864:35;;;;;;;;;;;29857:42;;;29904:17;29924:4;:10;;:15;29935:3;29924:15;;;;;;;;;;;;;;;:23;;;:25;;;;;;;;;:::i;:::-;;;;;29904:45;;30002:1;29990:9;:13;;;;:::i;:::-;29954:4;:10;;:15;29965:3;29954:15;;;;;;;;;;;;;;;:23;;:33;29978:8;29954:33;;;;;;;;;;;:49;;;;30042:8;30008:4;:10;;:15;30019:3;30008:15;;;;;;;;;;;;;;;:20;;:31;30029:9;30008:31;;;;;;;;;;;:42;;;;30081:8;30076:3;30060:30;;30069:5;30060:30;;;;;;;;;;;;28761:1334;;;;;28687:1408;;;:::o;30679:515::-;30759:4;30787:12;:10;:12::i;:::-;30778:5;:21;;30770:30;;;;;;30805:21;30829:5;30805:29;;30844:9;30839:310;30863:6;:13;30859:1;:17;30839:310;;;30889:21;30913:6;30920:1;30913:9;;;;;;;;:::i;:::-;;;;;;;;30889:33;;30949:13;30932;:30;30928:216;;31014:13;31029;30997:46;;;;;;;;;:::i;:::-;;;;;;;;;;;;;30987:57;;;;;;30971:73;;30928:216;;;31107:13;31122;31090:46;;;;;;;;;:::i;:::-;;;;;;;;;;;;;31080:57;;;;;;31064:73;;30928:216;30883:266;30878:3;;;;;:::i;:::-;;;;30839:310;;;;31177:12;:10;:12::i;:::-;31160:13;:29;31153:36;;;30679:515;;;;:::o;30100:572::-;30147:13;30163:4;:10;;:18;30174:6;30163:18;;;;;;;;;;;;;;;:30;;;30147:46;;30210:15;30202:5;:23;30198:470;;;30233:13;30267:5;30249:15;:23;;;;:::i;:::-;30233:39;;30278:16;30332:5;30324;30297:24;30314:6;30297:16;:24::i;:::-;:32;;;;:::i;:::-;:40;;;;:::i;:::-;30278:59;;30343:18;30388:3;12191:2;30364:8;:21;;;;:::i;:::-;:27;;;;:::i;:::-;30343:48;;30455:13;:11;:13::i;:::-;12086:5;30427:10;:25;;;;:::i;:::-;:41;;;;:::i;:::-;30397:4;:26;;;:71;;;;;;;:::i;:::-;;;;;;;;30479:24;30492:10;30479:24;;;;;;:::i;:::-;;;;;;;;30542:15;30509:4;:10;;:18;30520:6;30509:18;;;;;;;;;;;;;;;:30;;:48;;;;30604:10;30593:8;:21;;;;:::i;:::-;30563:4;:10;;:18;30574:6;30563:18;;;;;;;;;;;;;;;:26;;;:51;;;;;;;:::i;:::-;;;;;;;;30632:6;30625:37;;;30651:10;30640:8;:21;;;;:::i;:::-;30625:37;;;;;;:::i;:::-;;;;;;;;30227:441;;;30198:470;30142:530;30100:572;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:180::-;138:77;135:1;128:88;235:4;232:1;225:15;259:4;256:1;249:15;276:180;324:77;321:1;314:88;421:4;418:1;411:15;445:4;442:1;435:15;462:185;502:1;519:20;537:1;519:20;:::i;:::-;514:25;;553:20;571:1;553:20;:::i;:::-;548:25;;592:1;582:35;;597:18;;:::i;:::-;582:35;639:1;636;632:9;627:14;;462:185;;;;:::o;653:75::-;686:6;719:2;713:9;703:19;;653:75;:::o;734:117::-;843:1;840;833:12;857:117;966:1;963;956:12;980:149;1016:7;1056:66;1049:5;1045:78;1034:89;;980:149;;;:::o;1135:120::-;1207:23;1224:5;1207:23;:::i;:::-;1200:5;1197:34;1187:62;;1245:1;1242;1235:12;1187:62;1135:120;:::o;1261:137::-;1306:5;1344:6;1331:20;1322:29;;1360:32;1386:5;1360:32;:::i;:::-;1261:137;;;;:::o;1404:327::-;1462:6;1511:2;1499:9;1490:7;1486:23;1482:32;1479:119;;;1517:79;;:::i;:::-;1479:119;1637:1;1662:52;1706:7;1697:6;1686:9;1682:22;1662:52;:::i;:::-;1652:62;;1608:116;1404:327;;;;:::o;1737:90::-;1771:7;1814:5;1807:13;1800:21;1789:32;;1737:90;;;:::o;1833:109::-;1914:21;1929:5;1914:21;:::i;:::-;1909:3;1902:34;1833:109;;:::o;1948:210::-;2035:4;2073:2;2062:9;2058:18;2050:26;;2086:65;2148:1;2137:9;2133:17;2124:6;2086:65;:::i;:::-;1948:210;;;;:::o;2164:122::-;2237:24;2255:5;2237:24;:::i;:::-;2230:5;2227:35;2217:63;;2276:1;2273;2266:12;2217:63;2164:122;:::o;2292:139::-;2338:5;2376:6;2363:20;2354:29;;2392:33;2419:5;2392:33;:::i;:::-;2292:139;;;;:::o;2437:329::-;2496:6;2545:2;2533:9;2524:7;2520:23;2516:32;2513:119;;;2551:79;;:::i;:::-;2513:119;2671:1;2696:53;2741:7;2732:6;2721:9;2717:22;2696:53;:::i;:::-;2686:63;;2642:117;2437:329;;;;:::o;2772:99::-;2824:6;2858:5;2852:12;2842:22;;2772:99;;;:::o;2877:169::-;2961:11;2995:6;2990:3;2983:19;3035:4;3030:3;3026:14;3011:29;;2877:169;;;;:::o;3052:307::-;3120:1;3130:113;3144:6;3141:1;3138:13;3130:113;;;3229:1;3224:3;3220:11;3214:18;3210:1;3205:3;3201:11;3194:39;3166:2;3163:1;3159:10;3154:15;;3130:113;;;3261:6;3258:1;3255:13;3252:101;;;3341:1;3332:6;3327:3;3323:16;3316:27;3252:101;3101:258;3052:307;;;:::o;3365:102::-;3406:6;3457:2;3453:7;3448:2;3441:5;3437:14;3433:28;3423:38;;3365:102;;;:::o;3473:364::-;3561:3;3589:39;3622:5;3589:39;:::i;:::-;3644:71;3708:6;3703:3;3644:71;:::i;:::-;3637:78;;3724:52;3769:6;3764:3;3757:4;3750:5;3746:16;3724:52;:::i;:::-;3801:29;3823:6;3801:29;:::i;:::-;3796:3;3792:39;3785:46;;3565:272;3473:364;;;;:::o;3843:313::-;3956:4;3994:2;3983:9;3979:18;3971:26;;4043:9;4037:4;4033:20;4029:1;4018:9;4014:17;4007:47;4071:78;4144:4;4135:6;4071:78;:::i;:::-;4063:86;;3843:313;;;;:::o;4162:126::-;4199:7;4239:42;4232:5;4228:54;4217:65;;4162:126;;;:::o;4294:96::-;4331:7;4360:24;4378:5;4360:24;:::i;:::-;4349:35;;4294:96;;;:::o;4396:118::-;4483:24;4501:5;4483:24;:::i;:::-;4478:3;4471:37;4396:118;;:::o;4520:222::-;4613:4;4651:2;4640:9;4636:18;4628:26;;4664:71;4732:1;4721:9;4717:17;4708:6;4664:71;:::i;:::-;4520:222;;;;:::o;4748:122::-;4821:24;4839:5;4821:24;:::i;:::-;4814:5;4811:35;4801:63;;4860:1;4857;4850:12;4801:63;4748:122;:::o;4876:139::-;4922:5;4960:6;4947:20;4938:29;;4976:33;5003:5;4976:33;:::i;:::-;4876:139;;;;:::o;5021:474::-;5089:6;5097;5146:2;5134:9;5125:7;5121:23;5117:32;5114:119;;;5152:79;;:::i;:::-;5114:119;5272:1;5297:53;5342:7;5333:6;5322:9;5318:22;5297:53;:::i;:::-;5287:63;;5243:117;5399:2;5425:53;5470:7;5461:6;5450:9;5446:22;5425:53;:::i;:::-;5415:63;;5370:118;5021:474;;;;;:::o;5501:329::-;5560:6;5609:2;5597:9;5588:7;5584:23;5580:32;5577:119;;;5615:79;;:::i;:::-;5577:119;5735:1;5760:53;5805:7;5796:6;5785:9;5781:22;5760:53;:::i;:::-;5750:63;;5706:117;5501:329;;;;:::o;5836:118::-;5923:24;5941:5;5923:24;:::i;:::-;5918:3;5911:37;5836:118;;:::o;5960:222::-;6053:4;6091:2;6080:9;6076:18;6068:26;;6104:71;6172:1;6161:9;6157:17;6148:6;6104:71;:::i;:::-;5960:222;;;;:::o;6188:619::-;6265:6;6273;6281;6330:2;6318:9;6309:7;6305:23;6301:32;6298:119;;;6336:79;;:::i;:::-;6298:119;6456:1;6481:53;6526:7;6517:6;6506:9;6502:22;6481:53;:::i;:::-;6471:63;;6427:117;6583:2;6609:53;6654:7;6645:6;6634:9;6630:22;6609:53;:::i;:::-;6599:63;;6554:118;6711:2;6737:53;6782:7;6773:6;6762:9;6758:22;6737:53;:::i;:::-;6727:63;;6682:118;6188:619;;;;;:::o;6813:117::-;6922:1;6919;6912:12;6936:117;7045:1;7042;7035:12;7059:117;7168:1;7165;7158:12;7199:568;7272:8;7282:6;7332:3;7325:4;7317:6;7313:17;7309:27;7299:122;;7340:79;;:::i;:::-;7299:122;7453:6;7440:20;7430:30;;7483:18;7475:6;7472:30;7469:117;;;7505:79;;:::i;:::-;7469:117;7619:4;7611:6;7607:17;7595:29;;7673:3;7665:4;7657:6;7653:17;7643:8;7639:32;7636:41;7633:128;;;7680:79;;:::i;:::-;7633:128;7199:568;;;;;:::o;7773:849::-;7877:6;7885;7893;7901;7950:2;7938:9;7929:7;7925:23;7921:32;7918:119;;;7956:79;;:::i;:::-;7918:119;8076:1;8101:53;8146:7;8137:6;8126:9;8122:22;8101:53;:::i;:::-;8091:63;;8047:117;8203:2;8229:53;8274:7;8265:6;8254:9;8250:22;8229:53;:::i;:::-;8219:63;;8174:118;8359:2;8348:9;8344:18;8331:32;8390:18;8382:6;8379:30;8376:117;;;8412:79;;:::i;:::-;8376:117;8525:80;8597:7;8588:6;8577:9;8573:22;8525:80;:::i;:::-;8507:98;;;;8302:313;7773:849;;;;;;;:::o;8628:77::-;8665:7;8694:5;8683:16;;8628:77;;;:::o;8711:118::-;8798:24;8816:5;8798:24;:::i;:::-;8793:3;8786:37;8711:118;;:::o;8835:222::-;8928:4;8966:2;8955:9;8951:18;8943:26;;8979:71;9047:1;9036:9;9032:17;9023:6;8979:71;:::i;:::-;8835:222;;;;:::o;9063:180::-;9111:77;9108:1;9101:88;9208:4;9205:1;9198:15;9232:4;9229:1;9222:15;9249:281;9332:27;9354:4;9332:27;:::i;:::-;9324:6;9320:40;9462:6;9450:10;9447:22;9426:18;9414:10;9411:34;9408:62;9405:88;;;9473:18;;:::i;:::-;9405:88;9513:10;9509:2;9502:22;9292:238;9249:281;;:::o;9536:129::-;9570:6;9597:20;;:::i;:::-;9587:30;;9626:33;9654:4;9646:6;9626:33;:::i;:::-;9536:129;;;:::o;9671:311::-;9748:4;9838:18;9830:6;9827:30;9824:56;;;9860:18;;:::i;:::-;9824:56;9910:4;9902:6;9898:17;9890:25;;9970:4;9964;9960:15;9952:23;;9671:311;;;:::o;10005:710::-;10101:5;10126:81;10142:64;10199:6;10142:64;:::i;:::-;10126:81;:::i;:::-;10117:90;;10227:5;10256:6;10249:5;10242:21;10290:4;10283:5;10279:16;10272:23;;10343:4;10335:6;10331:17;10323:6;10319:30;10372:3;10364:6;10361:15;10358:122;;;10391:79;;:::i;:::-;10358:122;10506:6;10489:220;10523:6;10518:3;10515:15;10489:220;;;10598:3;10627:37;10660:3;10648:10;10627:37;:::i;:::-;10622:3;10615:50;10694:4;10689:3;10685:14;10678:21;;10565:144;10549:4;10544:3;10540:14;10533:21;;10489:220;;;10493:21;10107:608;;10005:710;;;;;:::o;10738:370::-;10809:5;10858:3;10851:4;10843:6;10839:17;10835:27;10825:122;;10866:79;;:::i;:::-;10825:122;10983:6;10970:20;11008:94;11098:3;11090:6;11083:4;11075:6;11071:17;11008:94;:::i;:::-;10999:103;;10815:293;10738:370;;;;:::o;11114:539::-;11198:6;11247:2;11235:9;11226:7;11222:23;11218:32;11215:119;;;11253:79;;:::i;:::-;11215:119;11401:1;11390:9;11386:17;11373:31;11431:18;11423:6;11420:30;11417:117;;;11453:79;;:::i;:::-;11417:117;11558:78;11628:7;11619:6;11608:9;11604:22;11558:78;:::i;:::-;11548:88;;11344:302;11114:539;;;;:::o;11659:114::-;11726:6;11760:5;11754:12;11744:22;;11659:114;;;:::o;11779:184::-;11878:11;11912:6;11907:3;11900:19;11952:4;11947:3;11943:14;11928:29;;11779:184;;;;:::o;11969:132::-;12036:4;12059:3;12051:11;;12089:4;12084:3;12080:14;12072:22;;11969:132;;;:::o;12107:108::-;12184:24;12202:5;12184:24;:::i;:::-;12179:3;12172:37;12107:108;;:::o;12221:179::-;12290:10;12311:46;12353:3;12345:6;12311:46;:::i;:::-;12389:4;12384:3;12380:14;12366:28;;12221:179;;;;:::o;12406:113::-;12476:4;12508;12503:3;12499:14;12491:22;;12406:113;;;:::o;12555:732::-;12674:3;12703:54;12751:5;12703:54;:::i;:::-;12773:86;12852:6;12847:3;12773:86;:::i;:::-;12766:93;;12883:56;12933:5;12883:56;:::i;:::-;12962:7;12993:1;12978:284;13003:6;13000:1;12997:13;12978:284;;;13079:6;13073:13;13106:63;13165:3;13150:13;13106:63;:::i;:::-;13099:70;;13192:60;13245:6;13192:60;:::i;:::-;13182:70;;13038:224;13025:1;13022;13018:9;13013:14;;12978:284;;;12982:14;13278:3;13271:10;;12679:608;;;12555:732;;;;:::o;13293:114::-;13360:6;13394:5;13388:12;13378:22;;13293:114;;;:::o;13413:184::-;13512:11;13546:6;13541:3;13534:19;13586:4;13581:3;13577:14;13562:29;;13413:184;;;;:::o;13603:132::-;13670:4;13693:3;13685:11;;13723:4;13718:3;13714:14;13706:22;;13603:132;;;:::o;13741:108::-;13818:24;13836:5;13818:24;:::i;:::-;13813:3;13806:37;13741:108;;:::o;13855:179::-;13924:10;13945:46;13987:3;13979:6;13945:46;:::i;:::-;14023:4;14018:3;14014:14;14000:28;;13855:179;;;;:::o;14040:113::-;14110:4;14142;14137:3;14133:14;14125:22;;14040:113;;;:::o;14189:732::-;14308:3;14337:54;14385:5;14337:54;:::i;:::-;14407:86;14486:6;14481:3;14407:86;:::i;:::-;14400:93;;14517:56;14567:5;14517:56;:::i;:::-;14596:7;14627:1;14612:284;14637:6;14634:1;14631:13;14612:284;;;14713:6;14707:13;14740:63;14799:3;14784:13;14740:63;:::i;:::-;14733:70;;14826:60;14879:6;14826:60;:::i;:::-;14816:70;;14672:224;14659:1;14656;14652:9;14647:14;;14612:284;;;14616:14;14912:3;14905:10;;14313:608;;;14189:732;;;;:::o;14927:111::-;14991:6;15025:5;15019:12;15009:22;;14927:111;;;:::o;15044:181::-;15140:11;15174:6;15169:3;15162:19;15214:4;15209:3;15205:14;15190:29;;15044:181;;;;:::o;15231:129::-;15295:4;15318:3;15310:11;;15348:4;15343:3;15339:14;15331:22;;15231:129;;;:::o;15366:99::-;15437:21;15452:5;15437:21;:::i;:::-;15432:3;15425:34;15366:99;;:::o;15471:167::-;15534:10;15555:40;15591:3;15583:6;15555:40;:::i;:::-;15627:4;15622:3;15618:14;15604:28;;15471:167;;;;:::o;15644:110::-;15711:4;15743;15738:3;15734:14;15726:22;;15644:110;;;:::o;15784:708::-;15897:3;15926:51;15971:5;15926:51;:::i;:::-;15993:83;16069:6;16064:3;15993:83;:::i;:::-;15986:90;;16100:53;16147:5;16100:53;:::i;:::-;16176:7;16207:1;16192:275;16217:6;16214:1;16211:13;16192:275;;;16293:6;16287:13;16320:57;16373:3;16358:13;16320:57;:::i;:::-;16313:64;;16400:57;16450:6;16400:57;:::i;:::-;16390:67;;16252:215;16239:1;16236;16232:9;16227:14;;16192:275;;;16196:14;16483:3;16476:10;;15902:590;;;15784:708;;;;:::o;16498:1145::-;16869:4;16907:3;16896:9;16892:19;16884:27;;16957:9;16951:4;16947:20;16943:1;16932:9;16928:17;16921:47;16985:108;17088:4;17079:6;16985:108;:::i;:::-;16977:116;;17140:9;17134:4;17130:20;17125:2;17114:9;17110:18;17103:48;17168:108;17271:4;17262:6;17168:108;:::i;:::-;17160:116;;17323:9;17317:4;17313:20;17308:2;17297:9;17293:18;17286:48;17351:108;17454:4;17445:6;17351:108;:::i;:::-;17343:116;;17506:9;17500:4;17496:20;17491:2;17480:9;17476:18;17469:48;17534:102;17631:4;17622:6;17534:102;:::i;:::-;17526:110;;16498:1145;;;;;;;:::o;17649:973::-;17926:4;17964:3;17953:9;17949:19;17941:27;;17978:71;18046:1;18035:9;18031:17;18022:6;17978:71;:::i;:::-;18059:72;18127:2;18116:9;18112:18;18103:6;18059:72;:::i;:::-;18141;18209:2;18198:9;18194:18;18185:6;18141:72;:::i;:::-;18223;18291:2;18280:9;18276:18;18267:6;18223:72;:::i;:::-;18305:73;18373:3;18362:9;18358:19;18349:6;18305:73;:::i;:::-;18388:67;18450:3;18439:9;18435:19;18426:6;18388:67;:::i;:::-;18465:73;18533:3;18522:9;18518:19;18509:6;18465:73;:::i;:::-;18548:67;18610:3;18599:9;18595:19;18586:6;18548:67;:::i;:::-;17649:973;;;;;;;;;;;:::o;18628:886::-;18889:4;18927:3;18916:9;18912:19;18904:27;;18941:71;19009:1;18998:9;18994:17;18985:6;18941:71;:::i;:::-;19022:72;19090:2;19079:9;19075:18;19066:6;19022:72;:::i;:::-;19104;19172:2;19161:9;19157:18;19148:6;19104:72;:::i;:::-;19186;19254:2;19243:9;19239:18;19230:6;19186:72;:::i;:::-;19268:73;19336:3;19325:9;19321:19;19312:6;19268:73;:::i;:::-;19351;19419:3;19408:9;19404:19;19395:6;19351:73;:::i;:::-;19434;19502:3;19491:9;19487:19;19478:6;19434:73;:::i;:::-;18628:886;;;;;;;;;;:::o;19520:116::-;19590:21;19605:5;19590:21;:::i;:::-;19583:5;19580:32;19570:60;;19626:1;19623;19616:12;19570:60;19520:116;:::o;19642:133::-;19685:5;19723:6;19710:20;19701:29;;19739:30;19763:5;19739:30;:::i;:::-;19642:133;;;;:::o;19781:613::-;19855:6;19863;19871;19920:2;19908:9;19899:7;19895:23;19891:32;19888:119;;;19926:79;;:::i;:::-;19888:119;20046:1;20071:53;20116:7;20107:6;20096:9;20092:22;20071:53;:::i;:::-;20061:63;;20017:117;20173:2;20199:53;20244:7;20235:6;20224:9;20220:22;20199:53;:::i;:::-;20189:63;;20144:118;20301:2;20327:50;20369:7;20360:6;20349:9;20345:22;20327:50;:::i;:::-;20317:60;;20272:115;19781:613;;;;;:::o;20400:114::-;20467:6;20501:5;20495:12;20485:22;;20400:114;;;:::o;20520:184::-;20619:11;20653:6;20648:3;20641:19;20693:4;20688:3;20684:14;20669:29;;20520:184;;;;:::o;20710:132::-;20777:4;20800:3;20792:11;;20830:4;20825:3;20821:14;20813:22;;20710:132;;;:::o;20848:108::-;20925:24;20943:5;20925:24;:::i;:::-;20920:3;20913:37;20848:108;;:::o;20962:179::-;21031:10;21052:46;21094:3;21086:6;21052:46;:::i;:::-;21130:4;21125:3;21121:14;21107:28;;20962:179;;;;:::o;21147:113::-;21217:4;21249;21244:3;21240:14;21232:22;;21147:113;;;:::o;21296:732::-;21415:3;21444:54;21492:5;21444:54;:::i;:::-;21514:86;21593:6;21588:3;21514:86;:::i;:::-;21507:93;;21624:56;21674:5;21624:56;:::i;:::-;21703:7;21734:1;21719:284;21744:6;21741:1;21738:13;21719:284;;;21820:6;21814:13;21847:63;21906:3;21891:13;21847:63;:::i;:::-;21840:70;;21933:60;21986:6;21933:60;:::i;:::-;21923:70;;21779:224;21766:1;21763;21759:9;21754:14;;21719:284;;;21723:14;22019:3;22012:10;;21420:608;;;21296:732;;;;:::o;22034:1629::-;22539:4;22577:3;22566:9;22562:19;22554:27;;22627:9;22621:4;22617:20;22613:1;22602:9;22598:17;22591:47;22655:108;22758:4;22749:6;22655:108;:::i;:::-;22647:116;;22810:9;22804:4;22800:20;22795:2;22784:9;22780:18;22773:48;22838:108;22941:4;22932:6;22838:108;:::i;:::-;22830:116;;22993:9;22987:4;22983:20;22978:2;22967:9;22963:18;22956:48;23021:108;23124:4;23115:6;23021:108;:::i;:::-;23013:116;;23176:9;23170:4;23166:20;23161:2;23150:9;23146:18;23139:48;23204:108;23307:4;23298:6;23204:108;:::i;:::-;23196:116;;23360:9;23354:4;23350:20;23344:3;23333:9;23329:19;23322:49;23388:102;23485:4;23476:6;23388:102;:::i;:::-;23380:110;;23500:73;23568:3;23557:9;23553:19;23544:6;23500:73;:::i;:::-;23583;23651:3;23640:9;23636:19;23627:6;23583:73;:::i;:::-;22034:1629;;;;;;;;;;:::o;23669:468::-;23734:6;23742;23791:2;23779:9;23770:7;23766:23;23762:32;23759:119;;;23797:79;;:::i;:::-;23759:119;23917:1;23942:53;23987:7;23978:6;23967:9;23963:22;23942:53;:::i;:::-;23932:63;;23888:117;24044:2;24070:50;24112:7;24103:6;24092:9;24088:22;24070:50;:::i;:::-;24060:60;;24015:115;23669:468;;;;;:::o;24143:117::-;24252:1;24249;24242:12;24266:307;24327:4;24417:18;24409:6;24406:30;24403:56;;;24439:18;;:::i;:::-;24403:56;24477:29;24499:6;24477:29;:::i;:::-;24469:37;;24561:4;24555;24551:15;24543:23;;24266:307;;;:::o;24579:154::-;24663:6;24658:3;24653;24640:30;24725:1;24716:6;24711:3;24707:16;24700:27;24579:154;;;:::o;24739:410::-;24816:5;24841:65;24857:48;24898:6;24857:48;:::i;:::-;24841:65;:::i;:::-;24832:74;;24929:6;24922:5;24915:21;24967:4;24960:5;24956:16;25005:3;24996:6;24991:3;24987:16;24984:25;24981:112;;;25012:79;;:::i;:::-;24981:112;25102:41;25136:6;25131:3;25126;25102:41;:::i;:::-;24822:327;24739:410;;;;;:::o;25168:338::-;25223:5;25272:3;25265:4;25257:6;25253:17;25249:27;25239:122;;25280:79;;:::i;:::-;25239:122;25397:6;25384:20;25422:78;25496:3;25488:6;25481:4;25473:6;25469:17;25422:78;:::i;:::-;25413:87;;25229:277;25168:338;;;;:::o;25512:943::-;25607:6;25615;25623;25631;25680:3;25668:9;25659:7;25655:23;25651:33;25648:120;;;25687:79;;:::i;:::-;25648:120;25807:1;25832:53;25877:7;25868:6;25857:9;25853:22;25832:53;:::i;:::-;25822:63;;25778:117;25934:2;25960:53;26005:7;25996:6;25985:9;25981:22;25960:53;:::i;:::-;25950:63;;25905:118;26062:2;26088:53;26133:7;26124:6;26113:9;26109:22;26088:53;:::i;:::-;26078:63;;26033:118;26218:2;26207:9;26203:18;26190:32;26249:18;26241:6;26238:30;26235:117;;;26271:79;;:::i;:::-;26235:117;26376:62;26430:7;26421:6;26410:9;26406:22;26376:62;:::i;:::-;26366:72;;26161:287;25512:943;;;;;;;:::o;26461:541::-;26632:4;26670:3;26659:9;26655:19;26647:27;;26684:71;26752:1;26741:9;26737:17;26728:6;26684:71;:::i;:::-;26765:72;26833:2;26822:9;26818:18;26809:6;26765:72;:::i;:::-;26847;26915:2;26904:9;26900:18;26891:6;26847:72;:::i;:::-;26929:66;26991:2;26980:9;26976:18;26967:6;26929:66;:::i;:::-;26461:541;;;;;;;:::o;27008:474::-;27076:6;27084;27133:2;27121:9;27112:7;27108:23;27104:32;27101:119;;;27139:79;;:::i;:::-;27101:119;27259:1;27284:53;27329:7;27320:6;27309:9;27305:22;27284:53;:::i;:::-;27274:63;;27230:117;27386:2;27412:53;27457:7;27448:6;27437:9;27433:22;27412:53;:::i;:::-;27402:63;;27357:118;27008:474;;;;;:::o;27488:759::-;27571:6;27579;27587;27595;27644:3;27632:9;27623:7;27619:23;27615:33;27612:120;;;27651:79;;:::i;:::-;27612:120;27771:1;27796:53;27841:7;27832:6;27821:9;27817:22;27796:53;:::i;:::-;27786:63;;27742:117;27898:2;27924:53;27969:7;27960:6;27949:9;27945:22;27924:53;:::i;:::-;27914:63;;27869:118;28026:2;28052:53;28097:7;28088:6;28077:9;28073:22;28052:53;:::i;:::-;28042:63;;27997:118;28154:2;28180:50;28222:7;28213:6;28202:9;28198:22;28180:50;:::i;:::-;28170:60;;28125:115;27488:759;;;;;;;:::o;28253:1367::-;28680:4;28718:3;28707:9;28703:19;28695:27;;28768:9;28762:4;28758:20;28754:1;28743:9;28739:17;28732:47;28796:108;28899:4;28890:6;28796:108;:::i;:::-;28788:116;;28951:9;28945:4;28941:20;28936:2;28925:9;28921:18;28914:48;28979:108;29082:4;29073:6;28979:108;:::i;:::-;28971:116;;29134:9;29128:4;29124:20;29119:2;29108:9;29104:18;29097:48;29162:108;29265:4;29256:6;29162:108;:::i;:::-;29154:116;;29317:9;29311:4;29307:20;29302:2;29291:9;29287:18;29280:48;29345:102;29442:4;29433:6;29345:102;:::i;:::-;29337:110;;29457:73;29525:3;29514:9;29510:19;29501:6;29457:73;:::i;:::-;29540;29608:3;29597:9;29593:19;29584:6;29540:73;:::i;:::-;28253:1367;;;;;;;;;:::o;29626:120::-;29687:7;29716:24;29734:5;29716:24;:::i;:::-;29705:35;;29626:120;;;:::o;29752:170::-;29849:48;29891:5;29849:48;:::i;:::-;29842:5;29839:59;29829:87;;29912:1;29909;29902:12;29829:87;29752:170;:::o;29928:187::-;29998:5;30036:6;30023:20;30014:29;;30052:57;30103:5;30052:57;:::i;:::-;29928:187;;;;:::o;30121:377::-;30204:6;30253:2;30241:9;30232:7;30228:23;30224:32;30221:119;;;30259:79;;:::i;:::-;30221:119;30379:1;30404:77;30473:7;30464:6;30453:9;30449:22;30404:77;:::i;:::-;30394:87;;30350:141;30121:377;;;;:::o;30504:305::-;30544:3;30563:20;30581:1;30563:20;:::i;:::-;30558:25;;30597:20;30615:1;30597:20;:::i;:::-;30592:25;;30751:1;30683:66;30679:74;30676:1;30673:81;30670:107;;;30757:18;;:::i;:::-;30670:107;30801:1;30798;30794:9;30787:16;;30504:305;;;;:::o;30815:191::-;30855:4;30875:20;30893:1;30875:20;:::i;:::-;30870:25;;30909:20;30927:1;30909:20;:::i;:::-;30904:25;;30948:1;30945;30942:8;30939:34;;;30953:18;;:::i;:::-;30939:34;30998:1;30995;30991:9;30983:17;;30815:191;;;;:::o;31012:348::-;31052:7;31075:20;31093:1;31075:20;:::i;:::-;31070:25;;31109:20;31127:1;31109:20;:::i;:::-;31104:25;;31297:1;31229:66;31225:74;31222:1;31219:81;31214:1;31207:9;31200:17;31196:105;31193:131;;;31304:18;;:::i;:::-;31193:131;31352:1;31349;31345:9;31334:20;;31012:348;;;;:::o;31366:233::-;31405:3;31428:24;31446:5;31428:24;:::i;:::-;31419:33;;31474:66;31467:5;31464:77;31461:103;;;31544:18;;:::i;:::-;31461:103;31591:1;31584:5;31580:13;31573:20;;31366:233;;;:::o;31605:442::-;31754:4;31792:2;31781:9;31777:18;31769:26;;31805:71;31873:1;31862:9;31858:17;31849:6;31805:71;:::i;:::-;31886:72;31954:2;31943:9;31939:18;31930:6;31886:72;:::i;:::-;31968;32036:2;32025:9;32021:18;32012:6;31968:72;:::i;:::-;31605:442;;;;;;:::o;32053:137::-;32107:5;32138:6;32132:13;32123:22;;32154:30;32178:5;32154:30;:::i;:::-;32053:137;;;;:::o;32196:345::-;32263:6;32312:2;32300:9;32291:7;32287:23;32283:32;32280:119;;;32318:79;;:::i;:::-;32280:119;32438:1;32463:61;32516:7;32507:6;32496:9;32492:22;32463:61;:::i;:::-;32453:71;;32409:125;32196:345;;;;:::o;32547:143::-;32604:5;32635:6;32629:13;32620:22;;32651:33;32678:5;32651:33;:::i;:::-;32547:143;;;;:::o;32696:351::-;32766:6;32815:2;32803:9;32794:7;32790:23;32786:32;32783:119;;;32821:79;;:::i;:::-;32783:119;32941:1;32966:64;33022:7;33013:6;33002:9;32998:22;32966:64;:::i;:::-;32956:74;;32912:128;32696:351;;;;:::o;33053:308::-;33115:4;33205:18;33197:6;33194:30;33191:56;;;33227:18;;:::i;:::-;33191:56;33265:29;33287:6;33265:29;:::i;:::-;33257:37;;33349:4;33343;33339:15;33331:23;;33053:308;;;:::o;33367:421::-;33456:5;33481:66;33497:49;33539:6;33497:49;:::i;:::-;33481:66;:::i;:::-;33472:75;;33570:6;33563:5;33556:21;33608:4;33601:5;33597:16;33646:3;33637:6;33632:3;33628:16;33625:25;33622:112;;;33653:79;;:::i;:::-;33622:112;33743:39;33775:6;33770:3;33765;33743:39;:::i;:::-;33462:326;33367:421;;;;;:::o;33808:355::-;33875:5;33924:3;33917:4;33909:6;33905:17;33901:27;33891:122;;33932:79;;:::i;:::-;33891:122;34042:6;34036:13;34067:90;34153:3;34145:6;34138:4;34130:6;34126:17;34067:90;:::i;:::-;34058:99;;33881:282;33808:355;;;;:::o;34169:524::-;34249:6;34298:2;34286:9;34277:7;34273:23;34269:32;34266:119;;;34304:79;;:::i;:::-;34266:119;34445:1;34434:9;34430:17;34424:24;34475:18;34467:6;34464:30;34461:117;;;34497:79;;:::i;:::-;34461:117;34602:74;34668:7;34659:6;34648:9;34644:22;34602:74;:::i;:::-;34592:84;;34395:291;34169:524;;;;:::o;34699:76::-;34735:7;34764:5;34753:16;;34699:76;;;:::o;34781:525::-;34820:3;34839:19;34856:1;34839:19;:::i;:::-;34834:24;;34872:19;34889:1;34872:19;:::i;:::-;34867:24;;35060:1;34992:66;34988:74;34985:1;34981:82;34976:1;34973;34969:9;34962:17;34958:106;34955:132;;;35067:18;;:::i;:::-;34955:132;35247:1;35179:66;35175:74;35172:1;35168:82;35164:1;35161;35157:9;35153:98;35150:124;;;35254:18;;:::i;:::-;35150:124;35298:1;35295;35291:9;35284:16;;34781:525;;;;:::o;35312:332::-;35433:4;35471:2;35460:9;35456:18;35448:26;;35484:71;35552:1;35541:9;35537:17;35528:6;35484:71;:::i;:::-;35565:72;35633:2;35622:9;35618:18;35609:6;35565:72;:::i;:::-;35312:332;;;;;:::o;35650:79::-;35689:7;35718:5;35707:16;;35650:79;;;:::o;35735:157::-;35840:45;35860:24;35878:5;35860:24;:::i;:::-;35840:45;:::i;:::-;35835:3;35828:58;35735:157;;:::o;35898:94::-;35931:8;35979:5;35975:2;35971:14;35950:35;;35898:94;;;:::o;35998:::-;36037:7;36066:20;36080:5;36066:20;:::i;:::-;36055:31;;35998:94;;;:::o;36098:100::-;36137:7;36166:26;36186:5;36166:26;:::i;:::-;36155:37;;36098:100;;;:::o;36204:157::-;36309:45;36329:24;36347:5;36329:24;:::i;:::-;36309:45;:::i;:::-;36304:3;36297:58;36204:157;;:::o;36367:397::-;36507:3;36522:75;36593:3;36584:6;36522:75;:::i;:::-;36622:2;36617:3;36613:12;36606:19;;36635:75;36706:3;36697:6;36635:75;:::i;:::-;36735:2;36730:3;36726:12;36719:19;;36755:3;36748:10;;36367:397;;;;;:::o;36770:176::-;36802:1;36819:20;36837:1;36819:20;:::i;:::-;36814:25;;36853:20;36871:1;36853:20;:::i;:::-;36848:25;;36892:1;36882:35;;36897:18;;:::i;:::-;36882:35;36938:1;36935;36931:9;36926:14;;36770:176;;;;:::o;36952:180::-;37000:77;36997:1;36990:88;37097:4;37094:1;37087:15;37121:4;37118:1;37111:15;37138:527;37177:4;37197:19;37214:1;37197:19;:::i;:::-;37192:24;;37230:19;37247:1;37230:19;:::i;:::-;37225:24;;37419:1;37351:66;37347:74;37344:1;37340:82;37335:1;37332;37328:9;37321:17;37317:106;37314:132;;;37426:18;;:::i;:::-;37314:132;37605:1;37537:66;37533:74;37530:1;37526:82;37522:1;37519;37515:9;37511:98;37508:124;;;37612:18;;:::i;:::-;37508:124;37657:1;37654;37650:9;37642:17;;37138:527;;;;:::o;37671:102::-;37713:8;37760:5;37757:1;37753:13;37732:34;;37671:102;;;:::o;37779:848::-;37840:5;37847:4;37871:6;37862:15;;37895:5;37886:14;;37909:712;37930:1;37920:8;37917:15;37909:712;;;38025:4;38020:3;38016:14;38010:4;38007:24;38004:50;;;38034:18;;:::i;:::-;38004:50;38084:1;38074:8;38070:16;38067:451;;;38499:4;38492:5;38488:16;38479:25;;38067:451;38549:4;38543;38539:15;38531:23;;38579:32;38602:8;38579:32;:::i;:::-;38567:44;;37909:712;;;37779:848;;;;;;;:::o;38633:1073::-;38687:5;38878:8;38868:40;;38899:1;38890:10;;38901:5;;38868:40;38927:4;38917:36;;38944:1;38935:10;;38946:5;;38917:36;39013:4;39061:1;39056:27;;;;39097:1;39092:191;;;;39006:277;;39056:27;39074:1;39065:10;;39076:5;;;39092:191;39137:3;39127:8;39124:17;39121:43;;;39144:18;;:::i;:::-;39121:43;39193:8;39190:1;39186:16;39177:25;;39228:3;39221:5;39218:14;39215:40;;;39235:18;;:::i;:::-;39215:40;39268:5;;;39006:277;;39392:2;39382:8;39379:16;39373:3;39367:4;39364:13;39360:36;39342:2;39332:8;39329:16;39324:2;39318:4;39315:12;39311:35;39295:111;39292:246;;;39448:8;39442:4;39438:19;39429:28;;39483:3;39476:5;39473:14;39470:40;;;39490:18;;:::i;:::-;39470:40;39523:5;;39292:246;39563:42;39601:3;39591:8;39585:4;39582:1;39563:42;:::i;:::-;39548:57;;;;39637:4;39632:3;39628:14;39621:5;39618:25;39615:51;;;39646:18;;:::i;:::-;39615:51;39695:4;39688:5;39684:16;39675:25;;38633:1073;;;;;;:::o;39712:285::-;39772:5;39796:23;39814:4;39796:23;:::i;:::-;39788:31;;39840:27;39858:8;39840:27;:::i;:::-;39828:39;;39886:104;39923:66;39913:8;39907:4;39886:104;:::i;:::-;39877:113;;39712:285;;;;:::o;40003:143::-;40060:5;40091:6;40085:13;40076:22;;40107:33;40134:5;40107:33;:::i;:::-;40003:143;;;;:::o;40152:351::-;40222:6;40271:2;40259:9;40250:7;40246:23;40242:32;40239:119;;;40277:79;;:::i;:::-;40239:119;40397:1;40422:64;40478:7;40469:6;40458:9;40454:22;40422:64;:::i;:::-;40412:74;;40368:128;40152:351;;;;:::o;40509:98::-;40560:6;40594:5;40588:12;40578:22;;40509:98;;;:::o;40613:168::-;40696:11;40730:6;40725:3;40718:19;40770:4;40765:3;40761:14;40746:29;;40613:168;;;;:::o;40787:360::-;40873:3;40901:38;40933:5;40901:38;:::i;:::-;40955:70;41018:6;41013:3;40955:70;:::i;:::-;40948:77;;41034:52;41079:6;41074:3;41067:4;41060:5;41056:16;41034:52;:::i;:::-;41111:29;41133:6;41111:29;:::i;:::-;41106:3;41102:39;41095:46;;40877:270;40787:360;;;;:::o;41153:640::-;41348:4;41386:3;41375:9;41371:19;41363:27;;41400:71;41468:1;41457:9;41453:17;41444:6;41400:71;:::i;:::-;41481:72;41549:2;41538:9;41534:18;41525:6;41481:72;:::i;:::-;41563;41631:2;41620:9;41616:18;41607:6;41563:72;:::i;:::-;41682:9;41676:4;41672:20;41667:2;41656:9;41652:18;41645:48;41710:76;41781:4;41772:6;41710:76;:::i;:::-;41702:84;;41153:640;;;;;;;:::o;41799:141::-;41855:5;41886:6;41880:13;41871:22;;41902:32;41928:5;41902:32;:::i;:::-;41799:141;;;;:::o;41946:349::-;42015:6;42064:2;42052:9;42043:7;42039:23;42035:32;42032:119;;;42070:79;;:::i;:::-;42032:119;42190:1;42215:63;42270:7;42261:6;42250:9;42246:22;42215:63;:::i;:::-;42205:73;;42161:127;41946:349;;;;:::o;42301:79::-;42340:7;42369:5;42358:16;;42301:79;;;:::o;42386:157::-;42491:45;42511:24;42529:5;42511:24;:::i;:::-;42491:45;:::i;:::-;42486:3;42479:58;42386:157;;:::o;42549:679::-;42745:3;42760:75;42831:3;42822:6;42760:75;:::i;:::-;42860:2;42855:3;42851:12;42844:19;;42873:75;42944:3;42935:6;42873:75;:::i;:::-;42973:2;42968:3;42964:12;42957:19;;42986:75;43057:3;43048:6;42986:75;:::i;:::-;43086:2;43081:3;43077:12;43070:19;;43099:75;43170:3;43161:6;43099:75;:::i;:::-;43199:2;43194:3;43190:12;43183:19;;43219:3;43212:10;;42549:679;;;;;;;:::o;43234:320::-;43349:4;43387:2;43376:9;43372:18;43364:26;;43400:71;43468:1;43457:9;43453:17;43444:6;43400:71;:::i;:::-;43481:66;43543:2;43532:9;43528:18;43519:6;43481:66;:::i;:::-;43234:320;;;;;:::o;43560:171::-;43599:3;43622:24;43640:5;43622:24;:::i;:::-;43613:33;;43668:4;43661:5;43658:15;43655:41;;;43676:18;;:::i;:::-;43655:41;43723:1;43716:5;43712:13;43705:20;;43560:171;;;:::o;43737:397::-;43877:3;43892:75;43963:3;43954:6;43892:75;:::i;:::-;43992:2;43987:3;43983:12;43976:19;;44005:75;44076:3;44067:6;44005:75;:::i;:::-;44105:2;44100:3;44096:12;44089:19;;44125:3;44118:10;;43737:397;;;;;:::o
Swarm Source
ipfs://a8db13bd32eba361a40cf9b5c8f0cb16a4d5dae4971ae3bbe7f3433e35fae683
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.