More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 13,080 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Claim | 15068328 | 877 days ago | IN | 0 ETH | 0.00020738 | ||||
Claim | 12333459 | 1307 days ago | IN | 0 ETH | 0.00118219 | ||||
Move Assets | 12333321 | 1307 days ago | IN | 0 ETH | 0.0086184 | ||||
Move Assets | 12333312 | 1307 days ago | IN | 0 ETH | 0.0099767 | ||||
Move Assets | 12333305 | 1307 days ago | IN | 0 ETH | 0.0073377 | ||||
Move Assets | 12333299 | 1307 days ago | IN | 0 ETH | 0.01257195 | ||||
Move Assets | 12333290 | 1307 days ago | IN | 0 ETH | 0.0126753 | ||||
Move Assets | 12333284 | 1307 days ago | IN | 0 ETH | 0.02315918 | ||||
Move Assets | 12333273 | 1307 days ago | IN | 0 ETH | 0.05451341 | ||||
Move Assets | 12333203 | 1307 days ago | IN | 0 ETH | 0.03135968 | ||||
Move Assets | 12333187 | 1307 days ago | IN | 0 ETH | 0.03285606 | ||||
Move Assets | 12333146 | 1307 days ago | IN | 0 ETH | 0.04467984 | ||||
Retire | 12333035 | 1307 days ago | IN | 0 ETH | 0.00140364 | ||||
Migrate | 12333032 | 1307 days ago | IN | 0 ETH | 0.00151614 | ||||
Move Assets | 12333027 | 1307 days ago | IN | 0 ETH | 0.00363402 | ||||
Migrate | 12333023 | 1307 days ago | IN | 0 ETH | 0.00151614 | ||||
Move Assets | 12333017 | 1307 days ago | IN | 0 ETH | 0.15798807 | ||||
Migrate | 12333011 | 1307 days ago | IN | 0 ETH | 0.00151614 | ||||
Pause | 12332995 | 1307 days ago | IN | 0 ETH | 0.00143248 | ||||
Claim | 12332922 | 1307 days ago | IN | 0 ETH | 0.00143392 | ||||
Retire | 12332897 | 1307 days ago | IN | 0 ETH | 0.0015284 | ||||
Deposit | 12332711 | 1307 days ago | IN | 0.03684585 ETH | 0.00603927 | ||||
Deposit | 12332694 | 1307 days ago | IN | 0.022 ETH | 0.00379735 | ||||
Deposit | 12332544 | 1307 days ago | IN | 0.15 ETH | 0.0041918 | ||||
Withdraw | 12332282 | 1307 days ago | IN | 0 ETH | 0.02799328 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
12333027 | 1307 days ago | 2,444.30905112 ETH | ||||
12332282 | 1307 days ago | 2 ETH | ||||
12331404 | 1308 days ago | 10.95643048 ETH | ||||
12330948 | 1308 days ago | 0.5 ETH | ||||
12330388 | 1308 days ago | 1 ETH | ||||
12329961 | 1308 days ago | 1.80898726 ETH | ||||
12328880 | 1308 days ago | 10 ETH | ||||
12328867 | 1308 days ago | 10.98109171 ETH | ||||
12328615 | 1308 days ago | 0.51222925 ETH | ||||
12328564 | 1308 days ago | 5 ETH | ||||
12326588 | 1308 days ago | 5 ETH | ||||
12326436 | 1308 days ago | 0.5 ETH | ||||
12326222 | 1308 days ago | 0.696497 ETH | ||||
12323871 | 1309 days ago | 0.2 ETH | ||||
12323621 | 1309 days ago | 0.29828413 ETH | ||||
12323529 | 1309 days ago | 2.9482395 ETH | ||||
12322545 | 1309 days ago | 0.16162432 ETH | ||||
12322074 | 1309 days ago | 22 ETH | ||||
12321558 | 1309 days ago | 0.94725196 ETH | ||||
12320780 | 1309 days ago | 0.1 ETH | ||||
12320067 | 1309 days ago | 21.06150035 ETH | ||||
12319472 | 1309 days ago | 0.35622699 ETH | ||||
12319191 | 1309 days ago | 12 ETH | ||||
12318990 | 1310 days ago | 2.31930487 ETH | ||||
12318062 | 1310 days ago | 0.05041844 ETH |
Loading...
Loading
Contract Name:
Vault
Compiler Version
v0.6.6+commit.6c089d02
Contract Source Code (Solidity Multiple files format)
pragma solidity ^0.6.6; pragma experimental ABIEncoderV2; import "./IERC20.sol"; import "./pause.sol"; /** * Math operations with safety checks */ library SafeMath { function safeMul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; require(a == 0 || c / a == b); return c; } function safeDiv(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0); uint256 c = a / b; require(a == b * c + a % b); return c; } function safeSub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a); return a - b; } function safeAdd(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c>=a && c>=b); return c; } } /** * @dev Interface of the contract capable of checking if an instruction is * confirmed over at Incognito Chain */ interface Incognito { function instructionApproved( bool, bytes32, uint, bytes32[] calldata, bool[] calldata, bytes32, bytes32, uint[] calldata, uint8[] calldata, bytes32[] calldata, bytes32[] calldata ) external view returns (bool); } /** * @dev Interface of the previous Vault contract to query burn proof status */ interface Withdrawable { function isWithdrawed(bytes32) external view returns (bool); function isSigDataUsed(bytes32) external view returns (bool); function getDepositedBalance(address, address) external view returns (uint); function updateAssets(address[] calldata, uint[] calldata) external returns (bool); function paused() external view returns (bool); } /** * @dev Responsible for holding the assets and issue minting instruction to * Incognito Chain. Also, when presented with a burn proof created over at * Incognito Chain, releases the tokens back to user */ contract Vault is AdminPausable { using SafeMath for uint; address constant public ETH_TOKEN = 0x0000000000000000000000000000000000000000; mapping(bytes32 => bool) public withdrawed; mapping(bytes32 => bool) public sigDataUsed; // address => token => amount mapping(address => mapping(address => uint)) public withdrawRequests; mapping(address => mapping(address => bool)) public migration; mapping(address => uint) public totalDepositedToSCAmount; Incognito public incognito; Withdrawable public prevVault; address payable public newVault; bool public notEntered = true; struct BurnInstData { uint8 meta; // type of the instruction uint8 shard; // ID of the Incognito shard containing the instruction, must be 1 address token; // ETH address of the token contract (0x0 for ETH) address payable to; // ETH address of the receiver of the token uint amount; // burned amount (on Incognito) bytes32 itx; // Incognito's burning tx } // error code enum Errors { EMPTY, NO_REENTRANCE, MAX_UINT_REACHED, VALUE_OVER_FLOW, INTERNAL_TX_ERROR, ALREADY_USED, INVALID_DATA, TOKEN_NOT_ENOUGH, WITHDRAW_REQUEST_TOKEN_NOT_ENOUGH, INVALID_RETURN_DATA, NOT_EQUAL, NULL_VALUE, ONLY_PREVAULT, PREVAULT_NOT_PAUSED } event Deposit(address token, string incognitoAddress, uint amount); event Withdraw(address token, address to, uint amount); event Migrate(address newVault); event MoveAssets(address[] assets); event UpdateTokenTotal(address[] assets, uint[] amounts); event UpdateIncognitoProxy(address newIncognitoProxy); /** * modifier for contract version */ modifier onlyPreVault(){ require(address(prevVault) != address(0x0) && msg.sender == address(prevVault), errorToString(Errors.ONLY_PREVAULT)); _; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, notEntered will be true require(notEntered, errorToString(Errors.NO_REENTRANCE)); // Any calls to nonReentrant after this point will fail notEntered = false; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) notEntered = true; } /** * @dev Creates new Vault to hold assets for Incognito Chain * @param admin: authorized address to Pause and migrate contract * @param incognitoProxyAddress: contract containing Incognito's committees * @param _prevVault: previous version of the Vault to refer back if necessary * After migrating all assets to a new Vault, we still need to refer * back to previous Vault to make sure old withdrawals aren't being reused */ constructor(address admin, address incognitoProxyAddress, address _prevVault) public AdminPausable(admin) { incognito = Incognito(incognitoProxyAddress); prevVault = Withdrawable(_prevVault); newVault = address(0); } /** * @dev Makes a ETH deposit to the vault to mint pETH over at Incognito Chain * @notice This only works when the contract is not Paused * @notice The maximum amount to deposit is capped since Incognito balance is stored as uint64 * @param incognitoAddress: Incognito Address to receive pETH */ function deposit(string memory incognitoAddress) public payable isNotPaused nonReentrant { require(address(this).balance <= 10 ** 27, errorToString(Errors.MAX_UINT_REACHED)); emit Deposit(ETH_TOKEN, incognitoAddress, msg.value); } /** * @dev Makes a ERC20 deposit to the vault to mint pERC20 over at Incognito Chain * @notice This only works when the contract is not Paused * @notice The maximum amount to deposit is capped since Incognito balance is stored as uint64 * @notice Before calling this function, enough ERC20 must be allowed to * tranfer from msg.sender to this contract * @param token: address of the ERC20 token * @param amount: to deposit to the vault and mint on Incognito Chain * @param incognitoAddress: Incognito Address to receive pERC20 */ function depositERC20(address token, uint amount, string memory incognitoAddress) public payable isNotPaused nonReentrant { IERC20 erc20Interface = IERC20(token); uint8 decimals = getDecimals(address(token)); uint tokenBalance = erc20Interface.balanceOf(address(this)); uint beforeTransfer = tokenBalance; uint emitAmount = amount; if (decimals > 9) { emitAmount = emitAmount / (10 ** (uint(decimals) - 9)); tokenBalance = tokenBalance / (10 ** (uint(decimals) - 9)); } require(emitAmount <= 10 ** 18 && tokenBalance <= 10 ** 18 && emitAmount.safeAdd(tokenBalance) <= 10 ** 18, errorToString(Errors.VALUE_OVER_FLOW)); erc20Interface.transferFrom(msg.sender, address(this), amount); require(checkSuccess(), errorToString(Errors.INTERNAL_TX_ERROR)); require(balanceOf(token).safeSub(beforeTransfer) == amount, errorToString(Errors.NOT_EQUAL)); emit Deposit(token, incognitoAddress, emitAmount); } /** * @dev Checks if a burn proof has been used before * @notice First, we check inside the storage of this contract itself. If the * hash has been used before, we return the result. Otherwise, we query * previous vault recursively until the first Vault (prevVault address is 0x0) * @param hash: of the burn proof * @return bool: whether the proof has been used or not */ function isWithdrawed(bytes32 hash) public view returns(bool) { if (withdrawed[hash]) { return true; } else if (address(prevVault) == address(0)) { return false; } return prevVault.isWithdrawed(hash); } /** * @dev Parses a burn instruction and returns the components * @param inst: the full instruction, containing both metadata and body */ function parseBurnInst(bytes memory inst) public pure returns (BurnInstData memory) { BurnInstData memory data; data.meta = uint8(inst[0]); data.shard = uint8(inst[1]); address token; address payable to; uint amount; bytes32 itx; assembly { // skip first 0x20 bytes (stored length of inst) token := mload(add(inst, 0x22)) // [3:34] to := mload(add(inst, 0x42)) // [34:66] amount := mload(add(inst, 0x62)) // [66:98] itx := mload(add(inst, 0x82)) // [98:130] } data.token = token; data.to = to; data.amount = amount; data.itx = itx; return data; } /** * @dev Verifies that a burn instruction is valid * @notice All params except inst are the list of 2 elements corresponding to * the proof on beacon and bridge * @notice All params are the same as in `withdraw` */ function verifyInst( bytes memory inst, uint heights, bytes32[] memory instPaths, bool[] memory instPathIsLefts, bytes32 instRoots, bytes32 blkData, uint[] memory sigIdxs, uint8[] memory sigVs, bytes32[] memory sigRs, bytes32[] memory sigSs ) view internal { // Each instruction can only by redeemed once bytes32 beaconInstHash = keccak256(abi.encodePacked(inst, heights)); // Verify instruction on beacon require(incognito.instructionApproved( true, // Only check instruction on beacon beaconInstHash, heights, instPaths, instPathIsLefts, instRoots, blkData, sigIdxs, sigVs, sigRs, sigSs ), errorToString(Errors.INVALID_DATA)); } /** * @dev Withdraws pETH/pIERC20 by providing a burn proof over at Incognito Chain * @notice This function takes a burn instruction on Incognito Chain, checks * for its validity and returns the token back to ETH chain * @notice This only works when the contract is not Paused * @param inst: the decoded instruction as a list of bytes * @param heights: the blocks containing the instruction * @param instPaths: merkle path of the instruction * @param instPathIsLefts: whether each node on the path is the left or right child * @param instRoots: root of the merkle tree contains all instructions * @param blkData: merkle has of the block body * @param sigIdxs: indices of the validators who signed this block * @param sigVs: part of the signatures of the validators * @param sigRs: part of the signatures of the validators * @param sigSs: part of the signatures of the validators */ function withdraw( bytes memory inst, uint heights, bytes32[] memory instPaths, bool[] memory instPathIsLefts, bytes32 instRoots, bytes32 blkData, uint[] memory sigIdxs, uint8[] memory sigVs, bytes32[] memory sigRs, bytes32[] memory sigSs ) public isNotPaused nonReentrant { BurnInstData memory data = parseBurnInst(inst); require(data.meta == 241 && data.shard == 1); // Check instruction type // Not withdrawed require(!isWithdrawed(data.itx), errorToString(Errors.ALREADY_USED)); withdrawed[data.itx] = true; // Check if balance is enough if (data.token == ETH_TOKEN) { require(address(this).balance >= data.amount.safeAdd(totalDepositedToSCAmount[data.token]), errorToString(Errors.TOKEN_NOT_ENOUGH)); } else { uint8 decimals = getDecimals(data.token); if (decimals > 9) { data.amount = data.amount * (10 ** (uint(decimals) - 9)); } require(IERC20(data.token).balanceOf(address(this)) >= data.amount.safeAdd(totalDepositedToSCAmount[data.token]), errorToString(Errors.TOKEN_NOT_ENOUGH)); } verifyInst( inst, heights, instPaths, instPathIsLefts, instRoots, blkData, sigIdxs, sigVs, sigRs, sigSs ); // Send and notify if (data.token == ETH_TOKEN) { (bool success, ) = data.to.call{value: data.amount}(""); require(success, errorToString(Errors.INTERNAL_TX_ERROR)); } else { IERC20(data.token).transfer(data.to, data.amount); require(checkSuccess(), errorToString(Errors.INTERNAL_TX_ERROR)); } emit Withdraw(data.token, data.to, data.amount); } /** * @dev Burnt Proof is submited to store burnt amount of p-token/p-ETH and receiver's address * Receiver then can call withdrawRequest to withdraw these token to he/she incognito address. * @notice This function takes a burn instruction on Incognito Chain, checks * for its validity and returns the token back to ETH chain * @notice This only works when the contract is not Paused * @param inst: the decoded instruction as a list of bytes * @param heights: the blocks containing the instruction * @param instPaths: merkle path of the instruction * @param instPathIsLefts: whether each node on the path is the left or right child * @param instRoots: root of the merkle tree contains all instructions * @param blkData: merkle has of the block body * @param sigIdxs: indices of the validators who signed this block * @param sigVs: part of the signatures of the validators * @param sigRs: part of the signatures of the validators * @param sigSs: part of the signatures of the validators */ function submitBurnProof( bytes memory inst, uint heights, bytes32[] memory instPaths, bool[] memory instPathIsLefts, bytes32 instRoots, bytes32 blkData, uint[] memory sigIdxs, uint8[] memory sigVs, bytes32[] memory sigRs, bytes32[] memory sigSs ) public isNotPaused nonReentrant { BurnInstData memory data = parseBurnInst(inst); require(data.meta == 243 && data.shard == 1); // Check instruction type // Not withdrawed require(!isWithdrawed(data.itx), errorToString(Errors.ALREADY_USED)); withdrawed[data.itx] = true; // Check if balance is enough if (data.token == ETH_TOKEN) { require(address(this).balance >= data.amount.safeAdd(totalDepositedToSCAmount[data.token]), errorToString(Errors.TOKEN_NOT_ENOUGH)); } else { uint8 decimals = getDecimals(data.token); if (decimals > 9) { data.amount = data.amount * (10 ** (uint(decimals) - 9)); } require(IERC20(data.token).balanceOf(address(this)) >= data.amount.safeAdd(totalDepositedToSCAmount[data.token]), errorToString(Errors.TOKEN_NOT_ENOUGH)); } verifyInst( inst, heights, instPaths, instPathIsLefts, instRoots, blkData, sigIdxs, sigVs, sigRs, sigSs ); withdrawRequests[data.to][data.token] = withdrawRequests[data.to][data.token].safeAdd(data.amount); totalDepositedToSCAmount[data.token] = totalDepositedToSCAmount[data.token].safeAdd(data.amount); } /** * @dev generate address from signature data and hash. */ function sigToAddress(bytes memory signData, bytes32 hash) public pure returns (address) { bytes32 s; bytes32 r; uint8 v; assembly { r := mload(add(signData, 0x20)) s := mload(add(signData, 0x40)) } v = uint8(signData[64]) + 27; return ecrecover(hash, v, r, s); } /** * @dev Checks if a sig data has been used before * @notice First, we check inside the storage of this contract itself. If the * hash has been used before, we return the result. Otherwise, we query * previous vault recursively until the first Vault (prevVault address is 0x0) * @param hash: of the sig data * @return bool: whether the sig data has been used or not */ function isSigDataUsed(bytes32 hash) public view returns(bool) { if (sigDataUsed[hash]) { return true; } else if (address(prevVault) == address(0)) { return false; } return prevVault.isSigDataUsed(hash); } /** * @dev User requests withdraw token contains in withdrawRequests. * Deposit event will be emitted to let incognito recognize and mint new p-tokens for the user. * @param incognitoAddress: incognito's address that will receive minted p-tokens. * @param token: ethereum's token address (eg., ETH, DAI, ...) * @param amount: amount of the token in ethereum's denomination * @param signData: signature of an unique data that is signed by an account which is generated from user's incognito privkey * @param timestamp: unique data generated from client (timestamp for example) */ function requestWithdraw( string memory incognitoAddress, address token, uint amount, bytes memory signData, bytes memory timestamp ) public isNotPaused nonReentrant { // verify owner signs data address verifier = verifySignData(abi.encodePacked(incognitoAddress, token, timestamp, amount), signData); // migrate from preVault migrateBalance(verifier, token); require(withdrawRequests[verifier][token] >= amount, errorToString(Errors.WITHDRAW_REQUEST_TOKEN_NOT_ENOUGH)); withdrawRequests[verifier][token] = withdrawRequests[verifier][token].safeSub(amount); totalDepositedToSCAmount[token] = totalDepositedToSCAmount[token].safeSub(amount); // convert denomination from ethereum's to incognito's (pcoin) uint emitAmount = amount; if (token != ETH_TOKEN) { uint8 decimals = getDecimals(token); if (decimals > 9) { emitAmount = amount / (10 ** (uint(decimals) - 9)); } } emit Deposit(token, incognitoAddress, emitAmount); } /** * @dev execute is a general function that plays a role as proxy to interact to other smart contracts. * @param token: ethereum's token address (eg., ETH, DAI, ...) * @param amount: amount of the token in ethereum's denomination * @param recipientToken: received token address. * @param exchangeAddress: address of targeting smart contract that actually executes the desired logics like trade, invest, borrow and so on. * @param callData: encoded with signature and params of function from targeting smart contract. * @param timestamp: unique data generated from client (timestamp for example) * @param signData: signature of an unique data that is signed by an account which is generated from user's incognito privkey */ function execute( address token, uint amount, address recipientToken, address exchangeAddress, bytes memory callData, bytes memory timestamp, bytes memory signData ) public payable isNotPaused nonReentrant { //verify ower signs data from input address verifier = verifySignData(abi.encodePacked(exchangeAddress, callData, timestamp, amount), signData); // migrate from preVault migrateBalance(verifier, token); require(withdrawRequests[verifier][token] >= amount, errorToString(Errors.WITHDRAW_REQUEST_TOKEN_NOT_ENOUGH)); // update balance of verifier totalDepositedToSCAmount[token] = totalDepositedToSCAmount[token].safeSub(amount); withdrawRequests[verifier][token] = withdrawRequests[verifier][token].safeSub(amount); // define number of eth spent for forwarder. uint ethAmount = msg.value; if (token == ETH_TOKEN) { ethAmount = ethAmount.safeAdd(amount); } else { // transfer token to exchangeAddress. require(IERC20(token).balanceOf(address(this)) >= amount, errorToString(Errors.TOKEN_NOT_ENOUGH)); IERC20(token).transfer(exchangeAddress, amount); require(checkSuccess(), errorToString(Errors.INTERNAL_TX_ERROR)); } uint returnedAmount = callExtFunc(recipientToken, ethAmount, callData, exchangeAddress); // update withdrawRequests withdrawRequests[verifier][recipientToken] = withdrawRequests[verifier][recipientToken].safeAdd(returnedAmount); totalDepositedToSCAmount[recipientToken] = totalDepositedToSCAmount[recipientToken].safeAdd(returnedAmount); } /** * @dev single trade */ function callExtFunc(address recipientToken, uint ethAmount, bytes memory callData, address exchangeAddress) internal returns (uint) { // get balance of recipient token before trade to compare after trade. uint balanceBeforeTrade = balanceOf(recipientToken); if (recipientToken == ETH_TOKEN) { balanceBeforeTrade = balanceBeforeTrade.safeSub(msg.value); } require(address(this).balance >= ethAmount, errorToString(Errors.TOKEN_NOT_ENOUGH)); (bool success, bytes memory result) = exchangeAddress.call{value: ethAmount}(callData); require(success); (address returnedTokenAddress, uint returnedAmount) = abi.decode(result, (address, uint)); require(returnedTokenAddress == recipientToken && balanceOf(recipientToken).safeSub(balanceBeforeTrade) == returnedAmount, errorToString(Errors.INVALID_RETURN_DATA)); return returnedAmount; } /** * @dev verify sign data */ function verifySignData(bytes memory data, bytes memory signData) internal returns(address){ bytes32 hash = keccak256(data); require(!isSigDataUsed(hash), errorToString(Errors.ALREADY_USED)); address verifier = sigToAddress(signData, hash); // mark data hash of sig as used sigDataUsed[hash] = true; return verifier; } /** * @dev migrate balance from previous vault * Note: uncomment for next version */ function migrateBalance(address owner, address token) internal { if (address(prevVault) != address(0x0) && !migration[owner][token]) { withdrawRequests[owner][token] = withdrawRequests[owner][token].safeAdd(prevVault.getDepositedBalance(token, owner)); migration[owner][token] = true; } } /** * @dev Get the amount of specific coin for specific wallet */ function getDepositedBalance( address token, address owner ) public view returns (uint) { if (address(prevVault) != address(0x0) && !migration[owner][token]) { return withdrawRequests[owner][token].safeAdd(prevVault.getDepositedBalance(token, owner)); } return withdrawRequests[owner][token]; } /** * @dev Saves the address of the new Vault to migrate assets to * @notice In case of emergency, Admin will Pause the contract, shutting down * all incoming transactions. After a new contract with the fix is deployed, * they will migrate assets to it and allow normal operations to resume * @notice This only works when the contract is Paused * @notice This can only be called by Admin * @param _newVault: address to save */ function migrate(address payable _newVault) public onlyAdmin isPaused { require(_newVault != address(0), errorToString(Errors.NULL_VALUE)); newVault = _newVault; emit Migrate(_newVault); } /** * @dev Move some assets to newVault * @notice This only works when the contract is Paused * @notice This can only be called by Admin * @param assets: address of the ERC20 tokens to move, 0x0 for ETH */ function moveAssets(address[] memory assets) public onlyAdmin isPaused { require(newVault != address(0), errorToString(Errors.NULL_VALUE)); uint[] memory amounts = new uint[](assets.length); for (uint i = 0; i < assets.length; i++) { if (assets[i] == ETH_TOKEN) { amounts[i] = totalDepositedToSCAmount[ETH_TOKEN]; (bool success, ) = newVault.call{value: address(this).balance}(""); require(success, errorToString(Errors.INTERNAL_TX_ERROR)); } else { uint bal = IERC20(assets[i]).balanceOf(address(this)); if (bal > 0) { IERC20(assets[i]).transfer(newVault, bal); require(checkSuccess()); } amounts[i] = totalDepositedToSCAmount[assets[i]]; } totalDepositedToSCAmount[assets[i]] = 0; } require(Withdrawable(newVault).updateAssets(assets, amounts), errorToString(Errors.INTERNAL_TX_ERROR)); emit MoveAssets(assets); } /** * @dev Move total number of assets to newVault * @notice This only works when the preVault is Paused * @notice This can only be called by preVault * @param assets: address of the ERC20 tokens to move, 0x0 for ETH * @param amounts: total number of the ERC20 tokens to move, 0x0 for ETH */ function updateAssets(address[] calldata assets, uint[] calldata amounts) external onlyPreVault returns(bool) { require(assets.length == amounts.length, errorToString(Errors.NOT_EQUAL)); require(Withdrawable(prevVault).paused(), errorToString(Errors.PREVAULT_NOT_PAUSED)); for (uint i = 0; i < assets.length; i++) { totalDepositedToSCAmount[assets[i]] = totalDepositedToSCAmount[assets[i]].safeAdd(amounts[i]); } emit UpdateTokenTotal(assets, amounts); return true; } /** * @dev Changes the IncognitoProxy to use * @notice If the IncognitoProxy contract malfunctioned, Admin could config * the Vault to use a new fixed IncognitoProxy contract * @notice This only works when the contract is Paused * @notice This can only be called by Admin * @param newIncognitoProxy: address of the new contract */ function updateIncognitoProxy(address newIncognitoProxy) public onlyAdmin isPaused { require(newIncognitoProxy != address(0), errorToString(Errors.NULL_VALUE)); incognito = Incognito(newIncognitoProxy); emit UpdateIncognitoProxy(newIncognitoProxy); } /** * @dev Payable receive function to receive Ether from oldVault when migrating */ receive() external payable {} /** * @dev Check if transfer() and transferFrom() of ERC20 succeeded or not * This check is needed to fix https://github.com/ethereum/solidity/issues/4116 * This function is copied from https://github.com/AdExNetwork/adex-protocol-eth/blob/master/contracts/libs/SafeERC20.sol */ function checkSuccess() private pure returns (bool) { uint256 returnValue = 0; assembly { // check number of bytes returned from last function call switch returndatasize() // no bytes returned: assume success case 0x0 { returnValue := 1 } // 32 bytes returned: check if non-zero case 0x20 { // copy 32 bytes into scratch space returndatacopy(0x0, 0x0, 0x20) // load those bytes into returnValue returnValue := mload(0x0) } // not sure what was returned: don't mark as success default { } } return returnValue != 0; } /** * @dev convert enum to string value */ function errorToString(Errors error) internal pure returns(string memory) { uint8 erroNum = uint8(error); uint maxlength = 10; bytes memory reversed = new bytes(maxlength); uint i = 0; while (erroNum != 0) { uint8 remainder = erroNum % 10; erroNum = erroNum / 10; reversed[i++] = byte(48 + remainder); } bytes memory s = new bytes(i + 1); for (uint j = 0; j <= i; j++) { s[j] = reversed[i - j]; } return string(s); } /** * @dev Get the decimals of an ERC20 token, return 0 if it isn't defined * We check the returndatasize to covert both cases that the token has * and doesn't have the function decimals() */ function getDecimals(address token) public view returns (uint8) { IERC20 erc20 = IERC20(token); return uint8(erc20.decimals()); } /** * @dev Get the amount of coin deposited to this smartcontract */ function balanceOf(address token) public view returns (uint) { if (token == ETH_TOKEN) { return address(this).balance; } return IERC20(token).balanceOf(address(this)); } }
pragma solidity ^0.6.6; /** * @dev Interface of the ERC20 standard as defined in the EIP. Does not include * the optional functions; to access them see `ERC20Detailed`. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a `Transfer` event. */ function transfer(address recipient, uint amount) external; /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through `transferFrom`. This is * zero by default. * * This value changes when `approve` or `transferFrom` are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * > Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an `Approval` event. */ function approve(address spender, uint amount) external; /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a `Transfer` event. */ function transferFrom(address sender, address recipient, uint amount) external; /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() external view returns (uint); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to `approve`. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint value); }
pragma solidity ^0.6.6; contract AdminPausable { address public admin; address public successor; bool public paused; uint public expire; constructor(address _admin) public { admin = _admin; paused = false; expire = block.timestamp + 3 * 365 days; } event Paused(address pauser); event Unpaused(address pauser); event Extend(uint ndays); event Claim(address claimer); modifier onlyAdmin() { require(msg.sender == admin, "not admin"); _; } modifier isPaused() { require(paused, "not paused right now"); _; } modifier isNotPaused() { require(!paused, "paused right now"); _; } modifier isNotExpired() { require(block.timestamp < expire, "expired"); _; } function retire(address _successor) public onlyAdmin isNotExpired { successor = _successor; } function claim() public isNotExpired { require(msg.sender == successor, "unauthorized"); admin = successor; emit Claim(admin); } function extend(uint n) public onlyAdmin isNotExpired { require(n < 366, "cannot extend for too long"); // To prevent overflow expire = expire + n * 1 days; emit Extend(n); } function pause() public onlyAdmin isNotPaused isNotExpired { paused = true; emit Paused(msg.sender); } function unpause() public onlyAdmin isPaused { paused = false; emit Unpaused(msg.sender); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"admin","type":"address"},{"internalType":"address","name":"incognitoProxyAddress","type":"address"},{"internalType":"address","name":"_prevVault","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"claimer","type":"address"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"string","name":"incognitoAddress","type":"string"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"ndays","type":"uint256"}],"name":"Extend","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newVault","type":"address"}],"name":"Migrate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"assets","type":"address[]"}],"name":"MoveAssets","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pauser","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pauser","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newIncognitoProxy","type":"address"}],"name":"UpdateIncognitoProxy","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"assets","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"UpdateTokenTotal","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"ETH_TOKEN","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"incognitoAddress","type":"string"}],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"incognitoAddress","type":"string"}],"name":"depositERC20","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"recipientToken","type":"address"},{"internalType":"address","name":"exchangeAddress","type":"address"},{"internalType":"bytes","name":"callData","type":"bytes"},{"internalType":"bytes","name":"timestamp","type":"bytes"},{"internalType":"bytes","name":"signData","type":"bytes"}],"name":"execute","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"expire","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"n","type":"uint256"}],"name":"extend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getDecimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"getDepositedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"incognito","outputs":[{"internalType":"contract Incognito","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"hash","type":"bytes32"}],"name":"isSigDataUsed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"hash","type":"bytes32"}],"name":"isWithdrawed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"_newVault","type":"address"}],"name":"migrate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"migration","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"}],"name":"moveAssets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"newVault","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notEntered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"inst","type":"bytes"}],"name":"parseBurnInst","outputs":[{"components":[{"internalType":"uint8","name":"meta","type":"uint8"},{"internalType":"uint8","name":"shard","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address payable","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32","name":"itx","type":"bytes32"}],"internalType":"struct Vault.BurnInstData","name":"","type":"tuple"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prevVault","outputs":[{"internalType":"contract Withdrawable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"incognitoAddress","type":"string"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"signData","type":"bytes"},{"internalType":"bytes","name":"timestamp","type":"bytes"}],"name":"requestWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_successor","type":"address"}],"name":"retire","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"sigDataUsed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"signData","type":"bytes"},{"internalType":"bytes32","name":"hash","type":"bytes32"}],"name":"sigToAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes","name":"inst","type":"bytes"},{"internalType":"uint256","name":"heights","type":"uint256"},{"internalType":"bytes32[]","name":"instPaths","type":"bytes32[]"},{"internalType":"bool[]","name":"instPathIsLefts","type":"bool[]"},{"internalType":"bytes32","name":"instRoots","type":"bytes32"},{"internalType":"bytes32","name":"blkData","type":"bytes32"},{"internalType":"uint256[]","name":"sigIdxs","type":"uint256[]"},{"internalType":"uint8[]","name":"sigVs","type":"uint8[]"},{"internalType":"bytes32[]","name":"sigRs","type":"bytes32[]"},{"internalType":"bytes32[]","name":"sigSs","type":"bytes32[]"}],"name":"submitBurnProof","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"successor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalDepositedToSCAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"updateAssets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newIncognitoProxy","type":"address"}],"name":"updateIncognitoProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"inst","type":"bytes"},{"internalType":"uint256","name":"heights","type":"uint256"},{"internalType":"bytes32[]","name":"instPaths","type":"bytes32[]"},{"internalType":"bool[]","name":"instPathIsLefts","type":"bool[]"},{"internalType":"bytes32","name":"instRoots","type":"bytes32"},{"internalType":"bytes32","name":"blkData","type":"bytes32"},{"internalType":"uint256[]","name":"sigIdxs","type":"uint256[]"},{"internalType":"uint8[]","name":"sigVs","type":"uint8[]"},{"internalType":"bytes32[]","name":"sigRs","type":"bytes32[]"},{"internalType":"bytes32[]","name":"sigSs","type":"bytes32[]"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"withdrawRequests","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"withdrawed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052600a805460ff60a01b1916600160a01b1790553480156200002457600080fd5b5060405162003cbd38038062003cbd8339810160408190526200004791620000aa565b600080546001600160a01b03199081166001600160a01b03958616179091556001805460ff60a01b19169055426305a39a8001600255600880548216938516939093179092556009805483169190931617909155600a8054909116905562000116565b600080600060608486031215620000bf578283fd5b8351620000cc81620000fd565b6020850151909350620000df81620000fd565b6040850151909250620000f281620000fd565b809150509250925092565b6001600160a01b03811681146200011357600080fd5b50565b613b9780620001266000396000f3fe6080604052600436106102135760003560e01c80637e16e6e111610118578063a26e1186116100a0578063dca40d9e1161006f578063dca40d9e146105b6578063e4bd7074146105d6578063f75b98ce146105f6578063f851a44014610616578063fa84702e1461062b5761021a565b8063a26e118614610541578063a3f5d8cc14610554578063ce5494bb14610569578063cf54aaa0146105895761021a565b806388aaf0c8116100e757806388aaf0c8146104b75780638a984538146104cc5780639714378c146104e1578063995fac11146105015780639e6371ba146105215761021a565b80637e16e6e1146104425780638456cb591461046f5780638588ccd61461048457806387add440146104975761021a565b80635a67cb871161019b5780636ff968c31161016a5780636ff968c3146103b857806370a08231146103cd57806373bf9651146103ed578063749c5f861461040d57806379599f961461042d5761021a565b80635a67cb87146103435780635c975abb146103565780636304541c1461036b57806365b5a00f146103985761021a565b80633a51913d116101e25780633a51913d146102b75780633f4ba83a146102d75780633fec6b40146102ec5780634e71d92d1461031957806358bc83371461032e5761021a565b80630c4f50391461021f5780631beb7de2146102415780631ea1940e146102615780631ed4276d146102975761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b5061023f61023a36600461320e565b610640565b005b34801561024d57600080fd5b5061023f61025c366004613358565b610acb565b34801561026d57600080fd5b5061028161027c3660046132c4565b610f07565b60405161028e9190613878565b60405180910390f35b3480156102a357600080fd5b506102816102b23660046131a6565b610f1c565b3480156102c357600080fd5b5061023f6102d236600461300b565b611143565b3480156102e357600080fd5b5061023f611221565b3480156102f857600080fd5b5061030c610307366004613316565b6112bb565b60405161028e9190613719565b34801561032557600080fd5b5061023f61134a565b34801561033a57600080fd5b5061030c6113e6565b61023f610351366004613150565b6113eb565b34801561036257600080fd5b506102816116ba565b34801561037757600080fd5b5061038b61038636600461300b565b6116ca565b60405161028e919061392d565b3480156103a457600080fd5b5061038b6103b3366004613054565b6116dc565b3480156103c457600080fd5b5061030c6116f9565b3480156103d957600080fd5b5061038b6103e836600461300b565b611708565b3480156103f957600080fd5b5061023f610408366004613358565b6117a3565b34801561041957600080fd5b506102816104283660046132c4565b611b06565b34801561043957600080fd5b5061038b611bbd565b34801561044e57600080fd5b5061046261045d3660046132dc565b611bc3565b60405161028e9190613a60565b34801561047b57600080fd5b5061023f611c45565b61023f61049236600461308c565b611cfd565b3480156104a357600080fd5b5061023f6104b2366004613489565b6120b0565b3480156104c357600080fd5b5061030c6122d2565b3480156104d857600080fd5b5061030c6122e1565b3480156104ed57600080fd5b5061023f6104fc3660046132c4565b6122f0565b34801561050d57600080fd5b5061028161051c366004613054565b612399565b34801561052d57600080fd5b5061023f61053c36600461300b565b6123b9565b61023f61054f3660046132dc565b612426565b34801561056057600080fd5b5061028161251e565b34801561057557600080fd5b5061023f61058436600461300b565b61252e565b34801561059557600080fd5b506105a96105a436600461300b565b612601565b60405161028e9190613ab8565b3480156105c257600080fd5b506102816105d13660046132c4565b61267f565b3480156105e257600080fd5b506102816105f13660046132c4565b612694565b34801561060257600080fd5b5061038b610611366004613054565b6126fb565b34801561062257600080fd5b5061030c61282d565b34801561063757600080fd5b5061030c61283c565b6000546001600160a01b031633146106735760405162461bcd60e51b815260040161066a90613a3d565b60405180910390fd5b600154600160a01b900460ff1661069c5760405162461bcd60e51b815260040161066a90613967565b600a546001600160a01b031615156106b4600b61284b565b906106d25760405162461bcd60e51b815260040161066a9190613954565b50606081516001600160401b03811180156106ec57600080fd5b50604051908082528060200260200182016040528015610716578160200160208202803683370190505b50905060005b82518110156109e25760006001600160a01b031683828151811061073c57fe5b60200260200101516001600160a01b0316141561082b576000805260076020527f6d5257204ebe7d88fd91ae87941cb2dd9d8062b64ae5a2bd2d28ec40b9fbf6df54825183908390811061078c57fe5b6020908102919091010152600a546040516000916001600160a01b03169047906107b590613716565b60006040518083038185875af1925050503d80600081146107f2576040519150601f19603f3d011682016040523d82523d6000602084013e6107f7565b606091505b5050905080610806600461284b565b906108245760405162461bcd60e51b815260040161066a9190613954565b50506109a4565b600083828151811061083957fe5b60200260200101516001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161086c9190613719565b60206040518083038186803b15801561088457600080fd5b505afa158015610898573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108bc919061352b565b90508015610951578382815181106108d057fe5b6020908102919091010151600a5460405163a9059cbb60e01b81526001600160a01b039283169263a9059cbb9261090e929116908590600401613751565b600060405180830381600087803b15801561092857600080fd5b505af115801561093c573d6000803e3d6000fd5b50505050610948612974565b61095157600080fd5b6007600085848151811061096157fe5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205483838151811061099657fe5b602002602001018181525050505b6000600760008584815181106109b657fe5b6020908102919091018101516001600160a01b031682528101919091526040016000205560010161071c565b50600a54604051631ed4276d60e01b81526001600160a01b0390911690631ed4276d90610a15908590859060040161384a565b602060405180830381600087803b158015610a2f57600080fd5b505af1158015610a43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6791906132a8565b610a71600461284b565b90610a8f5760405162461bcd60e51b815260040161066a9190613954565b507f492fc8b292f2a2a9b328a366b83745f30c024056d12aa118a15966d26a8ce65882604051610abf9190613837565b60405180910390a15050565b600154600160a01b900460ff1615610af55760405162461bcd60e51b815260040161066a90613a13565b600a54600160a01b900460ff16610b0c600161284b565b90610b2a5760405162461bcd60e51b815260040161066a9190613954565b50600a805460ff60a01b19169055610b40612dcd565b610b498b611bc3565b9050806000015160ff1660f1148015610b695750806020015160ff166001145b610b7257600080fd5b610b7f8160a00151611b06565b15610b8a600561284b565b90610ba85760405162461bcd60e51b815260040161066a9190613954565b5060a081015160009081526003602052604090819020805460ff191660011790558101516001600160a01b0316610c39576040808201516001600160a01b03166000908152600760205220546080820151610c089163ffffffff6129a816565b471015610c15600761284b565b90610c335760405162461bcd60e51b815260040161066a9190613954565b50610d47565b6000610c488260400151612601565b905060098160ff161115610c6b5760808201805160081960ff841601600a0a0290525b6040808301516001600160a01b03166000908152600760205220546080830151610c9a9163ffffffff6129a816565b82604001516001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401610cca9190613719565b60206040518083038186803b158015610ce257600080fd5b505afa158015610cf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1a919061352b565b1015610d26600761284b565b90610d445760405162461bcd60e51b815260040161066a9190613954565b50505b610d598b8b8b8b8b8b8b8b8b8b6129c6565b60408101516001600160a01b0316610e0257600081606001516001600160a01b03168260800151604051610d8c90613716565b60006040518083038185875af1925050503d8060008114610dc9576040519150601f19603f3d011682016040523d82523d6000602084013e610dce565b606091505b5050905080610ddd600461284b565b90610dfb5760405162461bcd60e51b815260040161066a9190613954565b5050610ea0565b80604001516001600160a01b031663a9059cbb826060015183608001516040518363ffffffff1660e01b8152600401610e3c929190613751565b600060405180830381600087803b158015610e5657600080fd5b505af1158015610e6a573d6000803e3d6000fd5b50505050610e76612974565b610e80600461284b565b90610e9e5760405162461bcd60e51b815260040161066a9190613954565b505b7f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb816040015182606001518360800151604051610edf9392919061372d565b60405180910390a15050600a805460ff60a01b1916600160a01b179055505050505050505050565b60046020526000908152604090205460ff1681565b6009546000906001600160a01b031615801590610f4357506009546001600160a01b031633145b610f4d600c61284b565b90610f6b5760405162461bcd60e51b815260040161066a9190613954565b50838214610f79600a61284b565b90610f975760405162461bcd60e51b815260040161066a9190613954565b50600960009054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b158015610fe657600080fd5b505afa158015610ffa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101e91906132a8565b611028600d61284b565b906110465760405162461bcd60e51b815260040161066a9190613954565b5060005b848110156110fa576110b384848381811061106157fe5b905060200201356007600089898681811061107857fe5b905060200201602081019061108d919061300b565b6001600160a01b031681526020810191909152604001600020549063ffffffff6129a816565b600760008888858181106110c357fe5b90506020020160208101906110d8919061300b565b6001600160a01b0316815260208101919091526040016000205560010161104a565b507f6a7fbbcddfd518bb8c56b28ac6c7acb0f7ca093ed232eb3306e53d14e469895f8585858560405161113094939291906137b8565b60405180910390a1506001949350505050565b6000546001600160a01b0316331461116d5760405162461bcd60e51b815260040161066a90613a3d565b600154600160a01b900460ff166111965760405162461bcd60e51b815260040161066a90613967565b6001600160a01b03811615156111ac600b61284b565b906111ca5760405162461bcd60e51b815260040161066a9190613954565b50600880546001600160a01b0319166001600160a01b0383161790556040517f204252dfe190ad6ef63db40a490f048b39f661de74628408f13cd0bb2d4c344690611216908390613719565b60405180910390a150565b6000546001600160a01b0316331461124b5760405162461bcd60e51b815260040161066a90613a3d565b600154600160a01b900460ff166112745760405162461bcd60e51b815260040161066a90613967565b6001805460ff60a01b191690556040517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906112b1903390613719565b60405180910390a1565b6000806000806020860151915060408601519250856040815181106112dc57fe5b602001015160f81c60f81b60f81c601b019050600185828486604051600081526020016040526040516113129493929190613936565b6020604051602081039080840390855afa158015611334573d6000803e3d6000fd5b5050506020604051035193505050505b92915050565b600254421061136b5760405162461bcd60e51b815260040161066a90613995565b6001546001600160a01b031633146113955760405162461bcd60e51b815260040161066a906139ed565b600154600080546001600160a01b0319166001600160a01b0392831617908190556040517f0c7ef932d3b91976772937f18d5ef9b39a9930bef486b576c374f047c4b512dc926112b1921690613719565b600081565b600154600160a01b900460ff16156114155760405162461bcd60e51b815260040161066a90613a13565b600a54600160a01b900460ff1661142c600161284b565b9061144a5760405162461bcd60e51b815260040161066a9190613954565b50600a805460ff60a01b1916905582600061146482612601565b90506000826001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016114949190613719565b60206040518083038186803b1580156114ac57600080fd5b505afa1580156114c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e4919061352b565b90508085600960ff8516111561151f5760098460ff1603600a0a818161150657fe5b04905060098460ff1603600a0a838161151b57fe5b0492505b670de0b6b3a7640000811115801561153f5750670de0b6b3a76400008311155b80156115625750670de0b6b3a764000061155f828563ffffffff6129a816565b11155b61156c600361284b565b9061158a5760405162461bcd60e51b815260040161066a9190613954565b506040516323b872dd60e01b81526001600160a01b038616906323b872dd906115bb90339030908c9060040161372d565b600060405180830381600087803b1580156115d557600080fd5b505af11580156115e9573d6000803e3d6000fd5b505050506115f5612974565b6115ff600461284b565b9061161d5760405162461bcd60e51b815260040161066a9190613954565b50866116388361162c8b611708565b9063ffffffff612abd16565b14611643600a61284b565b906116615760405162461bcd60e51b815260040161066a9190613954565b507f2d4b597935f3cd67fb2eebf1db4debc934cee5c7baa7153f980fdbeb2e74084e88878360405161169593929190613784565b60405180910390a15050600a805460ff60a01b1916600160a01b179055505050505050565b600154600160a01b900460ff1681565b60076020526000908152604090205481565b600560209081526000928352604080842090915290825290205481565b6001546001600160a01b031681565b60006001600160a01b03821661171f57504761179e565b6040516370a0823160e01b81526001600160a01b038316906370a082319061174b903090600401613719565b60206040518083038186803b15801561176357600080fd5b505afa158015611777573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061179b919061352b565b90505b919050565b600154600160a01b900460ff16156117cd5760405162461bcd60e51b815260040161066a90613a13565b600a54600160a01b900460ff166117e4600161284b565b906118025760405162461bcd60e51b815260040161066a9190613954565b50600a805460ff60a01b19169055611818612dcd565b6118218b611bc3565b9050806000015160ff1660f31480156118415750806020015160ff166001145b61184a57600080fd5b6118578160a00151611b06565b15611862600561284b565b906118805760405162461bcd60e51b815260040161066a9190613954565b5060a081015160009081526003602052604090819020805460ff191660011790558101516001600160a01b0316611911576040808201516001600160a01b031660009081526007602052205460808201516118e09163ffffffff6129a816565b4710156118ed600761284b565b9061190b5760405162461bcd60e51b815260040161066a9190613954565b50611a1f565b60006119208260400151612601565b905060098160ff1611156119435760808201805160081960ff841601600a0a0290525b6040808301516001600160a01b031660009081526007602052205460808301516119729163ffffffff6129a816565b82604001516001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016119a29190613719565b60206040518083038186803b1580156119ba57600080fd5b505afa1580156119ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f2919061352b565b10156119fe600761284b565b90611a1c5760405162461bcd60e51b815260040161066a9190613954565b50505b611a318b8b8b8b8b8b8b8b8b8b6129c6565b608081015160608201516001600160a01b0390811660009081526005602090815260408083208187015190941683529290522054611a749163ffffffff6129a816565b60608201516001600160a01b03908116600090815260056020908152604080832081870180518616855290835281842095909555608086015194519093168252600790522054611ac99163ffffffff6129a816565b6040918201516001600160a01b03166000908152600760205291909120555050600a805460ff60a01b1916600160a01b1790555050505050505050565b60008181526003602052604081205460ff1615611b255750600161179e565b6009546001600160a01b0316611b3d5750600061179e565b600954604051633a4e2fc360e11b81526001600160a01b039091169063749c5f8690611b6d90859060040161392d565b60206040518083038186803b158015611b8557600080fd5b505afa158015611b99573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061179b91906132a8565b60025481565b611bcb612dcd565b611bd3612dcd565b82600081518110611be057fe5b016020015160f81c8152825183906001908110611bf957fe5b0160209081015160f81c9082015260228301516042840151606285015160828601516001600160a01b039384166040860152929091166060840152608083015260a08201529050919050565b6000546001600160a01b03163314611c6f5760405162461bcd60e51b815260040161066a90613a3d565b600154600160a01b900460ff1615611c995760405162461bcd60e51b815260040161066a90613a13565b6002544210611cba5760405162461bcd60e51b815260040161066a90613995565b6001805460ff60a01b1916600160a01b1790556040517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906112b1903390613719565b600154600160a01b900460ff1615611d275760405162461bcd60e51b815260040161066a90613a13565b600a54600160a01b900460ff16611d3e600161284b565b90611d5c5760405162461bcd60e51b815260040161066a9190613954565b50600a805460ff60a01b19169055604051600090611d9d90611d88908790879087908c90602001613644565b60405160208183030381529060405283612ad2565b9050611da98189612b3e565b6001600160a01b038082166000908152600560209081526040808320938c1683529290522054871115611ddc600861284b565b90611dfa5760405162461bcd60e51b815260040161066a9190613954565b506001600160a01b038816600090815260076020526040902054611e24908863ffffffff612abd16565b6001600160a01b03808a1660008181526007602090815260408083209590955592851681526005835283812091815291522054611e67908863ffffffff612abd16565b6001600160a01b038083166000908152600560209081526040808320938d16808452939091529020919091553490611eb057611ea9818963ffffffff6129a816565b9050611feb565b6040516370a0823160e01b815288906001600160a01b038b16906370a0823190611ede903090600401613719565b60206040518083038186803b158015611ef657600080fd5b505afa158015611f0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2e919061352b565b1015611f3a600761284b565b90611f585760405162461bcd60e51b815260040161066a9190613954565b5060405163a9059cbb60e01b81526001600160a01b038a169063a9059cbb90611f879089908c90600401613751565b600060405180830381600087803b158015611fa157600080fd5b505af1158015611fb5573d6000803e3d6000fd5b50505050611fc1612974565b611fcb600461284b565b90611fe95760405162461bcd60e51b815260040161066a9190613954565b505b6000611ff98883888a612c86565b6001600160a01b038085166000908152600560209081526040808320938d1683529290522054909150612032908263ffffffff6129a816565b6001600160a01b038085166000908152600560209081526040808320938d168352928152828220939093556007909252902054612075908263ffffffff6129a816565b6001600160a01b039098166000908152600760205260409020979097555050600a805460ff60a01b1916600160a01b17905550505050505050565b600154600160a01b900460ff16156120da5760405162461bcd60e51b815260040161066a90613a13565b600a54600160a01b900460ff166120f1600161284b565b9061210f5760405162461bcd60e51b815260040161066a9190613954565b50600a805460ff60a01b191690556040516000906121509061213b9088908890869089906020016136d7565b60405160208183030381529060405284612ad2565b905061215c8186612b3e565b6001600160a01b0380821660009081526005602090815260408083209389168352929052205484111561218f600861284b565b906121ad5760405162461bcd60e51b815260040161066a9190613954565b506001600160a01b038082166000908152600560209081526040808320938916835292905220546121e4908563ffffffff612abd16565b6001600160a01b038083166000908152600560209081526040808320938a168352928152828220939093556007909252902054612227908563ffffffff612abd16565b6001600160a01b03861660008181526007602052604090209190915584901561227b57600061225587612601565b905060098160ff1611156122795760098160ff1603600a0a868161227557fe5b0491505b505b7f2d4b597935f3cd67fb2eebf1db4debc934cee5c7baa7153f980fdbeb2e74084e8688836040516122ae93929190613784565b60405180910390a15050600a805460ff60a01b1916600160a01b1790555050505050565b600a546001600160a01b031681565b6008546001600160a01b031681565b6000546001600160a01b0316331461231a5760405162461bcd60e51b815260040161066a90613a3d565b600254421061233b5760405162461bcd60e51b815260040161066a90613995565b61016e811061235c5760405162461bcd60e51b815260040161066a906139b6565b600280546201518083020190556040517f02ef6561d311451dadc920679eb21192a61d96ee8ead94241b8ff073029ca6e89061121690839061392d565b600660209081526000928352604080842090915290825290205460ff1681565b6000546001600160a01b031633146123e35760405162461bcd60e51b815260040161066a90613a3d565b60025442106124045760405162461bcd60e51b815260040161066a90613995565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600154600160a01b900460ff16156124505760405162461bcd60e51b815260040161066a90613a13565b600a54600160a01b900460ff16612467600161284b565b906124855760405162461bcd60e51b815260040161066a9190613954565b50600a805460ff60a01b191690556b033b2e3c9fd0803ce80000004711156124ad600261284b565b906124cb5760405162461bcd60e51b815260040161066a9190613954565b507f2d4b597935f3cd67fb2eebf1db4debc934cee5c7baa7153f980fdbeb2e74084e6000823460405161250093929190613784565b60405180910390a150600a805460ff60a01b1916600160a01b179055565b600a54600160a01b900460ff1681565b6000546001600160a01b031633146125585760405162461bcd60e51b815260040161066a90613a3d565b600154600160a01b900460ff166125815760405162461bcd60e51b815260040161066a90613967565b6001600160a01b0381161515612597600b61284b565b906125b55760405162461bcd60e51b815260040161066a9190613954565b50600a80546001600160a01b0319166001600160a01b0383161790556040517fd58a618a39de682696ea37dd9a6bf9c793afa426fa1438e75c3966e3b541e45a90611216908390613719565b600080829050806001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561264057600080fd5b505afa158015612654573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612678919061352b565b9392505050565b60036020526000908152604090205460ff1681565b60008181526004602052604081205460ff16156126b35750600161179e565b6009546001600160a01b03166126cb5750600061179e565b60095460405163392f5c1d60e21b81526001600160a01b039091169063e4bd707490611b6d90859060040161392d565b6009546000906001600160a01b03161580159061273e57506001600160a01b0380831660009081526006602090815260408083209387168352929052205460ff16155b1561280057600954604051637badcc6760e11b81526127f9916001600160a01b03169063f75b98ce90612777908790879060040161376a565b60206040518083038186803b15801561278f57600080fd5b505afa1580156127a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c7919061352b565b6001600160a01b038085166000908152600560209081526040808320938916835292905220549063ffffffff6129a816565b9050611344565b506001600160a01b0380821660009081526005602090815260408083209386168352929052205492915050565b6000546001600160a01b031681565b6009546001600160a01b031681565b6060600082600d81111561285b57fe5b60408051600a808252818301909252919250906060908260208201818036833701905050905060005b60ff8416156128d2578151600a60ff959095168581049560018401939106916030830160f81b91859181106128b557fe5b60200101906001600160f81b031916908160001a90535050612884565b6060816001016001600160401b03811180156128ed57600080fd5b506040519080825280601f01601f191660200182016040528015612918576020820181803683370190505b50905060005b82811161296957838184038151811061293357fe5b602001015160f81c60f81b82828151811061294a57fe5b60200101906001600160f81b031916908160001a90535060010161291e565b509695505050505050565b6000803d801561298b5760208114612994576129a0565b600191506129a0565b60206000803e60005191505b501515905090565b60008282018381108015906129bd5750828110155b61267857600080fd5b60008a8a6040516020016129db9291906136b5565b60408051601f19818403018152908290528051602090910120600854637b2e908b60e11b83529092506001600160a01b03169063f65d211690612a379060019085908f908f908f908f908f908f908f908f908f90600401613883565b60206040518083038186803b158015612a4f57600080fd5b505afa158015612a63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a8791906132a8565b612a91600661284b565b90612aaf5760405162461bcd60e51b815260040161066a9190613954565b505050505050505050505050565b600082821115612acc57600080fd5b50900390565b81516020830120600090612ae581612694565b15612af0600561284b565b90612b0e5760405162461bcd60e51b815260040161066a9190613954565b506000612b1b84836112bb565b600092835260046020526040909220805460ff1916600117905550905092915050565b6009546001600160a01b031615801590612b7e57506001600160a01b0380831660009081526006602090815260408083209385168352929052205460ff16155b15612c8257600954604051637badcc6760e11b8152612c39916001600160a01b03169063f75b98ce90612bb7908590879060040161376a565b60206040518083038186803b158015612bcf57600080fd5b505afa158015612be3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c07919061352b565b6001600160a01b038085166000908152600560209081526040808320938716835292905220549063ffffffff6129a816565b6001600160a01b038084166000818152600560209081526040808320948716808452948252808320959095559181526006825283812092815291905220805460ff191660011790555b5050565b600080612c9286611708565b90506001600160a01b038616612cb557612cb2813463ffffffff612abd16565b90505b84471015612cc3600761284b565b90612ce15760405162461bcd60e51b815260040161066a9190613954565b5060006060846001600160a01b03168787604051612cff9190613699565b60006040518083038185875af1925050503d8060008114612d3c576040519150601f19603f3d011682016040523d82523d6000602084013e612d41565b606091505b509150915081612d5057600080fd5b60008082806020019051810190612d679190613027565b91509150896001600160a01b0316826001600160a01b0316148015612d97575080612d958661162c8d611708565b145b612da1600961284b565b90612dbf5760405162461bcd60e51b815260040161066a9190613954565b509998505050505050505050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b803561134481613b3b565b60008083601f840112612e1e578182fd5b5081356001600160401b03811115612e34578182fd5b6020830191508360208083028501011115612e4e57600080fd5b9250929050565b600082601f830112612e65578081fd5b8135612e78612e7382613aec565b613ac6565b818152915060208083019084810181840286018201871015612e9957600080fd5b60005b84811015612ec1578135612eaf81613b53565b84529282019290820190600101612e9c565b505050505092915050565b600082601f830112612edc578081fd5b8135612eea612e7382613aec565b818152915060208083019084810181840286018201871015612f0b57600080fd5b60005b84811015612ec157813584529282019290820190600101612f0e565b600082601f830112612f3a578081fd5b8135612f48612e7382613aec565b818152915060208083019084810181840286018201871015612f6957600080fd5b6000805b85811015612f9757823560ff81168114612f85578283fd5b85529383019391830191600101612f6d565b50505050505092915050565b600082601f830112612fb3578081fd5b81356001600160401b03811115612fc8578182fd5b612fdb601f8201601f1916602001613ac6565b9150808252836020828501011115612ff257600080fd5b8060208401602084013760009082016020015292915050565b60006020828403121561301c578081fd5b813561267881613b3b565b60008060408385031215613039578081fd5b825161304481613b3b565b6020939093015192949293505050565b60008060408385031215613066578182fd5b823561307181613b3b565b9150602083013561308181613b3b565b809150509250929050565b600080600080600080600060e0888a0312156130a6578283fd5b87356130b181613b3b565b96506020880135955060408801356130c881613b3b565b94506130d78960608a01612e02565b935060808801356001600160401b03808211156130f2578485fd5b6130fe8b838c01612fa3565b945060a08a0135915080821115613113578384fd5b61311f8b838c01612fa3565b935060c08a0135915080821115613134578283fd5b506131418a828b01612fa3565b91505092959891949750929550565b600080600060608486031215613164578081fd5b833561316f81613b3b565b92506020840135915060408401356001600160401b03811115613190578182fd5b61319c86828701612fa3565b9150509250925092565b600080600080604085870312156131bb578182fd5b84356001600160401b03808211156131d1578384fd5b6131dd88838901612e0d565b909650945060208701359150808211156131f5578384fd5b5061320287828801612e0d565b95989497509550505050565b60006020808385031215613220578182fd5b82356001600160401b03811115613235578283fd5b80840185601f820112613246578384fd5b80359150613256612e7383613aec565b8281528381019082850185850284018601891015613272578687fd5b8693505b8484101561329c576132888982612e02565b835260019390930192918501918501613276565b50979650505050505050565b6000602082840312156132b9578081fd5b815161267881613b53565b6000602082840312156132d5578081fd5b5035919050565b6000602082840312156132ed578081fd5b81356001600160401b03811115613302578182fd5b61330e84828501612fa3565b949350505050565b60008060408385031215613328578182fd5b82356001600160401b0381111561333d578283fd5b61334985828601612fa3565b95602094909401359450505050565b6000806000806000806000806000806101408b8d031215613377578384fd5b8a356001600160401b038082111561338d578586fd5b6133998e838f01612fa3565b9b5060208d01359a5060408d01359150808211156133b5578586fd5b6133c18e838f01612ecc565b995060608d01359150808211156133d6578586fd5b6133e28e838f01612e55565b985060808d0135975060a08d0135965060c08d0135915080821115613405578586fd5b6134118e838f01612ecc565b955060e08d0135915080821115613426578485fd5b6134328e838f01612f2a565b94506101008d0135915080821115613448578384fd5b6134548e838f01612ecc565b93506101208d013591508082111561346a578283fd5b506134778d828e01612ecc565b9150509295989b9194979a5092959850565b600080600080600060a086880312156134a0578283fd5b85356001600160401b03808211156134b6578485fd5b6134c289838a01612fa3565b9650602088013591506134d482613b3b565b90945060408701359350606087013590808211156134f0578283fd5b6134fc89838a01612fa3565b93506080880135915080821115613511578283fd5b5061351e88828901612fa3565b9150509295509295909350565b60006020828403121561353c578081fd5b5051919050565b6000815180845260208085019450808401835b8381101561357b5781516001600160a01b031687529582019590820190600101613556565b509495945050505050565b6000815180845260208085019450808401835b8381101561357b578151151587529582019590820190600101613599565b6000815180845260208085019450808401835b8381101561357b578151875295820195908201906001016135ca565b6000815180845260208085019450808401835b8381101561357b57815160ff16875295820195908201906001016135f9565b60008151808452613630816020860160208601613b0b565b601f01601f19169290920160200192915050565b60006bffffffffffffffffffffffff198660601b168252845161366e816014850160208901613b0b565b8451908301613684826014830160208901613b0b565b01601481019390935250506034019392505050565b600082516136ab818460208701613b0b565b9190910192915050565b600083516136c7818460208801613b0b565b9190910191825250602001919050565b600085516136e9818460208a01613b0b565b8083016bffffffffffffffffffffffff198760601b16815285519150613684826014830160208901613b0b565b90565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03841681526060602082018190526000906137a890830185613618565b9050826040830152949350505050565b6040808252810184905260008560608301825b878110156137fb57602083356137e081613b3b565b6001600160a01b0316835292830192909101906001016137cb565b5083810360208501528481526001600160fb1b0385111561381a578283fd5b602085029150818660208301370160200190815295945050505050565b6000602082526126786020830184613543565b60006040825261385d6040830185613543565b828103602084015261386f81856135b7565b95945050505050565b901515815260200190565b60006101608d151583528c60208401528b60408401528060608401526138ab8184018c6135b7565b83810360808501526138bd818c613586565b9150508860a08401528760c084015282810360e08401526138de81886135b7565b8381036101008501526138f181886135e6565b91505082810361012084015261390781866135b7565b83810361014085015261391a81866135b7565b9f9e505050505050505050505050505050565b90815260200190565b93845260ff9290921660208401526040830152606082015260800190565b6000602082526126786020830184613618565b6020808252601490820152736e6f7420706175736564207269676874206e6f7760601b604082015260600190565b602080825260079082015266195e1c1a5c995960ca1b604082015260600190565b6020808252601a908201527f63616e6e6f7420657874656e6420666f7220746f6f206c6f6e67000000000000604082015260600190565b6020808252600c908201526b1d5b985d5d1a1bdc9a5e995960a21b604082015260600190565b60208082526010908201526f706175736564207269676874206e6f7760801b604082015260600190565b6020808252600990820152683737ba1030b236b4b760b91b604082015260600190565b600060c08201905060ff835116825260ff6020840151166020830152604083015160018060a01b03808216604085015280606086015116606085015250506080830151608083015260a083015160a083015292915050565b60ff91909116815260200190565b6040518181016001600160401b0381118282101715613ae457600080fd5b604052919050565b60006001600160401b03821115613b01578081fd5b5060209081020190565b60005b83811015613b26578181015183820152602001613b0e565b83811115613b35576000848401525b50505050565b6001600160a01b0381168114613b5057600080fd5b50565b8015158114613b5057600080fdfea264697066735822122059b85149cf13a2ce7eaeb95101a95dff9fa34316c48d141b3d33ca36e225a28964736f6c63430006060033000000000000000000000000e2516f0f38d9400a8cece5672884de72fbd01ce1000000000000000000000000e34ebff7af293dcddf0443818442bb5d558662dd000000000000000000000000ed5309daac912a52d985c317576a1b3f5020fdc9
Deployed Bytecode
0x6080604052600436106102135760003560e01c80637e16e6e111610118578063a26e1186116100a0578063dca40d9e1161006f578063dca40d9e146105b6578063e4bd7074146105d6578063f75b98ce146105f6578063f851a44014610616578063fa84702e1461062b5761021a565b8063a26e118614610541578063a3f5d8cc14610554578063ce5494bb14610569578063cf54aaa0146105895761021a565b806388aaf0c8116100e757806388aaf0c8146104b75780638a984538146104cc5780639714378c146104e1578063995fac11146105015780639e6371ba146105215761021a565b80637e16e6e1146104425780638456cb591461046f5780638588ccd61461048457806387add440146104975761021a565b80635a67cb871161019b5780636ff968c31161016a5780636ff968c3146103b857806370a08231146103cd57806373bf9651146103ed578063749c5f861461040d57806379599f961461042d5761021a565b80635a67cb87146103435780635c975abb146103565780636304541c1461036b57806365b5a00f146103985761021a565b80633a51913d116101e25780633a51913d146102b75780633f4ba83a146102d75780633fec6b40146102ec5780634e71d92d1461031957806358bc83371461032e5761021a565b80630c4f50391461021f5780631beb7de2146102415780631ea1940e146102615780631ed4276d146102975761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b5061023f61023a36600461320e565b610640565b005b34801561024d57600080fd5b5061023f61025c366004613358565b610acb565b34801561026d57600080fd5b5061028161027c3660046132c4565b610f07565b60405161028e9190613878565b60405180910390f35b3480156102a357600080fd5b506102816102b23660046131a6565b610f1c565b3480156102c357600080fd5b5061023f6102d236600461300b565b611143565b3480156102e357600080fd5b5061023f611221565b3480156102f857600080fd5b5061030c610307366004613316565b6112bb565b60405161028e9190613719565b34801561032557600080fd5b5061023f61134a565b34801561033a57600080fd5b5061030c6113e6565b61023f610351366004613150565b6113eb565b34801561036257600080fd5b506102816116ba565b34801561037757600080fd5b5061038b61038636600461300b565b6116ca565b60405161028e919061392d565b3480156103a457600080fd5b5061038b6103b3366004613054565b6116dc565b3480156103c457600080fd5b5061030c6116f9565b3480156103d957600080fd5b5061038b6103e836600461300b565b611708565b3480156103f957600080fd5b5061023f610408366004613358565b6117a3565b34801561041957600080fd5b506102816104283660046132c4565b611b06565b34801561043957600080fd5b5061038b611bbd565b34801561044e57600080fd5b5061046261045d3660046132dc565b611bc3565b60405161028e9190613a60565b34801561047b57600080fd5b5061023f611c45565b61023f61049236600461308c565b611cfd565b3480156104a357600080fd5b5061023f6104b2366004613489565b6120b0565b3480156104c357600080fd5b5061030c6122d2565b3480156104d857600080fd5b5061030c6122e1565b3480156104ed57600080fd5b5061023f6104fc3660046132c4565b6122f0565b34801561050d57600080fd5b5061028161051c366004613054565b612399565b34801561052d57600080fd5b5061023f61053c36600461300b565b6123b9565b61023f61054f3660046132dc565b612426565b34801561056057600080fd5b5061028161251e565b34801561057557600080fd5b5061023f61058436600461300b565b61252e565b34801561059557600080fd5b506105a96105a436600461300b565b612601565b60405161028e9190613ab8565b3480156105c257600080fd5b506102816105d13660046132c4565b61267f565b3480156105e257600080fd5b506102816105f13660046132c4565b612694565b34801561060257600080fd5b5061038b610611366004613054565b6126fb565b34801561062257600080fd5b5061030c61282d565b34801561063757600080fd5b5061030c61283c565b6000546001600160a01b031633146106735760405162461bcd60e51b815260040161066a90613a3d565b60405180910390fd5b600154600160a01b900460ff1661069c5760405162461bcd60e51b815260040161066a90613967565b600a546001600160a01b031615156106b4600b61284b565b906106d25760405162461bcd60e51b815260040161066a9190613954565b50606081516001600160401b03811180156106ec57600080fd5b50604051908082528060200260200182016040528015610716578160200160208202803683370190505b50905060005b82518110156109e25760006001600160a01b031683828151811061073c57fe5b60200260200101516001600160a01b0316141561082b576000805260076020527f6d5257204ebe7d88fd91ae87941cb2dd9d8062b64ae5a2bd2d28ec40b9fbf6df54825183908390811061078c57fe5b6020908102919091010152600a546040516000916001600160a01b03169047906107b590613716565b60006040518083038185875af1925050503d80600081146107f2576040519150601f19603f3d011682016040523d82523d6000602084013e6107f7565b606091505b5050905080610806600461284b565b906108245760405162461bcd60e51b815260040161066a9190613954565b50506109a4565b600083828151811061083957fe5b60200260200101516001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161086c9190613719565b60206040518083038186803b15801561088457600080fd5b505afa158015610898573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108bc919061352b565b90508015610951578382815181106108d057fe5b6020908102919091010151600a5460405163a9059cbb60e01b81526001600160a01b039283169263a9059cbb9261090e929116908590600401613751565b600060405180830381600087803b15801561092857600080fd5b505af115801561093c573d6000803e3d6000fd5b50505050610948612974565b61095157600080fd5b6007600085848151811061096157fe5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205483838151811061099657fe5b602002602001018181525050505b6000600760008584815181106109b657fe5b6020908102919091018101516001600160a01b031682528101919091526040016000205560010161071c565b50600a54604051631ed4276d60e01b81526001600160a01b0390911690631ed4276d90610a15908590859060040161384a565b602060405180830381600087803b158015610a2f57600080fd5b505af1158015610a43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6791906132a8565b610a71600461284b565b90610a8f5760405162461bcd60e51b815260040161066a9190613954565b507f492fc8b292f2a2a9b328a366b83745f30c024056d12aa118a15966d26a8ce65882604051610abf9190613837565b60405180910390a15050565b600154600160a01b900460ff1615610af55760405162461bcd60e51b815260040161066a90613a13565b600a54600160a01b900460ff16610b0c600161284b565b90610b2a5760405162461bcd60e51b815260040161066a9190613954565b50600a805460ff60a01b19169055610b40612dcd565b610b498b611bc3565b9050806000015160ff1660f1148015610b695750806020015160ff166001145b610b7257600080fd5b610b7f8160a00151611b06565b15610b8a600561284b565b90610ba85760405162461bcd60e51b815260040161066a9190613954565b5060a081015160009081526003602052604090819020805460ff191660011790558101516001600160a01b0316610c39576040808201516001600160a01b03166000908152600760205220546080820151610c089163ffffffff6129a816565b471015610c15600761284b565b90610c335760405162461bcd60e51b815260040161066a9190613954565b50610d47565b6000610c488260400151612601565b905060098160ff161115610c6b5760808201805160081960ff841601600a0a0290525b6040808301516001600160a01b03166000908152600760205220546080830151610c9a9163ffffffff6129a816565b82604001516001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401610cca9190613719565b60206040518083038186803b158015610ce257600080fd5b505afa158015610cf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1a919061352b565b1015610d26600761284b565b90610d445760405162461bcd60e51b815260040161066a9190613954565b50505b610d598b8b8b8b8b8b8b8b8b8b6129c6565b60408101516001600160a01b0316610e0257600081606001516001600160a01b03168260800151604051610d8c90613716565b60006040518083038185875af1925050503d8060008114610dc9576040519150601f19603f3d011682016040523d82523d6000602084013e610dce565b606091505b5050905080610ddd600461284b565b90610dfb5760405162461bcd60e51b815260040161066a9190613954565b5050610ea0565b80604001516001600160a01b031663a9059cbb826060015183608001516040518363ffffffff1660e01b8152600401610e3c929190613751565b600060405180830381600087803b158015610e5657600080fd5b505af1158015610e6a573d6000803e3d6000fd5b50505050610e76612974565b610e80600461284b565b90610e9e5760405162461bcd60e51b815260040161066a9190613954565b505b7f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb816040015182606001518360800151604051610edf9392919061372d565b60405180910390a15050600a805460ff60a01b1916600160a01b179055505050505050505050565b60046020526000908152604090205460ff1681565b6009546000906001600160a01b031615801590610f4357506009546001600160a01b031633145b610f4d600c61284b565b90610f6b5760405162461bcd60e51b815260040161066a9190613954565b50838214610f79600a61284b565b90610f975760405162461bcd60e51b815260040161066a9190613954565b50600960009054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b158015610fe657600080fd5b505afa158015610ffa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101e91906132a8565b611028600d61284b565b906110465760405162461bcd60e51b815260040161066a9190613954565b5060005b848110156110fa576110b384848381811061106157fe5b905060200201356007600089898681811061107857fe5b905060200201602081019061108d919061300b565b6001600160a01b031681526020810191909152604001600020549063ffffffff6129a816565b600760008888858181106110c357fe5b90506020020160208101906110d8919061300b565b6001600160a01b0316815260208101919091526040016000205560010161104a565b507f6a7fbbcddfd518bb8c56b28ac6c7acb0f7ca093ed232eb3306e53d14e469895f8585858560405161113094939291906137b8565b60405180910390a1506001949350505050565b6000546001600160a01b0316331461116d5760405162461bcd60e51b815260040161066a90613a3d565b600154600160a01b900460ff166111965760405162461bcd60e51b815260040161066a90613967565b6001600160a01b03811615156111ac600b61284b565b906111ca5760405162461bcd60e51b815260040161066a9190613954565b50600880546001600160a01b0319166001600160a01b0383161790556040517f204252dfe190ad6ef63db40a490f048b39f661de74628408f13cd0bb2d4c344690611216908390613719565b60405180910390a150565b6000546001600160a01b0316331461124b5760405162461bcd60e51b815260040161066a90613a3d565b600154600160a01b900460ff166112745760405162461bcd60e51b815260040161066a90613967565b6001805460ff60a01b191690556040517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906112b1903390613719565b60405180910390a1565b6000806000806020860151915060408601519250856040815181106112dc57fe5b602001015160f81c60f81b60f81c601b019050600185828486604051600081526020016040526040516113129493929190613936565b6020604051602081039080840390855afa158015611334573d6000803e3d6000fd5b5050506020604051035193505050505b92915050565b600254421061136b5760405162461bcd60e51b815260040161066a90613995565b6001546001600160a01b031633146113955760405162461bcd60e51b815260040161066a906139ed565b600154600080546001600160a01b0319166001600160a01b0392831617908190556040517f0c7ef932d3b91976772937f18d5ef9b39a9930bef486b576c374f047c4b512dc926112b1921690613719565b600081565b600154600160a01b900460ff16156114155760405162461bcd60e51b815260040161066a90613a13565b600a54600160a01b900460ff1661142c600161284b565b9061144a5760405162461bcd60e51b815260040161066a9190613954565b50600a805460ff60a01b1916905582600061146482612601565b90506000826001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016114949190613719565b60206040518083038186803b1580156114ac57600080fd5b505afa1580156114c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e4919061352b565b90508085600960ff8516111561151f5760098460ff1603600a0a818161150657fe5b04905060098460ff1603600a0a838161151b57fe5b0492505b670de0b6b3a7640000811115801561153f5750670de0b6b3a76400008311155b80156115625750670de0b6b3a764000061155f828563ffffffff6129a816565b11155b61156c600361284b565b9061158a5760405162461bcd60e51b815260040161066a9190613954565b506040516323b872dd60e01b81526001600160a01b038616906323b872dd906115bb90339030908c9060040161372d565b600060405180830381600087803b1580156115d557600080fd5b505af11580156115e9573d6000803e3d6000fd5b505050506115f5612974565b6115ff600461284b565b9061161d5760405162461bcd60e51b815260040161066a9190613954565b50866116388361162c8b611708565b9063ffffffff612abd16565b14611643600a61284b565b906116615760405162461bcd60e51b815260040161066a9190613954565b507f2d4b597935f3cd67fb2eebf1db4debc934cee5c7baa7153f980fdbeb2e74084e88878360405161169593929190613784565b60405180910390a15050600a805460ff60a01b1916600160a01b179055505050505050565b600154600160a01b900460ff1681565b60076020526000908152604090205481565b600560209081526000928352604080842090915290825290205481565b6001546001600160a01b031681565b60006001600160a01b03821661171f57504761179e565b6040516370a0823160e01b81526001600160a01b038316906370a082319061174b903090600401613719565b60206040518083038186803b15801561176357600080fd5b505afa158015611777573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061179b919061352b565b90505b919050565b600154600160a01b900460ff16156117cd5760405162461bcd60e51b815260040161066a90613a13565b600a54600160a01b900460ff166117e4600161284b565b906118025760405162461bcd60e51b815260040161066a9190613954565b50600a805460ff60a01b19169055611818612dcd565b6118218b611bc3565b9050806000015160ff1660f31480156118415750806020015160ff166001145b61184a57600080fd5b6118578160a00151611b06565b15611862600561284b565b906118805760405162461bcd60e51b815260040161066a9190613954565b5060a081015160009081526003602052604090819020805460ff191660011790558101516001600160a01b0316611911576040808201516001600160a01b031660009081526007602052205460808201516118e09163ffffffff6129a816565b4710156118ed600761284b565b9061190b5760405162461bcd60e51b815260040161066a9190613954565b50611a1f565b60006119208260400151612601565b905060098160ff1611156119435760808201805160081960ff841601600a0a0290525b6040808301516001600160a01b031660009081526007602052205460808301516119729163ffffffff6129a816565b82604001516001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016119a29190613719565b60206040518083038186803b1580156119ba57600080fd5b505afa1580156119ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f2919061352b565b10156119fe600761284b565b90611a1c5760405162461bcd60e51b815260040161066a9190613954565b50505b611a318b8b8b8b8b8b8b8b8b8b6129c6565b608081015160608201516001600160a01b0390811660009081526005602090815260408083208187015190941683529290522054611a749163ffffffff6129a816565b60608201516001600160a01b03908116600090815260056020908152604080832081870180518616855290835281842095909555608086015194519093168252600790522054611ac99163ffffffff6129a816565b6040918201516001600160a01b03166000908152600760205291909120555050600a805460ff60a01b1916600160a01b1790555050505050505050565b60008181526003602052604081205460ff1615611b255750600161179e565b6009546001600160a01b0316611b3d5750600061179e565b600954604051633a4e2fc360e11b81526001600160a01b039091169063749c5f8690611b6d90859060040161392d565b60206040518083038186803b158015611b8557600080fd5b505afa158015611b99573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061179b91906132a8565b60025481565b611bcb612dcd565b611bd3612dcd565b82600081518110611be057fe5b016020015160f81c8152825183906001908110611bf957fe5b0160209081015160f81c9082015260228301516042840151606285015160828601516001600160a01b039384166040860152929091166060840152608083015260a08201529050919050565b6000546001600160a01b03163314611c6f5760405162461bcd60e51b815260040161066a90613a3d565b600154600160a01b900460ff1615611c995760405162461bcd60e51b815260040161066a90613a13565b6002544210611cba5760405162461bcd60e51b815260040161066a90613995565b6001805460ff60a01b1916600160a01b1790556040517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906112b1903390613719565b600154600160a01b900460ff1615611d275760405162461bcd60e51b815260040161066a90613a13565b600a54600160a01b900460ff16611d3e600161284b565b90611d5c5760405162461bcd60e51b815260040161066a9190613954565b50600a805460ff60a01b19169055604051600090611d9d90611d88908790879087908c90602001613644565b60405160208183030381529060405283612ad2565b9050611da98189612b3e565b6001600160a01b038082166000908152600560209081526040808320938c1683529290522054871115611ddc600861284b565b90611dfa5760405162461bcd60e51b815260040161066a9190613954565b506001600160a01b038816600090815260076020526040902054611e24908863ffffffff612abd16565b6001600160a01b03808a1660008181526007602090815260408083209590955592851681526005835283812091815291522054611e67908863ffffffff612abd16565b6001600160a01b038083166000908152600560209081526040808320938d16808452939091529020919091553490611eb057611ea9818963ffffffff6129a816565b9050611feb565b6040516370a0823160e01b815288906001600160a01b038b16906370a0823190611ede903090600401613719565b60206040518083038186803b158015611ef657600080fd5b505afa158015611f0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2e919061352b565b1015611f3a600761284b565b90611f585760405162461bcd60e51b815260040161066a9190613954565b5060405163a9059cbb60e01b81526001600160a01b038a169063a9059cbb90611f879089908c90600401613751565b600060405180830381600087803b158015611fa157600080fd5b505af1158015611fb5573d6000803e3d6000fd5b50505050611fc1612974565b611fcb600461284b565b90611fe95760405162461bcd60e51b815260040161066a9190613954565b505b6000611ff98883888a612c86565b6001600160a01b038085166000908152600560209081526040808320938d1683529290522054909150612032908263ffffffff6129a816565b6001600160a01b038085166000908152600560209081526040808320938d168352928152828220939093556007909252902054612075908263ffffffff6129a816565b6001600160a01b039098166000908152600760205260409020979097555050600a805460ff60a01b1916600160a01b17905550505050505050565b600154600160a01b900460ff16156120da5760405162461bcd60e51b815260040161066a90613a13565b600a54600160a01b900460ff166120f1600161284b565b9061210f5760405162461bcd60e51b815260040161066a9190613954565b50600a805460ff60a01b191690556040516000906121509061213b9088908890869089906020016136d7565b60405160208183030381529060405284612ad2565b905061215c8186612b3e565b6001600160a01b0380821660009081526005602090815260408083209389168352929052205484111561218f600861284b565b906121ad5760405162461bcd60e51b815260040161066a9190613954565b506001600160a01b038082166000908152600560209081526040808320938916835292905220546121e4908563ffffffff612abd16565b6001600160a01b038083166000908152600560209081526040808320938a168352928152828220939093556007909252902054612227908563ffffffff612abd16565b6001600160a01b03861660008181526007602052604090209190915584901561227b57600061225587612601565b905060098160ff1611156122795760098160ff1603600a0a868161227557fe5b0491505b505b7f2d4b597935f3cd67fb2eebf1db4debc934cee5c7baa7153f980fdbeb2e74084e8688836040516122ae93929190613784565b60405180910390a15050600a805460ff60a01b1916600160a01b1790555050505050565b600a546001600160a01b031681565b6008546001600160a01b031681565b6000546001600160a01b0316331461231a5760405162461bcd60e51b815260040161066a90613a3d565b600254421061233b5760405162461bcd60e51b815260040161066a90613995565b61016e811061235c5760405162461bcd60e51b815260040161066a906139b6565b600280546201518083020190556040517f02ef6561d311451dadc920679eb21192a61d96ee8ead94241b8ff073029ca6e89061121690839061392d565b600660209081526000928352604080842090915290825290205460ff1681565b6000546001600160a01b031633146123e35760405162461bcd60e51b815260040161066a90613a3d565b60025442106124045760405162461bcd60e51b815260040161066a90613995565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600154600160a01b900460ff16156124505760405162461bcd60e51b815260040161066a90613a13565b600a54600160a01b900460ff16612467600161284b565b906124855760405162461bcd60e51b815260040161066a9190613954565b50600a805460ff60a01b191690556b033b2e3c9fd0803ce80000004711156124ad600261284b565b906124cb5760405162461bcd60e51b815260040161066a9190613954565b507f2d4b597935f3cd67fb2eebf1db4debc934cee5c7baa7153f980fdbeb2e74084e6000823460405161250093929190613784565b60405180910390a150600a805460ff60a01b1916600160a01b179055565b600a54600160a01b900460ff1681565b6000546001600160a01b031633146125585760405162461bcd60e51b815260040161066a90613a3d565b600154600160a01b900460ff166125815760405162461bcd60e51b815260040161066a90613967565b6001600160a01b0381161515612597600b61284b565b906125b55760405162461bcd60e51b815260040161066a9190613954565b50600a80546001600160a01b0319166001600160a01b0383161790556040517fd58a618a39de682696ea37dd9a6bf9c793afa426fa1438e75c3966e3b541e45a90611216908390613719565b600080829050806001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561264057600080fd5b505afa158015612654573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612678919061352b565b9392505050565b60036020526000908152604090205460ff1681565b60008181526004602052604081205460ff16156126b35750600161179e565b6009546001600160a01b03166126cb5750600061179e565b60095460405163392f5c1d60e21b81526001600160a01b039091169063e4bd707490611b6d90859060040161392d565b6009546000906001600160a01b03161580159061273e57506001600160a01b0380831660009081526006602090815260408083209387168352929052205460ff16155b1561280057600954604051637badcc6760e11b81526127f9916001600160a01b03169063f75b98ce90612777908790879060040161376a565b60206040518083038186803b15801561278f57600080fd5b505afa1580156127a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c7919061352b565b6001600160a01b038085166000908152600560209081526040808320938916835292905220549063ffffffff6129a816565b9050611344565b506001600160a01b0380821660009081526005602090815260408083209386168352929052205492915050565b6000546001600160a01b031681565b6009546001600160a01b031681565b6060600082600d81111561285b57fe5b60408051600a808252818301909252919250906060908260208201818036833701905050905060005b60ff8416156128d2578151600a60ff959095168581049560018401939106916030830160f81b91859181106128b557fe5b60200101906001600160f81b031916908160001a90535050612884565b6060816001016001600160401b03811180156128ed57600080fd5b506040519080825280601f01601f191660200182016040528015612918576020820181803683370190505b50905060005b82811161296957838184038151811061293357fe5b602001015160f81c60f81b82828151811061294a57fe5b60200101906001600160f81b031916908160001a90535060010161291e565b509695505050505050565b6000803d801561298b5760208114612994576129a0565b600191506129a0565b60206000803e60005191505b501515905090565b60008282018381108015906129bd5750828110155b61267857600080fd5b60008a8a6040516020016129db9291906136b5565b60408051601f19818403018152908290528051602090910120600854637b2e908b60e11b83529092506001600160a01b03169063f65d211690612a379060019085908f908f908f908f908f908f908f908f908f90600401613883565b60206040518083038186803b158015612a4f57600080fd5b505afa158015612a63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a8791906132a8565b612a91600661284b565b90612aaf5760405162461bcd60e51b815260040161066a9190613954565b505050505050505050505050565b600082821115612acc57600080fd5b50900390565b81516020830120600090612ae581612694565b15612af0600561284b565b90612b0e5760405162461bcd60e51b815260040161066a9190613954565b506000612b1b84836112bb565b600092835260046020526040909220805460ff1916600117905550905092915050565b6009546001600160a01b031615801590612b7e57506001600160a01b0380831660009081526006602090815260408083209385168352929052205460ff16155b15612c8257600954604051637badcc6760e11b8152612c39916001600160a01b03169063f75b98ce90612bb7908590879060040161376a565b60206040518083038186803b158015612bcf57600080fd5b505afa158015612be3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c07919061352b565b6001600160a01b038085166000908152600560209081526040808320938716835292905220549063ffffffff6129a816565b6001600160a01b038084166000818152600560209081526040808320948716808452948252808320959095559181526006825283812092815291905220805460ff191660011790555b5050565b600080612c9286611708565b90506001600160a01b038616612cb557612cb2813463ffffffff612abd16565b90505b84471015612cc3600761284b565b90612ce15760405162461bcd60e51b815260040161066a9190613954565b5060006060846001600160a01b03168787604051612cff9190613699565b60006040518083038185875af1925050503d8060008114612d3c576040519150601f19603f3d011682016040523d82523d6000602084013e612d41565b606091505b509150915081612d5057600080fd5b60008082806020019051810190612d679190613027565b91509150896001600160a01b0316826001600160a01b0316148015612d97575080612d958661162c8d611708565b145b612da1600961284b565b90612dbf5760405162461bcd60e51b815260040161066a9190613954565b509998505050505050505050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b803561134481613b3b565b60008083601f840112612e1e578182fd5b5081356001600160401b03811115612e34578182fd5b6020830191508360208083028501011115612e4e57600080fd5b9250929050565b600082601f830112612e65578081fd5b8135612e78612e7382613aec565b613ac6565b818152915060208083019084810181840286018201871015612e9957600080fd5b60005b84811015612ec1578135612eaf81613b53565b84529282019290820190600101612e9c565b505050505092915050565b600082601f830112612edc578081fd5b8135612eea612e7382613aec565b818152915060208083019084810181840286018201871015612f0b57600080fd5b60005b84811015612ec157813584529282019290820190600101612f0e565b600082601f830112612f3a578081fd5b8135612f48612e7382613aec565b818152915060208083019084810181840286018201871015612f6957600080fd5b6000805b85811015612f9757823560ff81168114612f85578283fd5b85529383019391830191600101612f6d565b50505050505092915050565b600082601f830112612fb3578081fd5b81356001600160401b03811115612fc8578182fd5b612fdb601f8201601f1916602001613ac6565b9150808252836020828501011115612ff257600080fd5b8060208401602084013760009082016020015292915050565b60006020828403121561301c578081fd5b813561267881613b3b565b60008060408385031215613039578081fd5b825161304481613b3b565b6020939093015192949293505050565b60008060408385031215613066578182fd5b823561307181613b3b565b9150602083013561308181613b3b565b809150509250929050565b600080600080600080600060e0888a0312156130a6578283fd5b87356130b181613b3b565b96506020880135955060408801356130c881613b3b565b94506130d78960608a01612e02565b935060808801356001600160401b03808211156130f2578485fd5b6130fe8b838c01612fa3565b945060a08a0135915080821115613113578384fd5b61311f8b838c01612fa3565b935060c08a0135915080821115613134578283fd5b506131418a828b01612fa3565b91505092959891949750929550565b600080600060608486031215613164578081fd5b833561316f81613b3b565b92506020840135915060408401356001600160401b03811115613190578182fd5b61319c86828701612fa3565b9150509250925092565b600080600080604085870312156131bb578182fd5b84356001600160401b03808211156131d1578384fd5b6131dd88838901612e0d565b909650945060208701359150808211156131f5578384fd5b5061320287828801612e0d565b95989497509550505050565b60006020808385031215613220578182fd5b82356001600160401b03811115613235578283fd5b80840185601f820112613246578384fd5b80359150613256612e7383613aec565b8281528381019082850185850284018601891015613272578687fd5b8693505b8484101561329c576132888982612e02565b835260019390930192918501918501613276565b50979650505050505050565b6000602082840312156132b9578081fd5b815161267881613b53565b6000602082840312156132d5578081fd5b5035919050565b6000602082840312156132ed578081fd5b81356001600160401b03811115613302578182fd5b61330e84828501612fa3565b949350505050565b60008060408385031215613328578182fd5b82356001600160401b0381111561333d578283fd5b61334985828601612fa3565b95602094909401359450505050565b6000806000806000806000806000806101408b8d031215613377578384fd5b8a356001600160401b038082111561338d578586fd5b6133998e838f01612fa3565b9b5060208d01359a5060408d01359150808211156133b5578586fd5b6133c18e838f01612ecc565b995060608d01359150808211156133d6578586fd5b6133e28e838f01612e55565b985060808d0135975060a08d0135965060c08d0135915080821115613405578586fd5b6134118e838f01612ecc565b955060e08d0135915080821115613426578485fd5b6134328e838f01612f2a565b94506101008d0135915080821115613448578384fd5b6134548e838f01612ecc565b93506101208d013591508082111561346a578283fd5b506134778d828e01612ecc565b9150509295989b9194979a5092959850565b600080600080600060a086880312156134a0578283fd5b85356001600160401b03808211156134b6578485fd5b6134c289838a01612fa3565b9650602088013591506134d482613b3b565b90945060408701359350606087013590808211156134f0578283fd5b6134fc89838a01612fa3565b93506080880135915080821115613511578283fd5b5061351e88828901612fa3565b9150509295509295909350565b60006020828403121561353c578081fd5b5051919050565b6000815180845260208085019450808401835b8381101561357b5781516001600160a01b031687529582019590820190600101613556565b509495945050505050565b6000815180845260208085019450808401835b8381101561357b578151151587529582019590820190600101613599565b6000815180845260208085019450808401835b8381101561357b578151875295820195908201906001016135ca565b6000815180845260208085019450808401835b8381101561357b57815160ff16875295820195908201906001016135f9565b60008151808452613630816020860160208601613b0b565b601f01601f19169290920160200192915050565b60006bffffffffffffffffffffffff198660601b168252845161366e816014850160208901613b0b565b8451908301613684826014830160208901613b0b565b01601481019390935250506034019392505050565b600082516136ab818460208701613b0b565b9190910192915050565b600083516136c7818460208801613b0b565b9190910191825250602001919050565b600085516136e9818460208a01613b0b565b8083016bffffffffffffffffffffffff198760601b16815285519150613684826014830160208901613b0b565b90565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03841681526060602082018190526000906137a890830185613618565b9050826040830152949350505050565b6040808252810184905260008560608301825b878110156137fb57602083356137e081613b3b565b6001600160a01b0316835292830192909101906001016137cb565b5083810360208501528481526001600160fb1b0385111561381a578283fd5b602085029150818660208301370160200190815295945050505050565b6000602082526126786020830184613543565b60006040825261385d6040830185613543565b828103602084015261386f81856135b7565b95945050505050565b901515815260200190565b60006101608d151583528c60208401528b60408401528060608401526138ab8184018c6135b7565b83810360808501526138bd818c613586565b9150508860a08401528760c084015282810360e08401526138de81886135b7565b8381036101008501526138f181886135e6565b91505082810361012084015261390781866135b7565b83810361014085015261391a81866135b7565b9f9e505050505050505050505050505050565b90815260200190565b93845260ff9290921660208401526040830152606082015260800190565b6000602082526126786020830184613618565b6020808252601490820152736e6f7420706175736564207269676874206e6f7760601b604082015260600190565b602080825260079082015266195e1c1a5c995960ca1b604082015260600190565b6020808252601a908201527f63616e6e6f7420657874656e6420666f7220746f6f206c6f6e67000000000000604082015260600190565b6020808252600c908201526b1d5b985d5d1a1bdc9a5e995960a21b604082015260600190565b60208082526010908201526f706175736564207269676874206e6f7760801b604082015260600190565b6020808252600990820152683737ba1030b236b4b760b91b604082015260600190565b600060c08201905060ff835116825260ff6020840151166020830152604083015160018060a01b03808216604085015280606086015116606085015250506080830151608083015260a083015160a083015292915050565b60ff91909116815260200190565b6040518181016001600160401b0381118282101715613ae457600080fd5b604052919050565b60006001600160401b03821115613b01578081fd5b5060209081020190565b60005b83811015613b26578181015183820152602001613b0e565b83811115613b35576000848401525b50505050565b6001600160a01b0381168114613b5057600080fd5b50565b8015158114613b5057600080fdfea264697066735822122059b85149cf13a2ce7eaeb95101a95dff9fa34316c48d141b3d33ca36e225a28964736f6c63430006060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000e2516f0f38d9400a8cece5672884de72fbd01ce1000000000000000000000000e34ebff7af293dcddf0443818442bb5d558662dd000000000000000000000000ed5309daac912a52d985c317576a1b3f5020fdc9
-----Decoded View---------------
Arg [0] : admin (address): 0xE2516f0F38d9400a8ceCe5672884De72FBD01cE1
Arg [1] : incognitoProxyAddress (address): 0xE34ebFf7aF293dcdDf0443818442BB5d558662Dd
Arg [2] : _prevVault (address): 0xED5309daac912a52d985c317576a1b3f5020FDc9
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000e2516f0f38d9400a8cece5672884de72fbd01ce1
Arg [1] : 000000000000000000000000e34ebff7af293dcddf0443818442bb5d558662dd
Arg [2] : 000000000000000000000000ed5309daac912a52d985c317576a1b3f5020fdc9
Deployed Bytecode Sourcemap
1890:27517:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;24515:1068:2;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;24515:1068:2;;;;;;;;:::i;:::-;;11256:1906;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;11256:1906:2;;;;;;;;:::i;2089:43::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;2089:43:2;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;25915:533;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;25915:533:2;;;;;;;;:::i;26824:278::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;26824:278:2;;;;;;;;:::i;1432:111:1:-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;1432:111:1;;;:::i;16021:347:2:-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;16021:347:2;;;;;;;;:::i;:::-;;;;;;;;934:156:1;;5:9:-1;2:2;;;27:1;24;17:12;2:2;934:156:1;;;:::i;1957:78:2:-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;1957:78:2;;;:::i;6563:1019::-;;;;;;;;;:::i;110:18:1:-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;110:18:1;;;:::i;2313:56:2:-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;2313:56:2;;;;;;;;:::i;:::-;;;;;;;;2172:68;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;2172:68:2;;;;;;;;:::i;80:24:1:-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;80:24:1;;;:::i;29196:209:2:-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;29196:209:2;;;;;;;;:::i;14241:1699::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;14241:1699:2;;;;;;;;:::i;7999:262::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;7999:262:2;;;;;;;;:::i;134:18:1:-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;134:18:1;;;:::i;8424:722:2:-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;8424:722:2;;;;;;;;:::i;:::-;;;;;;;;1304:122:1;;5:9:-1;2:2;;;27:1;24;17:12;2:2;1304:122:1;;;:::i;19579:1726:2:-;;;;;;;;;:::i;17678:1121::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;17678:1121:2;;;;;;;;:::i;2442:31::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;2442:31:2;;;:::i;2375:26::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;2375:26:2;;;:::i;1096:202:1:-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;1096:202:1;;;;;;;;:::i;2246:61:2:-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;2246:61:2;;;;;;;;:::i;823:105:1:-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;823:105:1;;;;;;;;:::i;5728:250:2:-;;;;;;;;;:::i;2479:29::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;2479:29:2;;;:::i;24058:216::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;24058:216:2;;;;;;;;:::i;28958:149::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;28958:149:2;;;;;;;;:::i;:::-;;;;;;;;2041:42;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;2041:42:2;;;;;;;;:::i;16784:265::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;16784:265:2;;;;;;;;:::i;23231:350::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;23231:350:2;;;;;;;;:::i;54:20:1:-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;54:20:1;;;:::i;2407:29:2:-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;2407:29:2;;;:::i;24515:1068::-;492:5:1;;-1:-1:-1;;;;;492:5:1;478:10;:19;470:41;;;;-1:-1:-1;;;470:41:1;;;;;;;;;;;;;;;;;573:6:::1;::::0;-1:-1:-1;;;573:6:1;::::1;;;565:39;;;;-1:-1:-1::0;;;565:39:1::1;;;;;;;;;24604:8:2::2;::::0;-1:-1:-1;;;;;24604:8:2::2;:22:::0;::::2;24628:32;24642:17;24628:13;:32::i;:::-;24596:65;;;;;-1:-1:-1::0;;;24596:65:2::2;;;;;;;;;;;24671:21;24706:6;:13;-1:-1:-1::0;;;;;24695:25:2::2;;5:9:-1;2:2;;;27:1;24::::0;17:12:::2;2:2;24695:25:2;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;::::0;-1:-1;24695:25:2::2;-1:-1:-1::0;24671:49:2;-1:-1:-1;24735:6:2::2;24730:701;24751:6;:13;24747:1;:17;24730:701;;;1993:42;-1:-1:-1::0;;;;;24789:22:2::2;:6;24796:1;24789:9;;;;;;;;;;;;;;-1:-1:-1::0;;;;;24789:22:2::2;;24785:583;;;24844:35;::::0;;:24:::2;:35;::::0;;;24831:10;;:7;;24839:1;;24831:10;::::2;;;;;;::::0;;::::2;::::0;;;;;:48;24916:8:::2;::::0;:47:::2;::::0;24898:12:::2;::::0;-1:-1:-1;;;;;24916:8:2::2;::::0;24937:21:::2;::::0;24916:47:::2;::::0;::::2;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;24897:66:2;;;24989:7;24998:39;25012:24;24998:13;:39::i;:::-;24981:57;;;;;-1:-1:-1::0;;;24981:57:2::2;;;;;;;;;;;24785:583;;;;25077:8;25095:6;25102:1;25095:9;;;;;;;;;;;;;;-1:-1:-1::0;;;;;25088:27:2::2;;25124:4;25088:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::2;2:2;25088:42:2;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;25088:42:2;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;25088:42:2;;;;;;;;;25077:53:::0;-1:-1:-1;25152:7:2;;25148:140:::2;;25190:6;25197:1;25190:9;;;;;;;;;::::0;;::::2;::::0;;;;;;25210:8:::2;::::0;25183:41:::2;::::0;-1:-1:-1;;;25183:41:2;;-1:-1:-1;;;;;25183:26:2;;::::2;::::0;::::2;::::0;:41:::2;::::0;25210:8;::::2;::::0;25220:3;;25183:41:::2;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::2;2:2;25183:41:2;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;25183:41:2;;;;25254:14;:12;:14::i;:::-;25246:23;;12:1:-1;9::::0;2:12:::2;25246:23:2;25318:24;:35;25343:6;25350:1;25343:9;;;;;;;;;;;;;;-1:-1:-1::0;;;;;25318:35:2::2;-1:-1:-1::0;;;;;25318:35:2::2;;;;;;;;;;;;;25305:7;25313:1;25305:10;;;;;;;;;;;;;:48;;;::::0;::::2;24785:583;;25419:1;25381:24;:35;25406:6;25413:1;25406:9;;;;;;;;;::::0;;::::2;::::0;;;;;;;-1:-1:-1;;;;;25381:35:2::2;::::0;;;::::2;::::0;;;;;;-1:-1:-1;25381:35:2;:39;24766:3:::2;;24730:701;;;-1:-1:-1::0;25461:8:2::2;::::0;25448:52:::2;::::0;-1:-1:-1;;;25448:52:2;;-1:-1:-1;;;;;25461:8:2;;::::2;::::0;25448:35:::2;::::0;:52:::2;::::0;25484:6;;25492:7;;25448:52:::2;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::2;2:2;25448:52:2;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;25448:52:2;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;25448:52:2;;;;;;;;;25502:39;25516:24;25502:13;:39::i;:::-;25440:102;;;;;-1:-1:-1::0;;;25440:102:2::2;;;;;;;;;;;25558:18;25569:6;25558:18;;;;;;;;;;;;;;;614:1:1;24515:1068:2::0;:::o;11256:1906::-;670:6:1;;-1:-1:-1;;;670:6:1;;;;669:7;661:36;;;;-1:-1:-1;;;661:36:1;;;;;;;;;4360:10:2::1;::::0;-1:-1:-1;;;4360:10:2;::::1;;;4372:35;4386:20;4372:13;:35::i;:::-;4352:56;;;;;-1:-1:-1::0;;;4352:56:2::1;;;;;;;;;;-1:-1:-1::0;4483:10:2::1;:18:::0;;-1:-1:-1;;;;4483:18:2::1;::::0;;11623:24:::2;;:::i;:::-;11650:19;11664:4;11650:13;:19::i;:::-;11623:46;;11687:4;:9;;;:16;;11700:3;11687:16;:35;;;;;11707:4;:10;;;:15;;11721:1;11707:15;11687:35;11679:44;;12:1:-1;9::::0;2:12:::2;11679:44:2;11795:22;11808:4;:8;;;11795:12;:22::i;:::-;11794:23;11819:34;11833:19;11819:13;:34::i;:::-;11786:68;;;;;-1:-1:-1::0;;;11786:68:2::2;;;;;;;;;;-1:-1:-1::0;11875:8:2::2;::::0;::::2;::::0;11864:20:::2;::::0;;;:10:::2;:20;::::0;;;;;;:27;;-1:-1:-1;;11864:27:2::2;11887:4;11864:27;::::0;;11944:10;::::2;::::0;-1:-1:-1;;;;;11944:23:2::2;11940:543;;12061:10;::::0;;::::2;::::0;-1:-1:-1;;;;;12036:36:2::2;;::::0;;;:24:::2;:36;::::0;;;12016:11:::2;::::0;::::2;::::0;:57:::2;::::0;::::2;:19;:57;:::i;:::-;11991:21;:82;;12075:38;12089:23;12075:13;:38::i;:::-;11983:131;;;;;-1:-1:-1::0;;;11983:131:2::2;;;;;;;;;;;11940:543;;;12145:14;12162:23;12174:4;:10;;;12162:11;:23::i;:::-;12145:40;;12214:1;12203:8;:12;;;12199:107;;;12249:11;::::0;::::2;::::0;;-1:-1:-1;;12271:14:2::2;::::0;::::2;:18:::0;12264:2:::2;:26;12249:42;12235:56:::0;;12199:107:::2;12419:10;::::0;;::::2;::::0;-1:-1:-1;;;;;12394:36:2::2;;::::0;;;:24:::2;:36;::::0;;;12374:11:::2;::::0;::::2;::::0;:57:::2;::::0;::::2;:19;:57;:::i;:::-;12334:4;:10;;;-1:-1:-1::0;;;;;12327:28:2::2;;12364:4;12327:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::2;2:2;12327:43:2;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;12327:43:2;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;12327:43:2;;;;;;;;;:104;;12433:38;12447:23;12433:13;:38::i;:::-;12319:153;;;;;-1:-1:-1::0;;;12319:153:2::2;;;;;;;;;;;11940:543;;12493:233;12517:4;12535:7;12556:9;12579:15;12608:9;12631:7;12652;12673:5;12692;12711;12493:10;:233::i;:::-;12768:10;::::0;::::2;::::0;-1:-1:-1;;;;;12768:23:2::2;12764:335;;12806:12;12825:4;:7;;;-1:-1:-1::0;;;;;12825:12:2::2;12845:4;:11;;;12825:36;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;12805:56:2;;;12881:7;12890:39;12904:24;12890:13;:39::i;:::-;12873:57;;;;;-1:-1:-1::0;;;12873:57:2::2;;;;;;;;;;;12764:335;;;;12968:4;:10;;;-1:-1:-1::0;;;;;12961:27:2::2;;12989:4;:7;;;12998:4;:11;;;12961:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::2;2:2;12961:49:2;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;12961:49:2;;;;13032:14;:12;:14::i;:::-;13048:39;13062:24;13048:13;:39::i;:::-;13024:64;;;;;-1:-1:-1::0;;;13024:64:2::2;;;;;;;;;;;12764:335;13113:42;13122:4;:10;;;13134:4;:7;;;13143:4;:11;;;13113:42;;;;;;;;;;;;;;;;;-1:-1:-1::0;;4656:10:2::1;:17:::0;;-1:-1:-1;;;;4656:17:2::1;-1:-1:-1::0;;;4656:17:2::1;::::0;;-1:-1:-1;;;;;;;;;11256:1906:2:o;2089:43::-;;;;;;;;;;;;;;;:::o;25915:533::-;3754:9;;26019:4;;-1:-1:-1;;;;;3754:9:2;3746:34;;;;:70;;-1:-1:-1;3806:9:2;;-1:-1:-1;;;;;3806:9:2;3784:10;:32;3746:70;3818:35;3832:20;3818:13;:35::i;:::-;3738:116;;;;;-1:-1:-1;;;3738:116:2;;;;;;;;;;-1:-1:-1;26043:31:2;;::::1;26077;26091:16;26077:13;:31::i;:::-;26035:74;;;;;-1:-1:-1::0;;;26035:74:2::1;;;;;;;;;;;26140:9;;;;;;;;;-1:-1:-1::0;;;;;26140:9:2::1;-1:-1:-1::0;;;;;26127:30:2::1;;:32;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26127:32:2;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26127:32:2;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;26127:32:2;;;;;;;;;26161:41;26175:26;26161:13;:41::i;:::-;26119:84;;;;;-1:-1:-1::0;;;26119:84:2::1;;;;;;;;;;-1:-1:-1::0;26218:6:2::1;26213:159;26230:17:::0;;::::1;26213:159;;;26306:55;26350:7;;26358:1;26350:10;;;;;;;;;;;;;26306:24;:35;26331:6;;26338:1;26331:9;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;26306:35:2::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;26306:35:2;;;:55:::1;:43;:55;:::i;:::-;26268:24;:35;26293:6;;26300:1;26293:9;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;26268:35:2::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;26268:35:2;:93;26249:3:::1;;26213:159;;;;26386:33;26403:6;;26411:7;;26386:33;;;;;;;;;;;;;;;;;;-1:-1:-1::0;26437:4:2::1;25915:533:::0;;;;;;:::o;26824:278::-;492:5:1;;-1:-1:-1;;;;;492:5:1;478:10;:19;470:41;;;;-1:-1:-1;;;470:41:1;;;;;;;;;573:6:::1;::::0;-1:-1:-1;;;573:6:1;::::1;;;565:39;;;;-1:-1:-1::0;;;565:39:1::1;;;;;;;;;-1:-1:-1::0;;;;;26925:31:2;::::2;::::0;::::2;26958:32;26972:17;26958:13;:32::i;:::-;26917:74;;;;;-1:-1:-1::0;;;26917:74:2::2;;;;;;;;;;-1:-1:-1::0;27001:9:2::2;:40:::0;;-1:-1:-1;;;;;;27001:40:2::2;-1:-1:-1::0;;;;;27001:40:2;::::2;;::::0;;27056:39:::2;::::0;::::2;::::0;::::2;::::0;27001:40;;27056:39:::2;;;;;;;;;;26824:278:::0;:::o;1432:111:1:-;492:5;;-1:-1:-1;;;;;492:5:1;478:10;:19;470:41;;;;-1:-1:-1;;;470:41:1;;;;;;;;;573:6:::1;::::0;-1:-1:-1;;;573:6:1;::::1;;;565:39;;;;-1:-1:-1::0;;;565:39:1::1;;;;;;;;;1487:6:::2;:14:::0;;-1:-1:-1;;;;1487:14:1::2;::::0;;1516:20:::2;::::0;::::2;::::0;::::2;::::0;1525:10:::2;::::0;1516:20:::2;;;;;;;;;;1432:111::o:0;16021:347:2:-;16101:7;16120:9;16139;16158:7;16223:4;16213:8;16209:19;16203:26;16198:31;;16267:4;16257:8;16253:19;16247:26;16242:31;;16302:8;16311:2;16302:12;;;;;;;;;;;;;;;;16296:19;;16318:2;16296:24;16292:28;;16337:24;16347:4;16353:1;16356;16359;16337:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16337:24:2;;;;;;;;16330:31;;;;;16021:347;;;;;:::o;934:156:1:-;781:6;;763:15;:24;755:44;;;;-1:-1:-1;;;755:44:1;;;;;;;;;1003:9:::1;::::0;-1:-1:-1;;;;;1003:9:1::1;989:10;:23;981:48;;;;-1:-1:-1::0;;;981:48:1::1;;;;;;;;;1047:9;::::0;::::1;1039:17:::0;;-1:-1:-1;;;;;;1039:17:1::1;-1:-1:-1::0;;;;;1047:9:1;;::::1;1039:17;::::0;;;;1071:12:::1;::::0;::::1;::::0;::::1;::::0;1077:5:::1;::::0;1071:12:::1;;1957:78:2::0;1993:42;1957:78;:::o;6563:1019::-;670:6:1;;-1:-1:-1;;;670:6:1;;;;669:7;661:36;;;;-1:-1:-1;;;661:36:1;;;;;;;;;4360:10:2::1;::::0;-1:-1:-1;;;4360:10:2;::::1;;;4372:35;4386:20;4372:13;:35::i;:::-;4352:56;;;;;-1:-1:-1::0;;;4352:56:2::1;;;;;;;;;;-1:-1:-1::0;4483:10:2::1;:18:::0;;-1:-1:-1;;;;4483:18:2::1;::::0;;6726:5;4496::::1;6759:27:::2;6726:5:::0;6759:11:::2;:27::i;:::-;6742:44;;6796:17;6816:14;-1:-1:-1::0;;;;;6816:24:2::2;;6849:4;6816:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::2;2:2;6816:39:2;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;6816:39:2;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;6816:39:2;;;;;;;;;6796:59:::0;-1:-1:-1;6796:59:2;6927:6;6958:1:::2;6947:12;::::0;::::2;;6943:169;;;7026:1;7014:8;7009:14;;:18;7002:2;:26;6988:10;:41;;;;;;6975:54;;7098:1;7086:8;7081:14;;:18;7074:2;:26;7058:12;:43;;;;;;7043:58;;6943:169;7143:8;7129:10;:22;;:50;;;;;7171:8;7155:12;:24;;7129:50;:98;;;;-1:-1:-1::0;7219:8:2::2;7183:32;:10:::0;7202:12;7183:32:::2;:18;:32;:::i;:::-;:44;;7129:98;7229:37;7243:22;7229:13;:37::i;:::-;7121:146;;;;;-1:-1:-1::0;;;7121:146:2::2;;;;;;;;;;-1:-1:-1::0;7277:62:2::2;::::0;-1:-1:-1;;;7277:62:2;;-1:-1:-1;;;;;7277:27:2;::::2;::::0;::::2;::::0;:62:::2;::::0;7305:10:::2;::::0;7325:4:::2;::::0;7332:6;;7277:62:::2;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::2;2:2;7277:62:2;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;7277:62:2;;;;7357:14;:12;:14::i;:::-;7373:39;7387:24;7373:13;:39::i;:::-;7349:64;;;;;-1:-1:-1::0;;;7349:64:2::2;;;;;;;;;;;7475:6;7431:40;7456:14;7431:16;7441:5;7431:9;:16::i;:::-;:24:::0;:40:::2;:24;:40;:::i;:::-;:50;7483:31;7497:16;7483:13;:31::i;:::-;7423:92;;;;;-1:-1:-1::0;;;7423:92:2::2;;;;;;;;;;;7531:44;7539:5;7546:16;7564:10;7531:44;;;;;;;;;;;;;;;;;-1:-1:-1::0;;4656:10:2::1;:17:::0;;-1:-1:-1;;;;4656:17:2::1;-1:-1:-1::0;;;4656:17:2::1;::::0;;-1:-1:-1;;;;;;6563:1019:2:o;110:18:1:-;;;-1:-1:-1;;;110:18:1;;;;;:::o;2313:56:2:-;;;;;;;;;;;;;:::o;2172:68::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;80:24:1:-;;;-1:-1:-1;;;;;80:24:1;;:::o;29196:209:2:-;29251:4;-1:-1:-1;;;;;29271:18:2;;29267:77;;-1:-1:-1;29312:21:2;29305:28;;29267:77;29360:38;;-1:-1:-1;;;29360:38:2;;-1:-1:-1;;;;;29360:23:2;;;;;:38;;29392:4;;29360:38;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29360:38:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29360:38:2;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;29360:38:2;;;;;;;;;29353:45;;29196:209;;;;:::o;14241:1699::-;670:6:1;;-1:-1:-1;;;670:6:1;;;;669:7;661:36;;;;-1:-1:-1;;;661:36:1;;;;;;;;;4360:10:2::1;::::0;-1:-1:-1;;;4360:10:2;::::1;;;4372:35;4386:20;4372:13;:35::i;:::-;4352:56;;;;;-1:-1:-1::0;;;4352:56:2::1;;;;;;;;;;-1:-1:-1::0;4483:10:2::1;:18:::0;;-1:-1:-1;;;;4483:18:2::1;::::0;;14615:24:::2;;:::i;:::-;14642:19;14656:4;14642:13;:19::i;:::-;14615:46;;14679:4;:9;;;:16;;14692:3;14679:16;:35;;;;;14699:4;:10;;;:15;;14713:1;14699:15;14679:35;14671:44;;12:1:-1;9::::0;2:12:::2;14671:44:2;14787:22;14800:4;:8;;;14787:12;:22::i;:::-;14786:23;14811:34;14825:19;14811:13;:34::i;:::-;14778:68;;;;;-1:-1:-1::0;;;14778:68:2::2;;;;;;;;;;-1:-1:-1::0;14867:8:2::2;::::0;::::2;::::0;14856:20:::2;::::0;;;:10:::2;:20;::::0;;;;;;:27;;-1:-1:-1;;14856:27:2::2;14879:4;14856:27;::::0;;14936:10;::::2;::::0;-1:-1:-1;;;;;14936:23:2::2;14932:543;;15053:10;::::0;;::::2;::::0;-1:-1:-1;;;;;15028:36:2::2;;::::0;;;:24:::2;:36;::::0;;;15008:11:::2;::::0;::::2;::::0;:57:::2;::::0;::::2;:19;:57;:::i;:::-;14983:21;:82;;15067:38;15081:23;15067:13;:38::i;:::-;14975:131;;;;;-1:-1:-1::0;;;14975:131:2::2;;;;;;;;;;;14932:543;;;15137:14;15154:23;15166:4;:10;;;15154:11;:23::i;:::-;15137:40;;15206:1;15195:8;:12;;;15191:107;;;15241:11;::::0;::::2;::::0;;-1:-1:-1;;15263:14:2::2;::::0;::::2;:18:::0;15256:2:::2;:26;15241:42;15227:56:::0;;15191:107:::2;15411:10;::::0;;::::2;::::0;-1:-1:-1;;;;;15386:36:2::2;;::::0;;;:24:::2;:36;::::0;;;15366:11:::2;::::0;::::2;::::0;:57:::2;::::0;::::2;:19;:57;:::i;:::-;15326:4;:10;;;-1:-1:-1::0;;;;;15319:28:2::2;;15356:4;15319:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::2;2:2;15319:43:2;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;15319:43:2;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;15319:43:2;;;;;;;;;:104;;15425:38;15439:23;15425:13;:38::i;:::-;15311:153;;;;;-1:-1:-1::0;;;15311:153:2::2;;;;;;;;;;;14932:543;;15485:233;15509:4;15527:7;15548:9;15571:15;15600:9;15623:7;15644;15665:5;15684;15703;15485:10;:233::i;:::-;15815:11;::::0;::::2;::::0;15786:7:::2;::::0;::::2;::::0;-1:-1:-1;;;;;15769:25:2;;::::2;;::::0;;;:16:::2;:25;::::0;;;;;;;15795:10;;::::2;::::0;15769:37;;::::2;::::0;;;;;;;:58:::2;::::0;::::2;:45;:58;:::i;:::-;15746:7;::::0;::::2;::::0;-1:-1:-1;;;;;15729:25:2;;::::2;;::::0;;;:16:::2;:25;::::0;;;;;;;15755:10;;::::2;::::0;;15729:37;::::2;::::0;;;;;;;;:98;;;;15921:11:::2;::::0;::::2;::::0;15901:10;;15876:36;;::::2;::::0;;:24:::2;:36:::0;;;;:57:::2;::::0;::::2;:44;:57;:::i;:::-;15862:10;::::0;;::::2;::::0;-1:-1:-1;;;;;15837:36:2::2;;::::0;;;:24:::2;:36;::::0;;;;;:96;-1:-1:-1;;4656:10:2::1;:17:::0;;-1:-1:-1;;;;4656:17:2::1;-1:-1:-1::0;;;4656:17:2::1;::::0;;-1:-1:-1;;;;;;;;14241:1699:2:o;7999:262::-;8055:4;8075:16;;;:10;:16;;;;;;;;8071:139;;;-1:-1:-1;8114:4:2;8107:11;;8071:139;8147:9;;-1:-1:-1;;;;;8147:9:2;8135:75;;-1:-1:-1;8194:5:2;8187:12;;8135:75;8226:9;;:28;;-1:-1:-1;;;8226:28:2;;-1:-1:-1;;;;;8226:9:2;;;;:22;;:28;;8249:4;;8226:28;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;8226:28:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8226:28:2;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;8226:28:2;;;;;;;;134:18:1;;;;:::o;8424:722:2:-;8487:19;;:::i;:::-;8518:24;;:::i;:::-;8570:4;8575:1;8570:7;;;;;;;;;;;;;;8552:26;;8607:7;;:4;;8612:1;;8607:7;;;;;;;;;;;;;;8588:10;;;:27;8827:4;8817:15;;8811:22;8878:4;8868:15;;8862:22;8934:4;8924:15;;8918:22;8987:4;8977:15;;8971:22;-1:-1:-1;;;;;9024:18:2;;;:10;;;:18;9052:12;;;;:7;;;:12;9074:11;;;:20;9104:8;;;:14;8588:4;-1:-1:-1;8424:722:2;;;:::o;1304:122:1:-;492:5;;-1:-1:-1;;;;;492:5:1;478:10;:19;470:41;;;;-1:-1:-1;;;470:41:1;;;;;;;;;670:6:::1;::::0;-1:-1:-1;;;670:6:1;::::1;;;669:7;661:36;;;;-1:-1:-1::0;;;661:36:1::1;;;;;;;;;781:6:::2;;763:15;:24;755:44;;;;-1:-1:-1::0;;;755:44:1::2;;;;;;;;;1382:4:::3;1373:13:::0;;-1:-1:-1;;;;1373:13:1::3;-1:-1:-1::0;;;1373:13:1::3;::::0;;1401:18:::3;::::0;::::3;::::0;::::3;::::0;1408:10:::3;::::0;1401:18:::3;;19579:1726:2::0;670:6:1;;-1:-1:-1;;;670:6:1;;;;669:7;661:36;;;;-1:-1:-1;;;661:36:1;;;;;;;;;4360:10:2::1;::::0;-1:-1:-1;;;4360:10:2;::::1;;;4372:35;4386:20;4372:13;:35::i;:::-;4352:56;;;;;-1:-1:-1::0;;;4352:56:2::1;;;;;;;;;;-1:-1:-1::0;4483:10:2::1;:18:::0;;-1:-1:-1;;;;4483:18:2::1;::::0;;19933:62:::2;::::0;4496:5:::1;::::0;19918:88:::2;::::0;19933:62:::2;::::0;19950:15;;19967:8;;19977:9;;19988:6;;19933:62:::2;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;19933:62:2;;;19997:8;19918:14;:88::i;:::-;19899:107;;20050:31;20065:8;20075:5;20050:14;:31::i;:::-;-1:-1:-1::0;;;;;20099:26:2;;::::2;;::::0;;;:16:::2;:26;::::0;;;;;;;:33;;::::2;::::0;;;;;;;:43;-1:-1:-1;20099:43:2::2;20144:55;20158:40;20144:13;:55::i;:::-;20091:109;;;;;-1:-1:-1::0;;;20091:109:2::2;;;;;;;;;;-1:-1:-1::0;;;;;;20283:31:2;::::2;;::::0;;;:24:::2;:31;::::0;;;;;:47:::2;::::0;20323:6;20283:47:::2;:39;:47;:::i;:::-;-1:-1:-1::0;;;;;20249:31:2;;::::2;;::::0;;;:24:::2;:31;::::0;;;;;;;:81;;;;20376:26;;::::2;::::0;;:16:::2;:26:::0;;;;;:33;;;;;;;:49:::2;::::0;20418:6;20376:49:::2;:41;:49;:::i;:::-;-1:-1:-1::0;;;;;20340:26:2;;::::2;;::::0;;;:16:::2;:26;::::0;;;;;;;:33;;::::2;::::0;;;;;;;;;:85;;;;20506:9:::2;::::0;20525:403:::2;;20575:25;:9:::0;20593:6;20575:25:::2;:17;:25;:::i;:::-;20563:37;;20525:403;;;20689:38;::::0;-1:-1:-1;;;20689:38:2;;20731:6;;-1:-1:-1;;;;;20689:23:2;::::2;::::0;::::2;::::0;:38:::2;::::0;20721:4:::2;::::0;20689:38:::2;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::2;2:2;20689:38:2;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;20689:38:2;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;20689:38:2;;;;;;;;;:48;;20739:38;20753:23;20739:13;:38::i;:::-;20681:97;;;;;-1:-1:-1::0;;;20681:97:2::2;;;;;;;;;;-1:-1:-1::0;20792:47:2::2;::::0;-1:-1:-1;;;20792:47:2;;-1:-1:-1;;;;;20792:22:2;::::2;::::0;::::2;::::0;:47:::2;::::0;20815:15;;20832:6;;20792:47:::2;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::2;2:2;20792:47:2;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;20792:47:2;;;;20861:14;:12;:14::i;:::-;20877:39;20891:24;20877:13;:39::i;:::-;20853:64;;;;;-1:-1:-1::0;;;20853:64:2::2;;;;;;;;;;;20525:403;20937:19;20959:65;20971:14;20987:9;20998:8;21008:15;20959:11;:65::i;:::-;-1:-1:-1::0;;;;;21115:26:2;;::::2;;::::0;;;:16:::2;:26;::::0;;;;;;;:42;;::::2;::::0;;;;;;;20937:87;;-1:-1:-1;21115:66:2::2;::::0;20937:87;21115:66:::2;:50;:66;:::i;:::-;-1:-1:-1::0;;;;;21070:26:2;;::::2;;::::0;;;:16:::2;:26;::::0;;;;;;;:42;;::::2;::::0;;;;;;;;:111;;;;21234:24:::2;:40:::0;;;;;;:64:::2;::::0;21283:14;21234:64:::2;:48;:64;:::i;:::-;-1:-1:-1::0;;;;;21191:40:2;;::::2;;::::0;;;:24:::2;:40;::::0;;;;:107;;;;-1:-1:-1;;4656:10:2::1;:17:::0;;-1:-1:-1;;;;4656:17:2::1;-1:-1:-1::0;;;4656:17:2::1;::::0;;-1:-1:-1;;;;;;;19579:1726:2:o;17678:1121::-;670:6:1;;-1:-1:-1;;;670:6:1;;;;669:7;661:36;;;;-1:-1:-1;;;661:36:1;;;;;;;;;4360:10:2::1;::::0;-1:-1:-1;;;4360:10:2;::::1;;;4372:35;4386:20;4372:13;:35::i;:::-;4352:56;;;;;-1:-1:-1::0;;;4352:56:2::1;;;;;;;;;;-1:-1:-1::0;4483:10:2::1;:18:::0;;-1:-1:-1;;;;4483:18:2::1;::::0;;17967:60:::2;::::0;4496:5:::1;::::0;17952:86:::2;::::0;17967:60:::2;::::0;17984:16;;18002:5;;18009:9;;18020:6;;17967:60:::2;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;17967:60:2;;;18029:8;17952:14;:86::i;:::-;17933:105;;18082:31;18097:8;18107:5;18082:14;:31::i;:::-;-1:-1:-1::0;;;;;18132:26:2;;::::2;;::::0;;;:16:::2;:26;::::0;;;;;;;:33;;::::2;::::0;;;;;;;:43;-1:-1:-1;18132:43:2::2;18177:55;18191:40;18177:13;:55::i;:::-;18124:109;;;;;-1:-1:-1::0;;;18124:109:2::2;;;;;;;;;;-1:-1:-1::0;;;;;;18279:26:2;;::::2;;::::0;;;:16:::2;:26;::::0;;;;;;;:33;;::::2;::::0;;;;;;;:49:::2;::::0;18321:6;18279:49:::2;:41;:49;:::i;:::-;-1:-1:-1::0;;;;;18243:26:2;;::::2;;::::0;;;:16:::2;:26;::::0;;;;;;;:33;;::::2;::::0;;;;;;;;:85;;;;18372:24:::2;:31:::0;;;;;;:47:::2;::::0;18412:6;18372:47:::2;:39;:47;:::i;:::-;-1:-1:-1::0;;;;;18338:31:2;::::2;;::::0;;;:24:::2;:31;::::0;;;;:81;;;;18519:6;;18539:18;18535:198:::2;;18573:14;18590:18;18602:5;18590:11;:18::i;:::-;18573:35;;18637:1;18626:8;:12;;;18622:101;;;18705:1;18693:8;18688:14;;:18;18681:2;:26;18671:6;:37;;;;;;18658:50;;18622:101;18535:198;;18748:44;18756:5;18763:16;18781:10;18748:44;;;;;;;;;;;;;;;;;-1:-1:-1::0;;4656:10:2::1;:17:::0;;-1:-1:-1;;;;4656:17:2::1;-1:-1:-1::0;;;4656:17:2::1;::::0;;-1:-1:-1;;;;;17678:1121:2:o;2442:31::-;;;-1:-1:-1;;;;;2442:31:2;;:::o;2375:26::-;;;-1:-1:-1;;;;;2375:26:2;;:::o;1096:202:1:-;492:5;;-1:-1:-1;;;;;492:5:1;478:10;:19;470:41;;;;-1:-1:-1;;;470:41:1;;;;;;;;;781:6:::1;;763:15;:24;755:44;;;;-1:-1:-1::0;;;755:44:1::1;;;;;;;;;1172:3:::2;1168:1;:7;1160:46;;;;-1:-1:-1::0;;;1160:46:1::2;;;;;;;;;1248:6;::::0;;1261::::2;1257:10:::0;::::2;1248:19;1239:28:::0;;1282:9:::2;::::0;::::2;::::0;::::2;::::0;1257:1;;1282:9:::2;;2246:61:2::0;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;823:105:1:-;492:5;;-1:-1:-1;;;;;492:5:1;478:10;:19;470:41;;;;-1:-1:-1;;;470:41:1;;;;;;;;;781:6:::1;;763:15;:24;755:44;;;;-1:-1:-1::0;;;755:44:1::1;;;;;;;;;899:9:::2;:22:::0;;-1:-1:-1;;;;;;899:22:1::2;-1:-1:-1::0;;;;;899:22:1;;;::::2;::::0;;;::::2;::::0;;823:105::o;5728:250:2:-;670:6:1;;-1:-1:-1;;;670:6:1;;;;669:7;661:36;;;;-1:-1:-1;;;661:36:1;;;;;;;;;4360:10:2::1;::::0;-1:-1:-1;;;4360:10:2;::::1;;;4372:35;4386:20;4372:13;:35::i;:::-;4352:56;;;;;-1:-1:-1::0;;;4352:56:2::1;;;;;;;;;;-1:-1:-1::0;4483:10:2::1;:18:::0;;-1:-1:-1;;;;4483:18:2::1;::::0;;5860:8:::2;5835:21;:33;;5870:38;5884:23;5870:13;:38::i;:::-;5827:82;;;;;-1:-1:-1::0;;;5827:82:2::2;;;;;;;;;;;5924:47;1993:42;5943:16;5961:9;5924:47;;;;;;;;;;;;;;;;;-1:-1:-1::0;4656:10:2::1;:17:::0;;-1:-1:-1;;;;4656:17:2::1;-1:-1:-1::0;;;4656:17:2::1;::::0;;5728:250::o;2479:29::-;;;-1:-1:-1;;;2479:29:2;;;;;:::o;24058:216::-;492:5:1;;-1:-1:-1;;;;;492:5:1;478:10;:19;470:41;;;;-1:-1:-1;;;470:41:1;;;;;;;;;573:6:::1;::::0;-1:-1:-1;;;573:6:1;::::1;;;565:39;;;;-1:-1:-1::0;;;565:39:1::1;;;;;;;;;-1:-1:-1::0;;;;;24146:23:2;::::2;::::0;::::2;24171:32;24185:17;24171:13;:32::i;:::-;24138:66;;;;;-1:-1:-1::0;;;24138:66:2::2;;;;;;;;;;-1:-1:-1::0;24214:8:2::2;:20:::0;;-1:-1:-1;;;;;;24214:20:2::2;-1:-1:-1::0;;;;;24214:20:2;::::2;;::::0;;24249:18:::2;::::0;::::2;::::0;::::2;::::0;24214:20;;24249:18:::2;;28958:149:::0;29015:5;29032:12;29054:5;29032:28;;29083:5;-1:-1:-1;;;;;29083:14:2;;:16;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29083:16:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29083:16:2;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;29083:16:2;;;;;;;;;29070:30;28958:149;-1:-1:-1;;;28958:149:2:o;2041:42::-;;;;;;;;;;;;;;;:::o;16784:265::-;16841:4;16861:17;;;:11;:17;;;;;;;;16857:140;;;-1:-1:-1;16901:4:2;16894:11;;16857:140;16934:9;;-1:-1:-1;;;;;16934:9:2;16922:75;;-1:-1:-1;16981:5:2;16974:12;;16922:75;17013:9;;:29;;-1:-1:-1;;;17013:29:2;;-1:-1:-1;;;;;17013:9:2;;;;:23;;:29;;17037:4;;17013:29;;;;23231:350;23361:9;;23333:4;;-1:-1:-1;;;;;23361:9:2;23353:34;;;;:62;;-1:-1:-1;;;;;;23392:16:2;;;;;;;:9;:16;;;;;;;;:23;;;;;;;;;;;;23391:24;23353:62;23349:179;;;23475:9;;:43;;-1:-1:-1;;;23475:43:2;;23436:83;;-1:-1:-1;;;;;23475:9:2;;:29;;:43;;23505:5;;23512;;23475:43;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23475:43:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23475:43:2;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;23475:43:2;;;;;;;;;-1:-1:-1;;;;;23436:23:2;;;;;;;:16;:23;;;;;;;;:30;;;;;;;;;;;:83;:38;:83;:::i;:::-;23429:90;;;;23349:179;-1:-1:-1;;;;;;23544:23:2;;;;;;;:16;:23;;;;;;;;:30;;;;;;;;;;23231:350;;;;:::o;54:20:1:-;;;-1:-1:-1;;;;;54:20:1;;:::o;2407:29:2:-;;;-1:-1:-1;;;;;2407:29:2;;:::o;28188:548::-;28247:13;28272;28294:5;28288:12;;;;;;;;28363:20;;;28327:2;28363:20;;;;;;;;;28272:28;;-1:-1:-1;28327:2:2;28339:21;;28327:2;28363:20;;;21:6:-1;;108:14;28363:20:2;87:42:-1;143:17;;-1:-1;;28339:44:2;-1:-1:-1;28393:6:2;28413:162;28420:12;;;;28413:162;;28528:13;;28476:2;28466:12;;;;;28502;;;;28537:3;;;;28466:12;;;28549:2;:14;;28544:20;;;28528:8;;:13;;;;;;;;;:36;-1:-1:-1;;;;;28528:36:2;;;;;;;;;28413:162;;;;28584:14;28611:1;28615;28611:5;-1:-1:-1;;;;;28601:16:2;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28601:16:2;;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;28601:16:2;87:42:-1;143:17;;-1:-1;28601:16:2;-1:-1:-1;28584:33:2;-1:-1:-1;28632:6:2;28627:77;28649:1;28644;:6;28627:77;;28678:8;28691:1;28687;:5;28678:15;;;;;;;;;;;;;;;;28671:1;28673;28671:4;;;;;;;;;;;:22;-1:-1:-1;;;;;28671:22:2;;;;;;;;-1:-1:-1;28652:3:2;;28627:77;;;-1:-1:-1;28727:1:2;28188:548;-1:-1:-1;;;;;;28188:548:2:o;27545:579::-;27591:4;;27710:16;27771:36;;;;27860:4;27855:163;;;;27703:387;;27771:36;27801:1;27786:16;;27771:36;;27855:163;27936:4;27931:3;27926;27911:30;28009:3;28003:10;27988:25;;27703:387;-1:-1:-1;28104:16:2;;;-1:-1:-1;27545:579:2;:::o;613:140::-;675:7;702:5;;;721:4;;;;;;:12;;;732:1;729;:4;;721:12;713:21;;12:1:-1;9;2:12;9398:891:2;9803:22;9855:4;9861:7;9838:31;;;;;;;;;;;;;;-1:-1:-1;;26:21;;;22:32;6:49;;9838:31:2;;;;9828:42;;49:4:-1;9828:42:2;;;;9929:9;;-1:-1:-1;;;9929:316:2;;9828:42;;-1:-1:-1;;;;;;9929:9:2;;:29;;:316;;:9;;9828:42;;10054:7;;10075:9;;10098:15;;10127:9;;10150:7;;10171;;10192:5;;10211;;10230;;9929:316;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9929:316:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9929:316:2;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;9929:316:2;;;;;;;;;10247:34;10261:19;10247:13;:34::i;:::-;9921:361;;;;;-1:-1:-1;;;9921:361:2;;;;;;;;;;;9398:891;;;;;;;;;;;:::o;494:115::-;556:7;584:1;579;:6;;571:15;;12:1:-1;9;2:12;571:15:2;-1:-1:-1;599:5:2;;;494:115::o;22332:371::-;22448:15;;;;;;22415:7;;22482:19;22448:15;22482:13;:19::i;:::-;22481:20;22503:34;22517:19;22503:13;:34::i;:::-;22473:65;;;;;-1:-1:-1;;;22473:65:2;;;;;;;;;;;22548:16;22567:28;22580:8;22590:4;22567:12;:28::i;:::-;22645:17;;;;:11;:17;;;;;;:24;;-1:-1:-1;;22645:24:2;22665:4;22645:24;;;-1:-1:-1;22548:47:2;-1:-1:-1;22332:371:2;;;;:::o;22816:329::-;22901:9;;-1:-1:-1;;;;;22901:9:2;22893:34;;;;:62;;-1:-1:-1;;;;;;22932:16:2;;;;;;;:9;:16;;;;;;;;:23;;;;;;;;;;;;22931:24;22893:62;22889:250;;;23043:9;;:43;;-1:-1:-1;;;23043:43:2;;23004:83;;-1:-1:-1;;;;;23043:9:2;;:29;;:43;;23073:5;;23080;;23043:43;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23043:43:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23043:43:2;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;23043:43:2;;;;;;;;;-1:-1:-1;;;;;23004:23:2;;;;;;;:16;:23;;;;;;;;:30;;;;;;;;;;;:83;:38;:83;:::i;:::-;-1:-1:-1;;;;;22971:23:2;;;;;;;:16;:23;;;;;;;;:30;;;;;;;;;;;;:116;;;;23100:16;;;:9;:16;;;;;:23;;;;;;;:30;;-1:-1:-1;;23100:30:2;23126:4;23100:30;;;22889:250;22816:329;;:::o;21352:928::-;21479:4;21575:23;21601:25;21611:14;21601:9;:25::i;:::-;21575:51;-1:-1:-1;;;;;;21640:27:2;;21636:116;;21704:37;:18;21731:9;21704:37;:26;:37;:::i;:::-;21683:58;;21636:116;21794:9;21769:21;:34;;21805:38;21819:23;21805:13;:38::i;:::-;21761:83;;;;;-1:-1:-1;;;21761:83:2;;;;;;;;;;;21855:12;21869:19;21892:15;-1:-1:-1;;;;;21892:20:2;21920:9;21931:8;21892:48;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;21854:86:2;;;;21958:7;21950:16;;12:1:-1;9;2:12;21950:16:2;21978:28;22008:19;22042:6;22031:35;;;;;;;;;;;;;;21977:89;;;;22108:14;-1:-1:-1;;;;;22084:38:2;:20;-1:-1:-1;;;;;22084:38:2;;:113;;;;;22183:14;22126:53;22160:18;22126:25;22136:14;22126:9;:25::i;:53::-;:71;22084:113;22199:41;22213:26;22199:13;:41::i;:::-;22076:165;;;;;-1:-1:-1;;;22076:165:2;;;;;;;;;;-1:-1:-1;22259:14:2;21352:928;-1:-1:-1;;;;;;;;;21352:928:2:o;1890:27517::-;;;;;;;;;-1:-1:-1;1890:27517:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5:130:-1:-;72:20;;97:33;72:20;97:33;;470:352;;;600:3;593:4;585:6;581:17;577:27;567:2;;-1:-1;;608:12;567:2;-1:-1;638:20;;-1:-1;;;;;667:30;;664:2;;;-1:-1;;700:12;664:2;744:4;736:6;732:17;720:29;;795:3;744:4;;779:6;775:17;736:6;761:32;;758:41;755:2;;;812:1;;802:12;755:2;560:262;;;;;;1578:698;;1692:3;1685:4;1677:6;1673:17;1669:27;1659:2;;-1:-1;;1700:12;1659:2;1747:6;1734:20;1769:77;1784:61;1838:6;1784:61;;;1769:77;;;1874:21;;;1760:86;-1:-1;1918:4;1931:14;;;;1906:17;;;2020;;;2011:27;;;;2008:36;-1:-1;2005:2;;;2057:1;;2047:12;2005:2;2082:1;2067:203;2092:6;2089:1;2086:13;2067:203;;;4930:6;4917:20;4942:30;4966:5;4942:30;;;2160:47;;2221:14;;;;2249;;;;2114:1;2107:9;2067:203;;;2071:14;;;;;1652:624;;;;;2302:707;;2419:3;2412:4;2404:6;2400:17;2396:27;2386:2;;-1:-1;;2427:12;2386:2;2474:6;2461:20;2496:80;2511:64;2568:6;2511:64;;2496:80;2604:21;;;2487:89;-1:-1;2648:4;2661:14;;;;2636:17;;;2750;;;2741:27;;;;2738:36;-1:-1;2735:2;;;2787:1;;2777:12;2735:2;2812:1;2797:206;2822:6;2819:1;2816:13;2797:206;;;5186:20;;2890:50;;2954:14;;;;2982;;;;2844:1;2837:9;2797:206;;4144:701;;4259:3;4252:4;4244:6;4240:17;4236:27;4226:2;;-1:-1;;4267:12;4226:2;4314:6;4301:20;4336:78;4351:62;4406:6;4351:62;;4336:78;4442:21;;;4327:87;-1:-1;4486:4;4499:14;;;;4474:17;;;4588;;;4579:27;;;;4576:36;-1:-1;4573:2;;;4625:1;;4615:12;4573:2;4650:1;;4635:204;4660:6;4657:1;4654:13;4635:204;;;6512:6;6499:20;50617:4;53240:5;50606:16;53217:5;53214:33;53204:2;;4650:1;;53251:12;53204:2;4728:48;;4790:14;;;;4818;;;;4682:1;4675:9;4635:204;;;4639:14;;;;;;4219:626;;;;;5257:440;;5358:3;5351:4;5343:6;5339:17;5335:27;5325:2;;-1:-1;;5366:12;5325:2;5413:6;5400:20;-1:-1;;;;;45336:6;45333:30;45330:2;;;-1:-1;;45366:12;45330:2;5435:64;45439:9;45420:17;;-1:-1;;45416:33;45507:4;45497:15;5435:64;;;5426:73;;5519:6;5512:5;5505:21;5623:3;45507:4;5614:6;5547;5605:16;;5602:25;5599:2;;;5640:1;;5630:12;5599:2;51692:6;45507:4;5547:6;5543:17;45507:4;5581:5;5577:16;51669:30;51748:1;51730:16;;;45507:4;51730:16;51723:27;5581:5;5318:379;-1:-1;;5318:379;6567:241;;6671:2;6659:9;6650:7;6646:23;6642:32;6639:2;;;-1:-1;;6677:12;6639:2;85:6;72:20;97:33;124:5;97:33;;7079:415;;;7219:2;7207:9;7198:7;7194:23;7190:32;7187:2;;;-1:-1;;7225:12;7187:2;387:6;381:13;399:41;434:5;399:41;;;7396:2;7446:22;;;;6371:13;7277:82;;6371:13;;-1:-1;;;7181:313;7501:366;;;7622:2;7610:9;7601:7;7597:23;7593:32;7590:2;;;-1:-1;;7628:12;7590:2;85:6;72:20;97:33;124:5;97:33;;;7680:63;-1:-1;7780:2;7819:22;;72:20;97:33;72:20;97:33;;;7788:63;;;;7584:283;;;;;;7874:1307;;;;;;;;8107:3;8095:9;8086:7;8082:23;8078:33;8075:2;;;-1:-1;;8114:12;8075:2;85:6;72:20;97:33;124:5;97:33;;;8166:63;-1:-1;8266:2;8305:22;;6223:20;;-1:-1;8374:2;8413:22;;72:20;97:33;72:20;97:33;;;8382:63;-1:-1;8500:53;8545:7;8482:2;8521:22;;8500:53;;;8490:63;;8618:3;8607:9;8603:19;8590:33;-1:-1;;;;;8643:18;8635:6;8632:30;8629:2;;;-1:-1;;8665:12;8629:2;8695:62;8749:7;8740:6;8729:9;8725:22;8695:62;;;8685:72;;8822:3;8811:9;8807:19;8794:33;8780:47;;8643:18;8839:6;8836:30;8833:2;;;-1:-1;;8869:12;8833:2;8899:62;8953:7;8944:6;8933:9;8929:22;8899:62;;;8889:72;;9026:3;9015:9;9011:19;8998:33;8984:47;;8643:18;9043:6;9040:30;9037:2;;;-1:-1;;9073:12;9037:2;;9103:62;9157:7;9148:6;9137:9;9133:22;9103:62;;;9093:72;;;8069:1112;;;;;;;;;;;9188:597;;;;9336:2;9324:9;9315:7;9311:23;9307:32;9304:2;;;-1:-1;;9342:12;9304:2;85:6;72:20;97:33;124:5;97:33;;;9394:63;-1:-1;9494:2;9533:22;;6223:20;;-1:-1;9630:2;9615:18;;9602:32;-1:-1;;;;;9643:30;;9640:2;;;-1:-1;;9676:12;9640:2;9706:63;9761:7;9752:6;9741:9;9737:22;9706:63;;;9696:73;;;9298:487;;;;;;9792:678;;;;;9983:2;9971:9;9962:7;9958:23;9954:32;9951:2;;;-1:-1;;9989:12;9951:2;10047:17;10034:31;-1:-1;;;;;10085:18;10077:6;10074:30;10071:2;;;-1:-1;;10107:12;10071:2;10145:80;10217:7;10208:6;10197:9;10193:22;10145:80;;;10135:90;;-1:-1;10135:90;-1:-1;10290:2;10275:18;;10262:32;;-1:-1;10303:30;;;10300:2;;;-1:-1;;10336:12;10300:2;;10374:80;10446:7;10437:6;10426:9;10422:22;10374:80;;;9945:525;;;;-1:-1;10364:90;-1:-1;;;;9945:525;10477:377;;10606:2;;10594:9;10585:7;10581:23;10577:32;10574:2;;;-1:-1;;10612:12;10574:2;10670:17;10657:31;-1:-1;;;;;10700:6;10697:30;10694:2;;;-1:-1;;10730:12;10694:2;10821:6;10810:9;10806:22;965:3;958:4;950:6;946:17;942:27;932:2;;-1:-1;;973:12;932:2;1020:6;1007:20;993:34;;1042:80;1057:64;1114:6;1057:64;;1042:80;1150:21;;;1207:14;;;;1182:17;;;1296;;;1287:27;;;;1284:36;-1:-1;1281:2;;;-1:-1;;1323:12;1281:2;-1:-1;1349:10;;1343:206;1368:6;1365:1;1362:13;1343:206;;;1448:37;1481:3;1469:10;1448:37;;;1436:50;;1390:1;1383:9;;;;;1500:14;;;;1528;;1343:206;;;-1:-1;10750:88;10568:286;-1:-1;;;;;;;10568:286;10861:257;;10973:2;10961:9;10952:7;10948:23;10944:32;10941:2;;;-1:-1;;10979:12;10941:2;5065:6;5059:13;5077:30;5101:5;5077:30;;11125:241;;11229:2;11217:9;11208:7;11204:23;11200:32;11197:2;;;-1:-1;;11235:12;11197:2;-1:-1;5186:20;;11191:175;-1:-1;11191:175;11373:345;;11486:2;11474:9;11465:7;11461:23;11457:32;11454:2;;;-1:-1;;11492:12;11454:2;11550:17;11537:31;-1:-1;;;;;11580:6;11577:30;11574:2;;;-1:-1;;11610:12;11574:2;11640:62;11694:7;11685:6;11674:9;11670:22;11640:62;;;11630:72;11448:270;-1:-1;;;;11448:270;11725:470;;;11855:2;11843:9;11834:7;11830:23;11826:32;11823:2;;;-1:-1;;11861:12;11823:2;11919:17;11906:31;-1:-1;;;;;11949:6;11946:30;11943:2;;;-1:-1;;11979:12;11943:2;12009:62;12063:7;12054:6;12043:9;12039:22;12009:62;;;11999:72;12108:2;12147:22;;;;5186:20;;-1:-1;;;;11817:378;12202:2283;;;;;;;;;;;12613:3;12601:9;12592:7;12588:23;12584:33;12581:2;;;-1:-1;;12620:12;12581:2;12678:17;12665:31;-1:-1;;;;;12716:18;12708:6;12705:30;12702:2;;;-1:-1;;12738:12;12702:2;12768:62;12822:7;12813:6;12802:9;12798:22;12768:62;;;12758:72;;12867:2;12910:9;12906:22;6223:20;12875:63;;13003:2;12992:9;12988:18;12975:32;12961:46;;12716:18;13019:6;13016:30;13013:2;;;-1:-1;;13049:12;13013:2;13079:78;13149:7;13140:6;13129:9;13125:22;13079:78;;;13069:88;;13222:2;13211:9;13207:18;13194:32;13180:46;;12716:18;13238:6;13235:30;13232:2;;;-1:-1;;13268:12;13232:2;13298:75;13365:7;13356:6;13345:9;13341:22;13298:75;;;13288:85;;13410:3;13454:9;13450:22;5186:20;13419:63;;13519:3;13563:9;13559:22;5186:20;13528:63;;13656:3;13645:9;13641:19;13628:33;13614:47;;12716:18;13673:6;13670:30;13667:2;;;-1:-1;;13703:12;13667:2;13733:78;13803:7;13794:6;13783:9;13779:22;13733:78;;;13723:88;;13876:3;13865:9;13861:19;13848:33;13834:47;;12716:18;13893:6;13890:30;13887:2;;;-1:-1;;13923:12;13887:2;13953:76;14021:7;14012:6;14001:9;13997:22;13953:76;;;13943:86;;14094:3;14083:9;14079:19;14066:33;14052:47;;12716:18;14111:6;14108:30;14105:2;;;-1:-1;;14141:12;14105:2;14171:78;14241:7;14232:6;14221:9;14217:22;14171:78;;;14161:88;;14314:3;14303:9;14299:19;14286:33;14272:47;;12716:18;14331:6;14328:30;14325:2;;;-1:-1;;14361:12;14325:2;;14391:78;14461:7;14452:6;14441:9;14437:22;14391:78;;;14381:88;;;12575:1910;;;;;;;;;;;;;;14846:1057;;;;;;15046:3;15034:9;15025:7;15021:23;15017:33;15014:2;;;-1:-1;;15053:12;15014:2;15111:17;15098:31;-1:-1;;;;;15149:18;15141:6;15138:30;15135:2;;;-1:-1;;15171:12;15135:2;15201:63;15256:7;15247:6;15236:9;15232:22;15201:63;;;15191:73;;15301:2;15344:9;15340:22;72:20;63:29;;97:33;124:5;97:33;;;15309:63;;-1:-1;15409:2;15448:22;;6223:20;;-1:-1;15545:2;15530:18;;15517:32;;15558:30;;;15555:2;;;-1:-1;;15591:12;15555:2;15621:62;15675:7;15666:6;15655:9;15651:22;15621:62;;;15611:72;;15748:3;15737:9;15733:19;15720:33;15706:47;;15149:18;15765:6;15762:30;15759:2;;;-1:-1;;15795:12;15759:2;;15825:62;15879:7;15870:6;15859:9;15855:22;15825:62;;;15815:72;;;15008:895;;;;;;;;;16158:263;;16273:2;16261:9;16252:7;16248:23;16244:32;16241:2;;;-1:-1;;16279:12;16241:2;-1:-1;6371:13;;16235:186;-1:-1;16235:186;18869:690;;19062:5;46871:12;48558:6;48553:3;48546:19;48595:4;;48590:3;48586:14;19074:93;;48595:4;19238:5;46098:14;-1:-1;19277:260;19302:6;19299:1;19296:13;19277:260;;;19363:13;;-1:-1;;;;;50401:54;17544:45;;16582:14;;;;47831;;;;678:18;19317:9;19277:260;;;-1:-1;19543:10;;18993:566;-1:-1;;;;;18993:566;19592:666;;19776:5;46871:12;48558:6;48553:3;48546:19;48595:4;;48590:3;48586:14;19788:90;;48595:4;19946:5;46098:14;-1:-1;19985:251;20010:6;20007:1;20004:13;19985:251;;;20071:13;;50234;50227:21;22994:34;;16752:14;;;;47831;;;;20032:1;20025:9;19985:251;;20297:690;;20490:5;46871:12;48558:6;48553:3;48546:19;48595:4;;48590:3;48586:14;20502:93;;48595:4;20666:5;46098:14;-1:-1;20705:260;20730:6;20727:1;20724:13;20705:260;;;20791:13;;23212:37;;16934:14;;;;47831;;;;20752:1;20745:9;20705:260;;22257:674;;22444:5;46871:12;48558:6;48553:3;48546:19;48595:4;;48590:3;48586:14;22456:91;;48595:4;22616:5;46098:14;-1:-1;22655:254;22680:6;22677:1;22674:13;22655:254;;;22741:13;;50617:4;50606:16;28675:35;;17290:14;;;;47831;;;;22702:1;22695:9;22655:254;;24084:347;;24229:5;46871:12;48558:6;48553:3;48546:19;24323:52;24368:6;48595:4;48590:3;48586:14;48595:4;24349:5;24345:16;24323:52;;;45439:9;52388:14;-1:-1;;52384:28;24387:39;;;;48595:4;24387:39;;24176:255;-1:-1;;24176:255;28836:697;;52495:14;;18114:5;52499:2;52495:14;;18071:3;18064:58;23541:5;46871:12;23652:52;23697:6;29172:2;29167:3;29163:12;23685:4;23678:5;23674:16;23652:52;;;46871:12;;;23716:16;;23652:52;46871:12;29172:2;23716:16;;23685:4;23674:16;;23652:52;;;23716:16;29172:2;23716:16;;23212:37;;;;-1:-1;;29496:12;;;;-1:-1;;;29063:470;29540:262;;23541:5;46871:12;23652:52;23697:6;23692:3;23685:4;23678:5;23674:16;23652:52;;;23716:16;;;;;29665:137;-1:-1;;29665:137;29809:401;;23541:5;46871:12;23652:52;23697:6;23692:3;23685:4;23678:5;23674:16;23652:52;;;23716:16;;;;23212:37;;;-1:-1;23685:4;30173:12;;29962:248;-1:-1;29962:248;30217:701;;23541:5;46871:12;23652:52;23697:6;23692:3;23685:4;23678:5;23674:16;23652:52;;;23725:6;23720:3;23716:16;52495:14;;50044:5;52499:2;52495:14;;18071:3;18064:58;23541:5;46871:12;23495:52;;23652;23697:6;30668:2;30663:3;30659:12;23685:4;23678:5;23674:16;23652:52;;30925:370;31280:10;31104:191;31302:213;-1:-1;;;;;50401:54;;;;17544:45;;31420:2;31405:18;;31391:124;32010:467;-1:-1;;;;;50401:54;;;17397:58;;50401:54;;;;32380:2;32365:18;;17397:58;32463:2;32448:18;;23212:37;;;;32200:2;32185:18;;32171:306;32484:340;-1:-1;;;;;50401:54;;;;17397:58;;32810:2;32795:18;;23212:37;32638:2;32623:18;;32609:215;32831:324;-1:-1;;;;;50401:54;;;17544:45;;50401:54;;33141:2;33126:18;;17544:45;32977:2;32962:18;;32948:207;33620:523;-1:-1;;;;;50401:54;;17544:45;;33814:2;33932;33917:18;;33910:48;;;33620:523;;33972:78;;33799:18;;34036:6;33972:78;;;33964:86;;23242:5;34129:2;34118:9;34114:18;23212:37;33785:358;;;;;;;34481:660;34747:2;34761:47;;;34732:18;;48546:19;;;34481:660;18490:21;48586:14;;;34481:660;18517:291;18542:6;18539:1;18536:13;18517:291;;;48595:4;85:6;72:20;97:33;124:5;97:33;;;-1:-1;;;;;50401:54;17544:45;;49937:12;;;;16582:14;;;;678:18;18557:9;18517:291;;;-1:-1;34978:20;;;48595:4;34958:18;;34951:48;48546:19;;;-1:-1;;;;;21274:78;;21271:2;;;-1:-1;;21355:12;21271:2;48595:4;21390:6;21386:17;21376:27;;51692:6;51687:3;48595:4;48590:3;48586:14;51669:30;51730:16;48595:4;51730:16;51723:27;;;51730:16;34718:423;-1:-1;;;;;34718:423;35148:361;;35316:2;35337:17;35330:47;35391:108;35316:2;35305:9;35301:18;35485:6;35391:108;;35516:620;;35762:2;35783:17;35776:47;35837:108;35762:2;35751:9;35747:18;35931:6;35837:108;;;35993:9;35987:4;35983:20;35978:2;35967:9;35963:18;35956:48;36018:108;36121:4;36112:6;36018:108;;;36010:116;35733:403;-1:-1;;;;;35733:403;36143:201;50234:13;;50227:21;22994:34;;36255:2;36240:18;;36226:118;36351:2189;;37034:3;23021:5;50234:13;50227:21;23001:3;22994:34;23242:5;37193:2;37182:9;37178:18;23212:37;23242:5;37276:2;37265:9;37261:18;23212:37;37034:3;37313:2;37302:9;37298:18;37291:48;37353:108;37034:3;37023:9;37019:19;37447:6;37353:108;;;37510:9;37504:4;37500:20;37494:3;37483:9;37479:19;37472:49;37535:102;37632:4;37623:6;37535:102;;;37527:110;;;23242:5;37716:3;37705:9;37701:19;23212:37;23242:5;37800:3;37789:9;37785:19;23212:37;37854:9;37848:4;37844:20;37838:3;37827:9;37823:19;37816:49;37879:108;37982:4;37973:6;37879:108;;;38036:9;38030:4;38026:20;38020:3;38009:9;38005:19;37998:49;38061:104;38160:4;38151:6;38061:104;;;38053:112;;;38214:9;38208:4;38204:20;38198:3;38187:9;38183:19;38176:49;38239:108;38342:4;38333:6;38239:108;;;38396:9;38390:4;38386:20;38380:3;38369:9;38365:19;38358:49;38421:109;38525:4;38515:7;38421:109;;;38413:117;37005:1535;-1:-1;;;;;;;;;;;;;;;37005:1535;38547:213;23212:37;;;38665:2;38650:18;;38636:124;38767:539;23212:37;;;50617:4;50606:16;;;;39126:2;39111:18;;28675:35;39209:2;39194:18;;23212:37;39292:2;39277:18;;23212:37;38965:3;38950:19;;38936:370;39827:301;;39965:2;39986:17;39979:47;40040:78;39965:2;39954:9;39950:18;40104:6;40040:78;;40135:407;40326:2;40340:47;;;25030:2;40311:18;;;48546:19;-1:-1;;;48586:14;;;25046:43;25108:12;;;40297:245;40549:407;40740:2;40754:47;;;25359:1;40725:18;;;48546:19;-1:-1;;;48586:14;;;25374:30;25423:12;;;40711:245;40963:407;41154:2;41168:47;;;25674:2;41139:18;;;48546:19;25710:28;48586:14;;;25690:49;25758:12;;;41125:245;41377:407;41568:2;41582:47;;;26009:2;41553:18;;;48546:19;-1:-1;;;48586:14;;;26025:35;26079:12;;;41539:245;41791:407;41982:2;41996:47;;;26635:2;41967:18;;;48546:19;-1:-1;;;48586:14;;;26651:39;26709:12;;;41953:245;42205:407;42396:2;42410:47;;;26960:1;42381:18;;;48546:19;-1:-1;;;48586:14;;;26975:32;27026:12;;;42367:245;42619:330;;42795:3;42784:9;42780:19;42772:27;;50617:4;27336:16;27330:23;50606:16;28682:3;28675:35;50617:4;27498;27491:5;27487:16;27481:23;50606:16;27498:4;27558:3;27554:14;28675:35;27649:4;27642:5;27638:16;27632:23;678:18;;50412:42;;;;50044:5;50401:54;27649:4;27713:3;27709:14;17544:45;50412:42;27801:4;27794:5;27790:16;27784:23;50401:54;27801:4;27881:3;27877:14;17544:45;;;27973:4;27966:5;27962:16;27956:23;27973:4;28037:3;28033:14;23212:37;28126:4;28119:5;28115:16;28109:23;28126:4;28190:3;28186:14;23212:37;42766:183;;;;;43176:205;50617:4;50606:16;;;;28675:35;;43290:2;43275:18;;43261:120;43388:256;43450:2;43444:9;43476:17;;;-1:-1;;;;;43536:34;;43572:22;;;43533:62;43530:2;;;43608:1;;43598:12;43530:2;43450;43617:22;43428:216;;-1:-1;43428:216;43651:304;;-1:-1;;;;;43802:6;43799:30;43796:2;;;-1:-1;;43832:12;43796:2;-1:-1;43877:4;43865:17;;;43930:15;;43733:222;51765:268;51830:1;51837:101;51851:6;51848:1;51845:13;51837:101;;;51918:11;;;51912:18;51899:11;;;51892:39;51873:2;51866:10;51837:101;;;51953:6;51950:1;51947:13;51944:2;;;51830:1;52009:6;52004:3;52000:16;51993:27;51944:2;;51814:219;;;;52527:117;-1:-1;;;;;50401:54;;52586:35;;52576:2;;52635:1;;52625:12;52576:2;52570:74;;52791:111;52872:5;50234:13;50227:21;52850:5;52847:32;52837:2;;52893:1;;52883:12
Swarm Source
ipfs://59b85149cf13a2ce7eaeb95101a95dff9fa34316c48d141b3d33ca36e225a289
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
BSC | 100.00% | $613.14 | 0.00045821 | $0.280945 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.