ERC-20
Overview
Max Total Supply
5,000,000,000 VDC
Holders
1,161
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
XDS
Compiler Version
v0.5.8+commit.23d335f2
Contract Source Code (Solidity Multiple files format)
pragma solidity ^0.5.8; import './ERC20.sol'; library address_make_payable { function make_payable(address x) internal pure returns (address payable) { return address(uint160(x)); } } contract VDPoolBasic { function price() external view returns (uint256); function buyToken(uint256 ethAmount) external returns (uint256); function currentLevel() external view returns(uint256); function currentLevelRemaining() external view returns(uint256); } contract InvitationBasic { function signUp(address referrer, address addr, uint256 phase, uint256 ePhase) external; function isRoot(address addr) external view returns (bool); function newRoot(address addr, uint256 phase) external; function getParent(address addr) external view returns(address); function getAncestors(address addr) external view returns(address[] memory); function isSignedUp(address addr) public view returns (bool); function getPoints(uint256 phase, address addr) external view returns (uint256); function newSignupCount(uint256 phase) external view returns (uint256); function getTop(uint256 phase) external view returns(address[] memory); function distributeBonus(uint256 len) external pure returns(uint256[] memory); } contract LuckyDrawBasic { function buyTicket(address addr, uint256 phase) external; function aggregateIcexWinners(uint256 phase) external; function getWinners(uint256 phase) external view returns(address[] memory); } contract XDS is StandardToken { using address_make_payable for address; /* * CONSTANTS */ uint16[] public bonusRate = [200, 150, 100, 50]; /* * STATES */ address public settler; string public name; string public symbol; uint8 public constant decimals = 18; address public reservedAccount; uint256 public reservedAmount; address public foundationAddr; uint256 public firstBlock = 0; uint256 public blockPerPhase = 0; mapping (uint256 => uint256) public ethBalance; mapping (uint256 => mapping (address => uint256)) public addressInvestment; mapping (address => uint256) public totalInvestment; mapping (address => uint256) public crBonus; // controlled release bonus address[] icexInvestors; mapping (uint256 => address[]) public topInvestor; mapping (uint256 => bool) public settled; InvitationBasic invitationContract; LuckyDrawBasic luckydrawContract; VDPoolBasic vdPoolContract; uint256 public signUpFee = 0; uint256 public rootFee = 0; uint256 referrerBonus = 0; uint256 ancestorBonus = 0; uint16 topInvestorCounter = 0; uint16 icexCRBonusRatio = 75; uint256 crBonusReleasePhases = 10; uint256 ethBonusReleasePhases = 20; uint256 luckyDrawRate = 10; uint256 invitationRate = 70; uint256 topInvestorRate = 20; uint256 foundationRate = 50; uint256 icexRewardETHPool = 0; /* * EVENTS */ /// Emitted only once after token sale starts. event SaleStarted(); event Settled(uint256 phase, uint256 ethDistributed, uint256 ethToPool); event LuckydrawSettle(uint256 phase, address indexed who, uint256 ethAmount); event InvitationSettle(uint256 phase, address indexed who, uint256 ethAmount); event InvestorSettle(uint256 phase, address indexed who, uint256 ethAmount); /* * MODIFIERS */ /// only master can call the function modifier onlyOwner { require(master == msg.sender, "only master can call"); _; } constructor(string memory _name, string memory _symbol, uint256 _blockPerPhase, uint256 _totalSupply, uint256 _reservedAmount, address _reservedAccount, address _foundationAddr) public { master = msg.sender; // master account settler = master; name = _name; symbol = _symbol; totalSupply = _totalSupply; currentSupply = _reservedAmount; reservedAmount = _reservedAmount; reservedAccount = _reservedAccount; balances[reservedAccount] = reservedAmount; emit Transfer(address(this), reservedAccount, reservedAmount); foundationAddr = _foundationAddr; // foundation account blockPerPhase = _blockPerPhase; // block number per phase } /* * EXTERNAL FUNCTIONS */ function setOwner(address newOwner) external onlyOwner { master = newOwner; } function setSettler(address newSettler) external onlyOwner { settler = newSettler; } function transfer(address _to, uint256 _value) external onlyPayloadSize(2 * 32) { if ( _to == address(this)) { require(_value == rootFee, "only valid value is root fee for this recipient"); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); require(!isSignedUp(), "not qulifiled as new root"); invitationContract.newRoot(msg.sender, currentPhase()); } else if ( _value == signUpFee && invitationContract.isSignedUp(_to) && !isSignedUp()) { uint256 fee = _value; balances[msg.sender] = balances[msg.sender].sub(fee); uint256 phase = currentPhase(); uint256 ePhase = phase; if (phase < bonusRate.length) { ePhase = bonusRate.length - 1; } invitationContract.signUp(_to, msg.sender, phase, ePhase); //direct referrer balances[_to] = balances[_to].add(referrerBonus); emit Transfer(msg.sender, _to, referrerBonus); fee = fee.sub(referrerBonus); // go up referrer tree address[] memory ancestors = invitationContract.getAncestors(msg.sender); for ( uint256 i = 0; i < ancestors.length && fee >= ancestorBonus; i++) { if (ancestors[i] == address(0)) { break; } balances[ancestors[i]] = balances[ancestors[i]].add(ancestorBonus); emit Transfer(msg.sender, ancestors[i], ancestorBonus); fee = fee.sub(ancestorBonus); } balances[foundationAddr] = balances[foundationAddr].add(fee); emit Transfer(msg.sender, foundationAddr, fee); } else { balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); } } function setInvitationContract(address addr, uint256 _rootFee, uint256 _signUpFee, uint256 _ancestorBonus, uint256 _referrerBonus, uint256 _invitationRate) external onlyOwner { invitationContract = InvitationBasic(addr); rootFee = _rootFee; // price to be root signUpFee = _signUpFee; // sign up ticker price ancestorBonus = _ancestorBonus; // ancestor node bonus referrerBonus = _referrerBonus; // referrer node bonus invitationRate = _invitationRate; } function setVdPoolContract(address addr, uint16 _topInvestorCounter, uint256 _topInvestorRate, uint256 _foundationRate) external onlyOwner { vdPoolContract = VDPoolBasic(addr); topInvestorCounter = _topInvestorCounter; // number of top investor used during settlment topInvestorRate = _topInvestorRate; // top investor settle rate foundationRate = _foundationRate; // foudation share } function setLuckyDrawContract(address addr, uint256 _luckyDrawRate) external onlyOwner { luckydrawContract = LuckyDrawBasic(addr); luckyDrawRate = _luckyDrawRate; } function settle(uint256 phase) external { require(settler == address(0) || settler == msg.sender, "only settler can call"); require(phase >= 0, "invalid phase"); require(phase < currentPhase(), "phase not matured yet"); require (!settled[phase], "phase already settled"); uint256 pool = 0; uint256 toPool = 0; if (phase < bonusRate.length) { if(ethBalance[phase] > 0) { toPool = ethBalance[phase].mul(bonusRate.length).div(bonusRate.length + ethBonusReleasePhases); icexRewardETHPool = icexRewardETHPool.add(toPool); transferToFoundation(ethBalance[phase].sub(toPool)); } // settling last phase of ICEX, combine pools if (phase == bonusRate.length - 1) { pool = icexRewardETHPool; } } else { pool = ethBalance[phase]; distributeCRBonus(phase); } if (pool > 0 ) { settleLuckydraw(phase, pool, phase < bonusRate.length); settleTopInvestor(phase, pool); settleInvitation(phase, pool); } settled[phase] = true; emit Settled(phase, pool, toPool); } function start(uint256 _firstBlock) external onlyOwner { require(!saleStarted(), "Sale has not started yet"); require(firstBlock == 0 , "Resonance already started"); firstBlock = _firstBlock; emit SaleStarted(); } /// @dev This default function allows token to be purchased by directly /// sending ether to this smart contract. function () external payable { issueToken(msg.sender); } function price() external view returns(uint256) { return vdPoolContract.price(); } function currentLevel() external view returns(uint256) { return vdPoolContract.currentLevel(); } function currentRemainingEth() external view returns(uint256) { return vdPoolContract.currentLevelRemaining(); } function currentBonusRate() external view returns(uint16) { uint256 phase = currentPhase(); if (phase < bonusRate.length){ return bonusRate[phase]; } return 0; } function isSignedUp() public view returns (bool) { return invitationContract.isSignedUp(msg.sender); } function topInvestors(uint256 phase) external view returns (address[] memory) { return topInvestor[phase]; } function luckyWinners(uint256 phase) external view returns (address[] memory) { return luckydrawContract.getWinners(phase); } function invitationWinners(uint256 phase) external view returns(address[] memory) { return invitationContract.getTop(phase); } function drain(uint256 amount) external onlyOwner { transferToFoundation(amount); } /* * PUBLIC FUNCTIONS */ function saleStarted() public view returns (bool) { return (firstBlock > 0 && block.number >= firstBlock); } function currentPhase() public view returns(uint256) { return (block.number - firstBlock).div(blockPerPhase); } function issueToken(address recipient) public payable { require(saleStarted(), "Sale is not in progress"); require(msg.value >= 0.1 ether, "minimal of 0.1 eth required"); uint256 phase = currentPhase(); uint256 totalEth = msg.value; updateTopInvestor(recipient, msg.value, phase); // ICEX if (phase < bonusRate.length){ uint256 bonus = totalEth.mul(bonusRate[phase]).div(100); totalEth = totalEth.add(bonus); if (crBonus[recipient] == 0 ) { icexInvestors.push(recipient); } } uint256 tokens = vdPoolContract.buyToken(totalEth); totalInvestment[recipient] = totalInvestment[recipient].add(msg.value); currentSupply = currentSupply.add(tokens); require(currentSupply <= totalSupply, "exceed token supply cap"); if (phase < bonusRate.length){ uint256 crTokens = tokens.mul(bonusRate[phase]).div(100 + bonusRate[phase]).mul(icexCRBonusRatio).div(100); require(crTokens >= 0 && tokens > crTokens, 'invalid cr bonus value'); crBonus[recipient] = crBonus[recipient].add(crTokens.div(crBonusReleasePhases)); balances[recipient] = balances[recipient].add(tokens).sub(crTokens); emit Transfer(address(this), recipient, tokens.sub(crTokens)); } else { balances[recipient] = balances[recipient].add(tokens); emit Transfer(address(this), recipient, tokens); } uint256 foundation = msg.value.mul(foundationRate).div(100); transferToFoundation(foundation); ethBalance[phase] = ethBalance[phase].add(msg.value).sub(foundation); luckydrawContract.buyTicket(recipient, phase); } /* * INTERNAL FUNCTIONS */ function updateTopInvestor(address addr, uint256 ethAmount, uint256 phase) internal { uint256 ePhase = phase; if (phase < bonusRate.length) { ePhase = bonusRate.length - 1; // save it for the last phase of ICEX } addressInvestment[ePhase][addr] = addressInvestment[ePhase][addr].add(ethAmount); for (uint256 k = 0; k < topInvestor[ePhase].length; k++){ if (topInvestor[ePhase][k] == addr) { for (uint256 i = k; i > 0; i--){ if (addressInvestment[ePhase][topInvestor[ePhase][i]] > addressInvestment[ePhase][topInvestor[ePhase][i-1]]) { (topInvestor[ePhase][i], topInvestor[ePhase][i-1]) = (topInvestor[ePhase][i-1], topInvestor[ePhase][i]); } else { break; } } return; } } if (topInvestor[ePhase].length < topInvestorCounter){ topInvestor[ePhase].push(addr); } else if (addressInvestment[ePhase][addr] > addressInvestment[ePhase][topInvestor[ePhase][topInvestor[ePhase].length - 1]]){ topInvestor[ePhase][topInvestor[ePhase].length - 1] = addr; } for (uint256 i = topInvestor[ePhase].length - 1; i > 0; i--){ if (addressInvestment[ePhase][topInvestor[ePhase][i]] > addressInvestment[ePhase][topInvestor[ePhase][i-1]]) { (topInvestor[ePhase][i], topInvestor[ePhase][i-1]) = (topInvestor[ePhase][i-1], topInvestor[ePhase][i]); } else { break; } } } function transferToFoundation(uint256 ethAmount) internal { address payable addr = foundationAddr.make_payable(); addr.transfer(ethAmount); } function settleLuckydraw(uint256 phase, uint256 ethAmount, bool isIcex) internal { if (isIcex) { luckydrawContract.aggregateIcexWinners(phase); } address[] memory winners = luckydrawContract.getWinners(phase); uint256 bonus = ethAmount.mul(luckyDrawRate).div(100).div(winners.length); if (winners.length == 0 && bonus > 0){ transferToFoundation(bonus); return; } for (uint256 i = 0; i < winners.length; i++) { address payable addr = winners[i].make_payable(); addr.transfer(bonus); emit LuckydrawSettle(phase, winners[i], bonus); } } function settleTopInvestor (uint256 phase, uint256 ethAmount) internal { uint256 bonus = ethAmount.mul(topInvestorRate).div(100); if (topInvestor[phase].length == 0 && bonus > 0){ transferToFoundation(bonus); return; } uint256 len = topInvestor[phase].length; uint256[] memory factors = invitationContract.distributeBonus(len); for (uint256 i = 0; i < topInvestor[phase].length; i++) { address payable addr = topInvestor[phase][i].make_payable(); uint256 iBonus = bonus.mul(factors[i]).div(len).div(len); addr.transfer(iBonus); emit InvestorSettle(phase, addr, iBonus); } } function settleInvitation (uint256 phase, uint256 ethAmount) internal { uint256 totalBonus = ethAmount.mul(invitationRate).div(100); address[] memory winners = invitationContract.getTop(phase); if (winners.length == 0 && totalBonus > 0){ transferToFoundation(totalBonus); return; } uint256 len = winners.length; uint256[] memory factors = invitationContract.distributeBonus(len); for (uint256 i = 0; i < factors.length; i++) { uint256 bonus = totalBonus.mul(factors[i]).div(len).div(len); address payable addr = winners[i].make_payable(); addr.transfer(bonus); emit InvitationSettle(phase, winners[i], bonus); } } function distributeCRBonus(uint256 phase) internal { if (phase < bonusRate.length || phase >= bonusRate.length + crBonusReleasePhases) { return; } for (uint256 i = 0; i < icexInvestors.length; i++) { address addr = icexInvestors[i]; balances[addr] = balances[addr].add(crBonus[addr]); emit Transfer(address(this), addr, crBonus[addr]); } } }
pragma solidity ^0.5.8; import './SafeMath.sol'; /** * @title ERC20Basic * @dev Simpler version of ERC20 interface */ contract ERC20Basic { uint256 public totalSupply; uint256 public currentSupply; address public master; function balanceOf(address who) external view returns (uint256); function transfer(address to, uint256 value) external; event Transfer(address indexed from, address indexed to, uint256 value); } /** * @title Basic token * @dev Basic version of StandardToken, with no allowances. */ contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; /** * @dev Fix for the ERC20 short address attack. */ modifier onlyPayloadSize(uint256 size) { if(msg.data.length < size + 4) { revert(); } _; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) external view returns (uint256 balance) { return balances[_owner]; } } /** * @title ERC20 interface */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) external view returns (uint256); function transferFrom(address from, address to, uint256 value) external; function approve(address spender, uint256 value) external; event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @title Standard ERC20 token * * @dev Implemantation of the basic standart token. */ contract StandardToken is BasicToken, ERC20 { mapping (address => mapping (address => uint256)) allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amout of tokens to be transfered */ function transferFrom(address _from, address _to, uint256 _value) external onlyPayloadSize(3 * 32) { uint256 _allowance = allowed[_from][msg.sender]; // Check is not needed because sub(_allowance, _value) will already throw if this condition is not met // if (_value > _allowance) throw; balances[_to] = balances[_to].add(_value); balances[_from] = balances[_from].sub(_value); allowed[_from][msg.sender] = _allowance.sub(_value); emit Transfer(_from, _to, _value); } /** * @dev Aprove the passed address to spend the specified amount of tokens on beahlf of msg.sender. * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) external { // To change the approve amount you first have to reduce the addresses` // allowance to zero by calling `approve(_spender, 0)` if it is not // already 0 to mitigate the race condition described here: if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) revert(); allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); } /** * @dev Function to check the amount of tokens than an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifing the amount of tokens still avaible for the spender. */ function allowance(address _owner, address _spender) external view returns (uint256 remaining) { return allowed[_owner][_spender]; } }
pragma solidity ^0.5.8; import './SafeMath.sol'; contract InvitationBasic { function signUp(address referrer, address addr, uint256 phase, uint256 ePhase) external; function getParent(address addr) external view returns(address); function getAncestors(address addr) external view returns(address[] memory); function isRoot(address addr) external view returns (bool); function isSignedUp(address addr) public view returns (bool); function newRoot(address addr, uint256 phase) external; function newSignupCount(uint256 phase) external view returns (uint); function getPoints(uint256 phase, address addr) external view returns (uint256); function getTop(uint256 phase) external view returns(address[] memory); function distributeBonus(uint256 len) external pure returns(uint256[] memory); } contract Invitation is InvitationBasic { using SafeMath for uint256; /* * STATES */ address public master; address public caller; bool public paused; mapping (address => bool) public rootList; mapping (address => address) public referenceParentList; mapping (address => address[]) public referenceChildList; mapping (uint256 => mapping (address => uint256)) public addressPoints; mapping (uint256 => address[]) public newSignupList; mapping (uint256 => address[]) public inviterList; mapping (uint256 => address[]) public top; uint maxChildrenCount = 0; uint256 basePoints = 100000; uint256 pointRate = 0; uint256 maxPointLevel = 10; uint256 winnerCount = 10; /* * MODIFIERS */ /// only master can call the function modifier onlyOwner { require(master == msg.sender, "only owner can call"); _; } /// only master can call the function modifier onlyCaller { require(caller == msg.sender, "only caller can call"); _; } /// function not paused modifier notPaused { require(paused == false, "function is paused"); _; } function setPause(bool value) external onlyOwner { paused = value; } function setWinnerCount(uint256 _count) external onlyOwner { winnerCount = _count; } function isSignedUp(address addr) public view returns (bool) { return rootList[addr] == true || referenceParentList[addr] != address(0); } function signUp(address referrer, address addr, uint256 phase, uint256 ePhase) external onlyCaller notPaused { require(isSignedUp(referrer), "invalid referrer"); require(!isSignedUp(addr), "address has signed up"); setUpParent(referrer, addr); updatePoints(referrer, addr, ePhase); newSignupList[phase].push(addr); } function isRoot(address addr) external view returns (bool) { return rootList[addr] == true; } function newRoot(address addr, uint256 phase) external onlyCaller notPaused { require(!isSignedUp(addr), "address has signed up"); rootList[addr] = true; newSignupList[phase].push(addr); } function getTop(uint256 phase) external view returns(address[] memory) { return top[phase]; } /* function getTopInviter(uint256 phase, uint256 topN) external onlyCaller returns(address[] memory) { if (inviterList[phase].length == 0 || top[phase].length > 0){ return top[phase]; } uint256 k = topN; randomizedSelect(inviterList[phase], 0, inviterList[phase].length - 1, k, phase); for (uint256 i = 0; i< k && i < inviterList[phase].length; i++){ top[phase].push(inviterList[phase][i]); } return top[phase]; } */ function getChild(address addr) external view returns(address[] memory) { return referenceChildList[addr]; } function getPoints(uint256 phase, address addr) external view returns (uint256) { return addressPoints[phase][addr]; } function getParent(address addr) external view returns(address) { return referenceParentList[addr]; } function getNewSignup(uint256 phase) external view returns(address[] memory) { return newSignupList[phase]; } function newSignupCount(uint256 phase) external view returns (uint) { return newSignupList[phase].length; } function setCaller(address who) external onlyOwner { caller = who; } function setOwner(address who) external onlyOwner { master = who; } constructor(uint _maxChildrenCount, uint _pointRate, uint256 _winnerCount) public { master = msg.sender; // master account maxChildrenCount = _maxChildrenCount; // child node max number pointRate = _pointRate; // e.g. 618 winnerCount = _winnerCount; } function setUpParent(address pAddress, address addr) internal { pAddress = findParent(pAddress); referenceParentList[addr] = pAddress; referenceChildList[pAddress].push(addr); } function updateTop(address addr, uint256 phase) internal { for (uint256 k = 0; k < top[phase].length; k++){ if (top[phase][k] == addr) { for (uint256 i = k; i > 0; i--){ if (addressPoints[phase][top[phase][i]] > addressPoints[phase][top[phase][i-1]]) { (top[phase][i], top[phase][i-1]) = (top[phase][i-1], top[phase][i]); } else { break; } } return; } } if (top[phase].length < winnerCount){ top[phase].push(addr); } else if (addressPoints[phase][addr] > addressPoints[phase][top[phase][top[phase].length - 1]]){ top[phase][top[phase].length - 1] = addr; } for (uint256 i = top[phase].length - 1; i > 0; i--){ if (addressPoints[phase][top[phase][i]] > addressPoints[phase][top[phase][i-1]]) { (top[phase][i], top[phase][i-1]) = (top[phase][i-1], top[phase][i]); } else { break; } } } function updatePoints(address referrer, address addr, uint256 phase) internal { uint256 points = basePoints; if (addressPoints[phase][referrer] == 0) { inviterList[phase].push(referrer); } addressPoints[phase][referrer] = addressPoints[phase][referrer].add(points); points = points.mul(pointRate).div(1000); updateTop(referrer, phase); address parent = referenceParentList[addr]; uint256 level = 0; while (parent != address(0) && level < maxPointLevel){ level = level.add(1); if (parent == referrer) { parent = referenceParentList[parent]; continue; } if (addressPoints[phase][parent] == 0) { inviterList[phase].push(parent); } addressPoints[phase][parent] = addressPoints[phase][parent].add(points); points = points.mul(pointRate).div(1000); updateTop(parent, phase); parent = referenceParentList[parent]; } } function findParent(address root) internal view returns (address) { uint len = 10000; address[] memory temp = new address[](len); uint startIndex = 0; uint currentIndex = 0; temp[startIndex] = root; while (true){ address currentAddress = temp[startIndex]; startIndex++; if (startIndex == len){ startIndex = 0; } if (referenceChildList[currentAddress].length < maxChildrenCount){ return currentAddress; }else { for(uint i = 0; i< referenceChildList[currentAddress].length; i++){ currentIndex++; if (currentIndex == len){ currentIndex = 0; } temp[currentIndex] = referenceChildList[currentAddress][i]; } } } } /* function randomizedSelect(address[] storage addressList, uint left, uint right, uint256 k, uint256 phase) internal{ if (left == right) { return; } if (left < right) { uint mid = partition(addressList, left, right, phase); uint i = mid - left + 1; if (i == k){ return; } if (k < i) { return randomizedSelect(addressList, left, mid - 1, k, phase); } else { return randomizedSelect(addressList, mid + 1, right, k - i, phase); } } } function partition(address[] storage addressList, uint left, uint right, uint256 phase) internal returns(uint) { address tmp = addressList[left]; while (left < right) { while (left < right && addressPoints[phase][addressList[right]] < addressPoints[phase][tmp]) { right--; } addressList[left] = addressList[right]; while (left < right && addressPoints[phase][addressList[left]] >= addressPoints[phase][tmp]) { left++; } addressList[right] = addressList[left]; } addressList[left] = tmp; return left; } */ function distributeBonus(uint256 len) external pure returns(uint256[] memory) { uint256[] memory factors = new uint256[](len); for (uint256 i = 0; i < len; i++) { if (i < len.div(2)) { factors[i] = len.add(len.div(2).sub(i)); } else { if (len % 2 == 0 ) { factors[i] = len.add(len.div(2)).sub(1).sub(i); } else { factors[i] = len.add(len.div(2)).sub(i); } } } return factors; } function getAncestors(address addr) external view returns(address[] memory) { address[] memory ancestors = new address[](maxPointLevel); address parent = referenceParentList[addr]; for (uint256 i = 0; parent != address(0) && i < maxPointLevel; i++) { ancestors[i] = parent; parent = referenceParentList[parent]; } return ancestors; } }
pragma solidity ^0.5.8; contract LuckyDrawBasic { function buyTicket(address addr, uint256 phase) external; function aggregateIcexWinners(uint256 phase) external; function getWinners(uint256 phase) external view returns(address[] memory); } contract LuckyDraw is LuckyDrawBasic { /* * STATES */ address public master; address public caller; bool public paused; uint winnerCount = 10; mapping (uint256 => address[]) winnerList; mapping (uint256 => mapping(address => bool)) playerList; mapping (uint256 => uint256) playerNumbers; uint nonce = 0; /* * MODIFIERS */ /// only master can call the function modifier onlyOwner { require(master == msg.sender, "only owner can call"); _; } /// only master can call the function modifier onlyCaller { require(caller == msg.sender, "only caller can call"); _; } /// function not paused modifier notPaused { require(paused == false, "function is paused"); _; } constructor() public { master = msg.sender; } function setCaller(address who) external onlyOwner { caller = who; } function setOwner(address who) external onlyOwner { master = who; } function setPause(bool value) external onlyOwner { paused = value; } function buyTicket(address addr, uint256 phase) external onlyCaller notPaused { if (!playerList[phase][addr]){ playerNumbers[phase]++; if (winnerList[phase].length < winnerCount){ winnerList[phase].push(addr); }else { uint index = randomIndex(addr, playerNumbers[phase]); if (index < winnerCount){ winnerList[phase][index] = addr; } } playerList[phase][addr] = true; } } // costs a bit, but will only invoke once, and paid by operator function aggregateIcexWinners(uint256 phase) external onlyCaller notPaused { for(uint i = 0 ; i < phase; ++i) { address[] memory candidates = winnerList[i]; for(uint j = 0; j < candidates.length; ++j) { if (!playerList[phase][candidates[j]]) { if (winnerList[phase].length < winnerCount) { winnerList[phase].push(candidates[j]); } else { uint index = randomIndex(candidates[j], winnerCount * (phase + 1)); if (index < winnerCount){ winnerList[phase][index] = candidates[j]; } } } } } } function getWinners(uint256 phase) external view returns(address[] memory) { return winnerList[phase]; } function randomIndex(address addr, uint number) internal returns (uint) { uint randomnumber = uint(keccak256(abi.encodePacked(now, addr, nonce))) % number; nonce++; return randomnumber; } }
pragma solidity >=0.4.25 <0.6.0; contract Migrations { address public owner; uint public last_completed_migration; modifier restricted() { if (msg.sender == owner) _; } constructor() public { owner = msg.sender; } function setCompleted(uint completed) public restricted { last_completed_migration = completed; } function upgrade(address new_address) public restricted { Migrations upgraded = Migrations(new_address); upgraded.setCompleted(last_completed_migration); } }
pragma solidity ^0.5.8; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, "SafeMath: division by zero"); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b != 0, "SafeMath: modulo by zero"); return a % b; } }
pragma solidity ^0.5.8; import './SafeMath.sol'; contract VDPoolBasic { function price() external view returns(uint256); function currentLevel() external view returns(uint256); function currentLevelRemaining() external view returns(uint256); } contract VDPoolThrottler { function getCooldownBlocks() external view returns(uint256); } contract VDPool is VDPoolBasic { using SafeMath for uint256; /* * STATES */ address public master; address public caller; uint256 public ethCapacity = 0; uint256 public basicExchangeRate = 0; uint256 public currentLevel = 0; uint256 public currentLevelStartBlock = 0; uint256 public cooldownBlocks = 0; // by default wait 1 block before enterring next level VDPoolThrottler throttlerContract; uint256 public currentPrice = 0; uint256 public currentLevelRemaining = 0; bool public paused; /* * EVENTS */ event LevelDescend(uint256 level, uint256 price, uint256 startBlock, uint256 cooldownBlocks, uint256 currentBlock); /* * MODIFIERS */ /// only master can call the function modifier onlyOwner { require(master == msg.sender, "only owner can call"); _; } /// only master can call the function modifier onlyCaller { require(caller == msg.sender, "only caller can call"); _; } /// function not paused modifier notPaused { require(paused == false, "function is paused"); _; } constructor(uint256 _ethCapacity, uint256 _currentLevel, uint256 _basicExchangeRate) public { master = msg.sender; ethCapacity = _ethCapacity; currentLevel = _currentLevel; currentPrice = (currentLevel.sub(1)).mul(10).add(_basicExchangeRate); currentLevelRemaining = _ethCapacity; basicExchangeRate = _basicExchangeRate; } function setPause(bool value) external onlyOwner { paused = value; } function setCaller(address who) external onlyOwner { caller = who; } function setOwner(address who) external onlyOwner { master = who; } function setCooldownBlocks(uint256 bn) external onlyOwner { cooldownBlocks = bn; } function setThrottlerContract(address contractAddress) external onlyOwner { throttlerContract = VDPoolThrottler(contractAddress); } function price() external view returns (uint256) { uint256 tokens = computeTokenAmount(1 ether); return tokens; } function computeTokenAmount(uint256 ethAmount) public view returns (uint256) { uint256 tokens = ethAmount.mul(currentPrice); return tokens; } function buyToken(uint256 ethAmount) external onlyCaller notPaused returns (uint256) { require(currentLevelStartBlock <= block.number, "cooling down"); uint256 eth = ethAmount; uint256 tokens = 0; while (eth > 0) { if (eth <= currentLevelRemaining) { tokens = tokens + computeTokenAmount(eth); currentLevelRemaining = currentLevelRemaining.sub(eth); eth = 0; }else { tokens = tokens + computeTokenAmount(currentLevelRemaining); eth = eth.sub(currentLevelRemaining); currentLevelRemaining = 0; } if (currentLevelRemaining == 0){ currentLevel = currentLevel.sub(1); require (currentLevel > 0, "end of levels"); currentPrice = (currentLevel.sub(1)).mul(10).add(basicExchangeRate); currentLevelRemaining = ethCapacity; if (address(throttlerContract) != address(0)) { cooldownBlocks = throttlerContract.getCooldownBlocks(); } if (currentLevelStartBlock > block.number ) { // handling the case of desending multiple level in one tx currentLevelStartBlock = currentLevelStartBlock + cooldownBlocks; } else { currentLevelStartBlock = block.number + cooldownBlocks; } emit LevelDescend(currentLevel, currentPrice, currentLevelStartBlock, cooldownBlocks, block.number); } } return tokens; } }
pragma solidity ^0.5.8; contract VDPoolThrottler { function getCooldownBlocks() external view returns(uint256); } contract DummyThrottler is VDPoolThrottler { function getCooldownBlocks() external view returns(uint256) { return 1; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"currentPhase","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newSettler","type":"address"}],"name":"setSettler","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"setOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isSignedUp","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"reservedAccount","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"currentBonusRate","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"firstBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"settled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"bonusRate","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"phase","type":"uint256"}],"name":"invitationWinners","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"},{"name":"_rootFee","type":"uint256"},{"name":"_signUpFee","type":"uint256"},{"name":"_ancestorBonus","type":"uint256"},{"name":"_referrerBonus","type":"uint256"},{"name":"_invitationRate","type":"uint256"}],"name":"setInvitationContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"currentRemainingEth","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"name":"topInvestor","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"saleStarted","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rootFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"},{"name":"_luckyDrawRate","type":"uint256"}],"name":"setLuckyDrawContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"currentSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"recipient","type":"address"}],"name":"issueToken","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"blockPerPhase","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"phase","type":"uint256"}],"name":"settle","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"signUpFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_firstBlock","type":"uint256"}],"name":"start","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"totalInvestment","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"address"}],"name":"addressInvestment","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"currentLevel","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"price","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"},{"name":"_topInvestorCounter","type":"uint16"},{"name":"_topInvestorRate","type":"uint256"},{"name":"_foundationRate","type":"uint256"}],"name":"setVdPoolContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"settler","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"phase","type":"uint256"}],"name":"topInvestors","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"crBonus","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"ethBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"phase","type":"uint256"}],"name":"luckyWinners","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"master","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"drain","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"reservedAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"foundationAddr","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_name","type":"string"},{"name":"_symbol","type":"string"},{"name":"_blockPerPhase","type":"uint256"},{"name":"_totalSupply","type":"uint256"},{"name":"_reservedAmount","type":"uint256"},{"name":"_reservedAccount","type":"address"},{"name":"_foundationAddr","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[],"name":"SaleStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"phase","type":"uint256"},{"indexed":false,"name":"ethDistributed","type":"uint256"},{"indexed":false,"name":"ethToPool","type":"uint256"}],"name":"Settled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"phase","type":"uint256"},{"indexed":true,"name":"who","type":"address"},{"indexed":false,"name":"ethAmount","type":"uint256"}],"name":"LuckydrawSettle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"phase","type":"uint256"},{"indexed":true,"name":"who","type":"address"},{"indexed":false,"name":"ethAmount","type":"uint256"}],"name":"InvitationSettle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"phase","type":"uint256"},{"indexed":true,"name":"who","type":"address"},{"indexed":false,"name":"ethAmount","type":"uint256"}],"name":"InvestorSettle","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"}]
Contract Creation Code
6080604052604051806080016040528060c860ff168152602001609660ff168152602001606460ff168152602001603260ff1681525060059060046200004792919062000447565b506000600c556000600d55600060185560006019556000601a556000601b556000601c60006101000a81548161ffff021916908361ffff160217905550604b601c60026101000a81548161ffff021916908361ffff160217905550600a601d556014601e55600a601f556046602055601460215560326022556000602355348015620000d257600080fd5b506040516200614438038062006144833981018060405260e0811015620000f857600080fd5b8101908080516401000000008111156200011157600080fd5b828101905060208101848111156200012857600080fd5b81518560018202830111640100000000821117156200014657600080fd5b505092919060200180516401000000008111156200016357600080fd5b828101905060208101848111156200017a57600080fd5b81518560018202830111640100000000821117156200019857600080fd5b5050929190602001805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505033600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866007908051906020019062000291929190620004f7565b508560089080519060200190620002aa929190620004f7565b50836000819055508260018190555082600a8190555081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a5460036000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a546040518082815260200191505060405180910390a380600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600d8190555050505050505050620005da565b82805482825590600052602060002090600f01601090048101928215620004e45791602002820160005b83821115620004b257835183826101000a81548161ffff021916908360ff160217905550926020019260020160208160010104928301926001030262000471565b8015620004e25782816101000a81549061ffff0219169055600201602081600101049283019260010302620004b2565b505b509050620004f391906200057e565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200053a57805160ff19168380011785556200056b565b828001600101855582156200056b579182015b828111156200056a5782518255916020019190600101906200054d565b5b5090506200057a9190620005b2565b5090565b620005af91905b80821115620005ab57600081816101000a81549061ffff02191690555060010162000585565b5090565b90565b620005d791905b80821115620005d3576000816000905550600101620005b9565b5090565b90565b615b5a80620005ea6000396000f3fe6080604052600436106102725760003560e01c8063771282f61161014f578063a7848dca116100c1578063c25225981161007a578063c252259814610ed5578063dd62ed3e14610f65578063ee97f7f314610fea578063f6b19c7414611041578063f92c45b71461107c578063feafb79b146110a757610272565b8063a7848dca14610c6c578063a9059cbb14610cdf578063ab221a7614610d3a578063ad012f1c14610d91578063ba750fb214610e21578063bf17f2f214610e8657610272565b806395805dad1161011357806395805dad14610a7757806395d89b4114610ab25780639b2b524f14610b425780639c42abb314610ba75780639dc4b9c914610c16578063a035b1fe14610c4157610272565b8063771282f61461097757806389034082146109a25780638d5a1fb9146109e65780638df8280014610a115780639278b58714610a4c57610272565b806328345780116101e85780634152dc9f116101ac5780634152dc9f146107ad5780634cd1b1d2146107d85780635c474f9e1461085d5780635faeb3351461088c5780636b6bdec2146108b757806370a082311461091257610272565b806328345780146105bf5780632896ef47146106125780633087110514610669578063313ce567146106f9578063386914601461072a57610272565b806318160ddd1161023a57806318160ddd14610435578063191d1cb4146104605780631bec0d391461048f5780631d902fe9146104e6578063231b02681461051957806323b872dd1461054457610272565b8063055ad42e1461027d57806306fdde03146102a857806307f19eba14610338578063095ea7b31461038957806313af4035146103e4575b61027b336110fe565b005b34801561028957600080fd5b50610292611a91565b6040518082815260200191505060405180910390f35b3480156102b457600080fd5b506102bd611ab1565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102fd5780820151818401526020810190506102e2565b50505050905090810190601f16801561032a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561034457600080fd5b506103876004803603602081101561035b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b4f565b005b34801561039557600080fd5b506103e2600480360360408110156103ac57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611c56565b005b3480156103f057600080fd5b506104336004803603602081101561040757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611dd8565b005b34801561044157600080fd5b5061044a611edf565b6040518082815260200191505060405180910390f35b34801561046c57600080fd5b50610475611ee5565b604051808215151515815260200191505060405180910390f35b34801561049b57600080fd5b506104a4611fc6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104f257600080fd5b506104fb611fec565b604051808261ffff1661ffff16815260200191505060405180910390f35b34801561052557600080fd5b5061052e612048565b6040518082815260200191505060405180910390f35b34801561055057600080fd5b506105bd6004803603606081101561056757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061204e565b005b3480156105cb57600080fd5b506105f8600480360360208110156105e257600080fd5b810190808035906020019092919050505061230e565b604051808215151515815260200191505060405180910390f35b34801561061e57600080fd5b5061064b6004803603602081101561063557600080fd5b810190808035906020019092919050505061232e565b604051808261ffff1661ffff16815260200191505060405180910390f35b34801561067557600080fd5b506106a26004803603602081101561068c57600080fd5b8101908080359060200190929190505050612363565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156106e55780820151818401526020810190506106ca565b505050509050019250505060405180910390f35b34801561070557600080fd5b5061070e612470565b604051808260ff1660ff16815260200191505060405180910390f35b34801561073657600080fd5b506107ab600480360360c081101561074d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190505050612475565b005b3480156107b957600080fd5b506107c26125a4565b6040518082815260200191505060405180910390f35b3480156107e457600080fd5b5061081b600480360360408110156107fb57600080fd5b81019080803590602001909291908035906020019092919050505061264e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561086957600080fd5b50610872612699565b604051808215151515815260200191505060405180910390f35b34801561089857600080fd5b506108a16126b3565b6040518082815260200191505060405180910390f35b3480156108c357600080fd5b50610910600480360360408110156108da57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506126b9565b005b34801561091e57600080fd5b506109616004803603602081101561093557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506127c8565b6040518082815260200191505060405180910390f35b34801561098357600080fd5b5061098c612811565b6040518082815260200191505060405180910390f35b6109e4600480360360208110156109b857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110fe565b005b3480156109f257600080fd5b506109fb612817565b6040518082815260200191505060405180910390f35b348015610a1d57600080fd5b50610a4a60048036036020811015610a3457600080fd5b810190808035906020019092919050505061281d565b005b348015610a5857600080fd5b50610a61612c68565b6040518082815260200191505060405180910390f35b348015610a8357600080fd5b50610ab060048036036020811015610a9a57600080fd5b8101908080359060200190929190505050612c6e565b005b348015610abe57600080fd5b50610ac7612e5a565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b07578082015181840152602081019050610aec565b50505050905090810190601f168015610b345780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610b4e57600080fd5b50610b9160048036036020811015610b6557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ef8565b6040518082815260200191505060405180910390f35b348015610bb357600080fd5b50610c0060048036036040811015610bca57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f10565b6040518082815260200191505060405180910390f35b348015610c2257600080fd5b50610c2b612f35565b6040518082815260200191505060405180910390f35b348015610c4d57600080fd5b50610c56612fdf565b6040518082815260200191505060405180910390f35b348015610c7857600080fd5b50610cdd60048036036080811015610c8f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803561ffff1690602001909291908035906020019092919080359060200190929190505050613089565b005b348015610ceb57600080fd5b50610d3860048036036040811015610d0257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506131be565b005b348015610d4657600080fd5b50610d4f613f05565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610d9d57600080fd5b50610dca60048036036020811015610db457600080fd5b8101908080359060200190929190505050613f2b565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610e0d578082015181840152602081019050610df2565b505050509050019250505060405180910390f35b348015610e2d57600080fd5b50610e7060048036036020811015610e4457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613fcc565b6040518082815260200191505060405180910390f35b348015610e9257600080fd5b50610ebf60048036036020811015610ea957600080fd5b8101908080359060200190929190505050613fe4565b6040518082815260200191505060405180910390f35b348015610ee157600080fd5b50610f0e60048036036020811015610ef857600080fd5b8101908080359060200190929190505050613ffc565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610f51578082015181840152602081019050610f36565b505050509050019250505060405180910390f35b348015610f7157600080fd5b50610fd460048036036040811015610f8857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614109565b6040518082815260200191505060405180910390f35b348015610ff657600080fd5b50610fff614190565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561104d57600080fd5b5061107a6004803603602081101561106457600080fd5b81019080803590602001909291905050506141b6565b005b34801561108857600080fd5b50611091614285565b6040518082815260200191505060405180910390f35b3480156110b357600080fd5b506110bc61428b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b611106612699565b611178576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f53616c65206973206e6f7420696e2070726f677265737300000000000000000081525060200191505060405180910390fd5b67016345785d8a00003410156111f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f6d696e696d616c206f6620302e3120657468207265717569726564000000000081525060200191505060405180910390fd5b6000611200611a91565b905060003490506112128334846142b1565b60058054905082101561134357600061127b606461126d6005868154811061123657fe5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff1685614c3290919063ffffffff16565b614cb890919063ffffffff16565b90506112908183614d4790919063ffffffff16565b91506000601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156113415760128490806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505b505b6000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d296bf1836040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b1580156113ba57600080fd5b505af11580156113ce573d6000803e3d6000fd5b505050506040513d60208110156113e457600080fd5b8101908080519060200190929190505050905061144934601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506114a181600154614d4790919063ffffffff16565b6001819055506000546001541115611521576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f65786365656420746f6b656e20737570706c792063617000000000000000000081525060200191505060405180910390fd5b60058054905083101561184a5760006115f960646115eb601c60029054906101000a900461ffff1661ffff166115dd6005898154811061155d57fe5b90600052602060002090601091828204019190066002029054906101000a900461ffff1660640161ffff166115cf60058b8154811061159857fe5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff1689614c3290919063ffffffff16565b614cb890919063ffffffff16565b614c3290919063ffffffff16565b614cb890919063ffffffff16565b90506000811015801561160b57508082115b61167d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f696e76616c696420637220626f6e75732076616c75650000000000000000000081525060200191505060405180910390fd5b6116e3611695601d5483614cb890919063ffffffff16565b601160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061178a8161177c84600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b614dcf90919063ffffffff16565b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef61182f8486614dcf90919063ffffffff16565b6040518082815260200191505060405180910390a350611945565b61189c81600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35b600061196f606461196160225434614c3290919063ffffffff16565b614cb890919063ffffffff16565b905061197a81614e58565b6119b2816119a434600e600089815260200190815260200160002054614d4790919063ffffffff16565b614dcf90919063ffffffff16565b600e600086815260200190815260200160002081905550601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166366a5ef2f86866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611a7257600080fd5b505af1158015611a86573d6000803e3d6000fd5b505050505050505050565b6000611aac600d54600c544303614cb890919063ffffffff16565b905090565b60078054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b475780601f10611b1c57610100808354040283529160200191611b47565b820191906000526020600020905b815481529060010190602001808311611b2a57829003601f168201915b505050505081565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c12576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6f6e6c79206d61737465722063616e2063616c6c00000000000000000000000081525060200191505060405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008114158015611ce457506000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b15611cee57600080fd5b80600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a35050565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e9b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6f6e6c79206d61737465722063616e2063616c6c00000000000000000000000081525060200191505060405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60005481565b6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166322b6ffca336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611f8657600080fd5b505afa158015611f9a573d6000803e3d6000fd5b505050506040513d6020811015611fb057600080fd5b8101908080519060200190929190505050905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080611ff7611a91565b905060058054905081101561203f576005818154811061201357fe5b90600052602060002090601091828204019190066002029054906101000a900461ffff16915050612045565b60009150505b90565b600c5481565b6060600481016000369050101561206457600080fd5b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061213783600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506121cc83600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614dcf90919063ffffffff16565b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506122228382614dcf90919063ffffffff16565b600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a35050505050565b60146020528060005260406000206000915054906101000a900460ff1681565b6005818154811061233b57fe5b9060005260206000209060109182820401919006600202915054906101000a900461ffff1681565b6060601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166337caa8b6836040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b1580156123d857600080fd5b505afa1580156123ec573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561241657600080fd5b81019080805164010000000081111561242e57600080fd5b8281019050602081018481111561244457600080fd5b815185602082028301116401000000008211171561246157600080fd5b50509291905050509050919050565b601281565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612538576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6f6e6c79206d61737465722063616e2063616c6c00000000000000000000000081525060200191505060405180910390fd5b85601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550846019819055508360188190555082601b8190555081601a8190555080602081905550505050505050565b6000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166328d807ad6040518163ffffffff1660e01b815260040160206040518083038186803b15801561260e57600080fd5b505afa158015612622573d6000803e3d6000fd5b505050506040513d602081101561263857600080fd5b8101908080519060200190929190505050905090565b6013602052816000526040600020818154811061266757fe5b906000526020600020016000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600c541180156126ae5750600c544310155b905090565b60195481565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461277c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6f6e6c79206d61737465722063616e2063616c6c00000000000000000000000081525060200191505060405180910390fd5b81601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601f819055505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60015481565b600d5481565b600073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806128c757503373ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b612939576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f6f6e6c7920736574746c65722063616e2063616c6c000000000000000000000081525060200191505060405180910390fd5b60008110156129b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f696e76616c69642070686173650000000000000000000000000000000000000081525060200191505060405180910390fd5b6129b8611a91565b8110612a2c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f7068617365206e6f74206d61747572656420796574000000000000000000000081525060200191505060405180910390fd5b6014600082815260200190815260200160002060009054906101000a900460ff1615612ac0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f706861736520616c726561647920736574746c6564000000000000000000000081525060200191505060405180910390fd5b60008090506000809050600580549050831015612ba0576000600e6000858152602001908152602001600020541115612b8557612b39601e5460058054905001612b2b600580549050600e600088815260200190815260200160002054614c3290919063ffffffff16565b614cb890919063ffffffff16565b9050612b5081602354614d4790919063ffffffff16565b602381905550612b84612b7f82600e600087815260200190815260200160002054614dcf90919063ffffffff16565b614e58565b5b600160058054905003831415612b9b5760235491505b612bc0565b600e6000848152602001908152602001600020549150612bbf83614ee8565b5b6000821115612bf057612bdb838360058054905086106150e8565b612be583836153f5565b612bef8383615710565b5b60016014600085815260200190815260200160002060006101000a81548160ff0219169083151502179055507f321f57f44af402708b8b3bad0bd10012cd568d8696946e26edeb86178bb7c27e83838360405180848152602001838152602001828152602001935050505060405180910390a1505050565b60185481565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612d31576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6f6e6c79206d61737465722063616e2063616c6c00000000000000000000000081525060200191505060405180910390fd5b612d39612699565b15612dac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f53616c6520686173206e6f74207374617274656420796574000000000000000081525060200191505060405180910390fd5b6000600c5414612e24576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f5265736f6e616e636520616c726561647920737461727465640000000000000081525060200191505060405180910390fd5b80600c819055507f912ee23dde46ec889d6748212cce445d667f7041597691dc89e8549ad8bc0acb60405160405180910390a150565b60088054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612ef05780601f10612ec557610100808354040283529160200191612ef0565b820191906000526020600020905b815481529060010190602001808311612ed357829003601f168201915b505050505081565b60106020528060005260406000206000915090505481565b600f602052816000526040600020602052806000526040600020600091509150505481565b6000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc4b9c96040518163ffffffff1660e01b815260040160206040518083038186803b158015612f9f57600080fd5b505afa158015612fb3573d6000803e3d6000fd5b505050506040513d6020811015612fc957600080fd5b8101908080519060200190929190505050905090565b6000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a035b1fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561304957600080fd5b505afa15801561305d573d6000803e3d6000fd5b505050506040513d602081101561307357600080fd5b8101908080519060200190929190505050905090565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461314c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6f6e6c79206d61737465722063616e2063616c6c00000000000000000000000081525060200191505060405180910390fd5b83601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082601c60006101000a81548161ffff021916908361ffff160217905550816021819055508060228190555050505050565b604060048101600036905010156131d457600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613539576019548214613262576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180615adf602f913960400191505060405180910390fd5b6132b482600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614dcf90919063ffffffff16565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061334982600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36133f9611ee5565b1561346c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f6e6f742071756c6966696c6564206173206e657720726f6f740000000000000081525060200191505060405180910390fd5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638d7f4b53336134b3611a91565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561351c57600080fd5b505af1158015613530573d6000803e3d6000fd5b50505050613f00565b601854821480156136205750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166322b6ffca846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156135e457600080fd5b505afa1580156135f8573d6000803e3d6000fd5b505050506040513d602081101561360e57600080fd5b81019080805190602001909291905050505b8015613631575061362f611ee5565b155b15613d6f57600082905061368d81600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614dcf90919063ffffffff16565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006136da611a91565b905060008190506005805490508210156136fa5760016005805490500390505b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390859294873385856040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001945050505050600060405180830381600087803b1580156137df57600080fd5b505af11580156137f3573d6000803e3d6000fd5b5050505061384b601a54600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601a546040518082815260200191505060405180910390a361390a601a5484614dcf90919063ffffffff16565b92506060601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ff747cc0336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060006040518083038186803b1580156139ad57600080fd5b505afa1580156139c1573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060208110156139eb57600080fd5b810190808051640100000000811115613a0357600080fd5b82810190506020810184811115613a1957600080fd5b8151856020820283011164010000000082111715613a3657600080fd5b5050929190505050905060008090505b815181108015613a585750601b548510155b15613c0557600073ffffffffffffffffffffffffffffffffffffffff16828281518110613a8157fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415613aaa57613c05565b613b11601b5460036000858581518110613ac057fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b60036000848481518110613b2157fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550818181518110613b7357fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601b546040518082815260200191505060405180910390a3613bf6601b5486614dcf90919063ffffffff16565b94508080600101915050613a46565b50613c7a8460036000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b60036000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a350505050613eff565b613dc182600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614dcf90919063ffffffff16565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e5682600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35b5b505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060136000838152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015613fc057602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311613f76575b50505050509050919050565b60116020528060005260406000206000915090505481565b600e6020528060005260406000206000915090505481565b6060601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636b1426a4836040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b15801561407157600080fd5b505afa158015614085573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060208110156140af57600080fd5b8101908080516401000000008111156140c757600080fd5b828101905060208101848111156140dd57600080fd5b81518560208202830111640100000000821117156140fa57600080fd5b50509291905050509050919050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614614279576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6f6e6c79206d61737465722063616e2063616c6c00000000000000000000000081525060200191505060405180910390fd5b61428281614e58565b50565b600a5481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008190506005805490508210156142cf5760016005805490500390505b61433283600f600084815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b600f600083815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008090505b6013600083815260200190815260200160002080549050811015614709578473ffffffffffffffffffffffffffffffffffffffff166013600084815260200190815260200160002082815481106143df57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156146fc5760008190505b60008111156146f457600f6000848152602001908152602001600020600060136000868152602001908152602001600020600184038154811061446b57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600f6000858152602001908152602001600020600060136000878152602001908152602001600020848154811061450457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156146e15760136000848152602001908152602001600020600182038154811061459157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166013600085815260200190815260200160002082815481106145da57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660136000868152602001908152602001600020838154811061462357fe5b90600052602060002001600060136000888152602001908152602001600020600186038154811061465057fe5b9060005260206000200160008491906101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508391906101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050506146e6565b6146f4565b80806001900391505061442c565b505050614c2d565b808060010191505061438c565b50601c60009054906101000a900461ffff1661ffff16601360008381526020019081526020016000208054905010156147b857601360008281526020019081526020016000208490806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050614943565b600f600082815260200190815260200160002060006013600084815260200190815260200160002060016013600086815260200190815260200160002080549050038154811061480457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600f600083815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156149425783601360008381526020019081526020016000206001601360008581526020019081526020016000208054905003815481106148f957fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b6000600160136000848152602001908152602001600020805490500390505b6000811115614c2a57600f600083815260200190815260200160002060006013600085815260200190815260200160002060018403815481106149a157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600f60008481526020019081526020016000206000601360008681526020019081526020016000208481548110614a3a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115614c1757601360008381526020019081526020016000206001820381548110614ac757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601360008481526020019081526020016000208281548110614b1057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601360008581526020019081526020016000208381548110614b5957fe5b906000526020600020016000601360008781526020019081526020016000206001860381548110614b8657fe5b9060005260206000200160008491906101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508391906101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050614c1c565b614c2a565b808060019003915050614962565b50505b505050565b600080831415614c455760009050614cb2565b6000828402905082848281614c5657fe5b0414614cad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180615b0e6021913960400191505060405180910390fd5b809150505b92915050565b6000808211614d2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b6000828481614d3a57fe5b0490508091505092915050565b600080828401905083811015614dc5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600082821115614e47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b600082840390508091505092915050565b6000614e9b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16615ad4565b90508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015614ee3573d6000803e3d6000fd5b505050565b600580549050811080614f045750601d54600580549050018110155b15614f0e576150e5565b60008090505b6012805490508110156150e357600060128281548110614f3057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050614fee601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3508080600101915050614f14565b505b50565b801561517c57601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638cf2371c846040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561516357600080fd5b505af1158015615177573d6000803e3d6000fd5b505050505b6060601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636b1426a4856040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b1580156151f157600080fd5b505afa158015615205573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561522f57600080fd5b81019080805164010000000081111561524757600080fd5b8281019050602081018481111561525d57600080fd5b815185602082028301116401000000008211171561527a57600080fd5b5050929190505050905060006152c182516152b360646152a5601f5489614c3290919063ffffffff16565b614cb890919063ffffffff16565b614cb890919063ffffffff16565b9050600082511480156152d45750600081115b156152e9576152e281614e58565b50506153f0565b60008090505b82518110156153ec57600061532c84838151811061530957fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16615ad4565b90508073ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015615374573d6000803e3d6000fd5b5083828151811061538157fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff167f1bf242fce473b656e6d1d08dcb25b01042413f08c12e2818d923a6e29d4c1afb8885604051808381526020018281526020019250505060405180910390a25080806001019150506152ef565b5050505b505050565b600061541f606461541160215485614c3290919063ffffffff16565b614cb890919063ffffffff16565b9050600060136000858152602001908152602001600020805490501480156154475750600081115b1561545b5761545581614e58565b5061570c565b6000601360008581526020019081526020016000208054905090506060601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166393c1e292836040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b1580156154eb57600080fd5b505afa1580156154ff573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561552957600080fd5b81019080805164010000000081111561554157600080fd5b8281019050602081018481111561555757600080fd5b815185602082028301116401000000008211171561557457600080fd5b5050929190505050905060008090505b601360008781526020019081526020016000208054905081101561570757600061560b6013600089815260200190815260200160002083815481106155c557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16615ad4565b905060006156598561564b8761563d88888151811061562657fe5b60200260200101518b614c3290919063ffffffff16565b614cb890919063ffffffff16565b614cb890919063ffffffff16565b90508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156156a1573d6000803e3d6000fd5b508173ffffffffffffffffffffffffffffffffffffffff167f1eac6055421b211dbe224185ed987d950ab8cdad41c7e6cfa729cf3c92c5eed78983604051808381526020018281526020019250505060405180910390a250508080600101915050615584565b505050505b5050565b600061573a606461572c60205485614c3290919063ffffffff16565b614cb890919063ffffffff16565b90506060601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166337caa8b6856040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b1580156157b157600080fd5b505afa1580156157c5573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060208110156157ef57600080fd5b81019080805164010000000081111561580757600080fd5b8281019050602081018481111561581d57600080fd5b815185602082028301116401000000008211171561583a57600080fd5b50509291905050509050600081511480156158555750600082115b1561586a5761586382614e58565b5050615ad0565b6000815190506060601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166393c1e292836040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b1580156158e557600080fd5b505afa1580156158f9573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561592357600080fd5b81019080805164010000000081111561593b57600080fd5b8281019050602081018481111561595157600080fd5b815185602082028301116401000000008211171561596e57600080fd5b5050929190505050905060008090505b8151811015615aca5760006159d3846159c5866159b78787815181106159a057fe5b60200260200101518b614c3290919063ffffffff16565b614cb890919063ffffffff16565b614cb890919063ffffffff16565b90506000615a098684815181106159e657fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16615ad4565b90508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015615a51573d6000803e3d6000fd5b50858381518110615a5e57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff167f70098ec6480a4d5390c19f0a21daad08444bf356e3cf48f99b4e65517edb1f8d8a84604051808381526020018281526020019250505060405180910390a25050808060010191505061597e565b50505050505b5050565b600081905091905056fe6f6e6c792076616c69642076616c756520697320726f6f742066656520666f72207468697320726563697069656e74536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a165627a7a72305820e5035ff13373008b1863bfb433199e29c407914cd84c4b0fbdaa3b093ece0796002900000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000b3b000000000000000000000000000000000000000001027e72f1f12813088000000000000000000000000000000000000000000000005a790ea17ace06a960000000000000000000000000000000aa3e3ad42952958f2d81357bf8cd5dcb77ed93000000000000000000000000079756ba86affc6cdda424aa7a061fec56077f6130000000000000000000000000000000000000000000000000000000000000011562d44696d656e73696f6e20436c6f756400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035644430000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102725760003560e01c8063771282f61161014f578063a7848dca116100c1578063c25225981161007a578063c252259814610ed5578063dd62ed3e14610f65578063ee97f7f314610fea578063f6b19c7414611041578063f92c45b71461107c578063feafb79b146110a757610272565b8063a7848dca14610c6c578063a9059cbb14610cdf578063ab221a7614610d3a578063ad012f1c14610d91578063ba750fb214610e21578063bf17f2f214610e8657610272565b806395805dad1161011357806395805dad14610a7757806395d89b4114610ab25780639b2b524f14610b425780639c42abb314610ba75780639dc4b9c914610c16578063a035b1fe14610c4157610272565b8063771282f61461097757806389034082146109a25780638d5a1fb9146109e65780638df8280014610a115780639278b58714610a4c57610272565b806328345780116101e85780634152dc9f116101ac5780634152dc9f146107ad5780634cd1b1d2146107d85780635c474f9e1461085d5780635faeb3351461088c5780636b6bdec2146108b757806370a082311461091257610272565b806328345780146105bf5780632896ef47146106125780633087110514610669578063313ce567146106f9578063386914601461072a57610272565b806318160ddd1161023a57806318160ddd14610435578063191d1cb4146104605780631bec0d391461048f5780631d902fe9146104e6578063231b02681461051957806323b872dd1461054457610272565b8063055ad42e1461027d57806306fdde03146102a857806307f19eba14610338578063095ea7b31461038957806313af4035146103e4575b61027b336110fe565b005b34801561028957600080fd5b50610292611a91565b6040518082815260200191505060405180910390f35b3480156102b457600080fd5b506102bd611ab1565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102fd5780820151818401526020810190506102e2565b50505050905090810190601f16801561032a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561034457600080fd5b506103876004803603602081101561035b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b4f565b005b34801561039557600080fd5b506103e2600480360360408110156103ac57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611c56565b005b3480156103f057600080fd5b506104336004803603602081101561040757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611dd8565b005b34801561044157600080fd5b5061044a611edf565b6040518082815260200191505060405180910390f35b34801561046c57600080fd5b50610475611ee5565b604051808215151515815260200191505060405180910390f35b34801561049b57600080fd5b506104a4611fc6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104f257600080fd5b506104fb611fec565b604051808261ffff1661ffff16815260200191505060405180910390f35b34801561052557600080fd5b5061052e612048565b6040518082815260200191505060405180910390f35b34801561055057600080fd5b506105bd6004803603606081101561056757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061204e565b005b3480156105cb57600080fd5b506105f8600480360360208110156105e257600080fd5b810190808035906020019092919050505061230e565b604051808215151515815260200191505060405180910390f35b34801561061e57600080fd5b5061064b6004803603602081101561063557600080fd5b810190808035906020019092919050505061232e565b604051808261ffff1661ffff16815260200191505060405180910390f35b34801561067557600080fd5b506106a26004803603602081101561068c57600080fd5b8101908080359060200190929190505050612363565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156106e55780820151818401526020810190506106ca565b505050509050019250505060405180910390f35b34801561070557600080fd5b5061070e612470565b604051808260ff1660ff16815260200191505060405180910390f35b34801561073657600080fd5b506107ab600480360360c081101561074d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190505050612475565b005b3480156107b957600080fd5b506107c26125a4565b6040518082815260200191505060405180910390f35b3480156107e457600080fd5b5061081b600480360360408110156107fb57600080fd5b81019080803590602001909291908035906020019092919050505061264e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561086957600080fd5b50610872612699565b604051808215151515815260200191505060405180910390f35b34801561089857600080fd5b506108a16126b3565b6040518082815260200191505060405180910390f35b3480156108c357600080fd5b50610910600480360360408110156108da57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506126b9565b005b34801561091e57600080fd5b506109616004803603602081101561093557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506127c8565b6040518082815260200191505060405180910390f35b34801561098357600080fd5b5061098c612811565b6040518082815260200191505060405180910390f35b6109e4600480360360208110156109b857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110fe565b005b3480156109f257600080fd5b506109fb612817565b6040518082815260200191505060405180910390f35b348015610a1d57600080fd5b50610a4a60048036036020811015610a3457600080fd5b810190808035906020019092919050505061281d565b005b348015610a5857600080fd5b50610a61612c68565b6040518082815260200191505060405180910390f35b348015610a8357600080fd5b50610ab060048036036020811015610a9a57600080fd5b8101908080359060200190929190505050612c6e565b005b348015610abe57600080fd5b50610ac7612e5a565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b07578082015181840152602081019050610aec565b50505050905090810190601f168015610b345780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610b4e57600080fd5b50610b9160048036036020811015610b6557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ef8565b6040518082815260200191505060405180910390f35b348015610bb357600080fd5b50610c0060048036036040811015610bca57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f10565b6040518082815260200191505060405180910390f35b348015610c2257600080fd5b50610c2b612f35565b6040518082815260200191505060405180910390f35b348015610c4d57600080fd5b50610c56612fdf565b6040518082815260200191505060405180910390f35b348015610c7857600080fd5b50610cdd60048036036080811015610c8f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803561ffff1690602001909291908035906020019092919080359060200190929190505050613089565b005b348015610ceb57600080fd5b50610d3860048036036040811015610d0257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506131be565b005b348015610d4657600080fd5b50610d4f613f05565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610d9d57600080fd5b50610dca60048036036020811015610db457600080fd5b8101908080359060200190929190505050613f2b565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610e0d578082015181840152602081019050610df2565b505050509050019250505060405180910390f35b348015610e2d57600080fd5b50610e7060048036036020811015610e4457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613fcc565b6040518082815260200191505060405180910390f35b348015610e9257600080fd5b50610ebf60048036036020811015610ea957600080fd5b8101908080359060200190929190505050613fe4565b6040518082815260200191505060405180910390f35b348015610ee157600080fd5b50610f0e60048036036020811015610ef857600080fd5b8101908080359060200190929190505050613ffc565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610f51578082015181840152602081019050610f36565b505050509050019250505060405180910390f35b348015610f7157600080fd5b50610fd460048036036040811015610f8857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614109565b6040518082815260200191505060405180910390f35b348015610ff657600080fd5b50610fff614190565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561104d57600080fd5b5061107a6004803603602081101561106457600080fd5b81019080803590602001909291905050506141b6565b005b34801561108857600080fd5b50611091614285565b6040518082815260200191505060405180910390f35b3480156110b357600080fd5b506110bc61428b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b611106612699565b611178576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f53616c65206973206e6f7420696e2070726f677265737300000000000000000081525060200191505060405180910390fd5b67016345785d8a00003410156111f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f6d696e696d616c206f6620302e3120657468207265717569726564000000000081525060200191505060405180910390fd5b6000611200611a91565b905060003490506112128334846142b1565b60058054905082101561134357600061127b606461126d6005868154811061123657fe5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff1685614c3290919063ffffffff16565b614cb890919063ffffffff16565b90506112908183614d4790919063ffffffff16565b91506000601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156113415760128490806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505b505b6000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d296bf1836040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b1580156113ba57600080fd5b505af11580156113ce573d6000803e3d6000fd5b505050506040513d60208110156113e457600080fd5b8101908080519060200190929190505050905061144934601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506114a181600154614d4790919063ffffffff16565b6001819055506000546001541115611521576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f65786365656420746f6b656e20737570706c792063617000000000000000000081525060200191505060405180910390fd5b60058054905083101561184a5760006115f960646115eb601c60029054906101000a900461ffff1661ffff166115dd6005898154811061155d57fe5b90600052602060002090601091828204019190066002029054906101000a900461ffff1660640161ffff166115cf60058b8154811061159857fe5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff1689614c3290919063ffffffff16565b614cb890919063ffffffff16565b614c3290919063ffffffff16565b614cb890919063ffffffff16565b90506000811015801561160b57508082115b61167d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f696e76616c696420637220626f6e75732076616c75650000000000000000000081525060200191505060405180910390fd5b6116e3611695601d5483614cb890919063ffffffff16565b601160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061178a8161177c84600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b614dcf90919063ffffffff16565b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef61182f8486614dcf90919063ffffffff16565b6040518082815260200191505060405180910390a350611945565b61189c81600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35b600061196f606461196160225434614c3290919063ffffffff16565b614cb890919063ffffffff16565b905061197a81614e58565b6119b2816119a434600e600089815260200190815260200160002054614d4790919063ffffffff16565b614dcf90919063ffffffff16565b600e600086815260200190815260200160002081905550601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166366a5ef2f86866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611a7257600080fd5b505af1158015611a86573d6000803e3d6000fd5b505050505050505050565b6000611aac600d54600c544303614cb890919063ffffffff16565b905090565b60078054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b475780601f10611b1c57610100808354040283529160200191611b47565b820191906000526020600020905b815481529060010190602001808311611b2a57829003601f168201915b505050505081565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c12576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6f6e6c79206d61737465722063616e2063616c6c00000000000000000000000081525060200191505060405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008114158015611ce457506000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b15611cee57600080fd5b80600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a35050565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e9b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6f6e6c79206d61737465722063616e2063616c6c00000000000000000000000081525060200191505060405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60005481565b6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166322b6ffca336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611f8657600080fd5b505afa158015611f9a573d6000803e3d6000fd5b505050506040513d6020811015611fb057600080fd5b8101908080519060200190929190505050905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080611ff7611a91565b905060058054905081101561203f576005818154811061201357fe5b90600052602060002090601091828204019190066002029054906101000a900461ffff16915050612045565b60009150505b90565b600c5481565b6060600481016000369050101561206457600080fd5b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061213783600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506121cc83600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614dcf90919063ffffffff16565b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506122228382614dcf90919063ffffffff16565b600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a35050505050565b60146020528060005260406000206000915054906101000a900460ff1681565b6005818154811061233b57fe5b9060005260206000209060109182820401919006600202915054906101000a900461ffff1681565b6060601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166337caa8b6836040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b1580156123d857600080fd5b505afa1580156123ec573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561241657600080fd5b81019080805164010000000081111561242e57600080fd5b8281019050602081018481111561244457600080fd5b815185602082028301116401000000008211171561246157600080fd5b50509291905050509050919050565b601281565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612538576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6f6e6c79206d61737465722063616e2063616c6c00000000000000000000000081525060200191505060405180910390fd5b85601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550846019819055508360188190555082601b8190555081601a8190555080602081905550505050505050565b6000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166328d807ad6040518163ffffffff1660e01b815260040160206040518083038186803b15801561260e57600080fd5b505afa158015612622573d6000803e3d6000fd5b505050506040513d602081101561263857600080fd5b8101908080519060200190929190505050905090565b6013602052816000526040600020818154811061266757fe5b906000526020600020016000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600c541180156126ae5750600c544310155b905090565b60195481565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461277c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6f6e6c79206d61737465722063616e2063616c6c00000000000000000000000081525060200191505060405180910390fd5b81601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601f819055505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60015481565b600d5481565b600073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806128c757503373ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b612939576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f6f6e6c7920736574746c65722063616e2063616c6c000000000000000000000081525060200191505060405180910390fd5b60008110156129b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f696e76616c69642070686173650000000000000000000000000000000000000081525060200191505060405180910390fd5b6129b8611a91565b8110612a2c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f7068617365206e6f74206d61747572656420796574000000000000000000000081525060200191505060405180910390fd5b6014600082815260200190815260200160002060009054906101000a900460ff1615612ac0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f706861736520616c726561647920736574746c6564000000000000000000000081525060200191505060405180910390fd5b60008090506000809050600580549050831015612ba0576000600e6000858152602001908152602001600020541115612b8557612b39601e5460058054905001612b2b600580549050600e600088815260200190815260200160002054614c3290919063ffffffff16565b614cb890919063ffffffff16565b9050612b5081602354614d4790919063ffffffff16565b602381905550612b84612b7f82600e600087815260200190815260200160002054614dcf90919063ffffffff16565b614e58565b5b600160058054905003831415612b9b5760235491505b612bc0565b600e6000848152602001908152602001600020549150612bbf83614ee8565b5b6000821115612bf057612bdb838360058054905086106150e8565b612be583836153f5565b612bef8383615710565b5b60016014600085815260200190815260200160002060006101000a81548160ff0219169083151502179055507f321f57f44af402708b8b3bad0bd10012cd568d8696946e26edeb86178bb7c27e83838360405180848152602001838152602001828152602001935050505060405180910390a1505050565b60185481565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612d31576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6f6e6c79206d61737465722063616e2063616c6c00000000000000000000000081525060200191505060405180910390fd5b612d39612699565b15612dac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f53616c6520686173206e6f74207374617274656420796574000000000000000081525060200191505060405180910390fd5b6000600c5414612e24576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f5265736f6e616e636520616c726561647920737461727465640000000000000081525060200191505060405180910390fd5b80600c819055507f912ee23dde46ec889d6748212cce445d667f7041597691dc89e8549ad8bc0acb60405160405180910390a150565b60088054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612ef05780601f10612ec557610100808354040283529160200191612ef0565b820191906000526020600020905b815481529060010190602001808311612ed357829003601f168201915b505050505081565b60106020528060005260406000206000915090505481565b600f602052816000526040600020602052806000526040600020600091509150505481565b6000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc4b9c96040518163ffffffff1660e01b815260040160206040518083038186803b158015612f9f57600080fd5b505afa158015612fb3573d6000803e3d6000fd5b505050506040513d6020811015612fc957600080fd5b8101908080519060200190929190505050905090565b6000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a035b1fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561304957600080fd5b505afa15801561305d573d6000803e3d6000fd5b505050506040513d602081101561307357600080fd5b8101908080519060200190929190505050905090565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461314c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6f6e6c79206d61737465722063616e2063616c6c00000000000000000000000081525060200191505060405180910390fd5b83601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082601c60006101000a81548161ffff021916908361ffff160217905550816021819055508060228190555050505050565b604060048101600036905010156131d457600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613539576019548214613262576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180615adf602f913960400191505060405180910390fd5b6132b482600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614dcf90919063ffffffff16565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061334982600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36133f9611ee5565b1561346c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f6e6f742071756c6966696c6564206173206e657720726f6f740000000000000081525060200191505060405180910390fd5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638d7f4b53336134b3611a91565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561351c57600080fd5b505af1158015613530573d6000803e3d6000fd5b50505050613f00565b601854821480156136205750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166322b6ffca846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156135e457600080fd5b505afa1580156135f8573d6000803e3d6000fd5b505050506040513d602081101561360e57600080fd5b81019080805190602001909291905050505b8015613631575061362f611ee5565b155b15613d6f57600082905061368d81600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614dcf90919063ffffffff16565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006136da611a91565b905060008190506005805490508210156136fa5760016005805490500390505b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390859294873385856040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001945050505050600060405180830381600087803b1580156137df57600080fd5b505af11580156137f3573d6000803e3d6000fd5b5050505061384b601a54600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601a546040518082815260200191505060405180910390a361390a601a5484614dcf90919063ffffffff16565b92506060601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ff747cc0336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060006040518083038186803b1580156139ad57600080fd5b505afa1580156139c1573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060208110156139eb57600080fd5b810190808051640100000000811115613a0357600080fd5b82810190506020810184811115613a1957600080fd5b8151856020820283011164010000000082111715613a3657600080fd5b5050929190505050905060008090505b815181108015613a585750601b548510155b15613c0557600073ffffffffffffffffffffffffffffffffffffffff16828281518110613a8157fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415613aaa57613c05565b613b11601b5460036000858581518110613ac057fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b60036000848481518110613b2157fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550818181518110613b7357fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601b546040518082815260200191505060405180910390a3613bf6601b5486614dcf90919063ffffffff16565b94508080600101915050613a46565b50613c7a8460036000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b60036000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a350505050613eff565b613dc182600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614dcf90919063ffffffff16565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e5682600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35b5b505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060136000838152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015613fc057602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311613f76575b50505050509050919050565b60116020528060005260406000206000915090505481565b600e6020528060005260406000206000915090505481565b6060601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636b1426a4836040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b15801561407157600080fd5b505afa158015614085573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060208110156140af57600080fd5b8101908080516401000000008111156140c757600080fd5b828101905060208101848111156140dd57600080fd5b81518560208202830111640100000000821117156140fa57600080fd5b50509291905050509050919050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614614279576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6f6e6c79206d61737465722063616e2063616c6c00000000000000000000000081525060200191505060405180910390fd5b61428281614e58565b50565b600a5481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008190506005805490508210156142cf5760016005805490500390505b61433283600f600084815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b600f600083815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008090505b6013600083815260200190815260200160002080549050811015614709578473ffffffffffffffffffffffffffffffffffffffff166013600084815260200190815260200160002082815481106143df57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156146fc5760008190505b60008111156146f457600f6000848152602001908152602001600020600060136000868152602001908152602001600020600184038154811061446b57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600f6000858152602001908152602001600020600060136000878152602001908152602001600020848154811061450457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156146e15760136000848152602001908152602001600020600182038154811061459157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166013600085815260200190815260200160002082815481106145da57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660136000868152602001908152602001600020838154811061462357fe5b90600052602060002001600060136000888152602001908152602001600020600186038154811061465057fe5b9060005260206000200160008491906101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508391906101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050506146e6565b6146f4565b80806001900391505061442c565b505050614c2d565b808060010191505061438c565b50601c60009054906101000a900461ffff1661ffff16601360008381526020019081526020016000208054905010156147b857601360008281526020019081526020016000208490806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050614943565b600f600082815260200190815260200160002060006013600084815260200190815260200160002060016013600086815260200190815260200160002080549050038154811061480457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600f600083815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156149425783601360008381526020019081526020016000206001601360008581526020019081526020016000208054905003815481106148f957fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b6000600160136000848152602001908152602001600020805490500390505b6000811115614c2a57600f600083815260200190815260200160002060006013600085815260200190815260200160002060018403815481106149a157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600f60008481526020019081526020016000206000601360008681526020019081526020016000208481548110614a3a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115614c1757601360008381526020019081526020016000206001820381548110614ac757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601360008481526020019081526020016000208281548110614b1057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601360008581526020019081526020016000208381548110614b5957fe5b906000526020600020016000601360008781526020019081526020016000206001860381548110614b8657fe5b9060005260206000200160008491906101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508391906101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050614c1c565b614c2a565b808060019003915050614962565b50505b505050565b600080831415614c455760009050614cb2565b6000828402905082848281614c5657fe5b0414614cad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180615b0e6021913960400191505060405180910390fd5b809150505b92915050565b6000808211614d2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b6000828481614d3a57fe5b0490508091505092915050565b600080828401905083811015614dc5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600082821115614e47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b600082840390508091505092915050565b6000614e9b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16615ad4565b90508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015614ee3573d6000803e3d6000fd5b505050565b600580549050811080614f045750601d54600580549050018110155b15614f0e576150e5565b60008090505b6012805490508110156150e357600060128281548110614f3057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050614fee601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3508080600101915050614f14565b505b50565b801561517c57601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638cf2371c846040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561516357600080fd5b505af1158015615177573d6000803e3d6000fd5b505050505b6060601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636b1426a4856040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b1580156151f157600080fd5b505afa158015615205573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561522f57600080fd5b81019080805164010000000081111561524757600080fd5b8281019050602081018481111561525d57600080fd5b815185602082028301116401000000008211171561527a57600080fd5b5050929190505050905060006152c182516152b360646152a5601f5489614c3290919063ffffffff16565b614cb890919063ffffffff16565b614cb890919063ffffffff16565b9050600082511480156152d45750600081115b156152e9576152e281614e58565b50506153f0565b60008090505b82518110156153ec57600061532c84838151811061530957fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16615ad4565b90508073ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015615374573d6000803e3d6000fd5b5083828151811061538157fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff167f1bf242fce473b656e6d1d08dcb25b01042413f08c12e2818d923a6e29d4c1afb8885604051808381526020018281526020019250505060405180910390a25080806001019150506152ef565b5050505b505050565b600061541f606461541160215485614c3290919063ffffffff16565b614cb890919063ffffffff16565b9050600060136000858152602001908152602001600020805490501480156154475750600081115b1561545b5761545581614e58565b5061570c565b6000601360008581526020019081526020016000208054905090506060601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166393c1e292836040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b1580156154eb57600080fd5b505afa1580156154ff573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561552957600080fd5b81019080805164010000000081111561554157600080fd5b8281019050602081018481111561555757600080fd5b815185602082028301116401000000008211171561557457600080fd5b5050929190505050905060008090505b601360008781526020019081526020016000208054905081101561570757600061560b6013600089815260200190815260200160002083815481106155c557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16615ad4565b905060006156598561564b8761563d88888151811061562657fe5b60200260200101518b614c3290919063ffffffff16565b614cb890919063ffffffff16565b614cb890919063ffffffff16565b90508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156156a1573d6000803e3d6000fd5b508173ffffffffffffffffffffffffffffffffffffffff167f1eac6055421b211dbe224185ed987d950ab8cdad41c7e6cfa729cf3c92c5eed78983604051808381526020018281526020019250505060405180910390a250508080600101915050615584565b505050505b5050565b600061573a606461572c60205485614c3290919063ffffffff16565b614cb890919063ffffffff16565b90506060601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166337caa8b6856040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b1580156157b157600080fd5b505afa1580156157c5573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060208110156157ef57600080fd5b81019080805164010000000081111561580757600080fd5b8281019050602081018481111561581d57600080fd5b815185602082028301116401000000008211171561583a57600080fd5b50509291905050509050600081511480156158555750600082115b1561586a5761586382614e58565b5050615ad0565b6000815190506060601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166393c1e292836040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b1580156158e557600080fd5b505afa1580156158f9573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561592357600080fd5b81019080805164010000000081111561593b57600080fd5b8281019050602081018481111561595157600080fd5b815185602082028301116401000000008211171561596e57600080fd5b5050929190505050905060008090505b8151811015615aca5760006159d3846159c5866159b78787815181106159a057fe5b60200260200101518b614c3290919063ffffffff16565b614cb890919063ffffffff16565b614cb890919063ffffffff16565b90506000615a098684815181106159e657fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16615ad4565b90508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015615a51573d6000803e3d6000fd5b50858381518110615a5e57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff167f70098ec6480a4d5390c19f0a21daad08444bf356e3cf48f99b4e65517edb1f8d8a84604051808381526020018281526020019250505060405180910390a25050808060010191505061597e565b50505050505b5050565b600081905091905056fe6f6e6c792076616c69642076616c756520697320726f6f742066656520666f72207468697320726563697069656e74536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a165627a7a72305820e5035ff13373008b1863bfb433199e29c407914cd84c4b0fbdaa3b093ece07960029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000b3b000000000000000000000000000000000000000001027e72f1f12813088000000000000000000000000000000000000000000000005a790ea17ace06a960000000000000000000000000000000aa3e3ad42952958f2d81357bf8cd5dcb77ed93000000000000000000000000079756ba86affc6cdda424aa7a061fec56077f6130000000000000000000000000000000000000000000000000000000000000011562d44696d656e73696f6e20436c6f756400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035644430000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): V-Dimension Cloud
Arg [1] : _symbol (string): VDC
Arg [2] : _blockPerPhase (uint256): 46000
Arg [3] : _totalSupply (uint256): 5000000000000000000000000000
Arg [4] : _reservedAmount (uint256): 1750000000000000000000000000
Arg [5] : _reservedAccount (address): 0x0AA3e3Ad42952958F2D81357Bf8CD5dcb77eD930
Arg [6] : _foundationAddr (address): 0x79756bA86aFFc6CddA424AA7a061fEc56077F613
-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [2] : 000000000000000000000000000000000000000000000000000000000000b3b0
Arg [3] : 00000000000000000000000000000000000000001027e72f1f12813088000000
Arg [4] : 000000000000000000000000000000000000000005a790ea17ace06a96000000
Arg [5] : 0000000000000000000000000aa3e3ad42952958f2d81357bf8cd5dcb77ed930
Arg [6] : 00000000000000000000000079756ba86affc6cdda424aa7a061fec56077f613
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000011
Arg [8] : 562d44696d656e73696f6e20436c6f7564000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [10] : 5644430000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
1489:15585:7:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9364:22;9375:10;9364;:22::i;:::-;1489:15585;10757:123;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10757:123:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1714:18;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1714:18:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1714:18:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4430:96;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4430:96:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4430:96:7;;;;;;;;;;;;;;;;;;;:::i;:::-;;2698:447:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2698:447:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2698:447:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4335:89:7;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4335:89:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4335:89:7;;;;;;;;;;;;;;;;;;;:::i;:::-;;146:26:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;146:26:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9958:114:7;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9958:114:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1806:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1806:30:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;9743:209;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9743:209:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1913:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1913:29:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1968:499:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1968:499:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1968:499:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2337:40:7;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2337:40:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2337:40:7;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1603:47;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1603:47:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1603:47:7;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;10347:138;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10347:138:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10347:138:7;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;10347:138:7;;;;;;;;;;;;;;;;;1764:35;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1764:35:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;6568:509;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6568:509:7;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;6568:509:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;9613:124;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9613:124:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2282:49;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2282:49:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2282:49:7;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;10631:120;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10631:120:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2529:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2529:26:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7514:184;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7514:184:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7514:184:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1010:109:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1010:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1010:109:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;176:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;176:28:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10886:1770:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10886:1770:7;;;;;;;;;;;;;;;;;;;:::i;:::-;;1948:32;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1948:32:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7704:1238;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7704:1238:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7704:1238:7;;;;;;;;;;;;;;;;;:::i;:::-;;2495:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2495:28:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8948:249;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8948:249:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8948:249:7;;;;;;;;;;;;;;;;;:::i;:::-;;1738:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1738:20:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1738:20:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2119:51;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2119:51:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2119:51:7;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2039:74;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2039:74:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2039:74:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9499:108;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9499:108:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9399:94;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9399:94:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7083:425;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7083:425:7;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;7083:425:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4532:2030;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4532:2030:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4532:2030:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1686:22;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1686:22:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;10078:120;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10078:120:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10078:120:7;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;10078:120:7;;;;;;;;;;;;;;;;;2176:43;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2176:43:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2176:43:7;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1987:46;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1987:46:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1987:46:7;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10204:137;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10204:137:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10204:137:7;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;10204:137:7;;;;;;;;;;;;;;;;;3461:138:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3461:138:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3461:138:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;208:21;;8:9:-1;5:2;;;30:1;27;20:12;5:2;208:21:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;10491:95:7;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10491:95:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10491:95:7;;;;;;;;;;;;;;;;;:::i;:::-;;1842:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1842:29:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1877;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1877:29:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;10886:1770;10958:13;:11;:13::i;:::-;10950:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11030:9;11017;:22;;11009:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11081:13;11097:14;:12;:14::i;:::-;11081:30;;11121:16;11140:9;11121:28;;11160:46;11178:9;11189;11200:5;11160:17;:46::i;:::-;11244:9;:16;;;;11236:5;:24;11232:258;;;11275:13;11291:39;11326:3;11291:30;11304:9;11314:5;11304:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11291:30;;:8;:12;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;11275:55;;11355:19;11368:5;11355:8;:12;;:19;;;;:::i;:::-;11344:30;;11414:1;11392:7;:18;11400:9;11392:18;;;;;;;;;;;;;;;;:23;11388:92;;;11436:13;11455:9;11436:29;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;11436:29:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11388:92;11232:258;;11500:14;11517;;;;;;;;;;;:23;;;11541:8;11517:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11517:33:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11517:33:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11517:33:7;;;;;;;;;;;;;;;;11500:50;;11590:41;11621:9;11590:15;:26;11606:9;11590:26;;;;;;;;;;;;;;;;:30;;:41;;;;:::i;:::-;11561:15;:26;11577:9;11561:26;;;;;;;;;;;;;;;:70;;;;11657:25;11675:6;11657:13;;:17;;:25;;;;:::i;:::-;11641:13;:41;;;;11718:11;;11701:13;;:28;;11693:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11780:9;:16;;;;11772:5;:24;11768:637;;;11811:16;11830:87;11913:3;11830:78;11891:16;;;;;;;;;;;11830:78;;:56;11869:9;11879:5;11869:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11863:3;:22;11830:56;;:28;11841:9;11851:5;11841:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11830:28;;:6;:10;;:28;;;;:::i;:::-;:32;;:56;;;;:::i;:::-;:60;;:78;;;;:::i;:::-;:82;;:87;;;;:::i;:::-;11811:106;;11951:1;11939:8;:13;;:34;;;;;11965:8;11956:6;:17;11939:34;11931:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12035:58;12058:34;12071:20;;12058:8;:12;;:34;;;;:::i;:::-;12035:7;:18;12043:9;12035:18;;;;;;;;;;;;;;;;:22;;:58;;;;:::i;:::-;12014:7;:18;12022:9;12014:18;;;;;;;;;;;;;;;:79;;;;12129:45;12165:8;12129:31;12153:6;12129:8;:19;12138:9;12129:19;;;;;;;;;;;;;;;;:23;;:31;;;;:::i;:::-;:35;;:45;;;;:::i;:::-;12107:8;:19;12116:9;12107:19;;;;;;;;;;;;;;;:67;;;;12217:9;12193:56;;12210:4;12193:56;;;12228:20;12239:8;12228:6;:10;;:20;;;;:::i;:::-;12193:56;;;;;;;;;;;;;;;;;;11768:637;;;;12302:31;12326:6;12302:8;:19;12311:9;12302:19;;;;;;;;;;;;;;;;:23;;:31;;;;:::i;:::-;12280:8;:19;12289:9;12280:19;;;;;;;;;;;;;;;:53;;;;12376:9;12352:42;;12369:4;12352:42;;;12387:6;12352:42;;;;;;;;;;;;;;;;;;11768:637;12415:18;12436:38;12470:3;12436:29;12450:14;;12436:9;:13;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;12415:59;;12484:32;12505:10;12484:20;:32::i;:::-;12546:48;12583:10;12546:32;12568:9;12546:10;:17;12557:5;12546:17;;;;;;;;;;;;:21;;:32;;;;:::i;:::-;:36;;:48;;;;:::i;:::-;12526:10;:17;12537:5;12526:17;;;;;;;;;;;:68;;;;12604:17;;;;;;;;;;;:27;;;12632:9;12643:5;12604:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12604:45:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12604:45:7;;;;10886:1770;;;;;:::o;10757:123::-;10801:7;10827:46;10859:13;;10843:10;;10828:12;:25;10827:31;;:46;;;;:::i;:::-;10820:53;;10757:123;:::o;1714:18::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4430:96::-;3494:10;3484:20;;:6;;;;;;;;;;;:20;;;3476:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4509:10;4499:7;;:20;;;;;;;;;;;;;;;;;;4430:96;:::o;2698:447:0:-;2994:1;2984:6;:11;;2983:53;;;;;3034:1;3001:7;:19;3009:10;3001:19;;;;;;;;;;;;;;;:29;3021:8;3001:29;;;;;;;;;;;;;;;;:34;;2983:53;2979:67;;;3038:8;;;2979:67;3085:6;3053:7;:19;3061:10;3053:19;;;;;;;;;;;;;;;:29;3073:8;3053:29;;;;;;;;;;;;;;;:38;;;;3123:8;3102:38;;3111:10;3102:38;;;3133:6;3102:38;;;;;;;;;;;;;;;;;;2698:447;;:::o;4335:89:7:-;3494:10;3484:20;;:6;;;;;;;;;;;:20;;;3476:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4409:8;4400:6;;:17;;;;;;;;;;;;;;;;;;4335:89;:::o;146:26:0:-;;;;:::o;9958:114:7:-;10001:4;10024:18;;;;;;;;;;;:29;;;10054:10;10024:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10024:41:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10024:41:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10024:41:7;;;;;;;;;;;;;;;;10017:48;;9958:114;:::o;1806:30::-;;;;;;;;;;;;;:::o;9743:209::-;9793:6;9811:13;9827:14;:12;:14::i;:::-;9811:30;;9863:9;:16;;;;9855:5;:24;9851:77;;;9901:9;9911:5;9901:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9894:23;;;;;9851:77;9944:1;9937:8;;;9743:209;;:::o;1913:29::-;;;;:::o;1968:499:0:-;2059:6;768:1;761:4;:8;743;;:15;;:26;740:56;;;780:8;;;740:56;2073:18;2094:7;:14;2102:5;2094:14;;;;;;;;;;;;;;;:26;2109:10;2094:26;;;;;;;;;;;;;;;;2073:47;;2290:25;2308:6;2290:8;:13;2299:3;2290:13;;;;;;;;;;;;;;;;:17;;:25;;;;:::i;:::-;2274:8;:13;2283:3;2274:13;;;;;;;;;;;;;;;:41;;;;2339:27;2359:6;2339:8;:15;2348:5;2339:15;;;;;;;;;;;;;;;;:19;;:27;;;;:::i;:::-;2321:8;:15;2330:5;2321:15;;;;;;;;;;;;;;;:45;;;;2401:22;2416:6;2401:10;:14;;:22;;;;:::i;:::-;2372:7;:14;2380:5;2372:14;;;;;;;;;;;;;;;:26;2387:10;2372:26;;;;;;;;;;;;;;;:51;;;;2450:3;2434:28;;2443:5;2434:28;;;2455:6;2434:28;;;;;;;;;;;;;;;;;;802:1;1968:499;;;;:::o;2337:40:7:-;;;;;;;;;;;;;;;;;;;;;;:::o;1603:47::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;10347:138::-;10411:16;10446:18;;;;;;;;;;;:25;;;10472:5;10446:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10446:32:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10446:32:7;;;;;;39:16:-1;36:1;17:17;2:54;10446:32:7;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13:2;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10446:32:7;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;71:11;66:3;62:21;55:28;;123:4;118:3;114:14;159:9;141:16;138:31;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;0:373;;10446:32:7;;;;;;10439:39;;10347:138;;;:::o;1764:35::-;1797:2;1764:35;:::o;6568:509::-;3494:10;3484:20;;:6;;;;;;;;;;;:20;;;3476:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6790:4;6753:18;;:42;;;;;;;;;;;;;;;;;;6816:8;6806:7;:18;;;;6866:10;6854:9;:22;;;;6926:14;6910:13;:30;;;;6990:14;6974:13;:30;;;;7055:15;7038:14;:32;;;;6568:509;;;;;;:::o;9613:124::-;9666:7;9692:14;;;;;;;;;;;:36;;;:38;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9692:38:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9692:38:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9692:38:7;;;;;;;;;;;;;;;;9685:45;;9613:124;:::o;2282:49::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;10631:120::-;10675:4;10712:1;10699:10;;:14;:44;;;;;10733:10;;10717:12;:26;;10699:44;10691:53;;10631:120;:::o;2529:26::-;;;;:::o;7514:184::-;3494:10;3484:20;;:6;;;;;;;;;;;:20;;;3476:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7646:4;7611:17;;:40;;;;;;;;;;;;;;;;;;7677:14;7661:13;:30;;;;7514:184;;:::o;1010:109:0:-;1068:15;1098:8;:16;1107:6;1098:16;;;;;;;;;;;;;;;;1091:23;;1010:109;;;:::o;176:28::-;;;;:::o;1948:32:7:-;;;;:::o;7704:1238::-;7781:1;7762:21;;:7;;;;;;;;;;;:21;;;:46;;;;7798:10;7787:21;;:7;;;;;;;;;;;:21;;;7762:46;7754:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7861:1;7852:5;:10;;7844:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7906:14;:12;:14::i;:::-;7898:5;:22;7890:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7966:7;:14;7974:5;7966:14;;;;;;;;;;;;;;;;;;;;;7965:15;7956:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8017:12;8032:1;8017:16;;8043:14;8060:1;8043:18;;8083:9;:16;;;;8075:5;:24;8071:599;;;8138:1;8118:10;:17;8129:5;8118:17;;;;;;;;;;;;:21;8115:289;;;8168:85;8231:21;;8212:9;:16;;;;:40;8168:39;8190:9;:16;;;;8168:10;:17;8179:5;8168:17;;;;;;;;;;;;:21;;:39;;;;:::i;:::-;:43;;:85;;;;:::i;:::-;8159:94;;8291:29;8313:6;8291:17;;:21;;:29;;;;:::i;:::-;8271:17;:49;;;;8338:51;8359:29;8381:6;8359:10;:17;8370:5;8359:17;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;8338:20;:51::i;:::-;8115:289;8507:1;8488:9;:16;;;;:20;8479:5;:29;8475:92;;;8535:17;;8528:24;;8475:92;8071:599;;;8604:10;:17;8615:5;8604:17;;;;;;;;;;;;8597:24;;8635;8653:5;8635:17;:24::i;:::-;8071:599;8691:1;8684:4;:8;8680:181;;;8709:54;8725:5;8732:4;8746:9;:16;;;;8738:5;:24;8709:15;:54::i;:::-;8777:30;8795:5;8802:4;8777:17;:30::i;:::-;8821:29;8838:5;8845:4;8821:16;:29::i;:::-;8680:181;8888:4;8871:7;:14;8879:5;8871:14;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;8907:28;8915:5;8922:4;8928:6;8907:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7704:1238;;;:::o;2495:28::-;;;;:::o;8948:249::-;3494:10;3484:20;;:6;;;;;;;;;;;:20;;;3476:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9022:13;:11;:13::i;:::-;9021:14;9013:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9096:1;9082:10;;:15;9074:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9151:11;9138:10;:24;;;;9177:13;;;;;;;;;;8948:249;:::o;1738:20::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2119:51::-;;;;;;;;;;;;;;;;;:::o;2039:74::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9499:108::-;9545:7;9571:14;;;;;;;;;;;:27;;;:29;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9571:29:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9571:29:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9571:29:7;;;;;;;;;;;;;;;;9564:36;;9499:108;:::o;9399:94::-;9438:7;9464:14;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9464:22:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9464:22:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9464:22:7;;;;;;;;;;;;;;;;9457:29;;9399:94;:::o;7083:425::-;3494:10;3484:20;;:6;;;;;;;;;;;:20;;;3476:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7261:4;7232:14;;:34;;;;;;;;;;;;;;;;;;7298:19;7277:18;;:40;;;;;;;;;;;;;;;;;;7394:16;7376:15;:34;;;;7467:15;7450:14;:32;;;;7083:425;;;;:::o;4532:2030::-;4604:6;768:1:0;761:4;:8;743;;:15;;:26;740:56;;;780:8;;;740:56;4642:4:7;4627:20;;:3;:20;;;4622:1934;;;4681:7;;4671:6;:17;4663:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4777:32;4802:6;4777:8;:20;4786:10;4777:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;4754:8;:20;4763:10;4754:20;;;;;;;;;;;;;;;:55;;;;4839:25;4857:6;4839:8;:13;4848:3;4839:13;;;;;;;;;;;;;;;;:17;;:25;;;;:::i;:::-;4823:8;:13;4832:3;4823:13;;;;;;;;;;;;;;;:41;;;;4904:3;4883:33;;4892:10;4883:33;;;4909:6;4883:33;;;;;;;;;;;;;;;;;;4939:12;:10;:12::i;:::-;4938:13;4930:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4995:18;;;;;;;;;;;:26;;;5022:10;5034:14;:12;:14::i;:::-;4995:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4995:54:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4995:54:7;;;;4622:1934;;;5081:9;;5071:6;:19;:57;;;;;5094:18;;;;;;;;;;;:29;;;5124:3;5094:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5094:34:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5094:34:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5094:34:7;;;;;;;;;;;;;;;;5071:57;:74;;;;;5133:12;:10;:12::i;:::-;5132:13;5071:74;5066:1490;;;5161:11;5175:6;5161:20;;5218:29;5243:3;5218:8;:20;5227:10;5218:20;;;;;;;;;;;;;;;;:24;;:29;;;;:::i;:::-;5195:8;:20;5204:10;5195:20;;;;;;;;;;;;;;;:52;;;;5262:13;5278:14;:12;:14::i;:::-;5262:30;;5306:14;5323:5;5306:22;;5354:9;:16;;;;5346:5;:24;5342:92;;;5418:1;5399:9;:16;;;;:20;5390:29;;5342:92;5448:18;;;;;;;;;;;:25;;;5474:3;5479:10;5491:5;5498:6;5448:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5448:57:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5448:57:7;;;;5565:32;5583:13;;5565:8;:13;5574:3;5565:13;;;;;;;;;;;;;;;;:17;;:32;;;;:::i;:::-;5549:8;:13;5558:3;5549:13;;;;;;;;;;;;;;;:48;;;;5637:3;5616:40;;5625:10;5616:40;;;5642:13;;5616:40;;;;;;;;;;;;;;;;;;5676:22;5684:13;;5676:3;:7;;:22;;;;:::i;:::-;5670:28;;5748:26;5777:18;;;;;;;;;;;:31;;;5809:10;5777:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5777:43:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5777:43:7;;;;;;39:16:-1;36:1;17:17;2:54;5777:43:7;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13:2;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5777:43:7;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;71:11;66:3;62:21;55:28;;123:4;118:3;114:14;159:9;141:16;138:31;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;0:373;;5777:43:7;;;;;;5748:72;;5840:9;5852:1;5840:13;;5834:384;5859:9;:16;5855:1;:20;:44;;;;;5886:13;;5879:3;:20;;5855:44;5834:384;;;5952:1;5928:26;;:9;5938:1;5928:12;;;;;;;;;;;;;;:26;;;5924:78;;;5978:5;;5924:78;6044:41;6071:13;;6044:8;:22;6053:9;6063:1;6053:12;;;;;;;;;;;;;;6044:22;;;;;;;;;;;;;;;;:26;;:41;;;;:::i;:::-;6019:8;:22;6028:9;6038:1;6028:12;;;;;;;;;;;;;;6019:22;;;;;;;;;;;;;;;:66;;;;6129:9;6139:1;6129:12;;;;;;;;;;;;;;6108:49;;6117:10;6108:49;;;6143:13;;6108:49;;;;;;;;;;;;;;;;;;6181:22;6189:13;;6181:3;:7;;:22;;;;:::i;:::-;6175:28;;5901:3;;;;;;;5834:384;;;;6259:33;6288:3;6259:8;:24;6268:14;;;;;;;;;;;6259:24;;;;;;;;;;;;;;;;:28;;:33;;;;:::i;:::-;6232:8;:24;6241:14;;;;;;;;;;;6232:24;;;;;;;;;;;;;;;:60;;;;6332:14;;;;;;;;;;;6311:41;;6320:10;6311:41;;;6348:3;6311:41;;;;;;;;;;;;;;;;;;5066:1490;;;;;;;6406:32;6431:6;6406:8;:20;6415:10;6406:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;6383:8;:20;6392:10;6383:20;;;;;;;;;;;;;;;:55;;;;6468:25;6486:6;6468:8;:13;6477:3;6468:13;;;;;;;;;;;;;;;;:17;;:25;;;;:::i;:::-;6452:8;:13;6461:3;6452:13;;;;;;;;;;;;;;;:41;;;;6533:3;6512:33;;6521:10;6512:33;;;6538:6;6512:33;;;;;;;;;;;;;;;;;;5066:1490;4622:1934;4532:2030;;;:::o;1686:22::-;;;;;;;;;;;;;:::o;10078:120::-;10138:16;10173:11;:18;10185:5;10173:18;;;;;;;;;;;10166:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10078:120;;;:::o;2176:43::-;;;;;;;;;;;;;;;;;:::o;1987:46::-;;;;;;;;;;;;;;;;;:::o;10204:137::-;10264:16;10299:17;;;;;;;;;;;:28;;;10328:5;10299:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10299:35:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10299:35:7;;;;;;39:16:-1;36:1;17:17;2:54;10299:35:7;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13:2;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10299:35:7;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;71:11;66:3;62:21;55:28;;123:4;118:3;114:14;159:9;141:16;138:31;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;0:373;;10299:35:7;;;;;;10292:42;;10204:137;;;:::o;3461:138:0:-;3537:17;3569:7;:15;3577:6;3569:15;;;;;;;;;;;;;;;:25;3585:8;3569:25;;;;;;;;;;;;;;;;3562:32;;3461:138;;;;:::o;208:21::-;;;;;;;;;;;;;:::o;10491:95:7:-;3494:10;3484:20;;:6;;;;;;;;;;;:20;;;3476:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10551:28;10572:6;10551:20;:28::i;:::-;10491:95;:::o;1842:29::-;;;;:::o;1877:::-;;;;;;;;;;;;;:::o;12704:1620::-;12798:14;12815:5;12798:22;;12842:9;:16;;;;12834:5;:24;12830:122;;;12902:1;12883:9;:16;;;;:20;12874:29;;12830:122;12995:46;13031:9;12995:17;:25;13013:6;12995:25;;;;;;;;;;;:31;13021:4;12995:31;;;;;;;;;;;;;;;;:35;;:46;;;;:::i;:::-;12961:17;:25;12979:6;12961:25;;;;;;;;;;;:31;12987:4;12961:31;;;;;;;;;;;;;;;:80;;;;13057:9;13069:1;13057:13;;13052:562;13076:11;:19;13088:6;13076:19;;;;;;;;;;;:26;;;;13072:1;:30;13052:562;;;13152:4;13126:30;;:11;:19;13138:6;13126:19;;;;;;;;;;;13146:1;13126:22;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;13122:482;;;13181:9;13193:1;13181:13;;13176:390;13200:1;13196;:5;13176:390;;;13285:17;:25;13303:6;13285:25;;;;;;;;;;;:51;13311:11;:19;13323:6;13311:19;;;;;;;;;;;13333:1;13331;:3;13311:24;;;;;;;;;;;;;;;;;;;;;;;;;13285:51;;;;;;;;;;;;;;;;13233:17;:25;13251:6;13233:25;;;;;;;;;;;:49;13259:11;:19;13271:6;13259:19;;;;;;;;;;;13279:1;13259:22;;;;;;;;;;;;;;;;;;;;;;;;;13233:49;;;;;;;;;;;;;;;;:103;13229:319;;;13418:11;:19;13430:6;13418:19;;;;;;;;;;;13440:1;13438;:3;13418:24;;;;;;;;;;;;;;;;;;;;;;;;;13444:11;:19;13456:6;13444:19;;;;;;;;;;;13464:1;13444:22;;;;;;;;;;;;;;;;;;;;;;;;;13365:11;:19;13377:6;13365:19;;;;;;;;;;;13385:1;13365:22;;;;;;;;;;;;;;;;13389:11;:19;13401:6;13389:19;;;;;;;;;;;13411:1;13409;:3;13389:24;;;;;;;;;;;;;;;;13364:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13229:319;;;13520:5;;13229:319;13203:3;;;;;;;;13176:390;;;;13583:7;;;;13122:482;13104:3;;;;;;;13052:562;;;;13657:18;;;;;;;;;;;13628:47;;:11;:19;13640:6;13628:19;;;;;;;;;;;:26;;;;:47;13624:313;;;13690:11;:19;13702:6;13690:19;;;;;;;;;;;13715:4;13690:30;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;13690:30:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13624:313;;;13775:17;:25;13793:6;13775:25;;;;;;;;;;;:78;13801:11;:19;13813:6;13801:19;;;;;;;;;;;13850:1;13821:11;:19;13833:6;13821:19;;;;;;;;;;;:26;;;;:30;13801:51;;;;;;;;;;;;;;;;;;;;;;;;;13775:78;;;;;;;;;;;;;;;;13741:17;:25;13759:6;13741:25;;;;;;;;;;;:31;13767:4;13741:31;;;;;;;;;;;;;;;;:112;13737:200;;;13922:4;13868:11;:19;13880:6;13868:19;;;;;;;;;;;13917:1;13888:11;:19;13900:6;13888:19;;;;;;;;;;;:26;;;;:30;13868:51;;;;;;;;;;;;;;;;:58;;;;;;;;;;;;;;;;;;13737:200;13624:313;13952:9;13993:1;13964:11;:19;13976:6;13964:19;;;;;;;;;;;:26;;;;:30;13952:42;;13947:371;14000:1;13996;:5;13947:371;;;14077:17;:25;14095:6;14077:25;;;;;;;;;;;:51;14103:11;:19;14115:6;14103:19;;;;;;;;;;;14125:1;14123;:3;14103:24;;;;;;;;;;;;;;;;;;;;;;;;;14077:51;;;;;;;;;;;;;;;;14025:17;:25;14043:6;14025:25;;;;;;;;;;;:49;14051:11;:19;14063:6;14051:19;;;;;;;;;;;14071:1;14051:22;;;;;;;;;;;;;;;;;;;;;;;;;14025:49;;;;;;;;;;;;;;;;:103;14021:287;;;14202:11;:19;14214:6;14202:19;;;;;;;;;;;14224:1;14222;:3;14202:24;;;;;;;;;;;;;;;;;;;;;;;;;14228:11;:19;14240:6;14228:19;;;;;;;;;;;14248:1;14228:22;;;;;;;;;;;;;;;;;;;;;;;;;14149:11;:19;14161:6;14149:19;;;;;;;;;;;14169:1;14149:22;;;;;;;;;;;;;;;;14173:11;:19;14185:6;14173:19;;;;;;;;;;;14195:1;14193;:3;14173:24;;;;;;;;;;;;;;;;14148:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14021:287;;;14288:5;;14021:287;14003:3;;;;;;;;13947:371;;;;12704:1620;;;;;:::o;1693:458:4:-;1751:7;1996:1;1991;:6;1987:45;;;2020:1;2013:8;;;;1987:45;2042:9;2058:1;2054;:5;2042:17;;2086:1;2081;2077;:5;;;;;;:10;2069:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2143:1;2136:8;;;1693:458;;;;;:::o;2606:326::-;2664:7;2761:1;2757;:5;2749:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2803:9;2819:1;2815;:5;;;;;;2803:17;;2924:1;2917:8;;;2606:326;;;;:::o;834:176::-;892:7;911:9;927:1;923;:5;911:17;;951:1;946;:6;;938:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1002:1;995:8;;;834:176;;;;:::o;1274:179::-;1332:7;1364:1;1359;:6;;1351:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1410:9;1426:1;1422;:5;1410:17;;1445:1;1438:8;;;1274:179;;;;:::o;14330:161:7:-;14398:20;14421:29;:14;;;;;;;;;;;:27;;;:29::i;:::-;14398:52;;14460:4;:13;;:24;14474:9;14460:24;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14460:24:7;14330:161;;:::o;16650:422::-;16723:9;:16;;;;16715:5;:24;:76;;;;16771:20;;16752:9;:16;;;;:39;16743:5;:48;;16715:76;16711:111;;;16805:7;;16711:111;16837:9;16849:1;16837:13;;16832:234;16856:13;:20;;;;16852:1;:24;16832:234;;;16897:12;16912:13;16926:1;16912:16;;;;;;;;;;;;;;;;;;;;;;;;;16897:31;;16959:33;16978:7;:13;16986:4;16978:13;;;;;;;;;;;;;;;;16959:8;:14;16968:4;16959:14;;;;;;;;;;;;;;;;:18;;:33;;;;:::i;:::-;16942:8;:14;16951:4;16942:14;;;;;;;;;;;;;;;:50;;;;17035:4;17011:44;;17028:4;17011:44;;;17041:7;:13;17049:4;17041:13;;;;;;;;;;;;;;;;17011:44;;;;;;;;;;;;;;;;;;16832:234;16878:3;;;;;;;16832:234;;;;16650:422;;:::o;14497:675::-;14592:6;14588:82;;;14614:17;;;;;;;;;;;:38;;;14653:5;14614:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14614:45:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14614:45:7;;;;14588:82;14679:24;14706:17;;;;;;;;;;;:28;;;14735:5;14706:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14706:35:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14706:35:7;;;;;;39:16:-1;36:1;17:17;2:54;14706:35:7;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13:2;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14706:35:7;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;71:11;66:3;62:21;55:28;;123:4;118:3;114:14;159:9;141:16;138:31;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;0:373;;14706:35:7;;;;;;14679:62;;14752:13;14768:57;14810:7;:14;14768:37;14801:3;14768:28;14782:13;;14768:9;:13;;:28;;;;:::i;:::-;:32;;:37;;;;:::i;:::-;:41;;:57;;;;:::i;:::-;14752:73;;14857:1;14839:7;:14;:19;:32;;;;;14870:1;14862:5;:9;14839:32;14835:109;;;14886:27;14907:5;14886:20;:27::i;:::-;14927:7;;;;14835:109;14959:9;14971:1;14959:13;;14954:212;14978:7;:14;14974:1;:18;14954:212;;;15013:20;15036:25;:7;15044:1;15036:10;;;;;;;;;;;;;;:23;;;:25::i;:::-;15013:48;;15075:4;:13;;:20;15089:5;15075:20;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15075:20:7;15137:7;15145:1;15137:10;;;;;;;;;;;;;;15114:41;;;15130:5;15149;15114:41;;;;;;;;;;;;;;;;;;;;;;;;14954:212;14994:3;;;;;;;14954:212;;;;14497:675;;;;;;:::o;15178:706::-;15259:13;15275:39;15310:3;15275:30;15289:15;;15275:9;:13;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;15259:55;;15357:1;15328:11;:18;15340:5;15328:18;;;;;;;;;;;:25;;;;:30;:43;;;;;15370:1;15362:5;:9;15328:43;15324:120;;;15386:27;15407:5;15386:20;:27::i;:::-;15427:7;;;15324:120;15454:11;15468;:18;15480:5;15468:18;;;;;;;;;;;:25;;;;15454:39;;15503:24;15530:18;;;;;;;;;;;:34;;;15565:3;15530:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15530:39:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15530:39:7;;;;;;39:16:-1;36:1;17:17;2:54;15530:39:7;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13:2;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15530:39:7;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;71:11;66:3;62:21;55:28;;123:4;118:3;114:14;159:9;141:16;138:31;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;0:373;;15530:39:7;;;;;;15503:66;;15584:9;15596:1;15584:13;;15579:299;15603:11;:18;15615:5;15603:18;;;;;;;;;;;:25;;;;15599:1;:29;15579:299;;;15649:20;15672:36;:11;:18;15684:5;15672:18;;;;;;;;;;;15691:1;15672:21;;;;;;;;;;;;;;;;;;;;;;;;;:34;;;:36::i;:::-;15649:59;;15722:14;15739:39;15774:3;15739:30;15765:3;15739:21;15749:7;15757:1;15749:10;;;;;;;;;;;;;;15739:5;:9;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;15722:56;;15792:4;:13;;:21;15806:6;15792:21;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15792:21:7;15854:4;15832:35;;;15847:5;15860:6;15832:35;;;;;;;;;;;;;;;;;;;;;;;;15579:299;;15630:3;;;;;;;15579:299;;;;15178:706;;;;;;:::o;15890:754::-;15970:18;15991:38;16025:3;15991:29;16005:14;;15991:9;:13;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;15970:59;;16039:24;16066:18;;;;;;;;;;;:25;;;16092:5;16066:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16066:32:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16066:32:7;;;;;;39:16:-1;36:1;17:17;2:54;16066:32:7;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13:2;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16066:32:7;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;71:11;66:3;62:21;55:28;;123:4;118:3;114:14;159:9;141:16;138:31;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;0:373;;16066:32:7;;;;;;16039:59;;16130:1;16112:7;:14;:19;:37;;;;;16148:1;16135:10;:14;16112:37;16108:119;;;16164:32;16185:10;16164:20;:32::i;:::-;16210:7;;;;16108:119;16237:11;16251:7;:14;16237:28;;16275:24;16302:18;;;;;;;;;;;:34;;;16337:3;16302:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16302:39:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16302:39:7;;;;;;39:16:-1;36:1;17:17;2:54;16302:39:7;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13:2;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16302:39:7;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;71:11;66:3;62:21;55:28;;123:4;118:3;114:14;159:9;141:16;138:31;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;0:373;;16302:39:7;;;;;;16275:66;;16356:9;16368:1;16356:13;;16351:287;16375:7;:14;16371:1;:18;16351:287;;;16410:13;16426:44;16466:3;16426:35;16457:3;16426:26;16441:7;16449:1;16441:10;;;;;;;;;;;;;;16426;:14;;:26;;;;:::i;:::-;:30;;:35;;;;:::i;:::-;:39;;:44;;;;:::i;:::-;16410:60;;16484:20;16507:25;:7;16515:1;16507:10;;;;;;;;;;;;;;:23;;;:25::i;:::-;16484:48;;16546:4;:13;;:20;16560:5;16546:20;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16546:20:7;16609:7;16617:1;16609:10;;;;;;;;;;;;;;16585:42;;;16602:5;16621;16585:42;;;;;;;;;;;;;;;;;;;;;;;;16351:287;;16391:3;;;;;;;16351:287;;;;15890:754;;;;;;;:::o;81:113::-;137:15;185:1;162:26;;81:113;;;:::o
Swarm Source
bzzr://e5035ff13373008b1863bfb433199e29c407914cd84c4b0fbdaa3b093ece0796
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.