Overview
POL Balance
POL Value
$0.00More Info
Private Name Tags
ContractCreator
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
TokenSwapSpot
Compiler Version
v0.8.26+commit.8a97fa7a
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2024-11-30 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface ITokenSwap { function swapToken( address tokenIn, address tokenOut, uint256 amountIn, uint24 feeTier, address payable reseller ) external payable; function getPrice(address token1,address token2,uint256 feeTier) external view returns (uint256); function WETH() external view returns (address); } interface IERC20 { function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); function allowance(address owner,address spender) external view returns (uint); function approve(address spender, uint256 amount) external returns (bool); } interface IWETH { function deposit() external payable; function withdraw(uint wad) external; } contract TokenSwapSpot { // Owner of the contract address public owner; // Oracle address to call for order processing address public oracle; // Address of the TokenSwap contract (Uniswap swap handler) address public tokenSwapContract; ITokenSwap tokenSwap; address public WETH; uint public oracleFee = 0.02 ether; // Event for order placed event OrderPlaced(address indexed user, address tokenIn, address tokenOut, uint256 price, uint256 amountIn); // Event for swap triggered via oracle event OrderTriggered(address indexed user, address tokenIn, address tokenOut, uint256 price, uint256 amountIn); // Event for order cancellation event OrderCancelled(address indexed user, address tokenIn, address tokenOut, uint256 price, uint256 amountIn); // Struct representing a limit order struct Order { address user; uint256 priceIn; uint256 pairPriceId; uint256 amountIn; // tokenInAmount uint8 status; // 0=>open / 1=>withdrawed / 2=>cancelled uint256 createdAt; uint256 updatedAt; } uint256 public lastOrderId; mapping(uint256 => Order) public orders; mapping (address => uint[]) userOrderIds; mapping (address =>uint) public userOrderCount; struct PairPrice{ address tokenIn; address tokenOut; uint256 price; uint256 totalAmountIn; uint256 amountOut; // if 0 its open, if more it's done uint256 totalWithdrawn; } uint256 public lastPairId; mapping(uint256 => PairPrice) public pairPrices; mapping(address => mapping(address => mapping(uint=>uint))) pairPriceIds; // Modifier to restrict functions to the contract owner modifier onlyOwner() { require(msg.sender == owner, "Not the contract owner"); _; } // Modifier to restrict functions to the oracle modifier onlyOracle() { require(msg.sender == oracle, "Not the oracle"); _; } constructor(address _tokenSwapContract) { owner = msg.sender; oracle = msg.sender; tokenSwapContract = _tokenSwapContract; tokenSwap = ITokenSwap(tokenSwapContract); WETH = tokenSwap.WETH(); } // Function to place a limit order function placeOrder(address tokenIn, address tokenOut, uint256 price, uint256 amountIn) external payable { require(msg.value >= oracleFee,"Not enough oracle fee"); if (msg.value > oracleFee && (tokenIn==address(0) || tokenIn==address(WETH)) ) { tokenIn = WETH; amountIn = msg.value - oracleFee; IWETH(WETH).deposit{value: amountIn}(); //transfer oracle fee to oracle address (bool sent, ) = oracle.call{value: oracleFee}(""); require(sent, "Failed to send oracle fee"); }else{ require(amountIn > 0, "Must specify an amount to swap"); require(IERC20(tokenIn).transferFrom(msg.sender, address(this), amountIn), "Transfer failed"); //transfer oracle fee to oracle address (bool sent, ) = oracle.call{value: msg.value}(""); require(sent, "Failed to send oracle fee"); } uint256 pairPriceId = getPairPriceId(tokenIn,tokenOut,price); pairPrices[pairPriceId].totalAmountIn += amountIn; //approve tokenIn IERC20 erc20 = IERC20(tokenIn); if(erc20.allowance(address(this), tokenSwapContract)<amountIn) erc20.approve(tokenSwapContract,2**255); //place order Order memory newOrder = Order({ user: msg.sender, priceIn: tokenSwap.getPrice(tokenIn, tokenOut,3000), pairPriceId:pairPriceId, amountIn: amountIn, status:0,//pending createdAt: block.timestamp, updatedAt: 0 }); lastOrderId++; orders[lastOrderId] = newOrder; userOrderIds[msg.sender].push(lastOrderId); userOrderCount[msg.sender]++; emit OrderPlaced(msg.sender, tokenIn, tokenOut, price, amountIn); } // Function to cancel an order function cancelOrder(uint256 orderIndex) external { //validate inputs require(orderIndex<=userOrderCount[msg.sender],"Order id is not valid"); uint256 orderId = userOrderIds[msg.sender][orderIndex]; require(orders[orderId].status==0 && orders[orderId].amountIn>0,"Order is not open"); //update order status orders[orderId].status=2; orders[orderId].updatedAt=block.timestamp; //rolback the amounts uint256 pairPriceId = orders[orderId].pairPriceId; if(pairPrices[pairPriceId].tokenIn==WETH) { IWETH(WETH).withdraw(orders[orderId].amountIn); (bool success, ) = msg.sender.call{value: orders[orderId].amountIn}(""); require(success, "Failed to send ETH"); }else IERC20(pairPrices[pairPriceId].tokenIn).transfer(msg.sender, orders[orderId].amountIn); pairPrices[pairPriceId].totalAmountIn -= orders[orderId].amountIn; } function withdrawOrder(uint256 orderIndex) public{ //validate inputs require(orderIndex<=userOrderCount[msg.sender],"Order id is not valid"); uint256 orderId = userOrderIds[msg.sender][orderIndex]; require(orders[orderId].status==0 && orders[orderId].amountIn>0,"Order is not open"); //update order status orders[orderId].status=1; //withdrawed orders[orderId].updatedAt=block.timestamp; //pay the swapped amounts uint256 pairPriceId = orders[orderId].pairPriceId; require(pairPrices[pairPriceId].amountOut>0,"Order is not placed yet."); uint256 totalAmountIn = pairPrices[pairPriceId].totalAmountIn; uint256 totalAmountOut = pairPrices[pairPriceId].amountOut; uint256 myAmountIn = orders[orderId].amountIn; uint256 ratio = myAmountIn * 10**18 / totalAmountIn; uint256 myAmountOut = totalAmountOut * ratio / 10**18; if(pairPrices[pairPriceId].tokenOut==WETH) { //IWETH(WETH).withdraw(myAmountOut); //already converted to ETH in swap contract (bool success, ) = msg.sender.call{value: myAmountOut}(""); require(success, "Failed to send ETH"); }else IERC20(pairPrices[pairPriceId].tokenOut).transfer(msg.sender, myAmountOut); pairPrices[pairPriceId].totalWithdrawn += myAmountOut; } // Function to process orders in steps (batch processing) function processPairPrice(uint256 pairPriceId) external onlyOracle { //TODO: //get price and check if it is ok //?????????????????? //place swap order and get received token amount uint256 firstBalance; if(pairPrices[pairPriceId].tokenOut == WETH) firstBalance = address(this).balance; else firstBalance = IERC20(pairPrices[pairPriceId].tokenOut).balanceOf(address(this)); tokenSwap.swapToken( pairPrices[pairPriceId].tokenIn, pairPrices[pairPriceId].tokenOut, pairPrices[pairPriceId].totalAmountIn, 3000, payable(oracle) ); uint256 newBalance; if(pairPrices[pairPriceId].tokenOut == WETH) newBalance = address(this).balance; else newBalance = IERC20(pairPrices[pairPriceId].tokenOut).balanceOf(address(this)); uint256 income = newBalance - firstBalance; require(income>0,"Failed to process swap"); //disable old pairPrice and update income pairPrices[pairPriceId].amountOut = income; pairPriceIds[pairPrices[pairPriceId].tokenIn][pairPrices[pairPriceId].tokenOut][pairPrices[pairPriceId].price]=0; } // Function to get all active orders for a user with pagination struct TmpOrder { uint userOrderIndex; address user; uint256 priceIn; uint256 pairPriceId; uint256 amountIn; // tokenInAmount uint8 status; // 0=>open / 1=>withdrawed / 2=>cancelled uint256 createdAt; uint256 updatedAt; address tokenIn; address tokenOut; uint256 price; uint256 totalAmountIn; uint256 amountOut; // if 0 its open, if more it's done uint256 totalWithdrawn; } function getUserOrdersPaginated(address user,uint256 fromId, uint256 toId) external view returns (TmpOrder[] memory) { if (toId > userOrderIds[user].length) { toId = userOrderIds[user].length; } require(fromId <= toId, "Invalid pagination range"); uint256 size = toId - fromId; TmpOrder[] memory paginatedOrders = new TmpOrder[](size); for (uint256 i = 0; i < size; i++) { uint256 orderIndex = userOrderIds[user][fromId + i]; uint256 pairPriceId = orders[orderIndex].pairPriceId; TmpOrder memory _tmpOrder = TmpOrder({ userOrderIndex: fromId + i, user: orders[orderIndex].user, priceIn: orders[orderIndex].priceIn, pairPriceId: orders[orderIndex].pairPriceId, amountIn: orders[orderIndex].amountIn, // tokenInAmount status: orders[orderIndex].status, // 0=>open / 1=>withdrawed / 2=>cancelled createdAt: orders[orderIndex].createdAt, updatedAt: orders[orderIndex].updatedAt, tokenIn: pairPrices[pairPriceId].tokenIn, tokenOut: pairPrices[pairPriceId].tokenOut, price: pairPrices[pairPriceId].price, totalAmountIn: pairPrices[pairPriceId].totalAmountIn, amountOut: pairPrices[pairPriceId].amountOut, totalWithdrawn: pairPrices[pairPriceId].totalWithdrawn }); // Store the struct in the paginatedOrders array paginatedOrders[i] = _tmpOrder; } return paginatedOrders; } // Function to set a new TokenSwap contract address function setTokenSwapContract(address _tokenSwapContract) external onlyOwner { tokenSwapContract = _tokenSwapContract; tokenSwap = ITokenSwap(tokenSwapContract); WETH = tokenSwap.WETH(); } // Function to set the oracle address function setOracle(address _oracle) external onlyOwner { oracle = _oracle; } // Function to set the oracle address function setOracleFee(uint _oracleFee) external onlyOwner { oracleFee = _oracleFee; } // Helper function to round the price to a smaller step using base 2 function roundPriceBase2(uint256 price) private pure returns (uint256) { uint256 magnitude = 1 << (log2(price) - 8); // Shift to create smaller rounding steps uint256 roundedPrice = (price / magnitude) * magnitude; return roundedPrice; } // Efficient log2 implementation (based on bit-shifting) function log2(uint256 x) private pure returns (uint256) { uint256 result = 0; if (x >= 2**128) { x >>= 128; result += 128; } if (x >= 2**64) { x >>= 64; result += 64; } if (x >= 2**32) { x >>= 32; result += 32; } if (x >= 2**16) { x >>= 16; result += 16; } if (x >= 2**8) { x >>= 8; result += 8; } if (x >= 2**4) { x >>= 4; result += 4; } if (x >= 2**2) { x >>= 2; result += 2; } if (x >= 2**1) { result += 1; } return result; } function getPairPriceId(address tokenIn,address tokenOut,uint256 price) private returns(uint){ // Round the price to the nearest 0.1% price = roundPriceBase2(price); if(pairPriceIds[tokenIn][tokenOut][price]>0) return pairPriceIds[tokenIn][tokenOut][price]; PairPrice memory _pairPrice = PairPrice({ tokenIn:tokenIn, tokenOut:tokenOut, price:price, totalAmountIn:0, amountOut:0, // if 0 its open, if more it's done totalWithdrawn:0 }); lastPairId++; pairPrices[lastPairId] = _pairPrice; pairPriceIds[tokenIn][tokenOut][price] = lastPairId; return lastPairId; } // Emergency withdraw ETH function emergencyWithdrawETH(address payable to) external onlyOwner { uint256 balance = address(this).balance; require(balance > 0, "No ETH to withdraw"); to.transfer(balance); } // Emergency withdraw ERC20 tokens function emergencyWithdrawToken(address token, address to) external onlyOwner { IERC20 erc20 = IERC20(token); uint256 balance = erc20.balanceOf(address(this)); require(balance > 0, "No token balance to withdraw"); erc20.transfer(to, balance); } // Fallback function to receive ETH receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_tokenSwapContract","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address","name":"tokenIn","type":"address"},{"indexed":false,"internalType":"address","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"}],"name":"OrderCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address","name":"tokenIn","type":"address"},{"indexed":false,"internalType":"address","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"}],"name":"OrderPlaced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address","name":"tokenIn","type":"address"},{"indexed":false,"internalType":"address","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"}],"name":"OrderTriggered","type":"event"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"orderIndex","type":"uint256"}],"name":"cancelOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"to","type":"address"}],"name":"emergencyWithdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"emergencyWithdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"fromId","type":"uint256"},{"internalType":"uint256","name":"toId","type":"uint256"}],"name":"getUserOrdersPaginated","outputs":[{"components":[{"internalType":"uint256","name":"userOrderIndex","type":"uint256"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"priceIn","type":"uint256"},{"internalType":"uint256","name":"pairPriceId","type":"uint256"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint8","name":"status","type":"uint8"},{"internalType":"uint256","name":"createdAt","type":"uint256"},{"internalType":"uint256","name":"updatedAt","type":"uint256"},{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"totalAmountIn","type":"uint256"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"totalWithdrawn","type":"uint256"}],"internalType":"struct TokenSwapSpot.TmpOrder[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastOrderId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastPairId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oracle","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oracleFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"orders","outputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"priceIn","type":"uint256"},{"internalType":"uint256","name":"pairPriceId","type":"uint256"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint8","name":"status","type":"uint8"},{"internalType":"uint256","name":"createdAt","type":"uint256"},{"internalType":"uint256","name":"updatedAt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"pairPrices","outputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"totalAmountIn","type":"uint256"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"totalWithdrawn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"amountIn","type":"uint256"}],"name":"placeOrder","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pairPriceId","type":"uint256"}],"name":"processPairPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_oracle","type":"address"}],"name":"setOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_oracleFee","type":"uint256"}],"name":"setOracleFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenSwapContract","type":"address"}],"name":"setTokenSwapContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokenSwapContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userOrderCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"orderIndex","type":"uint256"}],"name":"withdrawOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405266470de4df82000060055534801561001a575f80fd5b506040516140b23803806140b2833981810160405281019061003c919061028d565b335f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503360015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101c6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101ea919061028d565b60045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506102b8565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61025c82610233565b9050919050565b61026c81610252565b8114610276575f80fd5b50565b5f8151905061028781610263565b92915050565b5f602082840312156102a2576102a161022f565b5b5f6102af84828501610279565b91505092915050565b613ded806102c55f395ff3fe608060405260043610610122575f3560e01c8063817422c01161009f578063af01afdf11610063578063af01afdf146103cc578063b6d9ef60146103f4578063ec4eb4f91461041c578063f9cd3ceb14610458578063fb791b0b1461048257610129565b8063817422c0146102cb5780638da5cb5b1461030c578063962fba2714610336578063a85c38ef14610360578063ad5c4648146103a257610129565b806366f48cf5116100e657806366f48cf5146101ed578063682458bd146102295780636e2bd98d146102515780637adbf973146102795780637dc0d1d0146102a157610129565b8063214ff4591461012d5780633bb7dac714610155578063514fcac71461017f578063559bf6fd146101a75780635662ecc7146101c357610129565b3661012957005b5f80fd5b348015610138575f80fd5b50610153600480360381019061014e9190612d9f565b6104aa565b005b348015610160575f80fd5b506101696105c5565b6040516101769190612dea565b60405180910390f35b34801561018a575f80fd5b506101a560048036038101906101a09190612e36565b6105ea565b005b6101c160048036038101906101bc9190612e8b565b610a90565b005b3480156101ce575f80fd5b506101d7611318565b6040516101e49190612efe565b60405180910390f35b3480156101f8575f80fd5b50610213600480360381019061020e9190612f17565b61131e565b6040516102209190613167565b60405180910390f35b348015610234575f80fd5b5061024f600480360381019061024a9190613187565b611735565b005b34801561025c575f80fd5b5061027760048036038101906102729190612e36565b611905565b005b348015610284575f80fd5b5061029f600480360381019061029a91906131c5565b611eb0565b005b3480156102ac575f80fd5b506102b5611f80565b6040516102c29190612dea565b60405180910390f35b3480156102d6575f80fd5b506102f160048036038101906102ec9190612e36565b611fa5565b604051610303969594939291906131f0565b60405180910390f35b348015610317575f80fd5b5061032061201b565b60405161032d9190612dea565b60405180910390f35b348015610341575f80fd5b5061034a61203e565b6040516103579190612efe565b60405180910390f35b34801561036b575f80fd5b5061038660048036038101906103819190612e36565b612044565b604051610399979695949392919061325e565b60405180910390f35b3480156103ad575f80fd5b506103b66120ad565b6040516103c39190612dea565b60405180910390f35b3480156103d7575f80fd5b506103f260048036038101906103ed91906131c5565b6120d2565b005b3480156103ff575f80fd5b5061041a60048036038101906104159190612e36565b6122d0565b005b348015610427575f80fd5b50610442600480360381019061043d91906131c5565b612367565b60405161044f9190612efe565b60405180910390f35b348015610463575f80fd5b5061046c61237c565b6040516104799190612efe565b60405180910390f35b34801561048d575f80fd5b506104a860048036038101906104a39190612e36565b612382565b005b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052e90613325565b60405180910390fd5b5f4790505f811161057d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105749061338d565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156105c0573d5f803e3d5ffd5b505050565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205481111561066a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610661906133f5565b60405180910390fd5b5f60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2082815481106106ba576106b9613413565b5b905f5260205f20015490505f60075f8381526020019081526020015f206004015f9054906101000a900460ff1660ff1614801561070a57505f60075f8381526020019081526020015f2060030154115b610749576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107409061348a565b60405180910390fd5b600260075f8381526020019081526020015f206004015f6101000a81548160ff021916908360ff1602179055504260075f8381526020019081526020015f20600601819055505f60075f8381526020019081526020015f2060020154905060045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600b5f8381526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361098a5760045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d60075f8581526020019081526020015f20600301546040518263ffffffff1660e01b815260040161089b9190612efe565b5f604051808303815f87803b1580156108b2575f80fd5b505af11580156108c4573d5f803e3d5ffd5b505050505f3373ffffffffffffffffffffffffffffffffffffffff1660075f8581526020019081526020015f2060030154604051610901906134d5565b5f6040518083038185875af1925050503d805f811461093b576040519150601f19603f3d011682016040523d82523d5f602084013e610940565b606091505b5050905080610984576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097b90613533565b60405180910390fd5b50610a4d565b600b5f8281526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3360075f8681526020019081526020015f20600301546040518363ffffffff1660e01b8152600401610a0b929190613551565b6020604051808303815f875af1158015610a27573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a4b91906135ad565b505b60075f8381526020019081526020015f2060030154600b5f8381526020019081526020015f206003015f828254610a849190613605565b92505081905550505050565b600554341015610ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acc90613682565b60405180910390fd5b60055434118015610b6857505f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610b67575060045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b5b15610cf05760045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16935060055434610b9f9190613605565b905060045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004015f604051808303818588803b158015610c08575f80fd5b505af1158015610c1a573d5f803e3d5ffd5b50505050505f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600554604051610c67906134d5565b5f6040518083038185875af1925050503d805f8114610ca1576040519150601f19603f3d011682016040523d82523d5f602084013e610ca6565b606091505b5050905080610cea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce1906136ea565b60405180910390fd5b50610eb9565b5f8111610d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2990613752565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401610d6f93929190613770565b6020604051808303815f875af1158015610d8b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610daf91906135ad565b610dee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de5906137ef565b60405180910390fd5b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1634604051610e34906134d5565b5f6040518083038185875af1925050503d805f8114610e6e576040519150601f19603f3d011682016040523d82523d5f602084013e610e73565b606091505b5050905080610eb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eae906136ea565b60405180910390fd5b505b5f610ec585858561283a565b905081600b5f8381526020019081526020015f206003015f828254610eea919061380d565b925050819055505f859050828173ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e3060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401610f52929190613840565b602060405180830381865afa158015610f6d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f91919061387b565b1015611055578073ffffffffffffffffffffffffffffffffffffffff1663095ea7b360025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167f80000000000000000000000000000000000000000000000000000000000000006040518363ffffffff1660e01b81526004016110139291906138e8565b6020604051808303815f875af115801561102f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061105391906135ad565b505b5f6040518060e001604052803373ffffffffffffffffffffffffffffffffffffffff16815260200160035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9dd14d68a8a610bb86040518463ffffffff1660e01b81526004016110dd93929190613948565b602060405180830381865afa1580156110f8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061111c919061387b565b81526020018481526020018581526020015f60ff1681526020014281526020015f815250905060065f8154809291906111549061397d565b91905055508060075f60065481526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015f6101000a81548160ff021916908360ff16021790555060a0820151816005015560c0820151816006015590505060085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600654908060018154018082558091505060019003905f5260205f20015f909190919091505560095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8154809291906112b69061397d565b91905055503373ffffffffffffffffffffffffffffffffffffffff167f25f958e981f7f2a99eb96852a8dffe251ff392838f2c8e280d160399a90b0fe18888888860405161130794939291906139c4565b60405180910390a250505050505050565b60065481565b606060085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490508211156113ac5760085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905091505b818311156113ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e690613a51565b60405180910390fd5b5f83836113fc9190613605565b90505f8167ffffffffffffffff81111561141957611418613a6f565b5b60405190808252806020026020018201604052801561145257816020015b61143f612c9b565b8152602001906001900390816114375790505b5090505f5b82811015611728575f60085f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2082886114a9919061380d565b815481106114ba576114b9613413565b5b905f5260205f20015490505f60075f8381526020019081526020015f206002015490505f604051806101c00160405280858b6114f6919061380d565b815260200160075f8681526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160075f8681526020019081526020015f2060010154815260200160075f8681526020019081526020015f2060020154815260200160075f8681526020019081526020015f2060030154815260200160075f8681526020019081526020015f206004015f9054906101000a900460ff1660ff16815260200160075f8681526020019081526020015f2060050154815260200160075f8681526020019081526020015f20600601548152602001600b5f8581526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600b5f8581526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600b5f8581526020019081526020015f20600201548152602001600b5f8581526020019081526020015f20600301548152602001600b5f8581526020019081526020015f20600401548152602001600b5f8581526020019081526020015f206005015481525090508085858151811061170d5761170c613413565b5b60200260200101819052505050508080600101915050611457565b5080925050509392505050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b990613325565b60405180910390fd5b5f8290505f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016118009190612dea565b602060405180830381865afa15801561181b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061183f919061387b565b90505f8111611883576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187a90613ae6565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b81526004016118be929190613551565b6020604051808303815f875af11580156118da573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118fe91906135ad565b5050505050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611994576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198b90613b4e565b60405180910390fd5b5f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600b5f8481526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611a2457479050611ad2565b600b5f8381526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611a909190612dea565b602060405180830381865afa158015611aab573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611acf919061387b565b90505b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166394ef1501600b5f8581526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b5f8681526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b5f8781526020019081526020015f2060030154610bb860015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518663ffffffff1660e01b8152600401611bd0959493929190613bb9565b5f604051808303815f87803b158015611be7575f80fd5b505af1158015611bf9573d5f803e3d5ffd5b505050505f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600b5f8581526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611c8d57479050611d3b565b600b5f8481526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611cf99190612dea565b602060405180830381865afa158015611d14573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d38919061387b565b90505b5f8282611d489190613605565b90505f8111611d8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8390613c54565b60405180910390fd5b80600b5f8681526020019081526020015f20600401819055505f600c5f600b5f8881526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f600b5f8881526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f600b5f8881526020019081526020015f206002015481526020019081526020015f208190555050505050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3490613325565b60405180910390fd5b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b602052805f5260405f205f91509050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154908060030154908060040154908060050154905086565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b6007602052805f5260405f205f91509050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001015490806002015490806003015490806004015f9054906101000a900460ff16908060050154908060060154905087565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461215f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215690613325565b60405180910390fd5b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561226a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061228e9190613c86565b60045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461235d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235490613325565b60405180910390fd5b8060058190555050565b6009602052805f5260405f205f915090505481565b60055481565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054811115612402576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f9906133f5565b60405180910390fd5b5f60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20828154811061245257612451613413565b5b905f5260205f20015490505f60075f8381526020019081526020015f206004015f9054906101000a900460ff1660ff161480156124a257505f60075f8381526020019081526020015f2060030154115b6124e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d89061348a565b60405180910390fd5b600160075f8381526020019081526020015f206004015f6101000a81548160ff021916908360ff1602179055504260075f8381526020019081526020015f20600601819055505f60075f8381526020019081526020015f206002015490505f600b5f8381526020019081526020015f206004015411612595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258c90613cfb565b60405180910390fd5b5f600b5f8381526020019081526020015f206003015490505f600b5f8481526020019081526020015f206004015490505f60075f8681526020019081526020015f206003015490505f83670de0b6b3a7640000836125f39190613d19565b6125fd9190613d87565b90505f670de0b6b3a764000082856126159190613d19565b61261f9190613d87565b905060045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600b5f8881526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612756575f3373ffffffffffffffffffffffffffffffffffffffff16826040516126cd906134d5565b5f6040518083038185875af1925050503d805f8114612707576040519150601f19603f3d011682016040523d82523d5f602084013e61270c565b606091505b5050905080612750576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274790613533565b60405180910390fd5b50612806565b600b5f8781526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016127c4929190613551565b6020604051808303815f875af11580156127e0573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061280491906135ad565b505b80600b5f8881526020019081526020015f206005015f828254612829919061380d565b925050819055505050505050505050565b5f61284482612b3c565b91505f600c5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f2054111561296457600c5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f20549050612b35565b5f6040518060c001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018481526020015f81526020015f81526020015f8152509050600a5f8154809291906129d29061397d565b919050555080600b5f600a5481526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020155606082015181600301556080820151816004015560a08201518160050155905050600a54600c5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8581526020019081526020015f2081905550600a549150505b9392505050565b5f806008612b4984612b7d565b612b539190613605565b6001901b90505f818285612b679190613d87565b612b719190613d19565b90508092505050919050565b5f805f90507001000000000000000000000000000000008310612bb157608083901c9250608081612bae919061380d565b90505b680100000000000000008310612bd857604083901c9250604081612bd5919061380d565b90505b6401000000008310612bfb57602083901c9250602081612bf8919061380d565b90505b620100008310612c1c57601083901c9250601081612c19919061380d565b90505b6101008310612c3c57600883901c9250600881612c39919061380d565b90505b60108310612c5b57600483901c9250600481612c58919061380d565b90505b60048310612c7a57600283901c9250600281612c77919061380d565b90505b60028310612c9257600181612c8f919061380d565b90505b80915050919050565b604051806101c001604052805f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f81526020015f81526020015f60ff1681526020015f81526020015f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f81526020015f81526020015f81525090565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612d6e82612d45565b9050919050565b612d7e81612d64565b8114612d88575f80fd5b50565b5f81359050612d9981612d75565b92915050565b5f60208284031215612db457612db3612d41565b5b5f612dc184828501612d8b565b91505092915050565b5f612dd482612d45565b9050919050565b612de481612dca565b82525050565b5f602082019050612dfd5f830184612ddb565b92915050565b5f819050919050565b612e1581612e03565b8114612e1f575f80fd5b50565b5f81359050612e3081612e0c565b92915050565b5f60208284031215612e4b57612e4a612d41565b5b5f612e5884828501612e22565b91505092915050565b612e6a81612dca565b8114612e74575f80fd5b50565b5f81359050612e8581612e61565b92915050565b5f805f8060808587031215612ea357612ea2612d41565b5b5f612eb087828801612e77565b9450506020612ec187828801612e77565b9350506040612ed287828801612e22565b9250506060612ee387828801612e22565b91505092959194509250565b612ef881612e03565b82525050565b5f602082019050612f115f830184612eef565b92915050565b5f805f60608486031215612f2e57612f2d612d41565b5b5f612f3b86828701612e77565b9350506020612f4c86828701612e22565b9250506040612f5d86828701612e22565b9150509250925092565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612f9981612e03565b82525050565b612fa881612dca565b82525050565b5f60ff82169050919050565b612fc381612fae565b82525050565b6101c082015f820151612fde5f850182612f90565b506020820151612ff16020850182612f9f565b5060408201516130046040850182612f90565b5060608201516130176060850182612f90565b50608082015161302a6080850182612f90565b5060a082015161303d60a0850182612fba565b5060c082015161305060c0850182612f90565b5060e082015161306360e0850182612f90565b50610100820151613078610100850182612f9f565b5061012082015161308d610120850182612f9f565b506101408201516130a2610140850182612f90565b506101608201516130b7610160850182612f90565b506101808201516130cc610180850182612f90565b506101a08201516130e16101a0850182612f90565b50505050565b5f6130f28383612fc9565b6101c08301905092915050565b5f602082019050919050565b5f61311582612f67565b61311f8185612f71565b935061312a83612f81565b805f5b8381101561315a57815161314188826130e7565b975061314c836130ff565b92505060018101905061312d565b5085935050505092915050565b5f6020820190508181035f83015261317f818461310b565b905092915050565b5f806040838503121561319d5761319c612d41565b5b5f6131aa85828601612e77565b92505060206131bb85828601612e77565b9150509250929050565b5f602082840312156131da576131d9612d41565b5b5f6131e784828501612e77565b91505092915050565b5f60c0820190506132035f830189612ddb565b6132106020830188612ddb565b61321d6040830187612eef565b61322a6060830186612eef565b6132376080830185612eef565b61324460a0830184612eef565b979650505050505050565b61325881612fae565b82525050565b5f60e0820190506132715f83018a612ddb565b61327e6020830189612eef565b61328b6040830188612eef565b6132986060830187612eef565b6132a5608083018661324f565b6132b260a0830185612eef565b6132bf60c0830184612eef565b98975050505050505050565b5f82825260208201905092915050565b7f4e6f742074686520636f6e7472616374206f776e6572000000000000000000005f82015250565b5f61330f6016836132cb565b915061331a826132db565b602082019050919050565b5f6020820190508181035f83015261333c81613303565b9050919050565b7f4e6f2045544820746f20776974686472617700000000000000000000000000005f82015250565b5f6133776012836132cb565b915061338282613343565b602082019050919050565b5f6020820190508181035f8301526133a48161336b565b9050919050565b7f4f72646572206964206973206e6f742076616c696400000000000000000000005f82015250565b5f6133df6015836132cb565b91506133ea826133ab565b602082019050919050565b5f6020820190508181035f83015261340c816133d3565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4f72646572206973206e6f74206f70656e0000000000000000000000000000005f82015250565b5f6134746011836132cb565b915061347f82613440565b602082019050919050565b5f6020820190508181035f8301526134a181613468565b9050919050565b5f81905092915050565b50565b5f6134c05f836134a8565b91506134cb826134b2565b5f82019050919050565b5f6134df826134b5565b9150819050919050565b7f4661696c656420746f2073656e642045544800000000000000000000000000005f82015250565b5f61351d6012836132cb565b9150613528826134e9565b602082019050919050565b5f6020820190508181035f83015261354a81613511565b9050919050565b5f6040820190506135645f830185612ddb565b6135716020830184612eef565b9392505050565b5f8115159050919050565b61358c81613578565b8114613596575f80fd5b50565b5f815190506135a781613583565b92915050565b5f602082840312156135c2576135c1612d41565b5b5f6135cf84828501613599565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61360f82612e03565b915061361a83612e03565b9250828203905081811115613632576136316135d8565b5b92915050565b7f4e6f7420656e6f756768206f7261636c652066656500000000000000000000005f82015250565b5f61366c6015836132cb565b915061367782613638565b602082019050919050565b5f6020820190508181035f83015261369981613660565b9050919050565b7f4661696c656420746f2073656e64206f7261636c6520666565000000000000005f82015250565b5f6136d46019836132cb565b91506136df826136a0565b602082019050919050565b5f6020820190508181035f830152613701816136c8565b9050919050565b7f4d757374207370656369667920616e20616d6f756e7420746f207377617000005f82015250565b5f61373c601e836132cb565b915061374782613708565b602082019050919050565b5f6020820190508181035f83015261376981613730565b9050919050565b5f6060820190506137835f830186612ddb565b6137906020830185612ddb565b61379d6040830184612eef565b949350505050565b7f5472616e73666572206661696c656400000000000000000000000000000000005f82015250565b5f6137d9600f836132cb565b91506137e4826137a5565b602082019050919050565b5f6020820190508181035f830152613806816137cd565b9050919050565b5f61381782612e03565b915061382283612e03565b925082820190508082111561383a576138396135d8565b5b92915050565b5f6040820190506138535f830185612ddb565b6138606020830184612ddb565b9392505050565b5f8151905061387581612e0c565b92915050565b5f602082840312156138905761388f612d41565b5b5f61389d84828501613867565b91505092915050565b5f819050919050565b5f819050919050565b5f6138d26138cd6138c8846138a6565b6138af565b612e03565b9050919050565b6138e2816138b8565b82525050565b5f6040820190506138fb5f830185612ddb565b61390860208301846138d9565b9392505050565b5f819050919050565b5f61393261392d6139288461390f565b6138af565b612e03565b9050919050565b61394281613918565b82525050565b5f60608201905061395b5f830186612ddb565b6139686020830185612ddb565b6139756040830184613939565b949350505050565b5f61398782612e03565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036139b9576139b86135d8565b5b600182019050919050565b5f6080820190506139d75f830187612ddb565b6139e46020830186612ddb565b6139f16040830185612eef565b6139fe6060830184612eef565b95945050505050565b7f496e76616c696420706167696e6174696f6e2072616e676500000000000000005f82015250565b5f613a3b6018836132cb565b9150613a4682613a07565b602082019050919050565b5f6020820190508181035f830152613a6881613a2f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e6f20746f6b656e2062616c616e636520746f207769746864726177000000005f82015250565b5f613ad0601c836132cb565b9150613adb82613a9c565b602082019050919050565b5f6020820190508181035f830152613afd81613ac4565b9050919050565b7f4e6f7420746865206f7261636c650000000000000000000000000000000000005f82015250565b5f613b38600e836132cb565b9150613b4382613b04565b602082019050919050565b5f6020820190508181035f830152613b6581613b2c565b9050919050565b5f62ffffff82169050919050565b5f613b94613b8f613b8a8461390f565b6138af565b613b6c565b9050919050565b613ba481613b7a565b82525050565b613bb381612d64565b82525050565b5f60a082019050613bcc5f830188612ddb565b613bd96020830187612ddb565b613be66040830186612eef565b613bf36060830185613b9b565b613c006080830184613baa565b9695505050505050565b7f4661696c656420746f2070726f636573732073776170000000000000000000005f82015250565b5f613c3e6016836132cb565b9150613c4982613c0a565b602082019050919050565b5f6020820190508181035f830152613c6b81613c32565b9050919050565b5f81519050613c8081612e61565b92915050565b5f60208284031215613c9b57613c9a612d41565b5b5f613ca884828501613c72565b91505092915050565b7f4f72646572206973206e6f7420706c61636564207965742e00000000000000005f82015250565b5f613ce56018836132cb565b9150613cf082613cb1565b602082019050919050565b5f6020820190508181035f830152613d1281613cd9565b9050919050565b5f613d2382612e03565b9150613d2e83612e03565b9250828202613d3c81612e03565b91508282048414831517613d5357613d526135d8565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613d9182612e03565b9150613d9c83612e03565b925082613dac57613dab613d5a565b5b82820490509291505056fea26469706673582212203cf9415c48c31e87418c37a452534d93b08846164eb4eb74c6138751b25e800c64736f6c634300081a003300000000000000000000000032d6b39bc53f9d85d7d64034bad9e5061b408e38
Deployed Bytecode
0x608060405260043610610122575f3560e01c8063817422c01161009f578063af01afdf11610063578063af01afdf146103cc578063b6d9ef60146103f4578063ec4eb4f91461041c578063f9cd3ceb14610458578063fb791b0b1461048257610129565b8063817422c0146102cb5780638da5cb5b1461030c578063962fba2714610336578063a85c38ef14610360578063ad5c4648146103a257610129565b806366f48cf5116100e657806366f48cf5146101ed578063682458bd146102295780636e2bd98d146102515780637adbf973146102795780637dc0d1d0146102a157610129565b8063214ff4591461012d5780633bb7dac714610155578063514fcac71461017f578063559bf6fd146101a75780635662ecc7146101c357610129565b3661012957005b5f80fd5b348015610138575f80fd5b50610153600480360381019061014e9190612d9f565b6104aa565b005b348015610160575f80fd5b506101696105c5565b6040516101769190612dea565b60405180910390f35b34801561018a575f80fd5b506101a560048036038101906101a09190612e36565b6105ea565b005b6101c160048036038101906101bc9190612e8b565b610a90565b005b3480156101ce575f80fd5b506101d7611318565b6040516101e49190612efe565b60405180910390f35b3480156101f8575f80fd5b50610213600480360381019061020e9190612f17565b61131e565b6040516102209190613167565b60405180910390f35b348015610234575f80fd5b5061024f600480360381019061024a9190613187565b611735565b005b34801561025c575f80fd5b5061027760048036038101906102729190612e36565b611905565b005b348015610284575f80fd5b5061029f600480360381019061029a91906131c5565b611eb0565b005b3480156102ac575f80fd5b506102b5611f80565b6040516102c29190612dea565b60405180910390f35b3480156102d6575f80fd5b506102f160048036038101906102ec9190612e36565b611fa5565b604051610303969594939291906131f0565b60405180910390f35b348015610317575f80fd5b5061032061201b565b60405161032d9190612dea565b60405180910390f35b348015610341575f80fd5b5061034a61203e565b6040516103579190612efe565b60405180910390f35b34801561036b575f80fd5b5061038660048036038101906103819190612e36565b612044565b604051610399979695949392919061325e565b60405180910390f35b3480156103ad575f80fd5b506103b66120ad565b6040516103c39190612dea565b60405180910390f35b3480156103d7575f80fd5b506103f260048036038101906103ed91906131c5565b6120d2565b005b3480156103ff575f80fd5b5061041a60048036038101906104159190612e36565b6122d0565b005b348015610427575f80fd5b50610442600480360381019061043d91906131c5565b612367565b60405161044f9190612efe565b60405180910390f35b348015610463575f80fd5b5061046c61237c565b6040516104799190612efe565b60405180910390f35b34801561048d575f80fd5b506104a860048036038101906104a39190612e36565b612382565b005b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052e90613325565b60405180910390fd5b5f4790505f811161057d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105749061338d565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156105c0573d5f803e3d5ffd5b505050565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205481111561066a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610661906133f5565b60405180910390fd5b5f60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2082815481106106ba576106b9613413565b5b905f5260205f20015490505f60075f8381526020019081526020015f206004015f9054906101000a900460ff1660ff1614801561070a57505f60075f8381526020019081526020015f2060030154115b610749576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107409061348a565b60405180910390fd5b600260075f8381526020019081526020015f206004015f6101000a81548160ff021916908360ff1602179055504260075f8381526020019081526020015f20600601819055505f60075f8381526020019081526020015f2060020154905060045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600b5f8381526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361098a5760045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d60075f8581526020019081526020015f20600301546040518263ffffffff1660e01b815260040161089b9190612efe565b5f604051808303815f87803b1580156108b2575f80fd5b505af11580156108c4573d5f803e3d5ffd5b505050505f3373ffffffffffffffffffffffffffffffffffffffff1660075f8581526020019081526020015f2060030154604051610901906134d5565b5f6040518083038185875af1925050503d805f811461093b576040519150601f19603f3d011682016040523d82523d5f602084013e610940565b606091505b5050905080610984576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097b90613533565b60405180910390fd5b50610a4d565b600b5f8281526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3360075f8681526020019081526020015f20600301546040518363ffffffff1660e01b8152600401610a0b929190613551565b6020604051808303815f875af1158015610a27573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a4b91906135ad565b505b60075f8381526020019081526020015f2060030154600b5f8381526020019081526020015f206003015f828254610a849190613605565b92505081905550505050565b600554341015610ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acc90613682565b60405180910390fd5b60055434118015610b6857505f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610b67575060045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b5b15610cf05760045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16935060055434610b9f9190613605565b905060045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004015f604051808303818588803b158015610c08575f80fd5b505af1158015610c1a573d5f803e3d5ffd5b50505050505f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600554604051610c67906134d5565b5f6040518083038185875af1925050503d805f8114610ca1576040519150601f19603f3d011682016040523d82523d5f602084013e610ca6565b606091505b5050905080610cea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce1906136ea565b60405180910390fd5b50610eb9565b5f8111610d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2990613752565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401610d6f93929190613770565b6020604051808303815f875af1158015610d8b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610daf91906135ad565b610dee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de5906137ef565b60405180910390fd5b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1634604051610e34906134d5565b5f6040518083038185875af1925050503d805f8114610e6e576040519150601f19603f3d011682016040523d82523d5f602084013e610e73565b606091505b5050905080610eb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eae906136ea565b60405180910390fd5b505b5f610ec585858561283a565b905081600b5f8381526020019081526020015f206003015f828254610eea919061380d565b925050819055505f859050828173ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e3060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401610f52929190613840565b602060405180830381865afa158015610f6d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f91919061387b565b1015611055578073ffffffffffffffffffffffffffffffffffffffff1663095ea7b360025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167f80000000000000000000000000000000000000000000000000000000000000006040518363ffffffff1660e01b81526004016110139291906138e8565b6020604051808303815f875af115801561102f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061105391906135ad565b505b5f6040518060e001604052803373ffffffffffffffffffffffffffffffffffffffff16815260200160035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9dd14d68a8a610bb86040518463ffffffff1660e01b81526004016110dd93929190613948565b602060405180830381865afa1580156110f8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061111c919061387b565b81526020018481526020018581526020015f60ff1681526020014281526020015f815250905060065f8154809291906111549061397d565b91905055508060075f60065481526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015f6101000a81548160ff021916908360ff16021790555060a0820151816005015560c0820151816006015590505060085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600654908060018154018082558091505060019003905f5260205f20015f909190919091505560095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8154809291906112b69061397d565b91905055503373ffffffffffffffffffffffffffffffffffffffff167f25f958e981f7f2a99eb96852a8dffe251ff392838f2c8e280d160399a90b0fe18888888860405161130794939291906139c4565b60405180910390a250505050505050565b60065481565b606060085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490508211156113ac5760085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905091505b818311156113ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e690613a51565b60405180910390fd5b5f83836113fc9190613605565b90505f8167ffffffffffffffff81111561141957611418613a6f565b5b60405190808252806020026020018201604052801561145257816020015b61143f612c9b565b8152602001906001900390816114375790505b5090505f5b82811015611728575f60085f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2082886114a9919061380d565b815481106114ba576114b9613413565b5b905f5260205f20015490505f60075f8381526020019081526020015f206002015490505f604051806101c00160405280858b6114f6919061380d565b815260200160075f8681526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160075f8681526020019081526020015f2060010154815260200160075f8681526020019081526020015f2060020154815260200160075f8681526020019081526020015f2060030154815260200160075f8681526020019081526020015f206004015f9054906101000a900460ff1660ff16815260200160075f8681526020019081526020015f2060050154815260200160075f8681526020019081526020015f20600601548152602001600b5f8581526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600b5f8581526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600b5f8581526020019081526020015f20600201548152602001600b5f8581526020019081526020015f20600301548152602001600b5f8581526020019081526020015f20600401548152602001600b5f8581526020019081526020015f206005015481525090508085858151811061170d5761170c613413565b5b60200260200101819052505050508080600101915050611457565b5080925050509392505050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b990613325565b60405180910390fd5b5f8290505f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016118009190612dea565b602060405180830381865afa15801561181b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061183f919061387b565b90505f8111611883576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187a90613ae6565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b81526004016118be929190613551565b6020604051808303815f875af11580156118da573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118fe91906135ad565b5050505050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611994576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198b90613b4e565b60405180910390fd5b5f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600b5f8481526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611a2457479050611ad2565b600b5f8381526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611a909190612dea565b602060405180830381865afa158015611aab573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611acf919061387b565b90505b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166394ef1501600b5f8581526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b5f8681526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b5f8781526020019081526020015f2060030154610bb860015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518663ffffffff1660e01b8152600401611bd0959493929190613bb9565b5f604051808303815f87803b158015611be7575f80fd5b505af1158015611bf9573d5f803e3d5ffd5b505050505f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600b5f8581526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611c8d57479050611d3b565b600b5f8481526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611cf99190612dea565b602060405180830381865afa158015611d14573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d38919061387b565b90505b5f8282611d489190613605565b90505f8111611d8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8390613c54565b60405180910390fd5b80600b5f8681526020019081526020015f20600401819055505f600c5f600b5f8881526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f600b5f8881526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f600b5f8881526020019081526020015f206002015481526020019081526020015f208190555050505050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3490613325565b60405180910390fd5b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b602052805f5260405f205f91509050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154908060030154908060040154908060050154905086565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b6007602052805f5260405f205f91509050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001015490806002015490806003015490806004015f9054906101000a900460ff16908060050154908060060154905087565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461215f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215690613325565b60405180910390fd5b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561226a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061228e9190613c86565b60045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461235d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235490613325565b60405180910390fd5b8060058190555050565b6009602052805f5260405f205f915090505481565b60055481565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054811115612402576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f9906133f5565b60405180910390fd5b5f60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20828154811061245257612451613413565b5b905f5260205f20015490505f60075f8381526020019081526020015f206004015f9054906101000a900460ff1660ff161480156124a257505f60075f8381526020019081526020015f2060030154115b6124e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d89061348a565b60405180910390fd5b600160075f8381526020019081526020015f206004015f6101000a81548160ff021916908360ff1602179055504260075f8381526020019081526020015f20600601819055505f60075f8381526020019081526020015f206002015490505f600b5f8381526020019081526020015f206004015411612595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258c90613cfb565b60405180910390fd5b5f600b5f8381526020019081526020015f206003015490505f600b5f8481526020019081526020015f206004015490505f60075f8681526020019081526020015f206003015490505f83670de0b6b3a7640000836125f39190613d19565b6125fd9190613d87565b90505f670de0b6b3a764000082856126159190613d19565b61261f9190613d87565b905060045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600b5f8881526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612756575f3373ffffffffffffffffffffffffffffffffffffffff16826040516126cd906134d5565b5f6040518083038185875af1925050503d805f8114612707576040519150601f19603f3d011682016040523d82523d5f602084013e61270c565b606091505b5050905080612750576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274790613533565b60405180910390fd5b50612806565b600b5f8781526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016127c4929190613551565b6020604051808303815f875af11580156127e0573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061280491906135ad565b505b80600b5f8881526020019081526020015f206005015f828254612829919061380d565b925050819055505050505050505050565b5f61284482612b3c565b91505f600c5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f2054111561296457600c5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f20549050612b35565b5f6040518060c001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018481526020015f81526020015f81526020015f8152509050600a5f8154809291906129d29061397d565b919050555080600b5f600a5481526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020155606082015181600301556080820151816004015560a08201518160050155905050600a54600c5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8581526020019081526020015f2081905550600a549150505b9392505050565b5f806008612b4984612b7d565b612b539190613605565b6001901b90505f818285612b679190613d87565b612b719190613d19565b90508092505050919050565b5f805f90507001000000000000000000000000000000008310612bb157608083901c9250608081612bae919061380d565b90505b680100000000000000008310612bd857604083901c9250604081612bd5919061380d565b90505b6401000000008310612bfb57602083901c9250602081612bf8919061380d565b90505b620100008310612c1c57601083901c9250601081612c19919061380d565b90505b6101008310612c3c57600883901c9250600881612c39919061380d565b90505b60108310612c5b57600483901c9250600481612c58919061380d565b90505b60048310612c7a57600283901c9250600281612c77919061380d565b90505b60028310612c9257600181612c8f919061380d565b90505b80915050919050565b604051806101c001604052805f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f81526020015f81526020015f60ff1681526020015f81526020015f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f81526020015f81526020015f81525090565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612d6e82612d45565b9050919050565b612d7e81612d64565b8114612d88575f80fd5b50565b5f81359050612d9981612d75565b92915050565b5f60208284031215612db457612db3612d41565b5b5f612dc184828501612d8b565b91505092915050565b5f612dd482612d45565b9050919050565b612de481612dca565b82525050565b5f602082019050612dfd5f830184612ddb565b92915050565b5f819050919050565b612e1581612e03565b8114612e1f575f80fd5b50565b5f81359050612e3081612e0c565b92915050565b5f60208284031215612e4b57612e4a612d41565b5b5f612e5884828501612e22565b91505092915050565b612e6a81612dca565b8114612e74575f80fd5b50565b5f81359050612e8581612e61565b92915050565b5f805f8060808587031215612ea357612ea2612d41565b5b5f612eb087828801612e77565b9450506020612ec187828801612e77565b9350506040612ed287828801612e22565b9250506060612ee387828801612e22565b91505092959194509250565b612ef881612e03565b82525050565b5f602082019050612f115f830184612eef565b92915050565b5f805f60608486031215612f2e57612f2d612d41565b5b5f612f3b86828701612e77565b9350506020612f4c86828701612e22565b9250506040612f5d86828701612e22565b9150509250925092565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612f9981612e03565b82525050565b612fa881612dca565b82525050565b5f60ff82169050919050565b612fc381612fae565b82525050565b6101c082015f820151612fde5f850182612f90565b506020820151612ff16020850182612f9f565b5060408201516130046040850182612f90565b5060608201516130176060850182612f90565b50608082015161302a6080850182612f90565b5060a082015161303d60a0850182612fba565b5060c082015161305060c0850182612f90565b5060e082015161306360e0850182612f90565b50610100820151613078610100850182612f9f565b5061012082015161308d610120850182612f9f565b506101408201516130a2610140850182612f90565b506101608201516130b7610160850182612f90565b506101808201516130cc610180850182612f90565b506101a08201516130e16101a0850182612f90565b50505050565b5f6130f28383612fc9565b6101c08301905092915050565b5f602082019050919050565b5f61311582612f67565b61311f8185612f71565b935061312a83612f81565b805f5b8381101561315a57815161314188826130e7565b975061314c836130ff565b92505060018101905061312d565b5085935050505092915050565b5f6020820190508181035f83015261317f818461310b565b905092915050565b5f806040838503121561319d5761319c612d41565b5b5f6131aa85828601612e77565b92505060206131bb85828601612e77565b9150509250929050565b5f602082840312156131da576131d9612d41565b5b5f6131e784828501612e77565b91505092915050565b5f60c0820190506132035f830189612ddb565b6132106020830188612ddb565b61321d6040830187612eef565b61322a6060830186612eef565b6132376080830185612eef565b61324460a0830184612eef565b979650505050505050565b61325881612fae565b82525050565b5f60e0820190506132715f83018a612ddb565b61327e6020830189612eef565b61328b6040830188612eef565b6132986060830187612eef565b6132a5608083018661324f565b6132b260a0830185612eef565b6132bf60c0830184612eef565b98975050505050505050565b5f82825260208201905092915050565b7f4e6f742074686520636f6e7472616374206f776e6572000000000000000000005f82015250565b5f61330f6016836132cb565b915061331a826132db565b602082019050919050565b5f6020820190508181035f83015261333c81613303565b9050919050565b7f4e6f2045544820746f20776974686472617700000000000000000000000000005f82015250565b5f6133776012836132cb565b915061338282613343565b602082019050919050565b5f6020820190508181035f8301526133a48161336b565b9050919050565b7f4f72646572206964206973206e6f742076616c696400000000000000000000005f82015250565b5f6133df6015836132cb565b91506133ea826133ab565b602082019050919050565b5f6020820190508181035f83015261340c816133d3565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4f72646572206973206e6f74206f70656e0000000000000000000000000000005f82015250565b5f6134746011836132cb565b915061347f82613440565b602082019050919050565b5f6020820190508181035f8301526134a181613468565b9050919050565b5f81905092915050565b50565b5f6134c05f836134a8565b91506134cb826134b2565b5f82019050919050565b5f6134df826134b5565b9150819050919050565b7f4661696c656420746f2073656e642045544800000000000000000000000000005f82015250565b5f61351d6012836132cb565b9150613528826134e9565b602082019050919050565b5f6020820190508181035f83015261354a81613511565b9050919050565b5f6040820190506135645f830185612ddb565b6135716020830184612eef565b9392505050565b5f8115159050919050565b61358c81613578565b8114613596575f80fd5b50565b5f815190506135a781613583565b92915050565b5f602082840312156135c2576135c1612d41565b5b5f6135cf84828501613599565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61360f82612e03565b915061361a83612e03565b9250828203905081811115613632576136316135d8565b5b92915050565b7f4e6f7420656e6f756768206f7261636c652066656500000000000000000000005f82015250565b5f61366c6015836132cb565b915061367782613638565b602082019050919050565b5f6020820190508181035f83015261369981613660565b9050919050565b7f4661696c656420746f2073656e64206f7261636c6520666565000000000000005f82015250565b5f6136d46019836132cb565b91506136df826136a0565b602082019050919050565b5f6020820190508181035f830152613701816136c8565b9050919050565b7f4d757374207370656369667920616e20616d6f756e7420746f207377617000005f82015250565b5f61373c601e836132cb565b915061374782613708565b602082019050919050565b5f6020820190508181035f83015261376981613730565b9050919050565b5f6060820190506137835f830186612ddb565b6137906020830185612ddb565b61379d6040830184612eef565b949350505050565b7f5472616e73666572206661696c656400000000000000000000000000000000005f82015250565b5f6137d9600f836132cb565b91506137e4826137a5565b602082019050919050565b5f6020820190508181035f830152613806816137cd565b9050919050565b5f61381782612e03565b915061382283612e03565b925082820190508082111561383a576138396135d8565b5b92915050565b5f6040820190506138535f830185612ddb565b6138606020830184612ddb565b9392505050565b5f8151905061387581612e0c565b92915050565b5f602082840312156138905761388f612d41565b5b5f61389d84828501613867565b91505092915050565b5f819050919050565b5f819050919050565b5f6138d26138cd6138c8846138a6565b6138af565b612e03565b9050919050565b6138e2816138b8565b82525050565b5f6040820190506138fb5f830185612ddb565b61390860208301846138d9565b9392505050565b5f819050919050565b5f61393261392d6139288461390f565b6138af565b612e03565b9050919050565b61394281613918565b82525050565b5f60608201905061395b5f830186612ddb565b6139686020830185612ddb565b6139756040830184613939565b949350505050565b5f61398782612e03565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036139b9576139b86135d8565b5b600182019050919050565b5f6080820190506139d75f830187612ddb565b6139e46020830186612ddb565b6139f16040830185612eef565b6139fe6060830184612eef565b95945050505050565b7f496e76616c696420706167696e6174696f6e2072616e676500000000000000005f82015250565b5f613a3b6018836132cb565b9150613a4682613a07565b602082019050919050565b5f6020820190508181035f830152613a6881613a2f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e6f20746f6b656e2062616c616e636520746f207769746864726177000000005f82015250565b5f613ad0601c836132cb565b9150613adb82613a9c565b602082019050919050565b5f6020820190508181035f830152613afd81613ac4565b9050919050565b7f4e6f7420746865206f7261636c650000000000000000000000000000000000005f82015250565b5f613b38600e836132cb565b9150613b4382613b04565b602082019050919050565b5f6020820190508181035f830152613b6581613b2c565b9050919050565b5f62ffffff82169050919050565b5f613b94613b8f613b8a8461390f565b6138af565b613b6c565b9050919050565b613ba481613b7a565b82525050565b613bb381612d64565b82525050565b5f60a082019050613bcc5f830188612ddb565b613bd96020830187612ddb565b613be66040830186612eef565b613bf36060830185613b9b565b613c006080830184613baa565b9695505050505050565b7f4661696c656420746f2070726f636573732073776170000000000000000000005f82015250565b5f613c3e6016836132cb565b9150613c4982613c0a565b602082019050919050565b5f6020820190508181035f830152613c6b81613c32565b9050919050565b5f81519050613c8081612e61565b92915050565b5f60208284031215613c9b57613c9a612d41565b5b5f613ca884828501613c72565b91505092915050565b7f4f72646572206973206e6f7420706c61636564207965742e00000000000000005f82015250565b5f613ce56018836132cb565b9150613cf082613cb1565b602082019050919050565b5f6020820190508181035f830152613d1281613cd9565b9050919050565b5f613d2382612e03565b9150613d2e83612e03565b9250828202613d3c81612e03565b91508282048414831517613d5357613d526135d8565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613d9182612e03565b9150613d9c83612e03565b925082613dac57613dab613d5a565b5b82820490509291505056fea26469706673582212203cf9415c48c31e87418c37a452534d93b08846164eb4eb74c6138751b25e800c64736f6c634300081a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000032d6b39bc53f9d85d7d64034bad9e5061b408e38
-----Decoded View---------------
Arg [0] : _tokenSwapContract (address): 0x32d6B39bc53F9D85d7d64034bAD9e5061b408e38
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000032d6b39bc53f9d85d7d64034bad9e5061b408e38
Deployed Bytecode Sourcemap
994:13374:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13743:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1230:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5290:1017;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3360:1886;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2146:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9699:1696;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14002:285;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7819:1293;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11737:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1135:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2595:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;1054:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2563:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2179:39;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;1296:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11466:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11878:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2272:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1324:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6315:1433;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13743:211;2849:5;;;;;;;;;;2835:19;;:10;:19;;;2827:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;13823:15:::1;13841:21;13823:39;;13891:1;13881:7;:11;13873:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;13926:2;:11;;:20;13938:7;13926:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;13812:142;13743:211:::0;:::o;1230:32::-;;;;;;;;;;;;;:::o;5290:1017::-;5398:14;:26;5413:10;5398:26;;;;;;;;;;;;;;;;5386:10;:38;;5378:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5460:15;5478:12;:24;5491:10;5478:24;;;;;;;;;;;;;;;5503:10;5478:36;;;;;;;;:::i;:::-;;;;;;;;;;5460:54;;5557:1;5533:6;:15;5540:7;5533:15;;;;;;;;;;;:22;;;;;;;;;;;;:25;;;:55;;;;;5587:1;5562:6;:15;5569:7;5562:15;;;;;;;;;;;:24;;;:26;5533:55;5525:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;5676:1;5653:6;:15;5660:7;5653:15;;;;;;;;;;;:22;;;:24;;;;;;;;;;;;;;;;;;5714:15;5688:6;:15;5695:7;5688:15;;;;;;;;;;;:25;;:41;;;;5782:19;5804:6;:15;5811:7;5804:15;;;;;;;;;;;:27;;;5782:49;;5878:4;;;;;;;;;;;5845:37;;:10;:23;5856:11;5845:23;;;;;;;;;;;:31;;;;;;;;;;;;:37;;;5842:367;;5914:4;;;;;;;;;;;5908:20;;;5929:6;:15;5936:7;5929:15;;;;;;;;;;;:24;;;5908:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5970:12;5988:10;:15;;6011:6;:15;6018:7;6011:15;;;;;;;;;;;:24;;;5988:52;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5969:71;;;6063:7;6055:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;5893:212;5842:367;;;6130:10;:23;6141:11;6130:23;;;;;;;;;;;:31;;;;;;;;;;;;6123:48;;;6172:10;6184:6;:15;6191:7;6184:15;;;;;;;;;;;:24;;;6123:86;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5842:367;6275:6;:15;6282:7;6275:15;;;;;;;;;;;:24;;;6234:10;:23;6245:11;6234:23;;;;;;;;;;;:37;;;:65;;;;;;;:::i;:::-;;;;;;;;5340:967;;5290:1017;:::o;3360:1886::-;3497:9;;3484;:22;;3476:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;3558:9;;3546;:21;:72;;;;;3589:1;3572:19;;:7;:19;;;:45;;;;3612:4;;;;;;;;;;;3595:22;;:7;:22;;;3572:45;3546:72;3542:778;;;3646:4;;;;;;;;;;;3636:14;;3688:9;;3676;:21;;;;:::i;:::-;3665:32;;3718:4;;;;;;;;;;;3712:19;;;3739:8;3712:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3821:9;3836:6;;;;;;;;;;;:11;;3855:9;;3836:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3820:49;;;3892:4;3884:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;3621:317;3542:778;;;3976:1;3965:8;:12;3957:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;4042:7;4035:28;;;4064:10;4084:4;4091:8;4035:65;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4027:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;4203:9;4218:6;;;;;;;;;;;:11;;4237:9;4218:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4202:49;;;4274:4;4266:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;3942:378;3542:778;4340:19;4362:38;4377:7;4385:8;4394:5;4362:14;:38::i;:::-;4340:60;;4452:8;4411:10;:23;4422:11;4411:23;;;;;;;;;;;:37;;;:49;;;;;;;:::i;:::-;;;;;;;;4500:12;4522:7;4500:30;;4594:8;4544:5;:15;;;4568:4;4575:17;;;;;;;;;;;4544:49;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;4541:115;;;4617:5;:13;;;4631:17;;;;;;;;;;;4649:6;4617:39;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4541:115;4692:21;4716:286;;;;;;;;4743:10;4716:286;;;;;;4777:9;;;;;;;;;;;:18;;;4796:7;4805:8;4814:4;4777:42;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4716:286;;;;4846:11;4716:286;;;;4882:8;4716:286;;;;4912:1;4716:286;;;;;;4948:15;4716:286;;;;4989:1;4716:286;;;4692:310;;5015:11;;:13;;;;;;;;;:::i;:::-;;;;;;5061:8;5039:6;:19;5046:11;;5039:19;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5080:12;:24;5093:10;5080:24;;;;;;;;;;;;;;;5110:11;;5080:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5133:14;:26;5148:10;5133:26;;;;;;;;;;;;;;;;:28;;;;;;;;;:::i;:::-;;;;;;5191:10;5179:59;;;5203:7;5212:8;5222:5;5229:8;5179:59;;;;;;;;;:::i;:::-;;;;;;;;3465:1781;;;3360:1886;;;;:::o;2146:26::-;;;;:::o;9699:1696::-;9797:17;9844:12;:18;9857:4;9844:18;;;;;;;;;;;;;;;:25;;;;9837:4;:32;9833:97;;;9893:12;:18;9906:4;9893:18;;;;;;;;;;;;;;;:25;;;;9886:32;;9833:97;9958:4;9948:6;:14;;9940:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;10004:12;10026:6;10019:4;:13;;;;:::i;:::-;10004:28;;10043:33;10094:4;10079:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;10043:56;;10125:9;10120:1233;10144:4;10140:1;:8;10120:1233;;;10170:18;10191:12;:18;10204:4;10191:18;;;;;;;;;;;;;;;10219:1;10210:6;:10;;;;:::i;:::-;10191:30;;;;;;;;:::i;:::-;;;;;;;;;;10170:51;;10236:19;10258:6;:18;10265:10;10258:18;;;;;;;;;;;:30;;;10236:52;;10305:25;10333:899;;;;;;;;10386:1;10377:6;:10;;;;:::i;:::-;10333:899;;;;10412:6;:18;10419:10;10412:18;;;;;;;;;;;:23;;;;;;;;;;;;10333:899;;;;;;10463:6;:18;10470:10;10463:18;;;;;;;;;;;:26;;;10333:899;;;;10521:6;:18;10528:10;10521:18;;;;;;;;;;;:30;;;10333:899;;;;10580:6;:18;10587:10;10580:18;;;;;;;;;;;:27;;;10333:899;;;;10651:6;:18;10658:10;10651:18;;;;;;;;;;;:25;;;;;;;;;;;;10333:899;;;;;;10748:6;:18;10755:10;10748:18;;;;;;;;;;;:28;;;10333:899;;;;10806:6;:18;10813:10;10806:18;;;;;;;;;;;:28;;;10333:899;;;;10862:10;:23;10873:11;10862:23;;;;;;;;;;;:31;;;;;;;;;;;;10333:899;;;;;;10922:10;:23;10933:11;10922:23;;;;;;;;;;;:32;;;;;;;;;;;;10333:899;;;;;;10980:10;:23;10991:11;10980:23;;;;;;;;;;;:29;;;10333:899;;;;11043:10;:23;11054:11;11043:23;;;;;;;;;;;:37;;;10333:899;;;;11110:10;:23;11121:11;11110:23;;;;;;;;;;;:33;;;10333:899;;;;11178:10;:23;11189:11;11178:23;;;;;;;;;;;:38;;;10333:899;;;10305:927;;11332:9;11311:15;11327:1;11311:18;;;;;;;;:::i;:::-;;;;;;;:30;;;;10155:1198;;;10150:3;;;;;;;10120:1233;;;;11372:15;11365:22;;;;9699:1696;;;;;:::o;14002:285::-;2849:5;;;;;;;;;;2835:19;;:10;:19;;;2827:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;14091:12:::1;14113:5;14091:28;;14130:15;14148:5;:15;;;14172:4;14148:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14130:48;;14207:1;14197:7;:11;14189:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;14252:5;:14;;;14267:2;14271:7;14252:27;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14080:207;;14002:285:::0;;:::o;7819:1293::-;3017:6;;;;;;;;;;;3003:20;;:10;:20;;;2995:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;8057:20:::1;8127:4;;;;;;;;;;;8091:40;;:10;:23;8102:11;8091:23;;;;;;;;;;;:32;;;;;;;;;;;;:40;;::::0;8088:203:::1;;8161:21;8146:36;;8088:203;;;8233:10;:23;8244:11;8233:23;;;;;;;;;;;:32;;;;;;;;;;;;8226:50;;;8285:4;8226:65;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8211:80;;8088:203;8304:9;;;;;;;;;;;:19;;;8338:10;:23;8349:11;8338:23;;;;;;;;;;;:31;;;;;;;;;;;;8384:10;:23;8395:11;8384:23;;;;;;;;;;;:32;;;;;;;;;;;;8431:10;:23;8442:11;8431:23;;;;;;;;;;;:37;;;8483:4;8510:6;;;;;;;;;;;8304:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;8541:18;8609:4;;;;;;;;;;;8573:40;;:10;:23;8584:11;8573:23;;;;;;;;;;;:32;;;;;;;;;;;;:40;;::::0;8570:199:::1;;8641:21;8628:34;;8570:199;;;8711:10;:23;8722:11;8711:23;;;;;;;;;;;:32;;;;;;;;;;;;8704:50;;;8763:4;8704:65;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8691:78;;8570:199;8780:14;8810:12;8797:10;:25;;;;:::i;:::-;8780:42;;8848:1;8841:6;:8;8833:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;8975:6;8939:10;:23;8950:11;8939:23;;;;;;;;;;;:33;;:42;;;;9103:1;8992:12;:45;9005:10;:23;9016:11;9005:23;;;;;;;;;;;:31;;;;;;;;;;;;8992:45;;;;;;;;;;;;;;;:79;9038:10;:23;9049:11;9038:23;;;;;;;;;;;:32;;;;;;;;;;;;8992:79;;;;;;;;;;;;;;;:110;9072:10;:23;9083:11;9072:23;;;;;;;;;;;:29;;;8992:110;;;;;;;;;;;:112;;;;7886:1226;;;7819:1293:::0;:::o;11737:90::-;2849:5;;;;;;;;;;2835:19;;:10;:19;;;2827:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;11812:7:::1;11803:6;;:16;;;;;;;;;;;;;;;;;;11737:90:::0;:::o;1135:21::-;;;;;;;;;;;;;:::o;2595:47::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1054:20::-;;;;;;;;;;;;:::o;2563:25::-;;;;:::o;2179:39::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1296:19::-;;;;;;;;;;;;;:::o;11466:220::-;2849:5;;;;;;;;;;2835:19;;:10;:19;;;2827:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;11574:18:::1;11554:17;;:38;;;;;;;;;;;;;;;;;;11626:17;;;;;;;;;;;11603:9;;:41;;;;;;;;;;;;;;;;;;11662:9;;;;;;;;;;;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11655:4;;:23;;;;;;;;;;;;;;;;;;11466:220:::0;:::o;11878:99::-;2849:5;;;;;;;;;;2835:19;;:10;:19;;;2827:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;11959:10:::1;11947:9;:22;;;;11878:99:::0;:::o;2272:46::-;;;;;;;;;;;;;;;;;:::o;1324:34::-;;;;:::o;6315:1433::-;6432:14;:26;6447:10;6432:26;;;;;;;;;;;;;;;;6420:10;:38;;6412:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;6494:15;6512:12;:24;6525:10;6512:24;;;;;;;;;;;;;;;6537:10;6512:36;;;;;;;;:::i;:::-;;;;;;;;;;6494:54;;6591:1;6567:6;:15;6574:7;6567:15;;;;;;;;;;;:22;;;;;;;;;;;;:25;;;:55;;;;;6621:1;6596:6;:15;6603:7;6596:15;;;;;;;;;;;:24;;;:26;6567:55;6559:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;6710:1;6687:6;:15;6694:7;6687:15;;;;;;;;;;;:22;;;:24;;;;;;;;;;;;;;;;;;6761:15;6735:6;:15;6742:7;6735:15;;;;;;;;;;;:25;;:41;;;;6833:19;6855:6;:15;6862:7;6855:15;;;;;;;;;;;:27;;;6833:49;;6935:1;6901:10;:23;6912:11;6901:23;;;;;;;;;;;:33;;;:35;6893:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;6975:21;6999:10;:23;7010:11;6999:23;;;;;;;;;;;:37;;;6975:61;;7047:22;7072:10;:23;7083:11;7072:23;;;;;;;;;;;:33;;;7047:58;;7116:18;7137:6;:15;7144:7;7137:15;;;;;;;;;;;:24;;;7116:45;;7172:13;7210;7201:6;7188:10;:19;;;;:::i;:::-;:35;;;;:::i;:::-;7172:51;;7234:19;7281:6;7273:5;7256:14;:22;;;;:::i;:::-;:31;;;;:::i;:::-;7234:53;;7337:4;;;;;;;;;;;7303:38;;:10;:23;7314:11;7303:23;;;;;;;;;;;:32;;;;;;;;;;;;:38;;;7300:376;;7462:12;7480:10;:15;;7503:11;7480:39;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7461:58;;;7542:7;7534:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;7352:232;7300:376;;;7609:10;:23;7620:11;7609:23;;;;;;;;;;;:32;;;;;;;;;;;;7602:49;;;7652:10;7664:11;7602:74;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7300:376;7729:11;7687:10;:23;7698:11;7687:23;;;;;;;;;;;:38;;;:53;;;;;;;:::i;:::-;;;;;;;;6364:1384;;;;;;;6315:1433;:::o;12947:757::-;13035:4;13107:22;13123:5;13107:15;:22::i;:::-;13099:30;;13192:1;13153:12;:21;13166:7;13153:21;;;;;;;;;;;;;;;:31;13175:8;13153:31;;;;;;;;;;;;;;;:38;13185:5;13153:38;;;;;;;;;;;;:40;13150:103;;;13215:12;:21;13228:7;13215:21;;;;;;;;;;;;;;;:31;13237:8;13215:31;;;;;;;;;;;;;;;:38;13247:5;13215:38;;;;;;;;;;;;13208:45;;;;13150:103;13274:27;13304:233;;;;;;;;13337:7;13304:233;;;;;;13368:8;13304:233;;;;;;13397:5;13304:233;;;;13431:1;13304:233;;;;13457:1;13304:233;;;;13524:1;13304:233;;;13274:263;;13548:10;;:12;;;;;;;;;:::i;:::-;;;;;;13596:10;13571;:22;13582:10;;13571:22;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13658:10;;13617:12;:21;13630:7;13617:21;;;;;;;;;;;;;;;:31;13639:8;13617:31;;;;;;;;;;;;;;;:38;13649:5;13617:38;;;;;;;;;;;:51;;;;13686:10;;13679:17;;;12947:757;;;;;;:::o;12059:269::-;12121:7;12141:17;12181:1;12167:11;12172:5;12167:4;:11::i;:::-;:15;;;;:::i;:::-;12161:1;:22;;12141:42;;12236:20;12281:9;12268;12260:5;:17;;;;:::i;:::-;12259:31;;;;:::i;:::-;12236:54;;12308:12;12301:19;;;;12059:269;;;:::o;12398:537::-;12445:7;12465:14;12482:1;12465:18;;12503:6;12498:1;:11;12494:46;;12519:3;12513:9;;;;;12534:3;12524:13;;;;;:::i;:::-;;;12494:46;12559:5;12554:1;:10;12550:44;;12575:2;12569:8;;;;;12589:2;12579:12;;;;;:::i;:::-;;;12550:44;12613:5;12608:1;:10;12604:44;;12629:2;12623:8;;;;;12643:2;12633:12;;;;;:::i;:::-;;;12604:44;12667:5;12662:1;:10;12658:44;;12683:2;12677:8;;;;;12697:2;12687:12;;;;;:::i;:::-;;;12658:44;12721:4;12716:1;:9;12712:43;;12737:1;12731:7;;;;;12751:1;12741:11;;;;;:::i;:::-;;;12712:43;12774:4;12769:1;:9;12765:43;;12790:1;12784:7;;;;;12804:1;12794:11;;;;;:::i;:::-;;;12765:43;12827:4;12822:1;:9;12818:43;;12843:1;12837:7;;;;;12857:1;12847:11;;;;;:::i;:::-;;;12818:43;12880:4;12875:1;:9;12871:33;;12900:1;12890:11;;;;;:::i;:::-;;;12871:33;12921:6;12914:13;;;12398:537;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;88:117:1:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:104::-;511:7;540:24;558:5;540:24;:::i;:::-;529:35;;466:104;;;:::o;576:138::-;657:32;683:5;657:32;:::i;:::-;650:5;647:43;637:71;;704:1;701;694:12;637:71;576:138;:::o;720:155::-;774:5;812:6;799:20;790:29;;828:41;863:5;828:41;:::i;:::-;720:155;;;;:::o;881:345::-;948:6;997:2;985:9;976:7;972:23;968:32;965:119;;;1003:79;;:::i;:::-;965:119;1123:1;1148:61;1201:7;1192:6;1181:9;1177:22;1148:61;:::i;:::-;1138:71;;1094:125;881:345;;;;:::o;1232:96::-;1269:7;1298:24;1316:5;1298:24;:::i;:::-;1287:35;;1232:96;;;:::o;1334:118::-;1421:24;1439:5;1421:24;:::i;:::-;1416:3;1409:37;1334:118;;:::o;1458:222::-;1551:4;1589:2;1578:9;1574:18;1566:26;;1602:71;1670:1;1659:9;1655:17;1646:6;1602:71;:::i;:::-;1458:222;;;;:::o;1686:77::-;1723:7;1752:5;1741:16;;1686:77;;;:::o;1769:122::-;1842:24;1860:5;1842:24;:::i;:::-;1835:5;1832:35;1822:63;;1881:1;1878;1871:12;1822:63;1769:122;:::o;1897:139::-;1943:5;1981:6;1968:20;1959:29;;1997:33;2024:5;1997:33;:::i;:::-;1897:139;;;;:::o;2042:329::-;2101:6;2150:2;2138:9;2129:7;2125:23;2121:32;2118:119;;;2156:79;;:::i;:::-;2118:119;2276:1;2301:53;2346:7;2337:6;2326:9;2322:22;2301:53;:::i;:::-;2291:63;;2247:117;2042:329;;;;:::o;2377:122::-;2450:24;2468:5;2450:24;:::i;:::-;2443:5;2440:35;2430:63;;2489:1;2486;2479:12;2430:63;2377:122;:::o;2505:139::-;2551:5;2589:6;2576:20;2567:29;;2605:33;2632:5;2605:33;:::i;:::-;2505:139;;;;:::o;2650:765::-;2736:6;2744;2752;2760;2809:3;2797:9;2788:7;2784:23;2780:33;2777:120;;;2816:79;;:::i;:::-;2777:120;2936:1;2961:53;3006:7;2997:6;2986:9;2982:22;2961:53;:::i;:::-;2951:63;;2907:117;3063:2;3089:53;3134:7;3125:6;3114:9;3110:22;3089:53;:::i;:::-;3079:63;;3034:118;3191:2;3217:53;3262:7;3253:6;3242:9;3238:22;3217:53;:::i;:::-;3207:63;;3162:118;3319:2;3345:53;3390:7;3381:6;3370:9;3366:22;3345:53;:::i;:::-;3335:63;;3290:118;2650:765;;;;;;;:::o;3421:118::-;3508:24;3526:5;3508:24;:::i;:::-;3503:3;3496:37;3421:118;;:::o;3545:222::-;3638:4;3676:2;3665:9;3661:18;3653:26;;3689:71;3757:1;3746:9;3742:17;3733:6;3689:71;:::i;:::-;3545:222;;;;:::o;3773:619::-;3850:6;3858;3866;3915:2;3903:9;3894:7;3890:23;3886:32;3883:119;;;3921:79;;:::i;:::-;3883:119;4041:1;4066:53;4111:7;4102:6;4091:9;4087:22;4066:53;:::i;:::-;4056:63;;4012:117;4168:2;4194:53;4239:7;4230:6;4219:9;4215:22;4194:53;:::i;:::-;4184:63;;4139:118;4296:2;4322:53;4367:7;4358:6;4347:9;4343:22;4322:53;:::i;:::-;4312:63;;4267:118;3773:619;;;;;:::o;4398:139::-;4490:6;4524:5;4518:12;4508:22;;4398:139;;;:::o;4543:209::-;4667:11;4701:6;4696:3;4689:19;4741:4;4736:3;4732:14;4717:29;;4543:209;;;;:::o;4758:157::-;4850:4;4873:3;4865:11;;4903:4;4898:3;4894:14;4886:22;;4758:157;;;:::o;4921:108::-;4998:24;5016:5;4998:24;:::i;:::-;4993:3;4986:37;4921:108;;:::o;5035:::-;5112:24;5130:5;5112:24;:::i;:::-;5107:3;5100:37;5035:108;;:::o;5149:86::-;5184:7;5224:4;5217:5;5213:16;5202:27;;5149:86;;;:::o;5241:102::-;5314:22;5330:5;5314:22;:::i;:::-;5309:3;5302:35;5241:102;;:::o;5419:2675::-;5556:6;5551:3;5547:16;5655:4;5648:5;5644:16;5638:23;5674:63;5731:4;5726:3;5722:14;5708:12;5674:63;:::i;:::-;5573:174;5829:4;5822:5;5818:16;5812:23;5848:63;5905:4;5900:3;5896:14;5882:12;5848:63;:::i;:::-;5757:164;6006:4;5999:5;5995:16;5989:23;6025:63;6082:4;6077:3;6073:14;6059:12;6025:63;:::i;:::-;5931:167;6187:4;6180:5;6176:16;6170:23;6206:63;6263:4;6258:3;6254:14;6240:12;6206:63;:::i;:::-;6108:171;6365:4;6358:5;6354:16;6348:23;6384:63;6441:4;6436:3;6432:14;6418:12;6384:63;:::i;:::-;6289:168;6541:4;6534:5;6530:16;6524:23;6560:59;6613:4;6608:3;6604:14;6590:12;6560:59;:::i;:::-;6467:162;6716:4;6709:5;6705:16;6699:23;6735:63;6792:4;6787:3;6783:14;6769:12;6735:63;:::i;:::-;6639:169;6895:4;6888:5;6884:16;6878:23;6914:63;6971:4;6966:3;6962:14;6948:12;6914:63;:::i;:::-;6818:169;7072:6;7065:5;7061:18;7055:25;7093:65;7150:6;7145:3;7141:16;7127:12;7093:65;:::i;:::-;6997:171;7254:6;7247:5;7243:18;7237:25;7275:65;7332:6;7327:3;7323:16;7309:12;7275:65;:::i;:::-;7178:172;7433:6;7426:5;7422:18;7416:25;7454:65;7511:6;7506:3;7502:16;7488:12;7454:65;:::i;:::-;7360:169;7620:6;7613:5;7609:18;7603:25;7641:65;7698:6;7693:3;7689:16;7675:12;7641:65;:::i;:::-;7539:177;7803:6;7796:5;7792:18;7786:25;7824:65;7881:6;7876:3;7872:16;7858:12;7824:65;:::i;:::-;7726:173;7991:6;7984:5;7980:18;7974:25;8012:65;8069:6;8064:3;8060:16;8046:12;8012:65;:::i;:::-;7909:178;5525:2569;5419:2675;;:::o;8100:281::-;8219:10;8240:96;8332:3;8324:6;8240:96;:::i;:::-;8368:6;8363:3;8359:16;8345:30;;8100:281;;;;:::o;8387:138::-;8482:4;8514;8509:3;8505:14;8497:22;;8387:138;;;:::o;8605:932::-;8774:3;8803:79;8876:5;8803:79;:::i;:::-;8898:111;9002:6;8997:3;8898:111;:::i;:::-;8891:118;;9033:81;9108:5;9033:81;:::i;:::-;9137:7;9168:1;9153:359;9178:6;9175:1;9172:13;9153:359;;;9254:6;9248:13;9281:113;9390:3;9375:13;9281:113;:::i;:::-;9274:120;;9417:85;9495:6;9417:85;:::i;:::-;9407:95;;9213:299;9200:1;9197;9193:9;9188:14;;9153:359;;;9157:14;9528:3;9521:10;;8779:758;;;8605:932;;;;:::o;9543:473::-;9736:4;9774:2;9763:9;9759:18;9751:26;;9823:9;9817:4;9813:20;9809:1;9798:9;9794:17;9787:47;9851:158;10004:4;9995:6;9851:158;:::i;:::-;9843:166;;9543:473;;;;:::o;10022:474::-;10090:6;10098;10147:2;10135:9;10126:7;10122:23;10118:32;10115:119;;;10153:79;;:::i;:::-;10115:119;10273:1;10298:53;10343:7;10334:6;10323:9;10319:22;10298:53;:::i;:::-;10288:63;;10244:117;10400:2;10426:53;10471:7;10462:6;10451:9;10447:22;10426:53;:::i;:::-;10416:63;;10371:118;10022:474;;;;;:::o;10502:329::-;10561:6;10610:2;10598:9;10589:7;10585:23;10581:32;10578:119;;;10616:79;;:::i;:::-;10578:119;10736:1;10761:53;10806:7;10797:6;10786:9;10782:22;10761:53;:::i;:::-;10751:63;;10707:117;10502:329;;;;:::o;10837:775::-;11070:4;11108:3;11097:9;11093:19;11085:27;;11122:71;11190:1;11179:9;11175:17;11166:6;11122:71;:::i;:::-;11203:72;11271:2;11260:9;11256:18;11247:6;11203:72;:::i;:::-;11285;11353:2;11342:9;11338:18;11329:6;11285:72;:::i;:::-;11367;11435:2;11424:9;11420:18;11411:6;11367:72;:::i;:::-;11449:73;11517:3;11506:9;11502:19;11493:6;11449:73;:::i;:::-;11532;11600:3;11589:9;11585:19;11576:6;11532:73;:::i;:::-;10837:775;;;;;;;;;:::o;11618:112::-;11701:22;11717:5;11701:22;:::i;:::-;11696:3;11689:35;11618:112;;:::o;11736:878::-;11993:4;12031:3;12020:9;12016:19;12008:27;;12045:71;12113:1;12102:9;12098:17;12089:6;12045:71;:::i;:::-;12126:72;12194:2;12183:9;12179:18;12170:6;12126:72;:::i;:::-;12208;12276:2;12265:9;12261:18;12252:6;12208:72;:::i;:::-;12290;12358:2;12347:9;12343:18;12334:6;12290:72;:::i;:::-;12372:69;12436:3;12425:9;12421:19;12412:6;12372:69;:::i;:::-;12451:73;12519:3;12508:9;12504:19;12495:6;12451:73;:::i;:::-;12534;12602:3;12591:9;12587:19;12578:6;12534:73;:::i;:::-;11736:878;;;;;;;;;;:::o;12620:169::-;12704:11;12738:6;12733:3;12726:19;12778:4;12773:3;12769:14;12754:29;;12620:169;;;;:::o;12795:172::-;12935:24;12931:1;12923:6;12919:14;12912:48;12795:172;:::o;12973:366::-;13115:3;13136:67;13200:2;13195:3;13136:67;:::i;:::-;13129:74;;13212:93;13301:3;13212:93;:::i;:::-;13330:2;13325:3;13321:12;13314:19;;12973:366;;;:::o;13345:419::-;13511:4;13549:2;13538:9;13534:18;13526:26;;13598:9;13592:4;13588:20;13584:1;13573:9;13569:17;13562:47;13626:131;13752:4;13626:131;:::i;:::-;13618:139;;13345:419;;;:::o;13770:168::-;13910:20;13906:1;13898:6;13894:14;13887:44;13770:168;:::o;13944:366::-;14086:3;14107:67;14171:2;14166:3;14107:67;:::i;:::-;14100:74;;14183:93;14272:3;14183:93;:::i;:::-;14301:2;14296:3;14292:12;14285:19;;13944:366;;;:::o;14316:419::-;14482:4;14520:2;14509:9;14505:18;14497:26;;14569:9;14563:4;14559:20;14555:1;14544:9;14540:17;14533:47;14597:131;14723:4;14597:131;:::i;:::-;14589:139;;14316:419;;;:::o;14741:171::-;14881:23;14877:1;14869:6;14865:14;14858:47;14741:171;:::o;14918:366::-;15060:3;15081:67;15145:2;15140:3;15081:67;:::i;:::-;15074:74;;15157:93;15246:3;15157:93;:::i;:::-;15275:2;15270:3;15266:12;15259:19;;14918:366;;;:::o;15290:419::-;15456:4;15494:2;15483:9;15479:18;15471:26;;15543:9;15537:4;15533:20;15529:1;15518:9;15514:17;15507:47;15571:131;15697:4;15571:131;:::i;:::-;15563:139;;15290:419;;;:::o;15715:180::-;15763:77;15760:1;15753:88;15860:4;15857:1;15850:15;15884:4;15881:1;15874:15;15901:167;16041:19;16037:1;16029:6;16025:14;16018:43;15901:167;:::o;16074:366::-;16216:3;16237:67;16301:2;16296:3;16237:67;:::i;:::-;16230:74;;16313:93;16402:3;16313:93;:::i;:::-;16431:2;16426:3;16422:12;16415:19;;16074:366;;;:::o;16446:419::-;16612:4;16650:2;16639:9;16635:18;16627:26;;16699:9;16693:4;16689:20;16685:1;16674:9;16670:17;16663:47;16727:131;16853:4;16727:131;:::i;:::-;16719:139;;16446:419;;;:::o;16871:147::-;16972:11;17009:3;16994:18;;16871:147;;;;:::o;17024:114::-;;:::o;17144:398::-;17303:3;17324:83;17405:1;17400:3;17324:83;:::i;:::-;17317:90;;17416:93;17505:3;17416:93;:::i;:::-;17534:1;17529:3;17525:11;17518:18;;17144:398;;;:::o;17548:379::-;17732:3;17754:147;17897:3;17754:147;:::i;:::-;17747:154;;17918:3;17911:10;;17548:379;;;:::o;17933:168::-;18073:20;18069:1;18061:6;18057:14;18050:44;17933:168;:::o;18107:366::-;18249:3;18270:67;18334:2;18329:3;18270:67;:::i;:::-;18263:74;;18346:93;18435:3;18346:93;:::i;:::-;18464:2;18459:3;18455:12;18448:19;;18107:366;;;:::o;18479:419::-;18645:4;18683:2;18672:9;18668:18;18660:26;;18732:9;18726:4;18722:20;18718:1;18707:9;18703:17;18696:47;18760:131;18886:4;18760:131;:::i;:::-;18752:139;;18479:419;;;:::o;18904:332::-;19025:4;19063:2;19052:9;19048:18;19040:26;;19076:71;19144:1;19133:9;19129:17;19120:6;19076:71;:::i;:::-;19157:72;19225:2;19214:9;19210:18;19201:6;19157:72;:::i;:::-;18904:332;;;;;:::o;19242:90::-;19276:7;19319:5;19312:13;19305:21;19294:32;;19242:90;;;:::o;19338:116::-;19408:21;19423:5;19408:21;:::i;:::-;19401:5;19398:32;19388:60;;19444:1;19441;19434:12;19388:60;19338:116;:::o;19460:137::-;19514:5;19545:6;19539:13;19530:22;;19561:30;19585:5;19561:30;:::i;:::-;19460:137;;;;:::o;19603:345::-;19670:6;19719:2;19707:9;19698:7;19694:23;19690:32;19687:119;;;19725:79;;:::i;:::-;19687:119;19845:1;19870:61;19923:7;19914:6;19903:9;19899:22;19870:61;:::i;:::-;19860:71;;19816:125;19603:345;;;;:::o;19954:180::-;20002:77;19999:1;19992:88;20099:4;20096:1;20089:15;20123:4;20120:1;20113:15;20140:194;20180:4;20200:20;20218:1;20200:20;:::i;:::-;20195:25;;20234:20;20252:1;20234:20;:::i;:::-;20229:25;;20278:1;20275;20271:9;20263:17;;20302:1;20296:4;20293:11;20290:37;;;20307:18;;:::i;:::-;20290:37;20140:194;;;;:::o;20340:171::-;20480:23;20476:1;20468:6;20464:14;20457:47;20340:171;:::o;20517:366::-;20659:3;20680:67;20744:2;20739:3;20680:67;:::i;:::-;20673:74;;20756:93;20845:3;20756:93;:::i;:::-;20874:2;20869:3;20865:12;20858:19;;20517:366;;;:::o;20889:419::-;21055:4;21093:2;21082:9;21078:18;21070:26;;21142:9;21136:4;21132:20;21128:1;21117:9;21113:17;21106:47;21170:131;21296:4;21170:131;:::i;:::-;21162:139;;20889:419;;;:::o;21314:175::-;21454:27;21450:1;21442:6;21438:14;21431:51;21314:175;:::o;21495:366::-;21637:3;21658:67;21722:2;21717:3;21658:67;:::i;:::-;21651:74;;21734:93;21823:3;21734:93;:::i;:::-;21852:2;21847:3;21843:12;21836:19;;21495:366;;;:::o;21867:419::-;22033:4;22071:2;22060:9;22056:18;22048:26;;22120:9;22114:4;22110:20;22106:1;22095:9;22091:17;22084:47;22148:131;22274:4;22148:131;:::i;:::-;22140:139;;21867:419;;;:::o;22292:180::-;22432:32;22428:1;22420:6;22416:14;22409:56;22292:180;:::o;22478:366::-;22620:3;22641:67;22705:2;22700:3;22641:67;:::i;:::-;22634:74;;22717:93;22806:3;22717:93;:::i;:::-;22835:2;22830:3;22826:12;22819:19;;22478:366;;;:::o;22850:419::-;23016:4;23054:2;23043:9;23039:18;23031:26;;23103:9;23097:4;23093:20;23089:1;23078:9;23074:17;23067:47;23131:131;23257:4;23131:131;:::i;:::-;23123:139;;22850:419;;;:::o;23275:442::-;23424:4;23462:2;23451:9;23447:18;23439:26;;23475:71;23543:1;23532:9;23528:17;23519:6;23475:71;:::i;:::-;23556:72;23624:2;23613:9;23609:18;23600:6;23556:72;:::i;:::-;23638;23706:2;23695:9;23691:18;23682:6;23638:72;:::i;:::-;23275:442;;;;;;:::o;23723:165::-;23863:17;23859:1;23851:6;23847:14;23840:41;23723:165;:::o;23894:366::-;24036:3;24057:67;24121:2;24116:3;24057:67;:::i;:::-;24050:74;;24133:93;24222:3;24133:93;:::i;:::-;24251:2;24246:3;24242:12;24235:19;;23894:366;;;:::o;24266:419::-;24432:4;24470:2;24459:9;24455:18;24447:26;;24519:9;24513:4;24509:20;24505:1;24494:9;24490:17;24483:47;24547:131;24673:4;24547:131;:::i;:::-;24539:139;;24266:419;;;:::o;24691:191::-;24731:3;24750:20;24768:1;24750:20;:::i;:::-;24745:25;;24784:20;24802:1;24784:20;:::i;:::-;24779:25;;24827:1;24824;24820:9;24813:16;;24848:3;24845:1;24842:10;24839:36;;;24855:18;;:::i;:::-;24839:36;24691:191;;;;:::o;24888:332::-;25009:4;25047:2;25036:9;25032:18;25024:26;;25060:71;25128:1;25117:9;25113:17;25104:6;25060:71;:::i;:::-;25141:72;25209:2;25198:9;25194:18;25185:6;25141:72;:::i;:::-;24888:332;;;;;:::o;25226:143::-;25283:5;25314:6;25308:13;25299:22;;25330:33;25357:5;25330:33;:::i;:::-;25226:143;;;;:::o;25375:351::-;25445:6;25494:2;25482:9;25473:7;25469:23;25465:32;25462:119;;;25500:79;;:::i;:::-;25462:119;25620:1;25645:64;25701:7;25692:6;25681:9;25677:22;25645:64;:::i;:::-;25635:74;;25591:128;25375:351;;;;:::o;25732:161::-;25853:7;25882:5;25871:16;;25732:161;;;:::o;25899:60::-;25927:3;25948:5;25941:12;;25899:60;;;:::o;25965:310::-;26099:9;26132:137;26150:118;26159:108;26261:5;26159:108;:::i;:::-;26150:118;:::i;:::-;26132:137;:::i;:::-;26119:150;;25965:310;;;:::o;26281:299::-;26452:121;26567:5;26452:121;:::i;:::-;26447:3;26440:134;26281:299;;:::o;26586:500::-;26791:4;26829:2;26818:9;26814:18;26806:26;;26842:71;26910:1;26899:9;26895:17;26886:6;26842:71;:::i;:::-;26923:156;27075:2;27064:9;27060:18;27051:6;26923:156;:::i;:::-;26586:500;;;;;:::o;27092:88::-;27140:7;27169:5;27158:16;;27092:88;;;:::o;27186:164::-;27247:9;27280:64;27298:45;27307:35;27336:5;27307:35;:::i;:::-;27298:45;:::i;:::-;27280:64;:::i;:::-;27267:77;;27186:164;;;:::o;27356:153::-;27454:48;27496:5;27454:48;:::i;:::-;27449:3;27442:61;27356:153;;:::o;27515:464::-;27675:4;27713:2;27702:9;27698:18;27690:26;;27726:71;27794:1;27783:9;27779:17;27770:6;27726:71;:::i;:::-;27807:72;27875:2;27864:9;27860:18;27851:6;27807:72;:::i;:::-;27889:83;27968:2;27957:9;27953:18;27944:6;27889:83;:::i;:::-;27515:464;;;;;;:::o;27985:233::-;28024:3;28047:24;28065:5;28047:24;:::i;:::-;28038:33;;28093:66;28086:5;28083:77;28080:103;;28163:18;;:::i;:::-;28080:103;28210:1;28203:5;28199:13;28192:20;;27985:233;;;:::o;28224:553::-;28401:4;28439:3;28428:9;28424:19;28416:27;;28453:71;28521:1;28510:9;28506:17;28497:6;28453:71;:::i;:::-;28534:72;28602:2;28591:9;28587:18;28578:6;28534:72;:::i;:::-;28616;28684:2;28673:9;28669:18;28660:6;28616:72;:::i;:::-;28698;28766:2;28755:9;28751:18;28742:6;28698:72;:::i;:::-;28224:553;;;;;;;:::o;28783:174::-;28923:26;28919:1;28911:6;28907:14;28900:50;28783:174;:::o;28963:366::-;29105:3;29126:67;29190:2;29185:3;29126:67;:::i;:::-;29119:74;;29202:93;29291:3;29202:93;:::i;:::-;29320:2;29315:3;29311:12;29304:19;;28963:366;;;:::o;29335:419::-;29501:4;29539:2;29528:9;29524:18;29516:26;;29588:9;29582:4;29578:20;29574:1;29563:9;29559:17;29552:47;29616:131;29742:4;29616:131;:::i;:::-;29608:139;;29335:419;;;:::o;29760:180::-;29808:77;29805:1;29798:88;29905:4;29902:1;29895:15;29929:4;29926:1;29919:15;29946:178;30086:30;30082:1;30074:6;30070:14;30063:54;29946:178;:::o;30130:366::-;30272:3;30293:67;30357:2;30352:3;30293:67;:::i;:::-;30286:74;;30369:93;30458:3;30369:93;:::i;:::-;30487:2;30482:3;30478:12;30471:19;;30130:366;;;:::o;30502:419::-;30668:4;30706:2;30695:9;30691:18;30683:26;;30755:9;30749:4;30745:20;30741:1;30730:9;30726:17;30719:47;30783:131;30909:4;30783:131;:::i;:::-;30775:139;;30502:419;;;:::o;30927:164::-;31067:16;31063:1;31055:6;31051:14;31044:40;30927:164;:::o;31097:366::-;31239:3;31260:67;31324:2;31319:3;31260:67;:::i;:::-;31253:74;;31336:93;31425:3;31336:93;:::i;:::-;31454:2;31449:3;31445:12;31438:19;;31097:366;;;:::o;31469:419::-;31635:4;31673:2;31662:9;31658:18;31650:26;;31722:9;31716:4;31712:20;31708:1;31697:9;31693:17;31686:47;31750:131;31876:4;31750:131;:::i;:::-;31742:139;;31469:419;;;:::o;31894:91::-;31930:7;31970:8;31963:5;31959:20;31948:31;;31894:91;;;:::o;31991:162::-;32051:9;32084:63;32101:45;32110:35;32139:5;32110:35;:::i;:::-;32101:45;:::i;:::-;32084:63;:::i;:::-;32071:76;;31991:162;;;:::o;32159:151::-;32256:47;32297:5;32256:47;:::i;:::-;32251:3;32244:60;32159:151;;:::o;32316:142::-;32419:32;32445:5;32419:32;:::i;:::-;32414:3;32407:45;32316:142;;:::o;32464:716::-;32695:4;32733:3;32722:9;32718:19;32710:27;;32747:71;32815:1;32804:9;32800:17;32791:6;32747:71;:::i;:::-;32828:72;32896:2;32885:9;32881:18;32872:6;32828:72;:::i;:::-;32910;32978:2;32967:9;32963:18;32954:6;32910:72;:::i;:::-;32992:82;33070:2;33059:9;33055:18;33046:6;32992:82;:::i;:::-;33084:89;33168:3;33157:9;33153:19;33144:6;33084:89;:::i;:::-;32464:716;;;;;;;;:::o;33186:172::-;33326:24;33322:1;33314:6;33310:14;33303:48;33186:172;:::o;33364:366::-;33506:3;33527:67;33591:2;33586:3;33527:67;:::i;:::-;33520:74;;33603:93;33692:3;33603:93;:::i;:::-;33721:2;33716:3;33712:12;33705:19;;33364:366;;;:::o;33736:419::-;33902:4;33940:2;33929:9;33925:18;33917:26;;33989:9;33983:4;33979:20;33975:1;33964:9;33960:17;33953:47;34017:131;34143:4;34017:131;:::i;:::-;34009:139;;33736:419;;;:::o;34161:143::-;34218:5;34249:6;34243:13;34234:22;;34265:33;34292:5;34265:33;:::i;:::-;34161:143;;;;:::o;34310:351::-;34380:6;34429:2;34417:9;34408:7;34404:23;34400:32;34397:119;;;34435:79;;:::i;:::-;34397:119;34555:1;34580:64;34636:7;34627:6;34616:9;34612:22;34580:64;:::i;:::-;34570:74;;34526:128;34310:351;;;;:::o;34667:174::-;34807:26;34803:1;34795:6;34791:14;34784:50;34667:174;:::o;34847:366::-;34989:3;35010:67;35074:2;35069:3;35010:67;:::i;:::-;35003:74;;35086:93;35175:3;35086:93;:::i;:::-;35204:2;35199:3;35195:12;35188:19;;34847:366;;;:::o;35219:419::-;35385:4;35423:2;35412:9;35408:18;35400:26;;35472:9;35466:4;35462:20;35458:1;35447:9;35443:17;35436:47;35500:131;35626:4;35500:131;:::i;:::-;35492:139;;35219:419;;;:::o;35644:410::-;35684:7;35707:20;35725:1;35707:20;:::i;:::-;35702:25;;35741:20;35759:1;35741:20;:::i;:::-;35736:25;;35796:1;35793;35789:9;35818:30;35836:11;35818:30;:::i;:::-;35807:41;;35997:1;35988:7;35984:15;35981:1;35978:22;35958:1;35951:9;35931:83;35908:139;;36027:18;;:::i;:::-;35908:139;35692:362;35644:410;;;;:::o;36060:180::-;36108:77;36105:1;36098:88;36205:4;36202:1;36195:15;36229:4;36226:1;36219:15;36246:185;36286:1;36303:20;36321:1;36303:20;:::i;:::-;36298:25;;36337:20;36355:1;36337:20;:::i;:::-;36332:25;;36376:1;36366:35;;36381:18;;:::i;:::-;36366:35;36423:1;36420;36416:9;36411:14;;36246:185;;;;:::o
Swarm Source
ipfs://3cf9415c48c31e87418c37a452534d93b08846164eb4eb74c6138751b25e800c
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.