Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 747 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Pay Artist | 19290328 | 126 days ago | IN | 0 ETH | 0.00263319 | ||||
Accept Addresses... | 19290323 | 126 days ago | IN | 0 ETH | 0.00161214 | ||||
Propose Secondar... | 19290318 | 126 days ago | IN | 0 ETH | 0.00575135 | ||||
Propose Primary ... | 19290316 | 126 days ago | IN | 0 ETH | 0.00609265 | ||||
Set Primary And ... | 19288748 | 126 days ago | IN | 0 ETH | 0.00430948 | ||||
Mint | 19194366 | 139 days ago | IN | 0.06529 ETH | 0.00122904 | ||||
Set Collection P... | 19185387 | 141 days ago | IN | 0 ETH | 0.00247297 | ||||
Mint | 19185336 | 141 days ago | IN | 0.06529 ETH | 0.00443984 | ||||
Mint | 19185336 | 141 days ago | IN | 0.06529 ETH | 0.0044997 | ||||
Mint | 19185336 | 141 days ago | IN | 0.06529 ETH | 0.01634621 | ||||
Mint | 19185336 | 141 days ago | IN | 0.06529 ETH | 0.0188181 | ||||
Mint | 19185336 | 141 days ago | IN | 0.06529 ETH | 0.04706625 | ||||
Mint | 19185336 | 141 days ago | IN | 0.06529 ETH | 0.0473317 | ||||
Mint | 19185336 | 141 days ago | IN | 0.06529 ETH | 0.2751756 | ||||
Mint | 19185336 | 141 days ago | IN | 0.06529 ETH | 0.27590664 | ||||
Mint | 19185336 | 141 days ago | IN | 0.06529 ETH | 0.2930028 | ||||
Mint | 19185336 | 141 days ago | IN | 0.06529 ETH | 0.3317064 | ||||
Mint | 19185336 | 141 days ago | IN | 0.06529 ETH | 0.3317679 | ||||
Mint | 19185336 | 141 days ago | IN | 0.06529 ETH | 0.3561096 | ||||
Mint | 19185336 | 141 days ago | IN | 0.06529 ETH | 0.43317482 | ||||
Mint | 19185336 | 141 days ago | IN | 0.06529 ETH | 0.4369302 | ||||
Mint | 19185336 | 141 days ago | IN | 0.06529 ETH | 0.53011035 | ||||
Mint | 19185335 | 141 days ago | IN | 0.06529 ETH | 0.00215896 | ||||
Set Collection P... | 19185289 | 141 days ago | IN | 0 ETH | 0.0048641 | ||||
Mint | 19185281 | 141 days ago | IN | 0.06529 ETH | 0.02526007 |
Loading...
Loading
Contract Name:
NextGenMinterContract
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT /** * * @title: NextGen 6529 - Minter Contract * @date: 20-December-2023 * @version: 1.10 * @author: 6529 team */ pragma solidity ^0.8.19; import "./INextGenCore.sol"; import "./IDelegationManagementContract.sol"; import "./MerkleProof.sol"; import "./INextGenAdmins.sol"; import "./IERC721.sol"; contract NextGenMinterContract { // total funds collected during minting per collection mapping (uint256 => uint256) public collectionTotalAmount; // timestamp of last mint for used in sales model 3 mapping (uint256 => uint) public lastMintDate; // tokens airdropped per collection mapping (uint256 => uint256) public excludeTokensCounter; // burn or swap address during burnOrSwap functionality mapping (bytes32 => address) public burnOrSwapAddress; // token ids set during burnOrSwap functionality mapping (bytes32 => uint256[2]) private burnOrSwapIds; // burnToMint initialization --> burn a token on a NextGen collection and mint a token on a new NextGen collection mapping (uint256 => mapping (uint256 => bool)) public burnToMintCollections; // burnOrSwap initialization --> burn a token on an external ERC721 collection and mint a token on a NextGen collection mapping (bytes32 => mapping (uint256 => bool)) public burnExternalToMintCollections; // checks if minting costs for a collectionwere set mapping (uint256 => bool) private setMintingCosts; // struct that holds minting costs and phases struct collectionPhasesDataStructure { uint allowlistStartTime; uint allowlistEndTime; uint publicStartTime; uint publicEndTime; bytes32 merkleRoot; uint256 collectionMintCost; uint256 collectionEndMintCost; uint256 timePeriod; uint256 rate; uint8 salesOption; address delAddress; } // mapping of collectionPhasesData struct mapping (uint256 => collectionPhasesDataStructure) private collectionPhases; // struct that holds primary royalties struct royaltiesPrimarySplits { uint256 artistPercentage; uint256 teamPercentage; } // mapping of royaltiesPrimarySplits struct mapping (uint256 => royaltiesPrimarySplits) private collectionRoyaltiesPrimarySplits; // struct that holds addresses and percentages for primary splits struct collectionPrimaryAddresses { address primaryAdd1; address primaryAdd2; address primaryAdd3; uint256 add1Percentage; uint256 add2Percentage; uint256 add3Percentage; bool setStatus; bool approvedStatus; } // mapping of collectionPrimaryAndSecondaryAddresses struct mapping (uint256 => collectionPrimaryAddresses) private collectionArtistPrimaryAddresses; // struct that holds secondary royalties struct royaltiesSecondarySplits { uint256 artistPercentage; uint256 teamPercentage; } // mapping of royaltiesSecondarySplits struct mapping (uint256 => royaltiesSecondarySplits) private collectionRoyaltiesSecondarySplits; // struct that holds addresses and percentages for secondary splits struct collectionSecondaryAddresses { address secondaryAdd1; address secondaryAdd2; address secondaryAdd3; uint256 add1Percentage; uint256 add2Percentage; uint256 add3Percentage; bool setStatus; bool approvedStatus; } // mapping of collectionSecondaryAddresses struct mapping (uint256 => collectionSecondaryAddresses) private collectionArtistSecondaryAddresses; // mapping that holds the auction end time when a token is sent to auction mapping (uint256 => uint) private mintToAuctionData; // mapping that holds the auction status when a token is sent to auction mapping (uint256 => bool) private mintToAuctionStatus; //external contracts declaration INextGenCore public gencore; IDelegationManagementContract public dmc; INextGenAdmins private adminsContract; // events event Withdraw(address indexed _add, bool status, uint256 indexed funds); // constructor constructor (address _gencore, address _del, address _adminsContract) { gencore = INextGenCore(_gencore); dmc = IDelegationManagementContract(_del); adminsContract = INextGenAdmins(_adminsContract); } // certain functions can only be called by an admin or the artist modifier ArtistOrAdminRequired(uint256 _collectionID, bytes4 _selector) { require(msg.sender == gencore.retrieveArtistAddress(_collectionID) || adminsContract.retrieveFunctionAdmin(msg.sender, _selector) == true || adminsContract.retrieveGlobalAdmin(msg.sender) == true, "Not allowed"); _; } // certain functions can only be called by a global or function admin modifier FunctionAdminRequired(bytes4 _selector) { require(adminsContract.retrieveFunctionAdmin(msg.sender, _selector) == true || adminsContract.retrieveGlobalAdmin(msg.sender) == true , "Not allowed"); _; } // certain functions can only be called by a collection, global or function admin modifier CollectionAdminRequired(uint256 _collectionID, bytes4 _selector) { require(adminsContract.retrieveCollectionAdmin(msg.sender,_collectionID) == true || adminsContract.retrieveFunctionAdmin(msg.sender, _selector) == true || adminsContract.retrieveGlobalAdmin(msg.sender) == true, "Not allowed"); _; } // function to add a collection's minting costs function setCollectionCosts(uint256 _collectionID, uint256 _collectionMintCost, uint256 _collectionEndMintCost, uint256 _rate, uint256 _timePeriod, uint8 _salesOption, address _delAddress) public CollectionAdminRequired(_collectionID, this.setCollectionCosts.selector) { require(gencore.retrievewereDataAdded(_collectionID) == true, "Add data"); collectionPhases[_collectionID].collectionMintCost = _collectionMintCost; collectionPhases[_collectionID].collectionEndMintCost = _collectionEndMintCost; collectionPhases[_collectionID].rate = _rate; collectionPhases[_collectionID].timePeriod = _timePeriod; collectionPhases[_collectionID].salesOption = _salesOption; collectionPhases[_collectionID].delAddress = _delAddress; setMintingCosts[_collectionID] = true; } // function to add a collection's minting phases and merkleroot function setCollectionPhases(uint256 _collectionID, uint _allowlistStartTime, uint _allowlistEndTime, uint _publicStartTime, uint _publicEndTime, bytes32 _merkleRoot) public CollectionAdminRequired(_collectionID, this.setCollectionPhases.selector) { require(setMintingCosts[_collectionID] == true, "Set Costs"); collectionPhases[_collectionID].allowlistStartTime = _allowlistStartTime; collectionPhases[_collectionID].allowlistEndTime = _allowlistEndTime; collectionPhases[_collectionID].merkleRoot = _merkleRoot; collectionPhases[_collectionID].publicStartTime = _publicStartTime; collectionPhases[_collectionID].publicEndTime = _publicEndTime; } // airdrop function function airDropTokens(address[] memory _recipients, string[] memory _tokenData, uint256[] memory _saltfun_o, uint256 _collectionID, uint256[] memory _numberOfTokens) public FunctionAdminRequired(this.airDropTokens.selector) { require(gencore.retrievewereDataAdded(_collectionID) == true, "Add data"); uint256 collectionTokenMintIndex; for (uint256 y=0; y< _recipients.length; y++) { collectionTokenMintIndex = gencore.viewTokensIndexMin(_collectionID) + gencore.viewCirSupply(_collectionID) + _numberOfTokens[y] - 1; require(collectionTokenMintIndex <= gencore.viewTokensIndexMax(_collectionID), "No supply"); for(uint256 i = 0; i < _numberOfTokens[y]; i++) { uint256 mintIndex = gencore.viewTokensIndexMin(_collectionID) + gencore.viewCirSupply(_collectionID); gencore.airDropTokens(mintIndex, _recipients[y], _tokenData[y], _saltfun_o[y], _collectionID); } } } // mint function for allowlist or public minting function mint(uint256 _collectionID, uint256 _numberOfTokens, uint256 _maxAllowance, string memory _tokenData, address _mintTo, bytes32[] calldata merkleProof, address _delegator, uint256 _saltfun_o) public payable { require(setMintingCosts[_collectionID] == true && _numberOfTokens > 0, "err"); uint256 col = _collectionID; address mintingAddress; uint256 phase; string memory tokData = _tokenData; if (block.timestamp >= collectionPhases[col].allowlistStartTime && block.timestamp < collectionPhases[col].allowlistEndTime) { phase = 1; bytes32 node; if (_delegator != 0x0000000000000000000000000000000000000000) { bool isAllowedToMint; isAllowedToMint = dmc.retrieveGlobalStatusOfDelegation(_delegator, 0x8888888888888888888888888888888888888888, msg.sender, 1) || dmc.retrieveGlobalStatusOfDelegation(_delegator, 0x8888888888888888888888888888888888888888, msg.sender, 2); if (isAllowedToMint == false) { isAllowedToMint = dmc.retrieveGlobalStatusOfDelegation(_delegator, collectionPhases[col].delAddress, msg.sender, 1) || dmc.retrieveGlobalStatusOfDelegation(_delegator, collectionPhases[col].delAddress, msg.sender, 2); } require(isAllowedToMint == true, "No delegation"); node = keccak256(bytes.concat(keccak256((abi.encodePacked(_delegator, _maxAllowance, tokData))))); require(_maxAllowance >= gencore.retrieveTokensMintedALPerAddress(col, _delegator) + _numberOfTokens, "AL limit"); mintingAddress = _delegator; } else { node = keccak256(bytes.concat(keccak256((abi.encodePacked(msg.sender, _maxAllowance, tokData))))); require(_maxAllowance >= gencore.retrieveTokensMintedALPerAddress(col, msg.sender) + _numberOfTokens, "AL limit"); mintingAddress = msg.sender; } require(MerkleProof.verifyCalldata(merkleProof, collectionPhases[col].merkleRoot, node), 'invalid proof'); } else if (block.timestamp >= collectionPhases[col].publicStartTime && block.timestamp <= collectionPhases[col].publicEndTime) { phase = 2; require(_numberOfTokens <= gencore.viewMaxAllowance(col), "Change no of tokens"); require(gencore.retrieveTokensMintedPublicPerAddress(col, msg.sender) + _numberOfTokens <= gencore.viewMaxAllowance(col), "Max"); mintingAddress = msg.sender; tokData = '"public"'; } else { revert("No minting"); } uint256 collectionTokenMintIndex; collectionTokenMintIndex = gencore.viewTokensIndexMin(col) + gencore.viewCirSupply(col) + _numberOfTokens - 1; require(collectionTokenMintIndex <= gencore.viewTokensIndexMax(col), "No supply"); require(msg.value >= (getPrice(col) * _numberOfTokens), "Wrong ETH"); // refund excess { uint256 excess = calculateExcess(msg.value, getPrice(col) * _numberOfTokens); collectionTotalAmount[col] = collectionTotalAmount[col] + msg.value - excess; } // check mechanism for sale option 3 if (collectionPhases[col].salesOption == 3) { uint timeOfLastMint; if (lastMintDate[col] == 0) { // for only public minting set the allowliststarttime as publicstarttime timeOfLastMint = collectionPhases[col].allowlistStartTime - collectionPhases[col].timePeriod; } else { timeOfLastMint = lastMintDate[col]; } // calculate periods and check if a period has passed in order to allow minting uint tDiff = (block.timestamp - timeOfLastMint) / collectionPhases[col].timePeriod; // users are able to mint after a period passes // unminted tokens from previous periods are transferred for minting into new periods // 1 mint at a time period require(tDiff>=1 && _numberOfTokens == 1, "1 mint/period"); // exclude tokens ex. airdrop tokens so they do not affect lastMintDate lastMintDate[col] = collectionPhases[col].allowlistStartTime + (collectionPhases[col].timePeriod * (gencore.viewCirSupply(col) - excludeTokensCounter[col])); } // mint tokens for(uint256 i = 0; i < _numberOfTokens; i++) { uint256 mintIndex = gencore.viewTokensIndexMin(col) + gencore.viewCirSupply(col); gencore.mint(mintIndex, mintingAddress, _mintTo, tokData, _saltfun_o, col, phase); } } // burn to mint function (does not require contract approval) function burnToMint(uint256 _burnCollectionID, uint256 _tokenId, uint256 _mintCollectionID, uint256 _saltfun_o) public payable { require(setMintingCosts[_mintCollectionID] == true && burnToMintCollections[_burnCollectionID][_mintCollectionID] == true, "init err"); require(block.timestamp >= collectionPhases[_mintCollectionID].publicStartTime && block.timestamp <= collectionPhases[_mintCollectionID].publicEndTime,"No minting"); require ((_tokenId >= gencore.viewTokensIndexMin(_burnCollectionID)) && (_tokenId <= gencore.viewTokensIndexMax(_burnCollectionID)), "col/token id error"); uint256 collectionTokenMintIndex; collectionTokenMintIndex = gencore.viewTokensIndexMin(_mintCollectionID) + gencore.viewCirSupply(_mintCollectionID); require(collectionTokenMintIndex <= gencore.viewTokensIndexMax(_mintCollectionID), "No supply"); require(msg.value >= getPrice(_mintCollectionID), "Wrong ETH"); // refund excess { uint256 excess = calculateExcess(msg.value, getPrice(_mintCollectionID)); collectionTotalAmount[_mintCollectionID] = collectionTotalAmount[_mintCollectionID] + msg.value - excess; } uint256 mintIndex = gencore.viewTokensIndexMin(_mintCollectionID) + gencore.viewCirSupply(_mintCollectionID); // burn and mint token address burner = msg.sender; gencore.burnToMint(mintIndex, _burnCollectionID, _tokenId, _mintCollectionID, _saltfun_o, burner); } // mint and auction function mintAndAuction(address _recipient, string memory _tokenData, uint256 _saltfun_o, uint256 _collectionID, uint _auctionEndTime) public FunctionAdminRequired(this.mintAndAuction.selector) { require(gencore.retrievewereDataAdded(_collectionID) == true, "Add data"); uint256 collectionTokenMintIndex; collectionTokenMintIndex = gencore.viewTokensIndexMin(_collectionID) + gencore.viewCirSupply(_collectionID); require(collectionTokenMintIndex <= gencore.viewTokensIndexMax(_collectionID), "No supply"); uint256 mintIndex = gencore.viewTokensIndexMin(_collectionID) + gencore.viewCirSupply(_collectionID); uint timeOfLastMint; // 1 token per period can be minted and send to auction // time period can be set for any sales model if (lastMintDate[_collectionID] == 0) { // for public sale set the allowliststarttime the same time as publicstarttime timeOfLastMint = collectionPhases[_collectionID].allowlistStartTime - collectionPhases[_collectionID].timePeriod; } else { timeOfLastMint = lastMintDate[_collectionID]; } // calculate periods and check if a period has passed in order to allow minting uint tDiff = (block.timestamp - timeOfLastMint) / collectionPhases[_collectionID].timePeriod; // admins are able to mint after a period passes require(tDiff>=1, "1 mint/period"); lastMintDate[_collectionID] = collectionPhases[_collectionID].allowlistStartTime + (collectionPhases[_collectionID].timePeriod * ((gencore.viewCirSupply(_collectionID) - excludeTokensCounter[_collectionID]))); require(_auctionEndTime >= block.timestamp + 600); // 10mins min auction mintToAuctionData[mintIndex] = _auctionEndTime; mintToAuctionStatus[mintIndex] = true; // token is airdropped to the _recipient address gencore.airDropTokens(mintIndex, _recipient, _tokenData, _saltfun_o, _collectionID); } // function to exclude a specific no of tokens during sales model 3 or reset lastMintDate function excludeTokensOrResetLD(uint256 _option, uint256 _collectionID, uint256 _excludeCounter) public FunctionAdminRequired(this.excludeTokensOrResetLD.selector) { if (_option == 1) { excludeTokensCounter[_collectionID] = _excludeCounter; } else { lastMintDate[_collectionID] = 0; } } // function to refund any excess amount function calculateExcess(uint256 _value, uint256 _price) internal returns(uint256) { uint256 excess; excess = _value - _price; (bool success1, ) = payable(msg.sender).call{value: excess}(""); require(success1, "ETH failed"); return(excess); } // function to initialize burn to mint for NextGen collections function initializeBurn(uint256 _burnCollectionID, uint256 _mintCollectionID, bool _status) public FunctionAdminRequired(this.initializeBurn.selector) { require((gencore.retrievewereDataAdded(_burnCollectionID) == true) && (gencore.retrievewereDataAdded(_mintCollectionID) == true), "No data"); burnToMintCollections[_burnCollectionID][_mintCollectionID] = _status; } // function to initialize external burn or swap to mint function initializeExternalBurnOrSwap(address _erc721Collection, uint256 _burnCollectionID, uint256 _mintCollectionID, uint256 _tokmin, uint256 _tokmax, address _burnOrSwapAddress, bool _status) public FunctionAdminRequired(this.initializeExternalBurnOrSwap.selector) { bytes32 externalCol = keccak256(abi.encodePacked(_erc721Collection,_burnCollectionID)); require((gencore.retrievewereDataAdded(_mintCollectionID) == true), "No data"); burnExternalToMintCollections[externalCol][_mintCollectionID] = _status; burnOrSwapAddress[externalCol] = _burnOrSwapAddress; burnOrSwapIds[externalCol][0] = _tokmin; burnOrSwapIds[externalCol][1] = _tokmax; } // burn or swap to mint (requires contract approval) function burnOrSwapExternalToMint(address _erc721Collection, uint256 _burnCollectionID, uint256 _tokenId, uint256 _mintCollectionID, string memory _tokenData, bytes32[] calldata merkleProof, uint256 _saltfun_o) public payable { bytes32 externalCol = keccak256(abi.encodePacked(_erc721Collection,_burnCollectionID)); require(setMintingCosts[_mintCollectionID] == true && burnExternalToMintCollections[externalCol][_mintCollectionID] == true, "init err"); address ownerOfToken = IERC721(_erc721Collection).ownerOf(_tokenId); if (msg.sender != ownerOfToken) { bool isAllowedToMint; isAllowedToMint = dmc.retrieveGlobalStatusOfDelegation(ownerOfToken, 0x8888888888888888888888888888888888888888, msg.sender, 1) || dmc.retrieveGlobalStatusOfDelegation(ownerOfToken, 0x8888888888888888888888888888888888888888, msg.sender, 2); if (isAllowedToMint == false) { isAllowedToMint = dmc.retrieveGlobalStatusOfDelegation(ownerOfToken, _erc721Collection, msg.sender, 1) || dmc.retrieveGlobalStatusOfDelegation(ownerOfToken, _erc721Collection, msg.sender, 2); } require(isAllowedToMint == true, "No delegation"); } require(_tokenId >= burnOrSwapIds[externalCol][0] && _tokenId <= burnOrSwapIds[externalCol][1], "Token id does not match"); IERC721(_erc721Collection).safeTransferFrom(ownerOfToken, burnOrSwapAddress[externalCol], _tokenId); uint256 col = _mintCollectionID; address mintingAddress; uint256 phase; string memory tokData = _tokenData; if (block.timestamp >= collectionPhases[col].allowlistStartTime && block.timestamp < collectionPhases[col].allowlistEndTime) { phase = 1; bytes32 node; node = keccak256(bytes.concat(keccak256((abi.encodePacked(_tokenId, tokData))))); mintingAddress = ownerOfToken; require(MerkleProof.verifyCalldata(merkleProof, collectionPhases[col].merkleRoot, node), 'invalid proof'); } else if (block.timestamp >= collectionPhases[col].publicStartTime && block.timestamp <= collectionPhases[col].publicEndTime) { phase = 2; mintingAddress = ownerOfToken; tokData = '"public"'; } else { revert("No minting"); } uint256 collectionTokenMintIndex; collectionTokenMintIndex = gencore.viewTokensIndexMin(col) + gencore.viewCirSupply(col); require(collectionTokenMintIndex <= gencore.viewTokensIndexMax(col), "No supply"); require(msg.value >= getPrice(col), "Wrong ETH"); // refund excess { uint256 excess = calculateExcess(msg.value, getPrice(col)); collectionTotalAmount[col] = collectionTotalAmount[col] + msg.value - excess; } uint256 mintIndex = gencore.viewTokensIndexMin(col) + gencore.viewCirSupply(col); gencore.mint(mintIndex, mintingAddress, ownerOfToken, tokData, _saltfun_o, col, phase); } // function to set primary splits function setPrimaryAndSecondarySplits(uint256 _collectionID, uint256 _artistPrSplit, uint256 _teamPrSplit, uint256 _artistSecSplit, uint256 _teamSecSplit) public FunctionAdminRequired(this.setPrimaryAndSecondarySplits.selector) { require(_artistPrSplit + _teamPrSplit == 100, "splits need to be 100%"); require(_artistSecSplit + _teamSecSplit == 100, "splits need to be 100%"); collectionRoyaltiesPrimarySplits[_collectionID].artistPercentage = _artistPrSplit; collectionRoyaltiesPrimarySplits[_collectionID].teamPercentage = _teamPrSplit; collectionRoyaltiesSecondarySplits[_collectionID].artistPercentage = _artistSecSplit; collectionRoyaltiesSecondarySplits[_collectionID].teamPercentage = _teamSecSplit; } // function to propose primary addresses and percentages for each address function proposePrimaryAddressesAndPercentages(uint256 _collectionID, address _primaryAdd1, address _primaryAdd2, address _primaryAdd3, uint256 _add1Percentage, uint256 _add2Percentage, uint256 _add3Percentage) public ArtistOrAdminRequired(_collectionID, this.proposePrimaryAddressesAndPercentages.selector) { require (collectionArtistPrimaryAddresses[_collectionID].approvedStatus == false, "Already approved"); require (_add1Percentage + _add2Percentage + _add3Percentage == collectionRoyaltiesPrimarySplits[_collectionID].artistPercentage, "Check %"); collectionArtistPrimaryAddresses[_collectionID].primaryAdd1 = _primaryAdd1; collectionArtistPrimaryAddresses[_collectionID].primaryAdd2 = _primaryAdd2; collectionArtistPrimaryAddresses[_collectionID].primaryAdd3 = _primaryAdd3; collectionArtistPrimaryAddresses[_collectionID].add1Percentage = _add1Percentage; collectionArtistPrimaryAddresses[_collectionID].add2Percentage = _add2Percentage; collectionArtistPrimaryAddresses[_collectionID].add3Percentage = _add3Percentage; collectionArtistPrimaryAddresses[_collectionID].setStatus = true; collectionArtistPrimaryAddresses[_collectionID].approvedStatus = false; } // function to propose secondary addresses and percentages for each address function proposeSecondaryAddressesAndPercentages(uint256 _collectionID, address _secondaryAdd1, address _secondaryAdd2, address _secondaryAdd3, uint256 _add1Percentage, uint256 _add2Percentage, uint256 _add3Percentage) public ArtistOrAdminRequired(_collectionID, this.proposeSecondaryAddressesAndPercentages.selector) { require (collectionArtistSecondaryAddresses[_collectionID].approvedStatus == false, "Already approved"); require (_add1Percentage + _add2Percentage + _add3Percentage == collectionRoyaltiesSecondarySplits[_collectionID].artistPercentage, "Check %"); collectionArtistSecondaryAddresses[_collectionID].secondaryAdd1 = _secondaryAdd1; collectionArtistSecondaryAddresses[_collectionID].secondaryAdd2 = _secondaryAdd2; collectionArtistSecondaryAddresses[_collectionID].secondaryAdd3 = _secondaryAdd3; collectionArtistSecondaryAddresses[_collectionID].add1Percentage = _add1Percentage; collectionArtistSecondaryAddresses[_collectionID].add2Percentage = _add2Percentage; collectionArtistSecondaryAddresses[_collectionID].add3Percentage = _add3Percentage; collectionArtistSecondaryAddresses[_collectionID].setStatus = true; collectionArtistSecondaryAddresses[_collectionID].approvedStatus = false; } // function to accept primary addresses and percentages function acceptAddressesAndPercentages(uint256 _collectionID, bool _statusPrimary, bool _statusSecondary) public FunctionAdminRequired(this.acceptAddressesAndPercentages.selector) { require(collectionArtistPrimaryAddresses[_collectionID].setStatus == true && collectionArtistSecondaryAddresses[_collectionID].setStatus == true, "Propose Addresses"); collectionArtistPrimaryAddresses[_collectionID].approvedStatus = _statusPrimary; collectionArtistSecondaryAddresses[_collectionID].approvedStatus = _statusSecondary; if (_statusPrimary == false) { collectionArtistPrimaryAddresses[_collectionID].setStatus = false; } else if (_statusSecondary == false) { collectionArtistSecondaryAddresses[_collectionID].setStatus = false; } } // function to transfer funds to the artist and team function payArtist(uint256 _collectionID, address _team1, address _team2, uint256 _teamperc1, uint256 _teamperc2) public FunctionAdminRequired(this.payArtist.selector) { require(collectionArtistPrimaryAddresses[_collectionID].approvedStatus == true, "Accept Royalties"); require(collectionTotalAmount[_collectionID] > 0, "Collection Balance must be grater than 0"); require(collectionRoyaltiesPrimarySplits[_collectionID].artistPercentage + _teamperc1 + _teamperc2 == 100, "Change percentages"); uint256 royalties = collectionTotalAmount[_collectionID]; collectionTotalAmount[_collectionID] = 0; address tm1 = _team1; address tm2 = _team2; uint256 colId = _collectionID; uint256 artistRoyalties1; uint256 artistRoyalties2; uint256 artistRoyalties3; uint256 teamRoyalties1; uint256 teamRoyalties2; artistRoyalties1 = royalties * collectionArtistPrimaryAddresses[colId].add1Percentage / 100; artistRoyalties2 = royalties * collectionArtistPrimaryAddresses[colId].add2Percentage / 100; artistRoyalties3 = royalties * collectionArtistPrimaryAddresses[colId].add3Percentage / 100; teamRoyalties1 = royalties * _teamperc1 / 100; teamRoyalties2 = royalties * _teamperc2 / 100; (bool success1, ) = payable(collectionArtistPrimaryAddresses[colId].primaryAdd1).call{value: artistRoyalties1}(""); (bool success2, ) = payable(collectionArtistPrimaryAddresses[colId].primaryAdd2).call{value: artistRoyalties2}(""); (bool success3, ) = payable(collectionArtistPrimaryAddresses[colId].primaryAdd3).call{value: artistRoyalties3}(""); (bool success4, ) = payable(tm1).call{value: teamRoyalties1}(""); (bool success5, ) = payable(tm2).call{value: teamRoyalties2}(""); require(success1, "ETH failed"); require(success2, "ETH failed"); require(success3, "ETH failed"); require(success4, "ETH failed"); require(success5, "ETH failed"); } // function to update core contract function updateCoreContract(address _gencore) public FunctionAdminRequired(this.updateCoreContract.selector) { gencore = INextGenCore(_gencore); } // function to update admin contract function updateAdminContract(address _newadminsContract) public FunctionAdminRequired(this.updateAdminContract.selector) { require(INextGenAdmins(_newadminsContract).isAdminContract() == true, "Contract is not Admin"); adminsContract = INextGenAdmins(_newadminsContract); } // function to withdraw any balance from the smart contract function emergencyWithdraw() public FunctionAdminRequired(this.emergencyWithdraw.selector) { uint balance = address(this).balance; address admin = adminsContract.owner(); (bool success, ) = payable(admin).call{value: balance}(""); require(success, "ETH failed"); emit Withdraw(msg.sender, success, balance); } // function to retrieve primary splits between artist and team function retrievePrimarySplits(uint256 _collectionID) public view returns(uint256, uint256){ return (collectionRoyaltiesPrimarySplits[_collectionID].artistPercentage, collectionRoyaltiesPrimarySplits[_collectionID].teamPercentage); } // function to retrieve primary addresses and percentages function retrievePrimaryAddressesAndPercentages(uint256 _collectionID) public view returns(address, address, address, uint256, uint256, uint256, bool){ return (collectionArtistPrimaryAddresses[_collectionID].primaryAdd1, collectionArtistPrimaryAddresses[_collectionID].primaryAdd2, collectionArtistPrimaryAddresses[_collectionID].primaryAdd3, collectionArtistPrimaryAddresses[_collectionID].add1Percentage, collectionArtistPrimaryAddresses[_collectionID].add2Percentage, collectionArtistPrimaryAddresses[_collectionID].add3Percentage, collectionArtistPrimaryAddresses[_collectionID].approvedStatus); } // function to retrieve secondary splits between artist and team function retrieveSecondarySplits(uint256 _collectionID) public view returns(uint256, uint256){ return (collectionRoyaltiesSecondarySplits[_collectionID].artistPercentage, collectionRoyaltiesSecondarySplits[_collectionID].teamPercentage); } // function to retrieve secondary addresses and percentages function retrieveSecondaryAddressesAndPercentages(uint256 _collectionID) public view returns(address, address, address, uint256, uint256, uint256, bool){ return (collectionArtistSecondaryAddresses[_collectionID].secondaryAdd1, collectionArtistSecondaryAddresses[_collectionID].secondaryAdd2, collectionArtistSecondaryAddresses[_collectionID].secondaryAdd3, collectionArtistSecondaryAddresses[_collectionID].add1Percentage, collectionArtistSecondaryAddresses[_collectionID].add2Percentage, collectionArtistSecondaryAddresses[_collectionID].add3Percentage, collectionArtistSecondaryAddresses[_collectionID].approvedStatus); } // function to retrieve the phases and merkle root of a collection function retrieveCollectionPhases(uint256 _collectionID) public view returns(uint, uint, bytes32, uint, uint){ return (collectionPhases[_collectionID].allowlistStartTime, collectionPhases[_collectionID].allowlistEndTime, collectionPhases[_collectionID].merkleRoot, collectionPhases[_collectionID].publicStartTime, collectionPhases[_collectionID].publicEndTime); } // function to retrieve the minting details of a collection function retrieveCollectionMintingDetails(uint256 _collectionID) public view returns(uint256, uint256, uint256, uint256, uint8, address){ return (collectionPhases[_collectionID].collectionMintCost, collectionPhases[_collectionID].collectionEndMintCost, collectionPhases[_collectionID].rate, collectionPhases[_collectionID].timePeriod, collectionPhases[_collectionID].salesOption, collectionPhases[_collectionID].delAddress); } // retrieve minter contract status function isMinterContract() external view returns (bool) { return true; } // retrieve minting end time function getEndTime(uint256 _collectionID) external view returns (uint) { return collectionPhases[_collectionID].publicEndTime; } // retrieve auction end time function getAuctionEndTime(uint256 _tokenId) external view returns (uint) { return mintToAuctionData[_tokenId]; } // retrieve auction status function getAuctionStatus(uint256 _tokenId) external view returns (bool) { return mintToAuctionStatus[_tokenId]; } // retrieve the minting price of collection function getPrice(uint256 _collectionId) public view returns (uint256) { uint tDiff; if (collectionPhases[_collectionId].salesOption == 3) { // periodic sale model // if rate > 0 minting price increases by rate (percentage) during each mint if (collectionPhases[_collectionId].rate > 0) { return collectionPhases[_collectionId].collectionMintCost + ((collectionPhases[_collectionId].collectionMintCost * collectionPhases[_collectionId].rate / 100) * (gencore.viewCirSupply(_collectionId) - excludeTokensCounter[_collectionId])); } else { return collectionPhases[_collectionId].collectionMintCost; } } else if (collectionPhases[_collectionId].salesOption == 2 && block.timestamp >= collectionPhases[_collectionId].allowlistStartTime && block.timestamp <= collectionPhases[_collectionId].publicEndTime){ // decreases during a time period // if only public minting set allowlistStartTime = publicStartTime // if rate = 0 exponential descending model, otherwise, linear descending model // if rate is set the linear decrase each period per rate tDiff = (block.timestamp - collectionPhases[_collectionId].allowlistStartTime) / collectionPhases[_collectionId].timePeriod; uint256 price; uint256 decreaserate; if (collectionPhases[_collectionId].rate == 0) { price = collectionPhases[_collectionId].collectionMintCost / (tDiff + 1); decreaserate = ((price - (collectionPhases[_collectionId].collectionMintCost / (tDiff + 2))) / collectionPhases[_collectionId].timePeriod) * ((block.timestamp - (tDiff * collectionPhases[_collectionId].timePeriod) - collectionPhases[_collectionId].allowlistStartTime)); } else { if (((collectionPhases[_collectionId].collectionMintCost - collectionPhases[_collectionId].collectionEndMintCost) / (collectionPhases[_collectionId].rate)) >= tDiff) { price = collectionPhases[_collectionId].collectionMintCost - (tDiff * collectionPhases[_collectionId].rate); } else { price = collectionPhases[_collectionId].collectionEndMintCost; } } if (price - decreaserate > collectionPhases[_collectionId].collectionEndMintCost) { return price - decreaserate; } else { return collectionPhases[_collectionId].collectionEndMintCost; } } else { // fixed price model return collectionPhases[_collectionId].collectionMintCost; } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.18; /** * @dev Interface module which provides a basic access control mechanism of the NFT Delegation Smart Contract */ interface IDelegationManagementContract { /** * @notice Returns an array of all delegation addresses (active AND inactive) assigned by a delegator for a specific use case on a specific NFT collection */ function retrieveDelegationAddresses(address _delegatorAddress, address _collectionAddress, uint256 _useCase) external view returns (address[] memory); /** * @notice Returns an array of all delegators (active AND inactive) that delegated to a delegationAddress for a specific use case on a specific NFT collection */ function retrieveDelegators(address _delegationAddress, address _collectionAddress, uint256 _useCase) external view returns (address[] memory); /** * @notice Returns an array of all active delegators on a certain date for a specific use case on a specific NFT collection given a delegation Address */ function retrieveActiveDelegators(address _delegationAddress, address _collectionAddress, uint256 _date, uint256 _useCase) external view returns (address[] memory); /** * @notice Returns the most recent delegation address delegated for a specific use case on a specific NFT collection */ function retrieveMostRecentDelegation(address _delegatorAddress, address _collectionAddress, uint256 _useCase) external view returns (address); /** * @notice Returns the most recent delegator for a specific use case on a specific NFT collection given a delegation Address */ function retrieveMostRecentDelegator(address _delegationAddress, address _collectionAddress, uint256 _useCase) external view returns (address); /** * @notice Returns the status of a delegation given the delegator address as well as the delegation address */ function retrieveGlobalStatusOfDelegation(address _delegatorAddress, address _collectionAddress, address _delegationAddress, uint256 _useCase) external view returns (bool); /** * @notice Returns the status of a delegation given the delegator address, the collection address, the delegation address as well as a specific token id */ function retrieveTokenStatus(address _delegatorAddress, address _collectionAddress, address _delegationAddress, uint256 _useCase, uint256 _tokenId) external view returns (bool); /** * @notice Checks if the delegation address performing actions is the most recent delegated by the specific delegator */ function retrieveStatusOfMostRecentDelegation(address _delegatorAddress, address _collectionAddress, address _delegationAddress, uint256 _useCase) external view returns (bool); /** * @notice Checks if a delegator granted subdelegation status to an Address */ function retrieveSubDelegationStatus(address _delegatorAddress, address _collectionAddress, address _delegationAddress) external view returns (bool); /** * @notice Checks the status of an active delegator for a delegation Address */ function retrieveStatusOfActiveDelegator(address _delegatorAddress, address _collectionAddress, address _delegationAddress, uint256 _date, uint256 _useCase) external view returns (bool); /** * @notice This function checks the Consolidation status between 2 addresses */ function checkConsolidationStatus(address _wallet1, address _wallet2, address _collectionAddress) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ import "./IERC165.sol"; interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must * understand this adds an external call which potentially creates a reentrancy vulnerability. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.19; interface INextGenAdmins { // retrieve global admin function retrieveGlobalAdmin(address _address) external view returns(bool); // retrieve function admin function retrieveFunctionAdmin(address _address, bytes4 _selector) external view returns(bool); // retrieve collection admin function retrieveCollectionAdmin(address _address, uint256 _collectionID) external view returns(bool); // retrieve if the contract is admin contract function isAdminContract() external view returns (bool); // retrieve owner function owner() external view returns (address); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.19; interface INextGenCore { function retrievewereDataAdded(uint256 _collectionID) external view returns(bool); function viewTokensIndexMin(uint256 _collectionID) external view returns (uint256); function viewTokensIndexMax(uint256 _collectionID) external view returns (uint256); function viewCirSupply(uint256 _collectionID) external view returns (uint256); function airDropTokens(uint256 mintIndex, address _recipient, string memory _tokenData, uint256 _saltfun_o, uint256 _collectionID) external; function mint(uint256 mintIndex, address _mintingAddress , address _mintTo, string memory _tokenData, uint256 _saltfun_o, uint256 _collectionID, uint256 phase) external; function collectionFreezeStatus(uint256 _collectionID) external view returns(bool); function viewMaxAllowance(uint256 _collectionID) external view returns (uint256); function retrieveTokensMintedALPerAddress(uint256 _collectionID, address _address) external view returns(uint256); function retrieveTokensMintedPublicPerAddress(uint256 _collectionID, address _address) external view returns(uint256); function viewColIDforTokenID(uint256 _tokenid) external view returns (uint256); function burnToMint(uint256 mintIndex, uint256 _burnCollectionID, uint256 _tokenId, uint256 _mintCollectionID, uint256 _saltfun_o, address burner) external; function retrieveArtistAddress(uint256 _collectionID) external view returns(address); function setTokenHash(uint256 _collectionID, uint256 _mintIndex, bytes32 _hash) external; function retrieveTokenHash(uint256 _tokenid) external view returns(bytes32); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.18; /** * @dev These functions deal with verification of Merkle Tree proofs. * * The tree and the proofs can be generated using our * https://github.com/OpenZeppelin/merkle-tree[JavaScript library]. * You will find a quickstart guide in the readme. * * WARNING: You should avoid using leaf values that are 64 bytes long prior to * hashing, or use a hash function other than keccak256 for hashing leaves. * This is because the concatenation of a sorted pair of internal nodes in * the merkle tree could be reinterpreted as a leaf value. * OpenZeppelin's JavaScript library generates merkle trees that are safe * against this attack out of the box. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify(bytes32[] memory proof, bytes32 root, bytes32 leaf) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Calldata version of {verify} * * _Available since v4.7._ */ function verifyCalldata(bytes32[] calldata proof, bytes32 root, bytes32 leaf) internal pure returns (bool) { return processProofCalldata(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { computedHash = _hashPair(computedHash, proof[i]); } return computedHash; } /** * @dev Calldata version of {processProof} * * _Available since v4.7._ */ function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { computedHash = _hashPair(computedHash, proof[i]); } return computedHash; } /** * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a merkle tree defined by * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}. * * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details. * * _Available since v4.7._ */ function multiProofVerify( bytes32[] memory proof, bool[] memory proofFlags, bytes32 root, bytes32[] memory leaves ) internal pure returns (bool) { return processMultiProof(proof, proofFlags, leaves) == root; } /** * @dev Calldata version of {multiProofVerify} * * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details. * * _Available since v4.7._ */ function multiProofVerifyCalldata( bytes32[] calldata proof, bool[] calldata proofFlags, bytes32 root, bytes32[] memory leaves ) internal pure returns (bool) { return processMultiProofCalldata(proof, proofFlags, leaves) == root; } /** * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false * respectively. * * CAUTION: Not all merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer). * * _Available since v4.7._ */ function processMultiProof( bytes32[] memory proof, bool[] memory proofFlags, bytes32[] memory leaves ) internal pure returns (bytes32 merkleRoot) { // This function rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of // the merkle tree. uint256 leavesLen = leaves.length; uint256 totalHashes = proofFlags.length; // Check proof validity. require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof"); // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop". bytes32[] memory hashes = new bytes32[](totalHashes); uint256 leafPos = 0; uint256 hashPos = 0; uint256 proofPos = 0; // At each step, we compute the next hash using two values: // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we // get the next hash. // - depending on the flag, either another value from the "main queue" (merging branches) or an element from the // `proof` array. for (uint256 i = 0; i < totalHashes; i++) { bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]; bytes32 b = proofFlags[i] ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]) : proof[proofPos++]; hashes[i] = _hashPair(a, b); } if (totalHashes > 0) { unchecked { return hashes[totalHashes - 1]; } } else if (leavesLen > 0) { return leaves[0]; } else { return proof[0]; } } /** * @dev Calldata version of {processMultiProof}. * * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details. * * _Available since v4.7._ */ function processMultiProofCalldata( bytes32[] calldata proof, bool[] calldata proofFlags, bytes32[] memory leaves ) internal pure returns (bytes32 merkleRoot) { // This function rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of // the merkle tree. uint256 leavesLen = leaves.length; uint256 totalHashes = proofFlags.length; // Check proof validity. require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof"); // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop". bytes32[] memory hashes = new bytes32[](totalHashes); uint256 leafPos = 0; uint256 hashPos = 0; uint256 proofPos = 0; // At each step, we compute the next hash using two values: // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we // get the next hash. // - depending on the flag, either another value from the "main queue" (merging branches) or an element from the // `proof` array. for (uint256 i = 0; i < totalHashes; i++) { bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]; bytes32 b = proofFlags[i] ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]) : proof[proofPos++]; hashes[i] = _hashPair(a, b); } if (totalHashes > 0) { unchecked { return hashes[totalHashes - 1]; } } else if (leavesLen > 0) { return leaves[0]; } else { return proof[0]; } } function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) { return a < b ? _efficientHash(a, b) : _efficientHash(b, a); } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { /// @solidity memory-safe-assembly assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_gencore","type":"address"},{"internalType":"address","name":"_del","type":"address"},{"internalType":"address","name":"_adminsContract","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_add","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"},{"indexed":true,"internalType":"uint256","name":"funds","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"uint256","name":"_collectionID","type":"uint256"},{"internalType":"bool","name":"_statusPrimary","type":"bool"},{"internalType":"bool","name":"_statusSecondary","type":"bool"}],"name":"acceptAddressesAndPercentages","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_recipients","type":"address[]"},{"internalType":"string[]","name":"_tokenData","type":"string[]"},{"internalType":"uint256[]","name":"_saltfun_o","type":"uint256[]"},{"internalType":"uint256","name":"_collectionID","type":"uint256"},{"internalType":"uint256[]","name":"_numberOfTokens","type":"uint256[]"}],"name":"airDropTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"burnExternalToMintCollections","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"burnOrSwapAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_erc721Collection","type":"address"},{"internalType":"uint256","name":"_burnCollectionID","type":"uint256"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_mintCollectionID","type":"uint256"},{"internalType":"string","name":"_tokenData","type":"string"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"},{"internalType":"uint256","name":"_saltfun_o","type":"uint256"}],"name":"burnOrSwapExternalToMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_burnCollectionID","type":"uint256"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_mintCollectionID","type":"uint256"},{"internalType":"uint256","name":"_saltfun_o","type":"uint256"}],"name":"burnToMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"burnToMintCollections","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"collectionTotalAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dmc","outputs":[{"internalType":"contract IDelegationManagementContract","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"excludeTokensCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_option","type":"uint256"},{"internalType":"uint256","name":"_collectionID","type":"uint256"},{"internalType":"uint256","name":"_excludeCounter","type":"uint256"}],"name":"excludeTokensOrResetLD","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gencore","outputs":[{"internalType":"contract INextGenCore","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getAuctionEndTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getAuctionStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_collectionID","type":"uint256"}],"name":"getEndTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_collectionId","type":"uint256"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_burnCollectionID","type":"uint256"},{"internalType":"uint256","name":"_mintCollectionID","type":"uint256"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"initializeBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_erc721Collection","type":"address"},{"internalType":"uint256","name":"_burnCollectionID","type":"uint256"},{"internalType":"uint256","name":"_mintCollectionID","type":"uint256"},{"internalType":"uint256","name":"_tokmin","type":"uint256"},{"internalType":"uint256","name":"_tokmax","type":"uint256"},{"internalType":"address","name":"_burnOrSwapAddress","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"initializeExternalBurnOrSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isMinterContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"lastMintDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_collectionID","type":"uint256"},{"internalType":"uint256","name":"_numberOfTokens","type":"uint256"},{"internalType":"uint256","name":"_maxAllowance","type":"uint256"},{"internalType":"string","name":"_tokenData","type":"string"},{"internalType":"address","name":"_mintTo","type":"address"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"},{"internalType":"address","name":"_delegator","type":"address"},{"internalType":"uint256","name":"_saltfun_o","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"string","name":"_tokenData","type":"string"},{"internalType":"uint256","name":"_saltfun_o","type":"uint256"},{"internalType":"uint256","name":"_collectionID","type":"uint256"},{"internalType":"uint256","name":"_auctionEndTime","type":"uint256"}],"name":"mintAndAuction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_collectionID","type":"uint256"},{"internalType":"address","name":"_team1","type":"address"},{"internalType":"address","name":"_team2","type":"address"},{"internalType":"uint256","name":"_teamperc1","type":"uint256"},{"internalType":"uint256","name":"_teamperc2","type":"uint256"}],"name":"payArtist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_collectionID","type":"uint256"},{"internalType":"address","name":"_primaryAdd1","type":"address"},{"internalType":"address","name":"_primaryAdd2","type":"address"},{"internalType":"address","name":"_primaryAdd3","type":"address"},{"internalType":"uint256","name":"_add1Percentage","type":"uint256"},{"internalType":"uint256","name":"_add2Percentage","type":"uint256"},{"internalType":"uint256","name":"_add3Percentage","type":"uint256"}],"name":"proposePrimaryAddressesAndPercentages","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_collectionID","type":"uint256"},{"internalType":"address","name":"_secondaryAdd1","type":"address"},{"internalType":"address","name":"_secondaryAdd2","type":"address"},{"internalType":"address","name":"_secondaryAdd3","type":"address"},{"internalType":"uint256","name":"_add1Percentage","type":"uint256"},{"internalType":"uint256","name":"_add2Percentage","type":"uint256"},{"internalType":"uint256","name":"_add3Percentage","type":"uint256"}],"name":"proposeSecondaryAddressesAndPercentages","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_collectionID","type":"uint256"}],"name":"retrieveCollectionMintingDetails","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_collectionID","type":"uint256"}],"name":"retrieveCollectionPhases","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_collectionID","type":"uint256"}],"name":"retrievePrimaryAddressesAndPercentages","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_collectionID","type":"uint256"}],"name":"retrievePrimarySplits","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_collectionID","type":"uint256"}],"name":"retrieveSecondaryAddressesAndPercentages","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_collectionID","type":"uint256"}],"name":"retrieveSecondarySplits","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_collectionID","type":"uint256"},{"internalType":"uint256","name":"_collectionMintCost","type":"uint256"},{"internalType":"uint256","name":"_collectionEndMintCost","type":"uint256"},{"internalType":"uint256","name":"_rate","type":"uint256"},{"internalType":"uint256","name":"_timePeriod","type":"uint256"},{"internalType":"uint8","name":"_salesOption","type":"uint8"},{"internalType":"address","name":"_delAddress","type":"address"}],"name":"setCollectionCosts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_collectionID","type":"uint256"},{"internalType":"uint256","name":"_allowlistStartTime","type":"uint256"},{"internalType":"uint256","name":"_allowlistEndTime","type":"uint256"},{"internalType":"uint256","name":"_publicStartTime","type":"uint256"},{"internalType":"uint256","name":"_publicEndTime","type":"uint256"},{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setCollectionPhases","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_collectionID","type":"uint256"},{"internalType":"uint256","name":"_artistPrSplit","type":"uint256"},{"internalType":"uint256","name":"_teamPrSplit","type":"uint256"},{"internalType":"uint256","name":"_artistSecSplit","type":"uint256"},{"internalType":"uint256","name":"_teamSecSplit","type":"uint256"}],"name":"setPrimaryAndSecondarySplits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newadminsContract","type":"address"}],"name":"updateAdminContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_gencore","type":"address"}],"name":"updateCoreContract","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040516200606138038062006061833981016040819052620000349162000094565b600f80546001600160a01b039485166001600160a01b031991821617909155601080549385169382169390931790925560118054919093169116179055620000de565b80516001600160a01b03811681146200008f57600080fd5b919050565b600080600060608486031215620000aa57600080fd5b620000b58462000077565b9250620000c56020850162000077565b9150620000d56040850162000077565b90509250925092565b615f7380620000ee6000396000f3fe6080604052600436106101ea5760003560e01c8063930e79f111610113578063b986eaa7116100ab578063d418baec1161006f578063d418baec14610887578063d6516f47146108a7578063db2e21bc146108c7578063e7572230146108dc578063fb9422ff146108fc57600080fd5b8063b986eaa714610758578063bf40b89a14610778578063bfc4b8a7146107ad578063d2f4302f146107cd578063d3be0bc1146107ed57600080fd5b8063930e79f11461057557806394e76daf146105a257806395190946146106105780639e424a9314610653578063a048901c146106c5578063a3167156146106d8578063b047168f14610705578063b5bc955f14610718578063b85f97a01461073857600080fd5b806346372ba61161018657806346372ba6146103e25780634aa7df07146104025780634c29c6f21461044d5780635ac57d8b1461046d578063669ab82f1461048d57806371b084f3146104c85780637765c52c146104f55780637e04bcb7146105255780639067b6771461054557600080fd5b806302d61853146101ef578063037528501461022f5780631253e16d146102445780631c7a8b22146102645780632b673a2e146102845780632ebc24b3146102a4578063388d2c24146102c45780633b964798146102e45780633d205e081461032e575b600080fd5b3480156101fb57600080fd5b5061021c61020a366004615200565b60026020526000908152604090205481565b6040519081526020015b60405180910390f35b61024261023d366004615331565b610910565b005b34801561025057600080fd5b5061024261025f3660046153df565b611206565b34801561027057600080fd5b5061024261027f366004615418565b61144f565b34801561029057600080fd5b5061024261029f366004615486565b6116e5565b3480156102b057600080fd5b506102426102bf3660046154a3565b611820565b3480156102d057600080fd5b506102426102df366004615486565b611dad565b3480156102f057600080fd5b506103196102ff366004615200565b600090815260096020526040902080546001909101549091565b60408051928352602083019190915201610226565b34801561033a57600080fd5b5061039c610349366004615200565b6000908152600a602052604090208054600182015460028301546003840154600485015460058601546006909601546001600160a01b039586169794861696959093169491939092610100900460ff1690565b604080516001600160a01b039889168152968816602088015294909616938501939093526060840191909152608083015260a082015290151560c082015260e001610226565b3480156103ee57600080fd5b506102426103fd3660046154f5565b611f93565b34801561040e57600080fd5b5061043d61041d36600461555f565b600660209081526000928352604080842090915290825290205460ff1681565b6040519015158152602001610226565b34801561045957600080fd5b50610242610468366004615581565b6125a8565b34801561047957600080fd5b50610242610488366004615700565b6127e0565b34801561049957600080fd5b5061043d6104a836600461555f565b600560209081526000928352604080842090915290825290205460ff1681565b3480156104d457600080fd5b5061021c6104e3366004615200565b60016020526000908152604090205481565b34801561050157600080fd5b5061043d610510366004615200565b6000908152600e602052604090205460ff1690565b34801561053157600080fd5b50610242610540366004615418565b612d2b565b34801561055157600080fd5b5061021c610560366004615200565b60009081526008602052604090206003015490565b34801561058157600080fd5b5061021c610590366004615200565b6000908152600d602052604090205490565b3480156105ae57600080fd5b5061039c6105bd366004615200565b6000908152600c602052604090208054600182015460028301546003840154600485015460058601546006909601546001600160a01b039586169794861696959093169491939092610100900460ff1690565b34801561061c57600080fd5b5061064661062b366004615200565b6003602052600090815260409020546001600160a01b031681565b6040516102269190615814565b34801561065f57600080fd5b5061069d61066e366004615200565b600090815260086020526040902080546001820154600483015460028401546003909401549294919390929091565b604080519586526020860194909452928401919091526060830152608082015260a001610226565b6102426106d3366004615828565b612fc1565b3480156106e457600080fd5b5061021c6106f3366004615200565b60006020819052908152604090205481565b61024261071336600461585a565b6134ee565b34801561072457600080fd5b50600f54610646906001600160a01b031681565b34801561074457600080fd5b50610242610753366004615912565b614182565b34801561076457600080fd5b50610242610773366004615955565b61439e565b34801561078457600080fd5b50610319610793366004615200565b6000908152600b6020526040902080546001909101549091565b3480156107b957600080fd5b50601054610646906001600160a01b031681565b3480156107d957600080fd5b506102426107e8366004615981565b6144ea565b3480156107f957600080fd5b5061084e610808366004615200565b600090815260086020819052604090912060058101546006820154928201546007830154600990930154919490929160ff8116916101009091046001600160a01b031690565b60408051968752602087019590955293850192909252606084015260ff1660808301526001600160a01b031660a082015260c001610226565b34801561089357600080fd5b506102426108a23660046159e0565b61478a565b3480156108b357600080fd5b506102426108c2366004615a1b565b614922565b3480156108d357600080fd5b50610242614b48565b3480156108e857600080fd5b5061021c6108f7366004615200565b614d87565b34801561090857600080fd5b50600161043d565b60008888604051602001610925929190615a52565b60408051601f1981840301815291815281516020928301206000898152600790935291205490915060ff161515600114801561097f5750600081815260066020908152604080832089845290915290205460ff1615156001145b6109a45760405162461bcd60e51b815260040161099b90615a74565b60405180910390fd5b6040516331a9108f60e11b8152600481018890526000906001600160a01b038b1690636352211e90602401602060405180830381865afa1580156109ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a109190615a96565b9050336001600160a01b03821614610c6a5760105460405163d986ff6d60e01b81526000916001600160a01b03169063d986ff6d90610a6e908590738888888888888888888888888888888888888888903390600190600401615ab3565b602060405180830381865afa158015610a8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aaf9190615add565b80610b41575060105460405163d986ff6d60e01b81526001600160a01b039091169063d986ff6d90610b00908590738888888888888888888888888888888888888888903390600290600401615ab3565b602060405180830381865afa158015610b1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b419190615add565b9050801515600003610c465760105460405163d986ff6d60e01b81526001600160a01b039091169063d986ff6d90610b849085908f903390600190600401615ab3565b602060405180830381865afa158015610ba1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc59190615add565b80610c43575060105460405163d986ff6d60e01b81526001600160a01b039091169063d986ff6d90610c029085908f903390600290600401615ab3565b602060405180830381865afa158015610c1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c439190615add565b90505b600181151514610c685760405162461bcd60e51b815260040161099b90615afa565b505b6000828152600460205260409020548810801590610c9957506000828152600460205260409020600101548811155b610cdf5760405162461bcd60e51b81526020600482015260176024820152760a8ded6cadc40d2c840c8decae640dcdee840dac2e8c6d604b1b604482015260640161099b565b60008281526003602052604090819020549051632142170760e11b81526001600160a01b0383811660048301529182166024820152604481018a9052908b16906342842e0e90606401600060405180830381600087803b158015610d4257600080fd5b505af1158015610d56573d6000803e3d6000fd5b505050600088815260086020526040812054899250819089904210801590610d8e575060008481526008602052604090206001015442105b15610e28576001915060008c82604051602001610dac929190615b5b565b60408051601f1981840301815282825280516020918201209083015201604051602081830303815290604052805190602001209050859350610e068a8a6008600089815260200190815260200160002060040154846150ee565b610e225760405162461bcd60e51b815260040161099b90615b81565b50610ea3565b6000848152600860205260409020600201544210801590610e5a57506000848152600860205260409020600301544211155b15610e8b57505060408051808201909152600881526711383ab13634b19160c11b6020820152839150600290610ea3565b60405162461bcd60e51b815260040161099b90615ba8565b600f54604051632bd5a7f560e21b8152600481018690526000916001600160a01b03169063af569fd490602401602060405180830381865afa158015610eed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f119190615bcc565b600f5460405163074dbd4360e51b8152600481018890526001600160a01b039091169063e9b7a86090602401602060405180830381865afa158015610f5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7e9190615bcc565b610f889190615bfb565b600f54604051633635558b60e11b8152600481018890529192506001600160a01b031690636c6aab1690602401602060405180830381865afa158015610fd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff69190615bcc565b8111156110155760405162461bcd60e51b815260040161099b90615c0e565b61101e85614d87565b34101561103d5760405162461bcd60e51b815260040161099b90615c31565b60006110513461104c88614d87565b615106565b6000878152602081905260409020549091508190611070903490615bfb565b61107a9190615c54565b60008781526020819052604080822092909255600f549151632bd5a7f560e21b8152600481018990529092506001600160a01b039091169063af569fd490602401602060405180830381865afa1580156110d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110fc9190615bcc565b600f5460405163074dbd4360e51b8152600481018990526001600160a01b039091169063e9b7a86090602401602060405180830381865afa158015611145573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111699190615bcc565b6111739190615bfb565b9050600f60009054906101000a90046001600160a01b03166001600160a01b031663d3322d5382878a878e8c8b6040518863ffffffff1660e01b81526004016111c29796959493929190615c93565b600060405180830381600087803b1580156111dc57600080fd5b505af11580156111f0573d6000803e3d6000fd5b5050505050505050505050505050505050505050565b60115460405163feb2e23360e01b8152631253e16d60e01b916001600160a01b03169063feb2e2339061123f9033908590600401615ce4565b602060405180830381865afa15801561125c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112809190615add565b151560011480611302575060115460405163b3076d5560e01b81526001600160a01b039091169063b3076d55906112bb903390600401615814565b602060405180830381865afa1580156112d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112fc9190615add565b15156001145b61131e5760405162461bcd60e51b815260040161099b90615d07565b600f54604051620d374160ec1b8152600481018690526001600160a01b039091169063d374100090602401602060405180830381865afa158015611366573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061138a9190615add565b151560011480156114085750600f54604051620d374160ec1b8152600481018590526001600160a01b039091169063d374100090602401602060405180830381865afa1580156113de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114029190615add565b15156001145b6114245760405162461bcd60e51b815260040161099b90615d2c565b5060009283526005602090815260408085209385529290529120805460ff1916911515919091179055565b600f54604051631732052d60e31b8152600481018990528891630e3d459160e11b916001600160a01b039091169063b990296890602401602060405180830381865afa1580156114a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c79190615a96565b6001600160a01b0316336001600160a01b0316148061155a575060115460405163feb2e23360e01b81526001600160a01b039091169063feb2e233906115139033908590600401615ce4565b602060405180830381865afa158015611530573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115549190615add565b15156001145b806115d7575060115460405163b3076d5560e01b81526001600160a01b039091169063b3076d5590611590903390600401615814565b602060405180830381865afa1580156115ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d19190615add565b15156001145b6115f35760405162461bcd60e51b815260040161099b90615d07565b6000898152600c6020526040902060060154610100900460ff161561162a5760405162461bcd60e51b815260040161099b90615d4d565b6000898152600b6020526040902054836116448688615bfb565b61164e9190615bfb565b1461166b5760405162461bcd60e51b815260040161099b90615d77565b50506000968752600c602052604090962080546001600160a01b039687166001600160a01b0319918216178255600180830180549789169783169790971790965560028201805495909716941693909317909455600382015560048101929092556005820192909255600601805461ffff19169091179055565b60115460405163feb2e23360e01b81526315b39d1760e11b916001600160a01b03169063feb2e2339061171e9033908590600401615ce4565b602060405180830381865afa15801561173b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061175f9190615add565b1515600114806117e1575060115460405163b3076d5560e01b81526001600160a01b039091169063b3076d559061179a903390600401615814565b602060405180830381865afa1580156117b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117db9190615add565b15156001145b6117fd5760405162461bcd60e51b815260040161099b90615d07565b50600f80546001600160a01b0319166001600160a01b0392909216919091179055565b60115460405163feb2e23360e01b8152632ebc24b360e01b916001600160a01b03169063feb2e233906118599033908590600401615ce4565b602060405180830381865afa158015611876573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189a9190615add565b15156001148061191c575060115460405163b3076d5560e01b81526001600160a01b039091169063b3076d55906118d5903390600401615814565b602060405180830381865afa1580156118f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119169190615add565b15156001145b6119385760405162461bcd60e51b815260040161099b90615d07565b6000868152600a602052604090206006015460ff6101009091041615156001146119975760405162461bcd60e51b815260206004820152601060248201526f41636365707420526f79616c7469657360801b604482015260640161099b565b600086815260208190526040902054611a035760405162461bcd60e51b815260206004820152602860248201527f436f6c6c656374696f6e2042616c616e6365206d757374206265206772617465604482015267072207468616e20360c41b606482015260840161099b565b6000868152600960205260409020548290611a1f908590615bfb565b611a299190615bfb565b606414611a6d5760405162461bcd60e51b81526020600482015260126024820152714368616e67652070657263656e746167657360701b604482015260640161099b565b600086815260208181526040808320805490849055600a9092528220600301549091879187918a918190819081908190606490611aaa908b615d98565b611ab49190615daf565b6000878152600a6020526040902060040154909550606490611ad6908b615d98565b611ae09190615daf565b6000878152600a6020526040902060050154909450606490611b02908b615d98565b611b0c9190615daf565b92506064611b1a8d8b615d98565b611b249190615daf565b91506064611b328c8b615d98565b611b3c9190615daf565b6000878152600a602052604080822054905192935090916001600160a01b039091169087908381818185875af1925050503d8060008114611b99576040519150601f19603f3d011682016040523d82523d6000602084013e611b9e565b606091505b50506000888152600a602052604080822060010154905192935090916001600160a01b039091169087908381818185875af1925050503d8060008114611c00576040519150601f19603f3d011682016040523d82523d6000602084013e611c05565b606091505b50506000898152600a602052604080822060020154905192935090916001600160a01b039091169087908381818185875af1925050503d8060008114611c67576040519150601f19603f3d011682016040523d82523d6000602084013e611c6c565b606091505b5050905060008b6001600160a01b03168660405160006040518083038185875af1925050503d8060008114611cbd576040519150601f19603f3d011682016040523d82523d6000602084013e611cc2565b606091505b5050905060008b6001600160a01b03168660405160006040518083038185875af1925050503d8060008114611d13576040519150601f19603f3d011682016040523d82523d6000602084013e611d18565b606091505b5050905084611d395760405162461bcd60e51b815260040161099b90615dd1565b83611d565760405162461bcd60e51b815260040161099b90615dd1565b82611d735760405162461bcd60e51b815260040161099b90615dd1565b81611d905760405162461bcd60e51b815260040161099b90615dd1565b806111f05760405162461bcd60e51b815260040161099b90615dd1565b60115460405163feb2e23360e01b8152630e234b0960e21b916001600160a01b03169063feb2e23390611de69033908590600401615ce4565b602060405180830381865afa158015611e03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e279190615add565b151560011480611ea9575060115460405163b3076d5560e01b81526001600160a01b039091169063b3076d5590611e62903390600401615814565b602060405180830381865afa158015611e7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ea39190615add565b15156001145b611ec55760405162461bcd60e51b815260040161099b90615d07565b816001600160a01b0316639068edac6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f279190615add565b1515600114611f705760405162461bcd60e51b815260206004820152601560248201527421b7b73a3930b1ba1034b9903737ba1020b236b4b760591b604482015260640161099b565b50601180546001600160a01b0319166001600160a01b0392909216919091179055565b60115460405163feb2e23360e01b815263231b95d360e11b916001600160a01b03169063feb2e23390611fcc9033908590600401615ce4565b602060405180830381865afa158015611fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061200d9190615add565b15156001148061208f575060115460405163b3076d5560e01b81526001600160a01b039091169063b3076d5590612048903390600401615814565b602060405180830381865afa158015612065573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120899190615add565b15156001145b6120ab5760405162461bcd60e51b815260040161099b90615d07565b600f54604051620d374160ec1b8152600481018590526001600160a01b039091169063d374100090602401602060405180830381865afa1580156120f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121179190615add565b15156001146121385760405162461bcd60e51b815260040161099b90615df5565b600f54604051632bd5a7f560e21b8152600481018590526000916001600160a01b03169063af569fd490602401602060405180830381865afa158015612182573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a69190615bcc565b600f5460405163074dbd4360e51b8152600481018790526001600160a01b039091169063e9b7a86090602401602060405180830381865afa1580156121ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122139190615bcc565b61221d9190615bfb565b600f54604051633635558b60e11b8152600481018790529192506001600160a01b031690636c6aab1690602401602060405180830381865afa158015612267573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061228b9190615bcc565b8111156122aa5760405162461bcd60e51b815260040161099b90615c0e565b600f54604051632bd5a7f560e21b8152600481018690526000916001600160a01b03169063af569fd490602401602060405180830381865afa1580156122f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123189190615bcc565b600f5460405163074dbd4360e51b8152600481018890526001600160a01b039091169063e9b7a86090602401602060405180830381865afa158015612361573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123859190615bcc565b61238f9190615bfb565b6000868152600160205260408120549192509081036123ce576000868152600860205260409020600781015490546123c79190615c54565b90506123df565b506000858152600160205260409020545b6000868152600860205260408120600701546123fb8342615c54565b6124059190615daf565b905060018110156124285760405162461bcd60e51b815260040161099b90615e17565b6000878152600260205260409081902054600f549151632bd5a7f560e21b8152600481018a905290916001600160a01b03169063af569fd490602401602060405180830381865afa158015612481573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a59190615bcc565b6124af9190615c54565b6000888152600860205260409020600701546124cb9190615d98565b6000888152600860205260409020546124e49190615bfb565b6000888152600160205260409020556124ff42610258615bfb565b86101561250b57600080fd5b6000838152600d60209081526040808320899055600e90915290819020805460ff19166001179055600f5490516379ae0a2960e11b81526001600160a01b039091169063f35c14529061256a9086908e908e908e908e90600401615e3e565b600060405180830381600087803b15801561258457600080fd5b505af1158015612598573d6000803e3d6000fd5b5050505050505050505050505050565b60115460405163feb2e23360e01b8152632614e37960e11b916001600160a01b03169063feb2e233906125e19033908590600401615ce4565b602060405180830381865afa1580156125fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126229190615add565b1515600114806126a4575060115460405163b3076d5560e01b81526001600160a01b039091169063b3076d559061265d903390600401615814565b602060405180830381865afa15801561267a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061269e9190615add565b15156001145b6126c05760405162461bcd60e51b815260040161099b90615d07565b600088886040516020016126d5929190615a52565b60408051808303601f19018152908290528051602090910120600f54620d374160ec1b8352600483018a90529092506001600160a01b03169063d374100090602401602060405180830381865afa158015612734573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127589190615add565b15156001146127795760405162461bcd60e51b815260040161099b90615d2c565b6000818152600660209081526040808320998352988152888220805460ff1916951515959095179094559081526003835286812080546001600160a01b0319166001600160a01b039590951694909417909355506004905292909220908155600101555050565b60115460405163feb2e23360e01b8152635ac57d8b60e01b916001600160a01b03169063feb2e233906128199033908590600401615ce4565b602060405180830381865afa158015612836573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061285a9190615add565b1515600114806128dc575060115460405163b3076d5560e01b81526001600160a01b039091169063b3076d5590612895903390600401615814565b602060405180830381865afa1580156128b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128d69190615add565b15156001145b6128f85760405162461bcd60e51b815260040161099b90615d07565b600f54604051620d374160ec1b8152600481018590526001600160a01b039091169063d374100090602401602060405180830381865afa158015612940573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129649190615add565b15156001146129855760405162461bcd60e51b815260040161099b90615df5565b6000805b8751811015612d215760018482815181106129a6576129a6615b21565b6020908102919091010151600f54604051632bd5a7f560e21b8152600481018990526001600160a01b039091169063af569fd490602401602060405180830381865afa1580156129fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a1e9190615bcc565b600f5460405163074dbd4360e51b8152600481018a90526001600160a01b039091169063e9b7a86090602401602060405180830381865afa158015612a67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a8b9190615bcc565b612a959190615bfb565b612a9f9190615bfb565b612aa99190615c54565b600f54604051633635558b60e11b8152600481018890529193506001600160a01b031690636c6aab1690602401602060405180830381865afa158015612af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b179190615bcc565b821115612b365760405162461bcd60e51b815260040161099b90615c0e565b60005b848281518110612b4b57612b4b615b21565b6020026020010151811015612d0e57600f54604051632bd5a7f560e21b8152600481018890526000916001600160a01b03169063af569fd490602401602060405180830381865afa158015612ba4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc89190615bcc565b600f5460405163074dbd4360e51b8152600481018a90526001600160a01b039091169063e9b7a86090602401602060405180830381865afa158015612c11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c359190615bcc565b612c3f9190615bfb565b600f548b519192506001600160a01b03169063f35c14529083908d9087908110612c6b57612c6b615b21565b60200260200101518c8781518110612c8557612c85615b21565b60200260200101518c8881518110612c9f57612c9f615b21565b60200260200101518c6040518663ffffffff1660e01b8152600401612cc8959493929190615e3e565b600060405180830381600087803b158015612ce257600080fd5b505af1158015612cf6573d6000803e3d6000fd5b50505050508080612d0690615e7c565b915050612b39565b5080612d1981615e7c565b915050612989565b5050505050505050565b600f54604051631732052d60e31b8152600481018990528891637e04bcb760e01b916001600160a01b039091169063b990296890602401602060405180830381865afa158015612d7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612da39190615a96565b6001600160a01b0316336001600160a01b03161480612e36575060115460405163feb2e23360e01b81526001600160a01b039091169063feb2e23390612def9033908590600401615ce4565b602060405180830381865afa158015612e0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e309190615add565b15156001145b80612eb3575060115460405163b3076d5560e01b81526001600160a01b039091169063b3076d5590612e6c903390600401615814565b602060405180830381865afa158015612e89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ead9190615add565b15156001145b612ecf5760405162461bcd60e51b815260040161099b90615d07565b6000898152600a6020526040902060060154610100900460ff1615612f065760405162461bcd60e51b815260040161099b90615d4d565b60008981526009602052604090205483612f208688615bfb565b612f2a9190615bfb565b14612f475760405162461bcd60e51b815260040161099b90615d77565b50506000968752600a602052604090962080546001600160a01b039687166001600160a01b0319918216178255600180830180549789169783169790971790965560028201805495909716941693909317909455600382015560048101929092556005820192909255600601805461ffff19169091179055565b60008281526007602052604090205460ff16151560011480156130025750600084815260056020908152604080832085845290915290205460ff1615156001145b61301e5760405162461bcd60e51b815260040161099b90615a74565b600082815260086020526040902060020154421080159061305057506000828152600860205260409020600301544211155b61306c5760405162461bcd60e51b815260040161099b90615ba8565b600f5460405163074dbd4360e51b8152600481018690526001600160a01b039091169063e9b7a86090602401602060405180830381865afa1580156130b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130d99190615bcc565b83101580156131545750600f54604051633635558b60e11b8152600481018690526001600160a01b0390911690636c6aab1690602401602060405180830381865afa15801561312c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131509190615bcc565b8311155b6131955760405162461bcd60e51b815260206004820152601260248201527131b7b617ba37b5b2b71034b21032b93937b960711b604482015260640161099b565b600f54604051632bd5a7f560e21b8152600481018490526000916001600160a01b03169063af569fd490602401602060405180830381865afa1580156131df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132039190615bcc565b600f5460405163074dbd4360e51b8152600481018690526001600160a01b039091169063e9b7a86090602401602060405180830381865afa15801561324c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132709190615bcc565b61327a9190615bfb565b600f54604051633635558b60e11b8152600481018690529192506001600160a01b031690636c6aab1690602401602060405180830381865afa1580156132c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132e89190615bcc565b8111156133075760405162461bcd60e51b815260040161099b90615c0e565b61331083614d87565b34101561332f5760405162461bcd60e51b815260040161099b90615c31565b600061333e3461104c86614d87565b600085815260208190526040902054909150819061335d903490615bfb565b6133679190615c54565b60008581526020819052604080822092909255600f549151632bd5a7f560e21b8152600481018790529092506001600160a01b039091169063af569fd490602401602060405180830381865afa1580156133c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133e99190615bcc565b600f5460405163074dbd4360e51b8152600481018790526001600160a01b039091169063e9b7a86090602401602060405180830381865afa158015613432573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134569190615bcc565b6134609190615bfb565b600f546040516339143a1d60e01b815260048101839052602481018990526044810188905260648101879052608481018690523360a482018190529293506001600160a01b03909116906339143a1d9060c401600060405180830381600087803b1580156134cd57600080fd5b505af11580156134e1573d6000803e3d6000fd5b5050505050505050505050565b60008981526007602052604090205460ff16151560011480156135115750600088115b6135435760405162461bcd60e51b815260206004820152600360248201526232b93960e91b604482015260640161099b565b6000898152600860205260408120548a9190819089904210801590613578575060008481526008602052604090206001015442105b15613a25576001915060006001600160a01b038716156138fb5760105460405163d986ff6d60e01b81526000916001600160a01b03169063d986ff6d906135de908b90738888888888888888888888888888888888888888903390600190600401615ab3565b602060405180830381865afa1580156135fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061361f9190615add565b806136b1575060105460405163d986ff6d60e01b81526001600160a01b039091169063d986ff6d90613670908b90738888888888888888888888888888888888888888903390600290600401615ab3565b602060405180830381865afa15801561368d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136b19190615add565b90508015156000036137ec576010546000878152600860205260409081902060090154905163d986ff6d60e01b81526001600160a01b039283169263d986ff6d9261370f928d92610100909204909116903390600190600401615ab3565b602060405180830381865afa15801561372c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137509190615add565b806137e957506010546000878152600860205260409081902060090154905163d986ff6d60e01b81526001600160a01b039283169263d986ff6d926137a8928d92610100909204909116903390600290600401615ab3565b602060405180830381865afa1580156137c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137e99190615add565b90505b60018115151461380e5760405162461bcd60e51b815260040161099b90615afa565b878d8460405160200161382393929190615e95565b60408051808303601f19018152828252805160209182012081840152815180840382018152838301928390528051910120600f5463065b6b3f60e51b90925293508f916001600160a01b039091169063cb6d67e090613888908a908d90604401615ed4565b602060405180830381865afa1580156138a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138c99190615bcc565b6138d39190615bfb565b8d10156138f25760405162461bcd60e51b815260040161099b90615eeb565b879450506139e3565b338c8360405160200161391093929190615e95565b60408051808303601f19018152828252805160209182012081840152815180840382018152838301928390528051910120600f5463065b6b3f60e51b90925292508e916001600160a01b039091169063cb6d67e0906139759089903390604401615ed4565b602060405180830381865afa158015613992573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b69190615bcc565b6139c09190615bfb565b8c10156139df5760405162461bcd60e51b815260040161099b90615eeb565b3393505b600085815260086020526040902060040154613a03908a908a90846150ee565b613a1f5760405162461bcd60e51b815260040161099b90615b81565b50613c54565b6000848152600860205260409020600201544210801590613a5757506000848152600860205260409020600301544211155b15610e8b57600f5460405163945e549b60e01b815260048101869052600293506001600160a01b039091169063945e549b90602401602060405180830381865afa158015613aa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613acd9190615bcc565b8c1115613b125760405162461bcd60e51b81526020600482015260136024820152724368616e6765206e6f206f6620746f6b656e7360681b604482015260640161099b565b600f5460405163945e549b60e01b8152600481018690526001600160a01b039091169063945e549b90602401602060405180830381865afa158015613b5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b7f9190615bcc565b600f5460405163e943a2c760e01b81528e916001600160a01b03169063e943a2c790613bb19089903390600401615ed4565b602060405180830381865afa158015613bce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bf29190615bcc565b613bfc9190615bfb565b1115613c305760405162461bcd60e51b815260206004820152600360248201526209ac2f60eb1b604482015260640161099b565b5060408051808201909152600881526711383ab13634b19160c11b60208201523392505b600f54604051632bd5a7f560e21b8152600481018690526000916001918f916001600160a01b03169063af569fd490602401602060405180830381865afa158015613ca3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cc79190615bcc565b600f5460405163074dbd4360e51b8152600481018a90526001600160a01b039091169063e9b7a86090602401602060405180830381865afa158015613d10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d349190615bcc565b613d3e9190615bfb565b613d489190615bfb565b613d529190615c54565b600f54604051633635558b60e11b8152600481018890529192506001600160a01b031690636c6aab1690602401602060405180830381865afa158015613d9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dc09190615bcc565b811115613ddf5760405162461bcd60e51b815260040161099b90615c0e565b8c613de986614d87565b613df39190615d98565b341015613e125760405162461bcd60e51b815260040161099b90615c31565b6000613e2c348f613e2289614d87565b61104c9190615d98565b6000878152602081905260409020549091508190613e4b903490615bfb565b613e559190615c54565b6000878152602081815260408083209390935560089052206009015460ff166003039050613fec576000858152600160205260408120548103613eb857600086815260086020526040902060078101549054613eb19190615c54565b9050613ec9565b506000858152600160205260409020545b600086815260086020526040812060070154613ee58342615c54565b613eef9190615daf565b905060018110158015613f0257508e6001145b613f1e5760405162461bcd60e51b815260040161099b90615e17565b6000878152600260205260409081902054600f549151632bd5a7f560e21b8152600481018a905290916001600160a01b03169063af569fd490602401602060405180830381865afa158015613f77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f9b9190615bcc565b613fa59190615c54565b600088815260086020526040902060070154613fc19190615d98565b600088815260086020526040902054613fda9190615bfb565b60008881526001602052604090205550505b60005b8d81101561417157600f54604051632bd5a7f560e21b8152600481018890526000916001600160a01b03169063af569fd490602401602060405180830381865afa158015614041573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140659190615bcc565b600f5460405163074dbd4360e51b8152600481018a90526001600160a01b039091169063e9b7a86090602401602060405180830381865afa1580156140ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140d29190615bcc565b6140dc9190615bfb565b9050600f60009054906101000a90046001600160a01b03166001600160a01b031663d3322d5382888f888d8d8c6040518863ffffffff1660e01b815260040161412b9796959493929190615c93565b600060405180830381600087803b15801561414557600080fd5b505af1158015614159573d6000803e3d6000fd5b5050505050808061416990615e7c565b915050613fef565b505050505050505050505050505050565b601154604051630cab15dd60e31b81523360048201526024810188905287916305c2fcbd60e51b916001600160a01b0390911690636558aee890604401602060405180830381865afa1580156141dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142009190615add565b151560011480614284575060115460405163feb2e23360e01b81526001600160a01b039091169063feb2e2339061423d9033908590600401615ce4565b602060405180830381865afa15801561425a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061427e9190615add565b15156001145b80614301575060115460405163b3076d5560e01b81526001600160a01b039091169063b3076d55906142ba903390600401615814565b602060405180830381865afa1580156142d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142fb9190615add565b15156001145b61431d5760405162461bcd60e51b815260040161099b90615d07565b60008881526007602052604090205460ff16151560011461436c5760405162461bcd60e51b815260206004820152600960248201526853657420436f73747360b81b604482015260640161099b565b505060009586526008602052604090952093845560018401929092556004830193909355600282019290925560030155565b60115460405163feb2e23360e01b815263b986eaa760e01b916001600160a01b03169063feb2e233906143d79033908590600401615ce4565b602060405180830381865afa1580156143f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144189190615add565b15156001148061449a575060115460405163b3076d5560e01b81526001600160a01b039091169063b3076d5590614453903390600401615814565b602060405180830381865afa158015614470573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144949190615add565b15156001145b6144b65760405162461bcd60e51b815260040161099b90615d07565b836001036144d45760008381526002602052604090208290556144e4565b6000838152600160205260408120555b50505050565b601154604051630cab15dd60e31b815233600482015260248101899052889163d2f4302f60e01b916001600160a01b0390911690636558aee890604401602060405180830381865afa158015614544573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145689190615add565b1515600114806145ec575060115460405163feb2e23360e01b81526001600160a01b039091169063feb2e233906145a59033908590600401615ce4565b602060405180830381865afa1580156145c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145e69190615add565b15156001145b80614669575060115460405163b3076d5560e01b81526001600160a01b039091169063b3076d5590614622903390600401615814565b602060405180830381865afa15801561463f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146639190615add565b15156001145b6146855760405162461bcd60e51b815260040161099b90615d07565b600f54604051620d374160ec1b8152600481018b90526001600160a01b039091169063d374100090602401602060405180830381865afa1580156146cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146f19190615add565b15156001146147125760405162461bcd60e51b815260040161099b90615df5565b50506000968752600860208181526040808a206005810199909955600689019790975590870194909455600780870193909355600990950180546001600160a01b03909616610100026001600160a81b031990961660ff9092169190911794909417909355919091529020805460ff19166001179055565b60115460405163feb2e23360e01b81526335062ebb60e21b916001600160a01b03169063feb2e233906147c39033908590600401615ce4565b602060405180830381865afa1580156147e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148049190615add565b151560011480614886575060115460405163b3076d5560e01b81526001600160a01b039091169063b3076d559061483f903390600401615814565b602060405180830381865afa15801561485c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148809190615add565b15156001145b6148a25760405162461bcd60e51b815260040161099b90615d07565b6148ac8486615bfb565b6064146148cb5760405162461bcd60e51b815260040161099b90615f0d565b6148d58284615bfb565b6064146148f45760405162461bcd60e51b815260040161099b90615f0d565b506000948552600960209081526040808720958655600195860194909455600b905291909320928355910155565b60115460405163feb2e23360e01b815263d6516f4760e01b916001600160a01b03169063feb2e2339061495b9033908590600401615ce4565b602060405180830381865afa158015614978573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061499c9190615add565b151560011480614a1e575060115460405163b3076d5560e01b81526001600160a01b039091169063b3076d55906149d7903390600401615814565b602060405180830381865afa1580156149f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a189190615add565b15156001145b614a3a5760405162461bcd60e51b815260040161099b90615d07565b6000848152600a602052604090206006015460ff1615156001148015614a7657506000848152600c602052604090206006015460ff1615156001145b614ab65760405162461bcd60e51b815260206004820152601160248201527050726f706f73652041646472657373657360781b604482015260640161099b565b6000848152600a602090815260408083206006908101805488151561010081810261ff001993841617909355600c9095529285209091018054871515909202919092161790559003614b20576000848152600a60205260409020600601805460ff191690556144e4565b8115156000036144e4575050506000908152600c60205260409020600601805460ff19169055565b60115460405163feb2e23360e01b81526336cb886f60e21b916001600160a01b03169063feb2e23390614b819033908590600401615ce4565b602060405180830381865afa158015614b9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bc29190615add565b151560011480614c44575060115460405163b3076d5560e01b81526001600160a01b039091169063b3076d5590614bfd903390600401615814565b602060405180830381865afa158015614c1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c3e9190615add565b15156001145b614c605760405162461bcd60e51b815260040161099b90615d07565b60115460408051638da5cb5b60e01b8152905147926000926001600160a01b0390911691638da5cb5b916004808201926020929091908290030181865afa158015614caf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614cd39190615a96565b90506000816001600160a01b03168360405160006040518083038185875af1925050503d8060008114614d22576040519150601f19603f3d011682016040523d82523d6000602084013e614d27565b606091505b5050905080614d485760405162461bcd60e51b815260040161099b90615dd1565b6040518115158152839033907f4a48cb98c5be023b78a0b3ec94107a01a0397b2e389d4b5f252aef518e633ec39060200160405180910390a350505050565b600081815260086020526040812060090154819060ff16600303614eb9576000838152600860208190526040909120015415614ea2576000838152600260205260409081902054600f549151632bd5a7f560e21b81526004810186905290916001600160a01b03169063af569fd490602401602060405180830381865afa158015614e16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614e3a9190615bcc565b614e449190615c54565b600084815260086020819052604090912090810154600590910154606491614e6b91615d98565b614e759190615daf565b614e7f9190615d98565b600084815260086020526040902060050154614e9b9190615bfb565b9392505050565b505060009081526008602052604090206005015490565b60008381526008602052604090206009015460ff166002148015614eeb57506000838152600860205260409020544210155b8015614f0857506000838152600860205260409020600301544211155b15614ea257600083815260086020526040902060078101549054614f2c9042615c54565b614f369190615daf565b600084815260086020819052604082200154919250908190810361501157614f5f836001615bfb565b600086815260086020526040902060050154614f7b9190615daf565b6000868152600860205260409020805460079091015491935090614f9f9085615d98565b614fa99042615c54565b614fb39190615c54565b600086815260086020526040902060070154614fd0856002615bfb565b600088815260086020526040902060050154614fec9190615daf565b614ff69085615c54565b6150009190615daf565b61500a9190615d98565b90506150a0565b6000858152600860208190526040909120908101546006820154600590920154859261503c91615c54565b6150469190615daf565b1061508b57600085815260086020819052604090912001546150689084615d98565b6000868152600860205260409020600501546150849190615c54565b91506150a0565b60008581526008602052604090206006015491505b6000858152600860205260409020600601546150bc8284615c54565b11156150d5576150cc8183615c54565b95945050505050565b5050506000918252506008602052604090206006015490565b6000826150fc868685615188565b1495945050505050565b6000806151138385615c54565b604051909150600090339083908381818185875af1925050503d8060008114615158576040519150601f19603f3d011682016040523d82523d6000602084013e61515d565b606091505b505090508061517e5760405162461bcd60e51b815260040161099b90615dd1565b5090505b92915050565b600081815b848110156151cb576151b7828787848181106151ab576151ab615b21565b905060200201356151d4565b9150806151c381615e7c565b91505061518d565b50949350505050565b60008183106151f0576000828152602084905260409020614e9b565b5060009182526020526040902090565b60006020828403121561521257600080fd5b5035919050565b6001600160a01b038116811461522e57600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561526f5761526f615231565b604052919050565b600082601f83011261528857600080fd5b81356001600160401b038111156152a1576152a1615231565b6152b4601f8201601f1916602001615247565b8181528460208386010111156152c957600080fd5b816020850160208301376000918101602001919091529392505050565b60008083601f8401126152f857600080fd5b5081356001600160401b0381111561530f57600080fd5b6020830191508360208260051b850101111561532a57600080fd5b9250929050565b60008060008060008060008060e0898b03121561534d57600080fd5b883561535881615219565b975060208901359650604089013595506060890135945060808901356001600160401b038082111561538957600080fd5b6153958c838d01615277565b955060a08b01359150808211156153ab57600080fd5b506153b88b828c016152e6565b999c989b50969995989497949560c00135949350505050565b801515811461522e57600080fd5b6000806000606084860312156153f457600080fd5b8335925060208401359150604084013561540d816153d1565b809150509250925092565b600080600080600080600060e0888a03121561543357600080fd5b87359650602088013561544581615219565b9550604088013561545581615219565b9450606088013561546581615219565b9699959850939660808101359560a0820135955060c0909101359350915050565b60006020828403121561549857600080fd5b8135614e9b81615219565b600080600080600060a086880312156154bb57600080fd5b8535945060208601356154cd81615219565b935060408601356154dd81615219565b94979396509394606081013594506080013592915050565b600080600080600060a0868803121561550d57600080fd5b853561551881615219565b945060208601356001600160401b0381111561553357600080fd5b61553f88828901615277565b959895975050505060408401359360608101359360809091013592509050565b6000806040838503121561557257600080fd5b50508035926020909101359150565b600080600080600080600060e0888a03121561559c57600080fd5b87356155a781615219565b96506020880135955060408801359450606088013593506080880135925060a08801356155d381615219565b915060c08801356155e3816153d1565b8091505092959891949750929550565b60006001600160401b0382111561560c5761560c615231565b5060051b60200190565b600082601f83011261562757600080fd5b8135602061563c615637836155f3565b615247565b82815260059290921b8401810191818101908684111561565b57600080fd5b8286015b8481101561569a5780356001600160401b0381111561567e5760008081fd5b61568c8986838b0101615277565b84525091830191830161565f565b509695505050505050565b600082601f8301126156b657600080fd5b813560206156c6615637836155f3565b82815260059290921b840181019181810190868411156156e557600080fd5b8286015b8481101561569a57803583529183019183016156e9565b600080600080600060a0868803121561571857600080fd5b85356001600160401b038082111561572f57600080fd5b818801915088601f83011261574357600080fd5b81356020615753615637836155f3565b82815260059290921b8401810191818101908c84111561577257600080fd5b948201945b8386101561579957853561578a81615219565b82529482019490820190615777565b995050890135925050808211156157af57600080fd5b6157bb89838a01615616565b955060408801359150808211156157d157600080fd5b6157dd89838a016156a5565b94506060880135935060808801359150808211156157fa57600080fd5b50615807888289016156a5565b9150509295509295909350565b6001600160a01b0391909116815260200190565b6000806000806080858703121561583e57600080fd5b5050823594602084013594506040840135936060013592509050565b60008060008060008060008060006101008a8c03121561587957600080fd5b8935985060208a0135975060408a0135965060608a01356001600160401b03808211156158a557600080fd5b6158b18d838e01615277565b975060808c013591506158c382615219565b90955060a08b013590808211156158d957600080fd5b506158e68c828d016152e6565b90955093505060c08a01356158fa81615219565b8092505060e08a013590509295985092959850929598565b60008060008060008060c0878903121561592b57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b60008060006060848603121561596a57600080fd5b505081359360208301359350604090920135919050565b600080600080600080600060e0888a03121561599c57600080fd5b873596506020880135955060408801359450606088013593506080880135925060a088013560ff811681146159d057600080fd5b915060c08801356155e381615219565b600080600080600060a086880312156159f857600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600080600060608486031215615a3057600080fd5b833592506020840135615a42816153d1565b9150604084013561540d816153d1565b60609290921b6bffffffffffffffffffffffff19168252601482015260340190565b60208082526008908201526734b734ba1032b93960c11b604082015260600190565b600060208284031215615aa857600080fd5b8151614e9b81615219565b6001600160a01b039485168152928416602084015292166040820152606081019190915260800190565b600060208284031215615aef57600080fd5b8151614e9b816153d1565b6020808252600d908201526c2737903232b632b3b0ba34b7b760991b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60005b83811015615b52578181015183820152602001615b3a565b50506000910152565b82815260008251615b73816020850160208701615b37565b919091016020019392505050565b6020808252600d908201526c34b73b30b634b210383937b7b360991b604082015260600190565b6020808252600a90820152694e6f206d696e74696e6760b01b604082015260600190565b600060208284031215615bde57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561518257615182615be5565b6020808252600990820152684e6f20737570706c7960b81b604082015260600190565b6020808252600990820152680aee4dedcce408aa8960bb1b604082015260600190565b8181038181111561518257615182615be5565b60008151808452615c7f816020860160208601615b37565b601f01601f19169290920160200192915050565b8781526001600160a01b0387811660208301528616604082015260e060608201819052600090615cc590830187615c67565b60808301959095525060a081019290925260c090910152949350505050565b6001600160a01b039290921682526001600160e01b031916602082015260400190565b6020808252600b908201526a139bdd08185b1b1bddd95960aa1b604082015260600190565b6020808252600790820152664e6f206461746160c81b604082015260600190565b60208082526010908201526f105b1c9958591e48185c1c1c9bdd995960821b604082015260600190565b602080825260079082015266436865636b202560c81b604082015260600190565b808202811582820484141761518257615182615be5565b600082615dcc57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252600a90820152691155120819985a5b195960b21b604082015260600190565b602080825260089082015267416464206461746160c01b604082015260600190565b6020808252600d908201526c0c481b5a5b9d0bdc195c9a5bd9609a1b604082015260600190565b8581526001600160a01b038516602082015260a060408201819052600090615e6890830186615c67565b606083019490945250608001529392505050565b600060018201615e8e57615e8e615be5565b5060010190565b6bffffffffffffffffffffffff198460601b16815282601482015260008251615ec5816034850160208701615b37565b91909101603401949350505050565b9182526001600160a01b0316602082015260400190565b6020808252600890820152671053081b1a5b5a5d60c21b604082015260600190565b60208082526016908201527573706c697473206e65656420746f206265203130302560501b60408201526060019056fea2646970667358221220b70160aef7eef99472bb263304952646fc6ef8b0f53546cfb6fe30368d304ad764736f6c634300081300330000000000000000000000002c8fdced22b28e13f1a472cf7f19e2f56c204c830000000000000000000000002202cb9c00487e7e8ef21e6d8e914b32e709f43d00000000000000000000000026ad9c64930bf5e057cb895a183436b30ad140f8
Deployed Bytecode
0x6080604052600436106101ea5760003560e01c8063930e79f111610113578063b986eaa7116100ab578063d418baec1161006f578063d418baec14610887578063d6516f47146108a7578063db2e21bc146108c7578063e7572230146108dc578063fb9422ff146108fc57600080fd5b8063b986eaa714610758578063bf40b89a14610778578063bfc4b8a7146107ad578063d2f4302f146107cd578063d3be0bc1146107ed57600080fd5b8063930e79f11461057557806394e76daf146105a257806395190946146106105780639e424a9314610653578063a048901c146106c5578063a3167156146106d8578063b047168f14610705578063b5bc955f14610718578063b85f97a01461073857600080fd5b806346372ba61161018657806346372ba6146103e25780634aa7df07146104025780634c29c6f21461044d5780635ac57d8b1461046d578063669ab82f1461048d57806371b084f3146104c85780637765c52c146104f55780637e04bcb7146105255780639067b6771461054557600080fd5b806302d61853146101ef578063037528501461022f5780631253e16d146102445780631c7a8b22146102645780632b673a2e146102845780632ebc24b3146102a4578063388d2c24146102c45780633b964798146102e45780633d205e081461032e575b600080fd5b3480156101fb57600080fd5b5061021c61020a366004615200565b60026020526000908152604090205481565b6040519081526020015b60405180910390f35b61024261023d366004615331565b610910565b005b34801561025057600080fd5b5061024261025f3660046153df565b611206565b34801561027057600080fd5b5061024261027f366004615418565b61144f565b34801561029057600080fd5b5061024261029f366004615486565b6116e5565b3480156102b057600080fd5b506102426102bf3660046154a3565b611820565b3480156102d057600080fd5b506102426102df366004615486565b611dad565b3480156102f057600080fd5b506103196102ff366004615200565b600090815260096020526040902080546001909101549091565b60408051928352602083019190915201610226565b34801561033a57600080fd5b5061039c610349366004615200565b6000908152600a602052604090208054600182015460028301546003840154600485015460058601546006909601546001600160a01b039586169794861696959093169491939092610100900460ff1690565b604080516001600160a01b039889168152968816602088015294909616938501939093526060840191909152608083015260a082015290151560c082015260e001610226565b3480156103ee57600080fd5b506102426103fd3660046154f5565b611f93565b34801561040e57600080fd5b5061043d61041d36600461555f565b600660209081526000928352604080842090915290825290205460ff1681565b6040519015158152602001610226565b34801561045957600080fd5b50610242610468366004615581565b6125a8565b34801561047957600080fd5b50610242610488366004615700565b6127e0565b34801561049957600080fd5b5061043d6104a836600461555f565b600560209081526000928352604080842090915290825290205460ff1681565b3480156104d457600080fd5b5061021c6104e3366004615200565b60016020526000908152604090205481565b34801561050157600080fd5b5061043d610510366004615200565b6000908152600e602052604090205460ff1690565b34801561053157600080fd5b50610242610540366004615418565b612d2b565b34801561055157600080fd5b5061021c610560366004615200565b60009081526008602052604090206003015490565b34801561058157600080fd5b5061021c610590366004615200565b6000908152600d602052604090205490565b3480156105ae57600080fd5b5061039c6105bd366004615200565b6000908152600c602052604090208054600182015460028301546003840154600485015460058601546006909601546001600160a01b039586169794861696959093169491939092610100900460ff1690565b34801561061c57600080fd5b5061064661062b366004615200565b6003602052600090815260409020546001600160a01b031681565b6040516102269190615814565b34801561065f57600080fd5b5061069d61066e366004615200565b600090815260086020526040902080546001820154600483015460028401546003909401549294919390929091565b604080519586526020860194909452928401919091526060830152608082015260a001610226565b6102426106d3366004615828565b612fc1565b3480156106e457600080fd5b5061021c6106f3366004615200565b60006020819052908152604090205481565b61024261071336600461585a565b6134ee565b34801561072457600080fd5b50600f54610646906001600160a01b031681565b34801561074457600080fd5b50610242610753366004615912565b614182565b34801561076457600080fd5b50610242610773366004615955565b61439e565b34801561078457600080fd5b50610319610793366004615200565b6000908152600b6020526040902080546001909101549091565b3480156107b957600080fd5b50601054610646906001600160a01b031681565b3480156107d957600080fd5b506102426107e8366004615981565b6144ea565b3480156107f957600080fd5b5061084e610808366004615200565b600090815260086020819052604090912060058101546006820154928201546007830154600990930154919490929160ff8116916101009091046001600160a01b031690565b60408051968752602087019590955293850192909252606084015260ff1660808301526001600160a01b031660a082015260c001610226565b34801561089357600080fd5b506102426108a23660046159e0565b61478a565b3480156108b357600080fd5b506102426108c2366004615a1b565b614922565b3480156108d357600080fd5b50610242614b48565b3480156108e857600080fd5b5061021c6108f7366004615200565b614d87565b34801561090857600080fd5b50600161043d565b60008888604051602001610925929190615a52565b60408051601f1981840301815291815281516020928301206000898152600790935291205490915060ff161515600114801561097f5750600081815260066020908152604080832089845290915290205460ff1615156001145b6109a45760405162461bcd60e51b815260040161099b90615a74565b60405180910390fd5b6040516331a9108f60e11b8152600481018890526000906001600160a01b038b1690636352211e90602401602060405180830381865afa1580156109ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a109190615a96565b9050336001600160a01b03821614610c6a5760105460405163d986ff6d60e01b81526000916001600160a01b03169063d986ff6d90610a6e908590738888888888888888888888888888888888888888903390600190600401615ab3565b602060405180830381865afa158015610a8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aaf9190615add565b80610b41575060105460405163d986ff6d60e01b81526001600160a01b039091169063d986ff6d90610b00908590738888888888888888888888888888888888888888903390600290600401615ab3565b602060405180830381865afa158015610b1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b419190615add565b9050801515600003610c465760105460405163d986ff6d60e01b81526001600160a01b039091169063d986ff6d90610b849085908f903390600190600401615ab3565b602060405180830381865afa158015610ba1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc59190615add565b80610c43575060105460405163d986ff6d60e01b81526001600160a01b039091169063d986ff6d90610c029085908f903390600290600401615ab3565b602060405180830381865afa158015610c1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c439190615add565b90505b600181151514610c685760405162461bcd60e51b815260040161099b90615afa565b505b6000828152600460205260409020548810801590610c9957506000828152600460205260409020600101548811155b610cdf5760405162461bcd60e51b81526020600482015260176024820152760a8ded6cadc40d2c840c8decae640dcdee840dac2e8c6d604b1b604482015260640161099b565b60008281526003602052604090819020549051632142170760e11b81526001600160a01b0383811660048301529182166024820152604481018a9052908b16906342842e0e90606401600060405180830381600087803b158015610d4257600080fd5b505af1158015610d56573d6000803e3d6000fd5b505050600088815260086020526040812054899250819089904210801590610d8e575060008481526008602052604090206001015442105b15610e28576001915060008c82604051602001610dac929190615b5b565b60408051601f1981840301815282825280516020918201209083015201604051602081830303815290604052805190602001209050859350610e068a8a6008600089815260200190815260200160002060040154846150ee565b610e225760405162461bcd60e51b815260040161099b90615b81565b50610ea3565b6000848152600860205260409020600201544210801590610e5a57506000848152600860205260409020600301544211155b15610e8b57505060408051808201909152600881526711383ab13634b19160c11b6020820152839150600290610ea3565b60405162461bcd60e51b815260040161099b90615ba8565b600f54604051632bd5a7f560e21b8152600481018690526000916001600160a01b03169063af569fd490602401602060405180830381865afa158015610eed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f119190615bcc565b600f5460405163074dbd4360e51b8152600481018890526001600160a01b039091169063e9b7a86090602401602060405180830381865afa158015610f5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7e9190615bcc565b610f889190615bfb565b600f54604051633635558b60e11b8152600481018890529192506001600160a01b031690636c6aab1690602401602060405180830381865afa158015610fd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff69190615bcc565b8111156110155760405162461bcd60e51b815260040161099b90615c0e565b61101e85614d87565b34101561103d5760405162461bcd60e51b815260040161099b90615c31565b60006110513461104c88614d87565b615106565b6000878152602081905260409020549091508190611070903490615bfb565b61107a9190615c54565b60008781526020819052604080822092909255600f549151632bd5a7f560e21b8152600481018990529092506001600160a01b039091169063af569fd490602401602060405180830381865afa1580156110d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110fc9190615bcc565b600f5460405163074dbd4360e51b8152600481018990526001600160a01b039091169063e9b7a86090602401602060405180830381865afa158015611145573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111699190615bcc565b6111739190615bfb565b9050600f60009054906101000a90046001600160a01b03166001600160a01b031663d3322d5382878a878e8c8b6040518863ffffffff1660e01b81526004016111c29796959493929190615c93565b600060405180830381600087803b1580156111dc57600080fd5b505af11580156111f0573d6000803e3d6000fd5b5050505050505050505050505050505050505050565b60115460405163feb2e23360e01b8152631253e16d60e01b916001600160a01b03169063feb2e2339061123f9033908590600401615ce4565b602060405180830381865afa15801561125c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112809190615add565b151560011480611302575060115460405163b3076d5560e01b81526001600160a01b039091169063b3076d55906112bb903390600401615814565b602060405180830381865afa1580156112d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112fc9190615add565b15156001145b61131e5760405162461bcd60e51b815260040161099b90615d07565b600f54604051620d374160ec1b8152600481018690526001600160a01b039091169063d374100090602401602060405180830381865afa158015611366573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061138a9190615add565b151560011480156114085750600f54604051620d374160ec1b8152600481018590526001600160a01b039091169063d374100090602401602060405180830381865afa1580156113de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114029190615add565b15156001145b6114245760405162461bcd60e51b815260040161099b90615d2c565b5060009283526005602090815260408085209385529290529120805460ff1916911515919091179055565b600f54604051631732052d60e31b8152600481018990528891630e3d459160e11b916001600160a01b039091169063b990296890602401602060405180830381865afa1580156114a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c79190615a96565b6001600160a01b0316336001600160a01b0316148061155a575060115460405163feb2e23360e01b81526001600160a01b039091169063feb2e233906115139033908590600401615ce4565b602060405180830381865afa158015611530573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115549190615add565b15156001145b806115d7575060115460405163b3076d5560e01b81526001600160a01b039091169063b3076d5590611590903390600401615814565b602060405180830381865afa1580156115ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d19190615add565b15156001145b6115f35760405162461bcd60e51b815260040161099b90615d07565b6000898152600c6020526040902060060154610100900460ff161561162a5760405162461bcd60e51b815260040161099b90615d4d565b6000898152600b6020526040902054836116448688615bfb565b61164e9190615bfb565b1461166b5760405162461bcd60e51b815260040161099b90615d77565b50506000968752600c602052604090962080546001600160a01b039687166001600160a01b0319918216178255600180830180549789169783169790971790965560028201805495909716941693909317909455600382015560048101929092556005820192909255600601805461ffff19169091179055565b60115460405163feb2e23360e01b81526315b39d1760e11b916001600160a01b03169063feb2e2339061171e9033908590600401615ce4565b602060405180830381865afa15801561173b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061175f9190615add565b1515600114806117e1575060115460405163b3076d5560e01b81526001600160a01b039091169063b3076d559061179a903390600401615814565b602060405180830381865afa1580156117b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117db9190615add565b15156001145b6117fd5760405162461bcd60e51b815260040161099b90615d07565b50600f80546001600160a01b0319166001600160a01b0392909216919091179055565b60115460405163feb2e23360e01b8152632ebc24b360e01b916001600160a01b03169063feb2e233906118599033908590600401615ce4565b602060405180830381865afa158015611876573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189a9190615add565b15156001148061191c575060115460405163b3076d5560e01b81526001600160a01b039091169063b3076d55906118d5903390600401615814565b602060405180830381865afa1580156118f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119169190615add565b15156001145b6119385760405162461bcd60e51b815260040161099b90615d07565b6000868152600a602052604090206006015460ff6101009091041615156001146119975760405162461bcd60e51b815260206004820152601060248201526f41636365707420526f79616c7469657360801b604482015260640161099b565b600086815260208190526040902054611a035760405162461bcd60e51b815260206004820152602860248201527f436f6c6c656374696f6e2042616c616e6365206d757374206265206772617465604482015267072207468616e20360c41b606482015260840161099b565b6000868152600960205260409020548290611a1f908590615bfb565b611a299190615bfb565b606414611a6d5760405162461bcd60e51b81526020600482015260126024820152714368616e67652070657263656e746167657360701b604482015260640161099b565b600086815260208181526040808320805490849055600a9092528220600301549091879187918a918190819081908190606490611aaa908b615d98565b611ab49190615daf565b6000878152600a6020526040902060040154909550606490611ad6908b615d98565b611ae09190615daf565b6000878152600a6020526040902060050154909450606490611b02908b615d98565b611b0c9190615daf565b92506064611b1a8d8b615d98565b611b249190615daf565b91506064611b328c8b615d98565b611b3c9190615daf565b6000878152600a602052604080822054905192935090916001600160a01b039091169087908381818185875af1925050503d8060008114611b99576040519150601f19603f3d011682016040523d82523d6000602084013e611b9e565b606091505b50506000888152600a602052604080822060010154905192935090916001600160a01b039091169087908381818185875af1925050503d8060008114611c00576040519150601f19603f3d011682016040523d82523d6000602084013e611c05565b606091505b50506000898152600a602052604080822060020154905192935090916001600160a01b039091169087908381818185875af1925050503d8060008114611c67576040519150601f19603f3d011682016040523d82523d6000602084013e611c6c565b606091505b5050905060008b6001600160a01b03168660405160006040518083038185875af1925050503d8060008114611cbd576040519150601f19603f3d011682016040523d82523d6000602084013e611cc2565b606091505b5050905060008b6001600160a01b03168660405160006040518083038185875af1925050503d8060008114611d13576040519150601f19603f3d011682016040523d82523d6000602084013e611d18565b606091505b5050905084611d395760405162461bcd60e51b815260040161099b90615dd1565b83611d565760405162461bcd60e51b815260040161099b90615dd1565b82611d735760405162461bcd60e51b815260040161099b90615dd1565b81611d905760405162461bcd60e51b815260040161099b90615dd1565b806111f05760405162461bcd60e51b815260040161099b90615dd1565b60115460405163feb2e23360e01b8152630e234b0960e21b916001600160a01b03169063feb2e23390611de69033908590600401615ce4565b602060405180830381865afa158015611e03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e279190615add565b151560011480611ea9575060115460405163b3076d5560e01b81526001600160a01b039091169063b3076d5590611e62903390600401615814565b602060405180830381865afa158015611e7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ea39190615add565b15156001145b611ec55760405162461bcd60e51b815260040161099b90615d07565b816001600160a01b0316639068edac6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f279190615add565b1515600114611f705760405162461bcd60e51b815260206004820152601560248201527421b7b73a3930b1ba1034b9903737ba1020b236b4b760591b604482015260640161099b565b50601180546001600160a01b0319166001600160a01b0392909216919091179055565b60115460405163feb2e23360e01b815263231b95d360e11b916001600160a01b03169063feb2e23390611fcc9033908590600401615ce4565b602060405180830381865afa158015611fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061200d9190615add565b15156001148061208f575060115460405163b3076d5560e01b81526001600160a01b039091169063b3076d5590612048903390600401615814565b602060405180830381865afa158015612065573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120899190615add565b15156001145b6120ab5760405162461bcd60e51b815260040161099b90615d07565b600f54604051620d374160ec1b8152600481018590526001600160a01b039091169063d374100090602401602060405180830381865afa1580156120f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121179190615add565b15156001146121385760405162461bcd60e51b815260040161099b90615df5565b600f54604051632bd5a7f560e21b8152600481018590526000916001600160a01b03169063af569fd490602401602060405180830381865afa158015612182573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a69190615bcc565b600f5460405163074dbd4360e51b8152600481018790526001600160a01b039091169063e9b7a86090602401602060405180830381865afa1580156121ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122139190615bcc565b61221d9190615bfb565b600f54604051633635558b60e11b8152600481018790529192506001600160a01b031690636c6aab1690602401602060405180830381865afa158015612267573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061228b9190615bcc565b8111156122aa5760405162461bcd60e51b815260040161099b90615c0e565b600f54604051632bd5a7f560e21b8152600481018690526000916001600160a01b03169063af569fd490602401602060405180830381865afa1580156122f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123189190615bcc565b600f5460405163074dbd4360e51b8152600481018890526001600160a01b039091169063e9b7a86090602401602060405180830381865afa158015612361573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123859190615bcc565b61238f9190615bfb565b6000868152600160205260408120549192509081036123ce576000868152600860205260409020600781015490546123c79190615c54565b90506123df565b506000858152600160205260409020545b6000868152600860205260408120600701546123fb8342615c54565b6124059190615daf565b905060018110156124285760405162461bcd60e51b815260040161099b90615e17565b6000878152600260205260409081902054600f549151632bd5a7f560e21b8152600481018a905290916001600160a01b03169063af569fd490602401602060405180830381865afa158015612481573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a59190615bcc565b6124af9190615c54565b6000888152600860205260409020600701546124cb9190615d98565b6000888152600860205260409020546124e49190615bfb565b6000888152600160205260409020556124ff42610258615bfb565b86101561250b57600080fd5b6000838152600d60209081526040808320899055600e90915290819020805460ff19166001179055600f5490516379ae0a2960e11b81526001600160a01b039091169063f35c14529061256a9086908e908e908e908e90600401615e3e565b600060405180830381600087803b15801561258457600080fd5b505af1158015612598573d6000803e3d6000fd5b5050505050505050505050505050565b60115460405163feb2e23360e01b8152632614e37960e11b916001600160a01b03169063feb2e233906125e19033908590600401615ce4565b602060405180830381865afa1580156125fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126229190615add565b1515600114806126a4575060115460405163b3076d5560e01b81526001600160a01b039091169063b3076d559061265d903390600401615814565b602060405180830381865afa15801561267a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061269e9190615add565b15156001145b6126c05760405162461bcd60e51b815260040161099b90615d07565b600088886040516020016126d5929190615a52565b60408051808303601f19018152908290528051602090910120600f54620d374160ec1b8352600483018a90529092506001600160a01b03169063d374100090602401602060405180830381865afa158015612734573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127589190615add565b15156001146127795760405162461bcd60e51b815260040161099b90615d2c565b6000818152600660209081526040808320998352988152888220805460ff1916951515959095179094559081526003835286812080546001600160a01b0319166001600160a01b039590951694909417909355506004905292909220908155600101555050565b60115460405163feb2e23360e01b8152635ac57d8b60e01b916001600160a01b03169063feb2e233906128199033908590600401615ce4565b602060405180830381865afa158015612836573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061285a9190615add565b1515600114806128dc575060115460405163b3076d5560e01b81526001600160a01b039091169063b3076d5590612895903390600401615814565b602060405180830381865afa1580156128b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128d69190615add565b15156001145b6128f85760405162461bcd60e51b815260040161099b90615d07565b600f54604051620d374160ec1b8152600481018590526001600160a01b039091169063d374100090602401602060405180830381865afa158015612940573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129649190615add565b15156001146129855760405162461bcd60e51b815260040161099b90615df5565b6000805b8751811015612d215760018482815181106129a6576129a6615b21565b6020908102919091010151600f54604051632bd5a7f560e21b8152600481018990526001600160a01b039091169063af569fd490602401602060405180830381865afa1580156129fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a1e9190615bcc565b600f5460405163074dbd4360e51b8152600481018a90526001600160a01b039091169063e9b7a86090602401602060405180830381865afa158015612a67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a8b9190615bcc565b612a959190615bfb565b612a9f9190615bfb565b612aa99190615c54565b600f54604051633635558b60e11b8152600481018890529193506001600160a01b031690636c6aab1690602401602060405180830381865afa158015612af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b179190615bcc565b821115612b365760405162461bcd60e51b815260040161099b90615c0e565b60005b848281518110612b4b57612b4b615b21565b6020026020010151811015612d0e57600f54604051632bd5a7f560e21b8152600481018890526000916001600160a01b03169063af569fd490602401602060405180830381865afa158015612ba4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc89190615bcc565b600f5460405163074dbd4360e51b8152600481018a90526001600160a01b039091169063e9b7a86090602401602060405180830381865afa158015612c11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c359190615bcc565b612c3f9190615bfb565b600f548b519192506001600160a01b03169063f35c14529083908d9087908110612c6b57612c6b615b21565b60200260200101518c8781518110612c8557612c85615b21565b60200260200101518c8881518110612c9f57612c9f615b21565b60200260200101518c6040518663ffffffff1660e01b8152600401612cc8959493929190615e3e565b600060405180830381600087803b158015612ce257600080fd5b505af1158015612cf6573d6000803e3d6000fd5b50505050508080612d0690615e7c565b915050612b39565b5080612d1981615e7c565b915050612989565b5050505050505050565b600f54604051631732052d60e31b8152600481018990528891637e04bcb760e01b916001600160a01b039091169063b990296890602401602060405180830381865afa158015612d7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612da39190615a96565b6001600160a01b0316336001600160a01b03161480612e36575060115460405163feb2e23360e01b81526001600160a01b039091169063feb2e23390612def9033908590600401615ce4565b602060405180830381865afa158015612e0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e309190615add565b15156001145b80612eb3575060115460405163b3076d5560e01b81526001600160a01b039091169063b3076d5590612e6c903390600401615814565b602060405180830381865afa158015612e89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ead9190615add565b15156001145b612ecf5760405162461bcd60e51b815260040161099b90615d07565b6000898152600a6020526040902060060154610100900460ff1615612f065760405162461bcd60e51b815260040161099b90615d4d565b60008981526009602052604090205483612f208688615bfb565b612f2a9190615bfb565b14612f475760405162461bcd60e51b815260040161099b90615d77565b50506000968752600a602052604090962080546001600160a01b039687166001600160a01b0319918216178255600180830180549789169783169790971790965560028201805495909716941693909317909455600382015560048101929092556005820192909255600601805461ffff19169091179055565b60008281526007602052604090205460ff16151560011480156130025750600084815260056020908152604080832085845290915290205460ff1615156001145b61301e5760405162461bcd60e51b815260040161099b90615a74565b600082815260086020526040902060020154421080159061305057506000828152600860205260409020600301544211155b61306c5760405162461bcd60e51b815260040161099b90615ba8565b600f5460405163074dbd4360e51b8152600481018690526001600160a01b039091169063e9b7a86090602401602060405180830381865afa1580156130b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130d99190615bcc565b83101580156131545750600f54604051633635558b60e11b8152600481018690526001600160a01b0390911690636c6aab1690602401602060405180830381865afa15801561312c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131509190615bcc565b8311155b6131955760405162461bcd60e51b815260206004820152601260248201527131b7b617ba37b5b2b71034b21032b93937b960711b604482015260640161099b565b600f54604051632bd5a7f560e21b8152600481018490526000916001600160a01b03169063af569fd490602401602060405180830381865afa1580156131df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132039190615bcc565b600f5460405163074dbd4360e51b8152600481018690526001600160a01b039091169063e9b7a86090602401602060405180830381865afa15801561324c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132709190615bcc565b61327a9190615bfb565b600f54604051633635558b60e11b8152600481018690529192506001600160a01b031690636c6aab1690602401602060405180830381865afa1580156132c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132e89190615bcc565b8111156133075760405162461bcd60e51b815260040161099b90615c0e565b61331083614d87565b34101561332f5760405162461bcd60e51b815260040161099b90615c31565b600061333e3461104c86614d87565b600085815260208190526040902054909150819061335d903490615bfb565b6133679190615c54565b60008581526020819052604080822092909255600f549151632bd5a7f560e21b8152600481018790529092506001600160a01b039091169063af569fd490602401602060405180830381865afa1580156133c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133e99190615bcc565b600f5460405163074dbd4360e51b8152600481018790526001600160a01b039091169063e9b7a86090602401602060405180830381865afa158015613432573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134569190615bcc565b6134609190615bfb565b600f546040516339143a1d60e01b815260048101839052602481018990526044810188905260648101879052608481018690523360a482018190529293506001600160a01b03909116906339143a1d9060c401600060405180830381600087803b1580156134cd57600080fd5b505af11580156134e1573d6000803e3d6000fd5b5050505050505050505050565b60008981526007602052604090205460ff16151560011480156135115750600088115b6135435760405162461bcd60e51b815260206004820152600360248201526232b93960e91b604482015260640161099b565b6000898152600860205260408120548a9190819089904210801590613578575060008481526008602052604090206001015442105b15613a25576001915060006001600160a01b038716156138fb5760105460405163d986ff6d60e01b81526000916001600160a01b03169063d986ff6d906135de908b90738888888888888888888888888888888888888888903390600190600401615ab3565b602060405180830381865afa1580156135fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061361f9190615add565b806136b1575060105460405163d986ff6d60e01b81526001600160a01b039091169063d986ff6d90613670908b90738888888888888888888888888888888888888888903390600290600401615ab3565b602060405180830381865afa15801561368d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136b19190615add565b90508015156000036137ec576010546000878152600860205260409081902060090154905163d986ff6d60e01b81526001600160a01b039283169263d986ff6d9261370f928d92610100909204909116903390600190600401615ab3565b602060405180830381865afa15801561372c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137509190615add565b806137e957506010546000878152600860205260409081902060090154905163d986ff6d60e01b81526001600160a01b039283169263d986ff6d926137a8928d92610100909204909116903390600290600401615ab3565b602060405180830381865afa1580156137c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137e99190615add565b90505b60018115151461380e5760405162461bcd60e51b815260040161099b90615afa565b878d8460405160200161382393929190615e95565b60408051808303601f19018152828252805160209182012081840152815180840382018152838301928390528051910120600f5463065b6b3f60e51b90925293508f916001600160a01b039091169063cb6d67e090613888908a908d90604401615ed4565b602060405180830381865afa1580156138a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138c99190615bcc565b6138d39190615bfb565b8d10156138f25760405162461bcd60e51b815260040161099b90615eeb565b879450506139e3565b338c8360405160200161391093929190615e95565b60408051808303601f19018152828252805160209182012081840152815180840382018152838301928390528051910120600f5463065b6b3f60e51b90925292508e916001600160a01b039091169063cb6d67e0906139759089903390604401615ed4565b602060405180830381865afa158015613992573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b69190615bcc565b6139c09190615bfb565b8c10156139df5760405162461bcd60e51b815260040161099b90615eeb565b3393505b600085815260086020526040902060040154613a03908a908a90846150ee565b613a1f5760405162461bcd60e51b815260040161099b90615b81565b50613c54565b6000848152600860205260409020600201544210801590613a5757506000848152600860205260409020600301544211155b15610e8b57600f5460405163945e549b60e01b815260048101869052600293506001600160a01b039091169063945e549b90602401602060405180830381865afa158015613aa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613acd9190615bcc565b8c1115613b125760405162461bcd60e51b81526020600482015260136024820152724368616e6765206e6f206f6620746f6b656e7360681b604482015260640161099b565b600f5460405163945e549b60e01b8152600481018690526001600160a01b039091169063945e549b90602401602060405180830381865afa158015613b5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b7f9190615bcc565b600f5460405163e943a2c760e01b81528e916001600160a01b03169063e943a2c790613bb19089903390600401615ed4565b602060405180830381865afa158015613bce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bf29190615bcc565b613bfc9190615bfb565b1115613c305760405162461bcd60e51b815260206004820152600360248201526209ac2f60eb1b604482015260640161099b565b5060408051808201909152600881526711383ab13634b19160c11b60208201523392505b600f54604051632bd5a7f560e21b8152600481018690526000916001918f916001600160a01b03169063af569fd490602401602060405180830381865afa158015613ca3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cc79190615bcc565b600f5460405163074dbd4360e51b8152600481018a90526001600160a01b039091169063e9b7a86090602401602060405180830381865afa158015613d10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d349190615bcc565b613d3e9190615bfb565b613d489190615bfb565b613d529190615c54565b600f54604051633635558b60e11b8152600481018890529192506001600160a01b031690636c6aab1690602401602060405180830381865afa158015613d9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dc09190615bcc565b811115613ddf5760405162461bcd60e51b815260040161099b90615c0e565b8c613de986614d87565b613df39190615d98565b341015613e125760405162461bcd60e51b815260040161099b90615c31565b6000613e2c348f613e2289614d87565b61104c9190615d98565b6000878152602081905260409020549091508190613e4b903490615bfb565b613e559190615c54565b6000878152602081815260408083209390935560089052206009015460ff166003039050613fec576000858152600160205260408120548103613eb857600086815260086020526040902060078101549054613eb19190615c54565b9050613ec9565b506000858152600160205260409020545b600086815260086020526040812060070154613ee58342615c54565b613eef9190615daf565b905060018110158015613f0257508e6001145b613f1e5760405162461bcd60e51b815260040161099b90615e17565b6000878152600260205260409081902054600f549151632bd5a7f560e21b8152600481018a905290916001600160a01b03169063af569fd490602401602060405180830381865afa158015613f77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f9b9190615bcc565b613fa59190615c54565b600088815260086020526040902060070154613fc19190615d98565b600088815260086020526040902054613fda9190615bfb565b60008881526001602052604090205550505b60005b8d81101561417157600f54604051632bd5a7f560e21b8152600481018890526000916001600160a01b03169063af569fd490602401602060405180830381865afa158015614041573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140659190615bcc565b600f5460405163074dbd4360e51b8152600481018a90526001600160a01b039091169063e9b7a86090602401602060405180830381865afa1580156140ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140d29190615bcc565b6140dc9190615bfb565b9050600f60009054906101000a90046001600160a01b03166001600160a01b031663d3322d5382888f888d8d8c6040518863ffffffff1660e01b815260040161412b9796959493929190615c93565b600060405180830381600087803b15801561414557600080fd5b505af1158015614159573d6000803e3d6000fd5b5050505050808061416990615e7c565b915050613fef565b505050505050505050505050505050565b601154604051630cab15dd60e31b81523360048201526024810188905287916305c2fcbd60e51b916001600160a01b0390911690636558aee890604401602060405180830381865afa1580156141dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142009190615add565b151560011480614284575060115460405163feb2e23360e01b81526001600160a01b039091169063feb2e2339061423d9033908590600401615ce4565b602060405180830381865afa15801561425a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061427e9190615add565b15156001145b80614301575060115460405163b3076d5560e01b81526001600160a01b039091169063b3076d55906142ba903390600401615814565b602060405180830381865afa1580156142d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142fb9190615add565b15156001145b61431d5760405162461bcd60e51b815260040161099b90615d07565b60008881526007602052604090205460ff16151560011461436c5760405162461bcd60e51b815260206004820152600960248201526853657420436f73747360b81b604482015260640161099b565b505060009586526008602052604090952093845560018401929092556004830193909355600282019290925560030155565b60115460405163feb2e23360e01b815263b986eaa760e01b916001600160a01b03169063feb2e233906143d79033908590600401615ce4565b602060405180830381865afa1580156143f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144189190615add565b15156001148061449a575060115460405163b3076d5560e01b81526001600160a01b039091169063b3076d5590614453903390600401615814565b602060405180830381865afa158015614470573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144949190615add565b15156001145b6144b65760405162461bcd60e51b815260040161099b90615d07565b836001036144d45760008381526002602052604090208290556144e4565b6000838152600160205260408120555b50505050565b601154604051630cab15dd60e31b815233600482015260248101899052889163d2f4302f60e01b916001600160a01b0390911690636558aee890604401602060405180830381865afa158015614544573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145689190615add565b1515600114806145ec575060115460405163feb2e23360e01b81526001600160a01b039091169063feb2e233906145a59033908590600401615ce4565b602060405180830381865afa1580156145c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145e69190615add565b15156001145b80614669575060115460405163b3076d5560e01b81526001600160a01b039091169063b3076d5590614622903390600401615814565b602060405180830381865afa15801561463f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146639190615add565b15156001145b6146855760405162461bcd60e51b815260040161099b90615d07565b600f54604051620d374160ec1b8152600481018b90526001600160a01b039091169063d374100090602401602060405180830381865afa1580156146cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146f19190615add565b15156001146147125760405162461bcd60e51b815260040161099b90615df5565b50506000968752600860208181526040808a206005810199909955600689019790975590870194909455600780870193909355600990950180546001600160a01b03909616610100026001600160a81b031990961660ff9092169190911794909417909355919091529020805460ff19166001179055565b60115460405163feb2e23360e01b81526335062ebb60e21b916001600160a01b03169063feb2e233906147c39033908590600401615ce4565b602060405180830381865afa1580156147e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148049190615add565b151560011480614886575060115460405163b3076d5560e01b81526001600160a01b039091169063b3076d559061483f903390600401615814565b602060405180830381865afa15801561485c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148809190615add565b15156001145b6148a25760405162461bcd60e51b815260040161099b90615d07565b6148ac8486615bfb565b6064146148cb5760405162461bcd60e51b815260040161099b90615f0d565b6148d58284615bfb565b6064146148f45760405162461bcd60e51b815260040161099b90615f0d565b506000948552600960209081526040808720958655600195860194909455600b905291909320928355910155565b60115460405163feb2e23360e01b815263d6516f4760e01b916001600160a01b03169063feb2e2339061495b9033908590600401615ce4565b602060405180830381865afa158015614978573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061499c9190615add565b151560011480614a1e575060115460405163b3076d5560e01b81526001600160a01b039091169063b3076d55906149d7903390600401615814565b602060405180830381865afa1580156149f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a189190615add565b15156001145b614a3a5760405162461bcd60e51b815260040161099b90615d07565b6000848152600a602052604090206006015460ff1615156001148015614a7657506000848152600c602052604090206006015460ff1615156001145b614ab65760405162461bcd60e51b815260206004820152601160248201527050726f706f73652041646472657373657360781b604482015260640161099b565b6000848152600a602090815260408083206006908101805488151561010081810261ff001993841617909355600c9095529285209091018054871515909202919092161790559003614b20576000848152600a60205260409020600601805460ff191690556144e4565b8115156000036144e4575050506000908152600c60205260409020600601805460ff19169055565b60115460405163feb2e23360e01b81526336cb886f60e21b916001600160a01b03169063feb2e23390614b819033908590600401615ce4565b602060405180830381865afa158015614b9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bc29190615add565b151560011480614c44575060115460405163b3076d5560e01b81526001600160a01b039091169063b3076d5590614bfd903390600401615814565b602060405180830381865afa158015614c1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c3e9190615add565b15156001145b614c605760405162461bcd60e51b815260040161099b90615d07565b60115460408051638da5cb5b60e01b8152905147926000926001600160a01b0390911691638da5cb5b916004808201926020929091908290030181865afa158015614caf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614cd39190615a96565b90506000816001600160a01b03168360405160006040518083038185875af1925050503d8060008114614d22576040519150601f19603f3d011682016040523d82523d6000602084013e614d27565b606091505b5050905080614d485760405162461bcd60e51b815260040161099b90615dd1565b6040518115158152839033907f4a48cb98c5be023b78a0b3ec94107a01a0397b2e389d4b5f252aef518e633ec39060200160405180910390a350505050565b600081815260086020526040812060090154819060ff16600303614eb9576000838152600860208190526040909120015415614ea2576000838152600260205260409081902054600f549151632bd5a7f560e21b81526004810186905290916001600160a01b03169063af569fd490602401602060405180830381865afa158015614e16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614e3a9190615bcc565b614e449190615c54565b600084815260086020819052604090912090810154600590910154606491614e6b91615d98565b614e759190615daf565b614e7f9190615d98565b600084815260086020526040902060050154614e9b9190615bfb565b9392505050565b505060009081526008602052604090206005015490565b60008381526008602052604090206009015460ff166002148015614eeb57506000838152600860205260409020544210155b8015614f0857506000838152600860205260409020600301544211155b15614ea257600083815260086020526040902060078101549054614f2c9042615c54565b614f369190615daf565b600084815260086020819052604082200154919250908190810361501157614f5f836001615bfb565b600086815260086020526040902060050154614f7b9190615daf565b6000868152600860205260409020805460079091015491935090614f9f9085615d98565b614fa99042615c54565b614fb39190615c54565b600086815260086020526040902060070154614fd0856002615bfb565b600088815260086020526040902060050154614fec9190615daf565b614ff69085615c54565b6150009190615daf565b61500a9190615d98565b90506150a0565b6000858152600860208190526040909120908101546006820154600590920154859261503c91615c54565b6150469190615daf565b1061508b57600085815260086020819052604090912001546150689084615d98565b6000868152600860205260409020600501546150849190615c54565b91506150a0565b60008581526008602052604090206006015491505b6000858152600860205260409020600601546150bc8284615c54565b11156150d5576150cc8183615c54565b95945050505050565b5050506000918252506008602052604090206006015490565b6000826150fc868685615188565b1495945050505050565b6000806151138385615c54565b604051909150600090339083908381818185875af1925050503d8060008114615158576040519150601f19603f3d011682016040523d82523d6000602084013e61515d565b606091505b505090508061517e5760405162461bcd60e51b815260040161099b90615dd1565b5090505b92915050565b600081815b848110156151cb576151b7828787848181106151ab576151ab615b21565b905060200201356151d4565b9150806151c381615e7c565b91505061518d565b50949350505050565b60008183106151f0576000828152602084905260409020614e9b565b5060009182526020526040902090565b60006020828403121561521257600080fd5b5035919050565b6001600160a01b038116811461522e57600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561526f5761526f615231565b604052919050565b600082601f83011261528857600080fd5b81356001600160401b038111156152a1576152a1615231565b6152b4601f8201601f1916602001615247565b8181528460208386010111156152c957600080fd5b816020850160208301376000918101602001919091529392505050565b60008083601f8401126152f857600080fd5b5081356001600160401b0381111561530f57600080fd5b6020830191508360208260051b850101111561532a57600080fd5b9250929050565b60008060008060008060008060e0898b03121561534d57600080fd5b883561535881615219565b975060208901359650604089013595506060890135945060808901356001600160401b038082111561538957600080fd5b6153958c838d01615277565b955060a08b01359150808211156153ab57600080fd5b506153b88b828c016152e6565b999c989b50969995989497949560c00135949350505050565b801515811461522e57600080fd5b6000806000606084860312156153f457600080fd5b8335925060208401359150604084013561540d816153d1565b809150509250925092565b600080600080600080600060e0888a03121561543357600080fd5b87359650602088013561544581615219565b9550604088013561545581615219565b9450606088013561546581615219565b9699959850939660808101359560a0820135955060c0909101359350915050565b60006020828403121561549857600080fd5b8135614e9b81615219565b600080600080600060a086880312156154bb57600080fd5b8535945060208601356154cd81615219565b935060408601356154dd81615219565b94979396509394606081013594506080013592915050565b600080600080600060a0868803121561550d57600080fd5b853561551881615219565b945060208601356001600160401b0381111561553357600080fd5b61553f88828901615277565b959895975050505060408401359360608101359360809091013592509050565b6000806040838503121561557257600080fd5b50508035926020909101359150565b600080600080600080600060e0888a03121561559c57600080fd5b87356155a781615219565b96506020880135955060408801359450606088013593506080880135925060a08801356155d381615219565b915060c08801356155e3816153d1565b8091505092959891949750929550565b60006001600160401b0382111561560c5761560c615231565b5060051b60200190565b600082601f83011261562757600080fd5b8135602061563c615637836155f3565b615247565b82815260059290921b8401810191818101908684111561565b57600080fd5b8286015b8481101561569a5780356001600160401b0381111561567e5760008081fd5b61568c8986838b0101615277565b84525091830191830161565f565b509695505050505050565b600082601f8301126156b657600080fd5b813560206156c6615637836155f3565b82815260059290921b840181019181810190868411156156e557600080fd5b8286015b8481101561569a57803583529183019183016156e9565b600080600080600060a0868803121561571857600080fd5b85356001600160401b038082111561572f57600080fd5b818801915088601f83011261574357600080fd5b81356020615753615637836155f3565b82815260059290921b8401810191818101908c84111561577257600080fd5b948201945b8386101561579957853561578a81615219565b82529482019490820190615777565b995050890135925050808211156157af57600080fd5b6157bb89838a01615616565b955060408801359150808211156157d157600080fd5b6157dd89838a016156a5565b94506060880135935060808801359150808211156157fa57600080fd5b50615807888289016156a5565b9150509295509295909350565b6001600160a01b0391909116815260200190565b6000806000806080858703121561583e57600080fd5b5050823594602084013594506040840135936060013592509050565b60008060008060008060008060006101008a8c03121561587957600080fd5b8935985060208a0135975060408a0135965060608a01356001600160401b03808211156158a557600080fd5b6158b18d838e01615277565b975060808c013591506158c382615219565b90955060a08b013590808211156158d957600080fd5b506158e68c828d016152e6565b90955093505060c08a01356158fa81615219565b8092505060e08a013590509295985092959850929598565b60008060008060008060c0878903121561592b57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b60008060006060848603121561596a57600080fd5b505081359360208301359350604090920135919050565b600080600080600080600060e0888a03121561599c57600080fd5b873596506020880135955060408801359450606088013593506080880135925060a088013560ff811681146159d057600080fd5b915060c08801356155e381615219565b600080600080600060a086880312156159f857600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600080600060608486031215615a3057600080fd5b833592506020840135615a42816153d1565b9150604084013561540d816153d1565b60609290921b6bffffffffffffffffffffffff19168252601482015260340190565b60208082526008908201526734b734ba1032b93960c11b604082015260600190565b600060208284031215615aa857600080fd5b8151614e9b81615219565b6001600160a01b039485168152928416602084015292166040820152606081019190915260800190565b600060208284031215615aef57600080fd5b8151614e9b816153d1565b6020808252600d908201526c2737903232b632b3b0ba34b7b760991b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60005b83811015615b52578181015183820152602001615b3a565b50506000910152565b82815260008251615b73816020850160208701615b37565b919091016020019392505050565b6020808252600d908201526c34b73b30b634b210383937b7b360991b604082015260600190565b6020808252600a90820152694e6f206d696e74696e6760b01b604082015260600190565b600060208284031215615bde57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561518257615182615be5565b6020808252600990820152684e6f20737570706c7960b81b604082015260600190565b6020808252600990820152680aee4dedcce408aa8960bb1b604082015260600190565b8181038181111561518257615182615be5565b60008151808452615c7f816020860160208601615b37565b601f01601f19169290920160200192915050565b8781526001600160a01b0387811660208301528616604082015260e060608201819052600090615cc590830187615c67565b60808301959095525060a081019290925260c090910152949350505050565b6001600160a01b039290921682526001600160e01b031916602082015260400190565b6020808252600b908201526a139bdd08185b1b1bddd95960aa1b604082015260600190565b6020808252600790820152664e6f206461746160c81b604082015260600190565b60208082526010908201526f105b1c9958591e48185c1c1c9bdd995960821b604082015260600190565b602080825260079082015266436865636b202560c81b604082015260600190565b808202811582820484141761518257615182615be5565b600082615dcc57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252600a90820152691155120819985a5b195960b21b604082015260600190565b602080825260089082015267416464206461746160c01b604082015260600190565b6020808252600d908201526c0c481b5a5b9d0bdc195c9a5bd9609a1b604082015260600190565b8581526001600160a01b038516602082015260a060408201819052600090615e6890830186615c67565b606083019490945250608001529392505050565b600060018201615e8e57615e8e615be5565b5060010190565b6bffffffffffffffffffffffff198460601b16815282601482015260008251615ec5816034850160208701615b37565b91909101603401949350505050565b9182526001600160a01b0316602082015260400190565b6020808252600890820152671053081b1a5b5a5d60c21b604082015260600190565b60208082526016908201527573706c697473206e65656420746f206265203130302560501b60408201526060019056fea2646970667358221220b70160aef7eef99472bb263304952646fc6ef8b0f53546cfb6fe30368d304ad764736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000002c8fdced22b28e13f1a472cf7f19e2f56c204c830000000000000000000000002202cb9c00487e7e8ef21e6d8e914b32e709f43d00000000000000000000000026ad9c64930bf5e057cb895a183436b30ad140f8
-----Decoded View---------------
Arg [0] : _gencore (address): 0x2c8FdCeD22B28e13f1a472cf7f19e2f56C204c83
Arg [1] : _del (address): 0x2202CB9c00487e7e8EF21e6d8E914B32e709f43d
Arg [2] : _adminsContract (address): 0x26AD9C64930bf5e057cB895a183436b30ad140f8
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000002c8fdced22b28e13f1a472cf7f19e2f56c204c83
Arg [1] : 0000000000000000000000002202cb9c00487e7e8ef21e6d8e914b32e709f43d
Arg [2] : 00000000000000000000000026ad9c64930bf5e057cb895a183436b30ad140f8
Deployed Bytecode Sourcemap
361:35744:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;679:56;;;;;;;;;;-1:-1:-1;679:56:6;;;;;:::i;:::-;;;;;;;;;;;;;;;;;345:25:7;;;333:2;318:18;679:56:6;;;;;;;;18944:3075;;;;;;:::i;:::-;;:::i;:::-;;17707:391;;;;;;;;;;-1:-1:-1;17707:391:6;;;;;:::i;:::-;;:::i;24279:1305::-;;;;;;;;;;-1:-1:-1;24279:1305:6;;;;;:::i;:::-;;:::i;28658:161::-;;;;;;;;;;-1:-1:-1;28658:161:6;;;;;:::i;:::-;;:::i;26534:2073::-;;;;;;;;;;-1:-1:-1;26534:2073:6;;;;;:::i;:::-;;:::i;28871:296::-;;;;;;;;;;-1:-1:-1;28871:296:6;;;;;:::i;:::-;;:::i;29679:247::-;;;;;;;;;;-1:-1:-1;29679:247:6;;;;;:::i;:::-;29753:7;29789:47;;;:32;:47;;;;;:64;;29855:62;;;;;29789:64;;29679:247;;;;;5251:25:7;;;5307:2;5292:18;;5285:34;;;;5224:18;29679:247:6;5077:248:7;29999:615:6;;;;;;;;;;-1:-1:-1;29999:615:6;;;;;:::i;:::-;30090:7;30168:47;;;:32;:47;;;;;:59;;;30229;;;30290;;;;30351:62;;;;30415;;;;30479;;;;30543;;;;;-1:-1:-1;;;;;30168:59:6;;;;30229;;;;30290;;;;;30351:62;;30415;;30168:59;30543:62;;;;;29999:615;;;;;-1:-1:-1;;;;;5695:15:7;;;5677:34;;5747:15;;;5742:2;5727:18;;5720:43;5799:15;;;;5779:18;;;5772:43;;;;5846:2;5831:18;;5824:34;;;;5889:3;5874:19;;5867:35;5657:3;5918:19;;5911:35;5990:14;;5983:22;5977:3;5962:19;;5955:51;5626:3;5611:19;29999:615:6;5330:682:7;14814:2016:6;;;;;;;;;;-1:-1:-1;14814:2016:6;;;;;:::i;:::-;;:::i;1312:83::-;;;;;;;;;;-1:-1:-1;1312:83:6;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7103:14:7;;7096:22;7078:41;;7066:2;7051:18;1312:83:6;6938:187:7;18169:707:6;;;;;;;;;;-1:-1:-1;18169:707:6;;;;;:::i;:::-;;:::i;7409:990::-;;;;;;;;;;-1:-1:-1;7409:990:6;;;;;:::i;:::-;;:::i;1103:75::-;;;;;;;;;;-1:-1:-1;1103:75:6;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;584:45;;;;;;;;;;-1:-1:-1;584:45:6;;;;;:::i;:::-;;;;;;;;;;;;;;33170:129;;;;;;;;;;-1:-1:-1;33170:129:6;;;;;:::i;:::-;33238:4;33262:29;;;:19;:29;;;;;;;;;33170:129;22925:1263;;;;;;;;;;-1:-1:-1;22925:1263:6;;;;;:::i;:::-;;:::i;32814:143::-;;;;;;;;;;-1:-1:-1;32814:143:6;;;;;:::i;:::-;32880:4;32904:31;;;:16;:31;;;;;:45;;;;32814:143;33001:127;;;;;;;;;;-1:-1:-1;33001:127:6;;;;;:::i;:::-;33069:4;33093:27;;;:17;:27;;;;;;;33001:127;31022:637;;;;;;;;;;-1:-1:-1;31022:637:6;;;;;:::i;:::-;31115:7;31193:49;;;:34;:49;;;;;:63;;;31258;;;31323;;;;31388:64;;;;31454;;;;31520;;;;31586;;;;;-1:-1:-1;;;;;31193:63:6;;;;31258;;;;31323;;;;;31388:64;;31454;;31193:63;31586:64;;;;;31022:637;805:53;;;;;;;;;;-1:-1:-1;805:53:6;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;805:53:6;;;;;;;;;;:::i;31741:377::-;;;;;;;;;;-1:-1:-1;31741:377:6;;;;;:::i;:::-;31818:4;31869:31;;;:16;:31;;;;;:50;;31921:48;;;;31971:42;;;;32015:47;;;;32064:45;;;;;31869:50;;31921:48;;31971:42;;32015:47;;31741:377;;;;;12338:25:7;;;12394:2;12379:18;;12372:34;;;;12422:18;;;12415:34;;;;12480:2;12465:18;;12458:34;12523:3;12508:19;;12501:35;12325:3;12310:19;31741:377:6;12079:463:7;13256:1519:6;;;;;;:::i;:::-;;:::i;461:57::-;;;;;;;;;;-1:-1:-1;461:57:6;;;;;:::i;:::-;;;;;;;;;;;;;;;8463:4716;;;;;;:::i;:::-;;:::i;4083:27::-;;;;;;;;;;-1:-1:-1;4083:27:6;;;;-1:-1:-1;;;;;4083:27:6;;;6664:706;;;;;;;;;;-1:-1:-1;6664:706:6;;;;;:::i;:::-;;:::i;16935:347::-;;;;;;;;;;-1:-1:-1;16935:347:6;;;;;:::i;:::-;;:::i;30694:253::-;;;;;;;;;;-1:-1:-1;30694:253:6;;;;;:::i;:::-;30770:7;30806:49;;;:34;:49;;;;;:66;;30874:64;;;;;30806:66;;30694:253;4117:40;;;;;;;;;;-1:-1:-1;4117:40:6;;;;-1:-1:-1;;;;;4117:40:6;;;5746:839;;;;;;;;;;-1:-1:-1;5746:839:6;;;;;:::i;:::-;;:::i;32193:440::-;;;;;;;;;;-1:-1:-1;32193:440:6;;;;;:::i;:::-;32278:7;32348:31;;;:16;:31;;;;;;;;:50;;;;32400:53;;;;32455:36;;;;32493:42;;;;32537:43;;;;;32348:50;;32455:36;;32493:42;32537:43;;;;;32582:42;;;-1:-1:-1;;;;;32582:42:6;;32193:440;;;;;16517:25:7;;;16573:2;16558:18;;16551:34;;;;16601:18;;;16594:34;;;;16659:2;16644:18;;16637:34;16720:4;16708:17;16702:3;16687:19;;16680:46;-1:-1:-1;;;;;16763:32:7;16783:3;16742:19;;16735:61;16504:3;16489:19;32193:440:6;16234:568:7;22068:768:6;;;;;;;;;;-1:-1:-1;22068:768:6;;;;;:::i;:::-;;:::i;25655:811::-;;;;;;;;;;-1:-1:-1;25655:811:6;;;;;:::i;:::-;;:::i;29242:359::-;;;;;;;;;;;;;:::i;33358:2742::-;;;;;;;;;;-1:-1:-1;33358:2742:6;;;;;:::i;:::-;;:::i;32683:87::-;;;;;;;;;;-1:-1:-1;32758:4:6;32683:87;;18944:3075;19181:19;19230:17;19248;19213:53;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;19213:53:6;;;;;;;;;19203:64;;19213:53;19203:64;;;;19286:34;;;;:15;:34;;;;;;19203:64;;-1:-1:-1;19286:34:6;;:42;;:34;:42;:115;;;;-1:-1:-1;19332:42:6;;;;:29;:42;;;;;;;;:61;;;;;;;;;;;:69;;:61;:69;19286:115;19278:136;;;;-1:-1:-1;;;19278:136:6;;;;;;;:::i;:::-;;;;;;;;;19448:44;;-1:-1:-1;;;19448:44:6;;;;;345:25:7;;;19425:20:6;;-1:-1:-1;;;;;19448:34:6;;;;;318:18:7;;19448:44:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19425:67;-1:-1:-1;19507:10:6;-1:-1:-1;;;;;19507:26:6;;;19503:667;;19603:3;;:109;;-1:-1:-1;;;19603:109:6;;19550:20;;-1:-1:-1;;;;;19603:3:6;;:36;;:109;;19640:12;;19654:42;;19698:10;;19603:3;;:109;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:222;;;-1:-1:-1;19716:3:6;;:109;;-1:-1:-1;;;19716:109:6;;-1:-1:-1;;;;;19716:3:6;;;;:36;;:109;;19753:12;;19767:42;;19811:10;;19823:1;;19716:109;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19585:240;-1:-1:-1;19844:24:6;;;19863:5;19844:24;19840:255;;19903:3;;:84;;-1:-1:-1;;;19903:84:6;;-1:-1:-1;;;;;19903:3:6;;;;:36;;:84;;19940:12;;19954:17;;19973:10;;19903:3;;:84;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:172;;;-1:-1:-1;19991:3:6;;:84;;-1:-1:-1;;;19991:84:6;;-1:-1:-1;;;;;19991:3:6;;;;:36;;:84;;20028:12;;20042:17;;20061:10;;20073:1;;19991:84;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19885:190;;19840:255;20136:4;20117:23;;;;20109:49;;;;-1:-1:-1;;;20109:49:6;;;;;;;:::i;:::-;19535:635;19503:667;20200:26;;;;:13;:26;;;;;:29;20188:41;;;;;:86;;-1:-1:-1;20245:26:6;;;;:13;:26;;;;;20272:1;20245:29;;20233:8;:41;;20188:86;20180:122;;;;-1:-1:-1;;;20180:122:6;;20470:2:7;20180:122:6;;;20452:21:7;20509:2;20489:18;;;20482:30;-1:-1:-1;;;20528:18:7;;;20521:53;20591:18;;20180:122:6;20268:347:7;20180:122:6;20371:30;;;;:17;:30;;;;;;;;20313:99;;-1:-1:-1;;;20313:99:6;;-1:-1:-1;;;;;20878:15:7;;;20313:99:6;;;20860:34:7;20371:30:6;;;20910:18:7;;;20903:43;20962:18;;;20955:34;;;20313:43:6;;;;;;20795:18:7;;20313:99:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;20423:11:6;20590:21;;;:16;:21;;;;;:40;20437:17;;-1:-1:-1;20423:11:6;;20546:10;;20571:15;:59;;;;:119;;-1:-1:-1;20652:21:6;;;;:16;:21;;;;;:38;;;20634:15;:56;20571:119;20567:753;;;20715:1;20707:9;;20731:12;20816:8;20826:7;20799:35;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;20799:35:6;;;;;;;;;20788:48;;20799:35;20788:48;;;;20775:62;;;21750:19:7;21785:12;20775:62:6;;;;;;;;;;;;20765:73;;;;;;20758:80;;20870:12;20853:29;;20905:79;20932:11;;20945:16;:21;20962:3;20945:21;;;;;;;;;;;:32;;;20979:4;20905:26;:79::i;:::-;20897:105;;;;-1:-1:-1;;;20897:105:6;;;;;;;:::i;:::-;20692:334;20567:753;;;21055:21;;;;:16;:21;;;;;:37;;;21036:15;:56;;;;:114;;-1:-1:-1;21115:21:6;;;;:16;:21;;;;;:35;;;21096:15;:54;;21036:114;21032:288;;;-1:-1:-1;;21235:20:6;;;;;;;;;;;;-1:-1:-1;;;21235:20:6;;;;21208:12;;-1:-1:-1;21175:1:6;;21032:288;;;21288:20;;-1:-1:-1;;;21288:20:6;;;;;;;:::i;21032:288::-;21434:7;;:26;;-1:-1:-1;;;21434:26:6;;;;;345:25:7;;;21330:32:6;;-1:-1:-1;;;;;21434:7:6;;:21;;318:18:7;;21434:26:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21400:7;;:31;;-1:-1:-1;;;21400:31:6;;;;;345:25:7;;;-1:-1:-1;;;;;21400:7:6;;;;:26;;318:18:7;;21400:31:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:60;;;;:::i;:::-;21507:7;;:31;;-1:-1:-1;;;21507:31:6;;;;;345:25:7;;;21373:87:6;;-1:-1:-1;;;;;;21507:7:6;;:26;;318:18:7;;21507:31:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21479:24;:59;;21471:81;;;;-1:-1:-1;;;21471:81:6;;;;;;;:::i;:::-;21584:13;21593:3;21584:8;:13::i;:::-;21571:9;:26;;21563:48;;;;-1:-1:-1;;;21563:48:6;;;;;;;:::i;:::-;21663:14;21680:41;21696:9;21707:13;21716:3;21707:8;:13::i;:::-;21680:15;:41::i;:::-;21765:21;:26;;;;;;;;;;;21663:58;;-1:-1:-1;21663:58:6;;21765:38;;21794:9;;21765:38;:::i;:::-;:47;;;;:::i;:::-;21736:21;:26;;;;;;;;;;;:76;;;;21888:7;;:26;;-1:-1:-1;;;21888:26:6;;;;;345:25:7;;;21736:21:6;;-1:-1:-1;;;;;;21888:7:6;;;;:21;;318:18:7;;21888:26:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21854:7;;:31;;-1:-1:-1;;;21854:31:6;;;;;345:25:7;;;-1:-1:-1;;;;;21854:7:6;;;;:26;;318:18:7;;21854:31:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:60;;;;:::i;:::-;21834:80;;21925:7;;;;;;;;;-1:-1:-1;;;;;21925:7:6;-1:-1:-1;;;;;21925:12:6;;21938:9;21949:14;21965:12;21979:7;21988:10;22000:3;22005:5;21925:86;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19170:2849;;;;;;;;18944:3075;;;;;;;;:::o;17707:391::-;5100:14;;:59;;-1:-1:-1;;;5100:59:6;;-1:-1:-1;;;17828:28:6;-1:-1:-1;;;;;5100:14:6;;:36;;:59;;5137:10;;17828:28;;5100:59;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:67;;5163:4;5100:67;;:125;;-1:-1:-1;5171:14:6;;:46;;-1:-1:-1;;;5171:46:6;;-1:-1:-1;;;;;5171:14:6;;;;:34;;:46;;5206:10;;5171:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:54;;5221:4;5171:54;5100:125;5092:150;;;;-1:-1:-1;;;5092:150:6;;;;;;;:::i;:::-;17879:7:::1;::::0;:48:::1;::::0;-1:-1:-1;;;17879:48:6;;::::1;::::0;::::1;345:25:7::0;;;-1:-1:-1;;;;;17879:7:6;;::::1;::::0;:29:::1;::::0;318:18:7;;17879:48:6::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;17931:4;17879:56;17878:120:::0;::::1;;;-1:-1:-1::0;17941:7:6::1;::::0;:48:::1;::::0;-1:-1:-1;;;17941:48:6;;::::1;::::0;::::1;345:25:7::0;;;-1:-1:-1;;;;;17941:7:6;;::::1;::::0;:29:::1;::::0;318:18:7;;17941:48:6::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;17993:4;17941:56;17878:120;17870:140;;;;-1:-1:-1::0;;;17870:140:6::1;;;;;;;:::i;:::-;-1:-1:-1::0;18021:40:6::1;::::0;;;:21:::1;:40;::::0;;;;;;;:59;;;;;;;;:69;;-1:-1:-1;;18021:69:6::1;::::0;::::1;;::::0;;;::::1;::::0;;17707:391::o;24279:1305::-;4742:7;;:44;;-1:-1:-1;;;4742:44:6;;;;;345:25:7;;;24527:13:6;;-1:-1:-1;;;24542:53:6;-1:-1:-1;;;;;4742:7:6;;;;:29;;318:18:7;;4742:44:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;4728:58:6;:10;-1:-1:-1;;;;;4728:58:6;;:129;;;-1:-1:-1;4790:14:6;;:59;;-1:-1:-1;;;4790:59:6;;-1:-1:-1;;;;;4790:14:6;;;;:36;;:59;;4827:10;;4839:9;;4790:59;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:67;;4853:4;4790:67;4728:129;:187;;;-1:-1:-1;4861:14:6;;:46;;-1:-1:-1;;;4861:46:6;;-1:-1:-1;;;;;4861:14:6;;;;:34;;:46;;4896:10;;4861:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:54;;4911:4;4861:54;4728:187;4720:211;;;;-1:-1:-1;;;4720:211:6;;;;;;;:::i;:::-;24617:49:::1;::::0;;;:34:::1;:49;::::0;;;;:64:::1;;::::0;::::1;::::0;::::1;;;:73;24608:103;;;;-1:-1:-1::0;;;24608:103:6::1;;;;;;;:::i;:::-;24786:49;::::0;;;:34:::1;:49;::::0;;;;:66;24767:15;24731:33:::1;24749:15:::0;24731;:33:::1;:::i;:::-;:51;;;;:::i;:::-;:121;24722:142;;;;-1:-1:-1::0;;;24722:142:6::1;;;;;;;:::i;:::-;-1:-1:-1::0;;24875:49:6::1;::::0;;;:34:::1;:49;::::0;;;;;:80;;-1:-1:-1;;;;;24875:80:6;;::::1;-1:-1:-1::0;;;;;;24875:80:6;;::::1;;::::0;;;24966:63;;::::1;:80:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;25057:63:::1;::::0;::::1;:80:::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;25148:64:::1;::::0;::::1;:82:::0;25241:64:::1;::::0;::::1;:82:::0;;;;25334:64:::1;::::0;::::1;:82:::0;;;;25427:59:::1;;:66:::0;;-1:-1:-1;;25504:72:6;;;;;;24279:1305::o;28658:161::-;5100:14;;:59;;-1:-1:-1;;;5100:59:6;;-1:-1:-1;;;28733:32:6;-1:-1:-1;;;;;5100:14:6;;:36;;:59;;5137:10;;28733:32;;5100:59;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:67;;5163:4;5100:67;;:125;;-1:-1:-1;5171:14:6;;:46;;-1:-1:-1;;;5171:46:6;;-1:-1:-1;;;;;5171:14:6;;;;:34;;:46;;5206:10;;5171:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:54;;5221:4;5171:54;5100:125;5092:150;;;;-1:-1:-1;;;5092:150:6;;;;;;;:::i;:::-;-1:-1:-1;28779:7:6::1;:32:::0;;-1:-1:-1;;;;;;28779:32:6::1;-1:-1:-1::0;;;;;28779:32:6;;;::::1;::::0;;;::::1;::::0;;28658:161::o;26534:2073::-;5100:14;;:59;;-1:-1:-1;;;5100:59:6;;-1:-1:-1;;;26677:23:6;-1:-1:-1;;;;;5100:14:6;;:36;;:59;;5137:10;;26677:23;;5100:59;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:67;;5163:4;5100:67;;:125;;-1:-1:-1;5171:14:6;;:46;;-1:-1:-1;;;5171:46:6;;-1:-1:-1;;;;;5171:14:6;;;;:34;;:46;;5206:10;;5171:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:54;;5221:4;5171:54;5100:125;5092:150;;;;-1:-1:-1;;;5092:150:6;;;;;;;:::i;:::-;26721:47:::1;::::0;;;:32:::1;:47;::::0;;;;:62:::1;;::::0;::::1;;::::0;;::::1;;:70;;:62;:70;26713:99;;;::::0;-1:-1:-1;;;26713:99:6;;26596:2:7;26713:99:6::1;::::0;::::1;26578:21:7::0;26635:2;26615:18;;;26608:30;-1:-1:-1;;;26654:18:7;;;26647:46;26710:18;;26713:99:6::1;26394:340:7::0;26713:99:6::1;26870:1;26831:36:::0;;;::::1;::::0;;;;;;;26823:93:::1;;;::::0;-1:-1:-1;;;26823:93:6;;26941:2:7;26823:93:6::1;::::0;::::1;26923:21:7::0;26980:2;26960:18;;;26953:30;27019:34;26999:18;;;26992:62;-1:-1:-1;;;27070:18:7;;;27063:38;27118:19;;26823:93:6::1;26739:404:7::0;26823:93:6::1;26935:47;::::0;;;:32:::1;:47;::::0;;;;:64;27015:10;;26935:77:::1;::::0;27002:10;;26935:77:::1;:::i;:::-;:90;;;;:::i;:::-;27029:3;26935:97;26927:128;;;::::0;-1:-1:-1;;;26927:128:6;;27350:2:7;26927:128:6::1;::::0;::::1;27332:21:7::0;27389:2;27369:18;;;27362:30;-1:-1:-1;;;27408:18:7;;;27401:48;27466:18;;26927:128:6::1;27148:342:7::0;26927:128:6::1;27066:17;27086:36:::0;;;::::1;::::0;;;;;;;;;27133:40;;;;27488:32:::1;:39:::0;;;;;:54:::1;;::::0;27086:36;;27198:6;;27229;;27108:13;;27066:17;;;;;;;;27545:3:::1;::::0;27476:66:::1;::::0;27086:36;27476:66:::1;:::i;:::-;:72;;;;:::i;:::-;27590:39;::::0;;;:32:::1;:39;::::0;;;;:54:::1;;::::0;27457:91;;-1:-1:-1;27647:3:6::1;::::0;27578:66:::1;::::0;:9;:66:::1;:::i;:::-;:72;;;;:::i;:::-;27692:39;::::0;;;:32:::1;:39;::::0;;;;:54:::1;;::::0;27559:91;;-1:-1:-1;27749:3:6::1;::::0;27680:66:::1;::::0;:9;:66:::1;:::i;:::-;:72;;;;:::i;:::-;27661:91:::0;-1:-1:-1;27805:3:6::1;27780:22;27792:10:::0;27780:9;:22:::1;:::i;:::-;:28;;;;:::i;:::-;27763:45:::0;-1:-1:-1;27861:3:6::1;27836:22;27848:10:::0;27836:9;:22:::1;:::i;:::-;:28;;;;:::i;:::-;27876:13;27903:39:::0;;;:32:::1;:39;::::0;;;;;:51;27895:94;;27819:45;;-1:-1:-1;27876:13:6;;-1:-1:-1;;;;;27903:51:6;;::::1;::::0;27968:16;;27876:13;27895:94;27876:13;27895:94;27968:16;27903:51;27895:94:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;28001:13:6::1;28028:39:::0;;;:32:::1;:39;::::0;;;;;:51:::1;;::::0;28020:94;;27875:114;;-1:-1:-1;28001:13:6;;-1:-1:-1;;;;;28028:51:6;;::::1;::::0;28093:16;;28001:13;28020:94;28001:13;28020:94;28093:16;28028:51;28020:94:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;28126:13:6::1;28153:39:::0;;;:32:::1;:39;::::0;;;;;:51:::1;;::::0;28145:94;;28000:114;;-1:-1:-1;28126:13:6;;-1:-1:-1;;;;;28153:51:6;;::::1;::::0;28218:16;;28126:13;28145:94;28126:13;28145:94;28218:16;28153:51;28145:94:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28125:114;;;28251:13;28278:3;-1:-1:-1::0;;;;;28270:17:6::1;28295:14;28270:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28250:64;;;28326:13;28353:3;-1:-1:-1::0;;;;;28345:17:6::1;28370:14;28345:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28325:64;;;28408:8;28400:31;;;;-1:-1:-1::0;;;28400:31:6::1;;;;;;;:::i;:::-;28450:8;28442:31;;;;-1:-1:-1::0;;;28442:31:6::1;;;;;;;:::i;:::-;28492:8;28484:31;;;;-1:-1:-1::0;;;28484:31:6::1;;;;;;;:::i;:::-;28534:8;28526:31;;;;-1:-1:-1::0;;;28526:31:6::1;;;;;;;:::i;:::-;28576:8;28568:31;;;;-1:-1:-1::0;;;28568:31:6::1;;;;;;;:::i;28871:296::-:0;5100:14;;:59;;-1:-1:-1;;;5100:59:6;;-1:-1:-1;;;28957:33:6;-1:-1:-1;;;;;5100:14:6;;:36;;:59;;5137:10;;28957:33;;5100:59;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:67;;5163:4;5100:67;;:125;;-1:-1:-1;5171:14:6;;:46;;-1:-1:-1;;;5171:46:6;;-1:-1:-1;;;;;5171:14:6;;;;:34;;:46;;5206:10;;5171:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:54;;5221:4;5171:54;5100:125;5092:150;;;;-1:-1:-1;;;5092:150:6;;;;;;;:::i;:::-;29026:18:::1;-1:-1:-1::0;;;;;29011:50:6::1;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:60;;29067:4;29011:60;29003:94;;;::::0;-1:-1:-1;;;29003:94:6;;28641:2:7;29003:94:6::1;::::0;::::1;28623:21:7::0;28680:2;28660:18;;;28653:30;-1:-1:-1;;;28699:18:7;;;28692:51;28760:18;;29003:94:6::1;28439:345:7::0;29003:94:6::1;-1:-1:-1::0;29108:14:6::1;:51:::0;;-1:-1:-1;;;;;;29108:51:6::1;-1:-1:-1::0;;;;;29108:51:6;;;::::1;::::0;;;::::1;::::0;;28871:296::o;14814:2016::-;5100:14;;:59;;-1:-1:-1;;;5100:59:6;;-1:-1:-1;;;14978:28:6;-1:-1:-1;;;;;5100:14:6;;:36;;:59;;5137:10;;14978:28;;5100:59;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:67;;5163:4;5100:67;;:125;;-1:-1:-1;5171:14:6;;:46;;-1:-1:-1;;;5171:46:6;;-1:-1:-1;;;;;5171:14:6;;;;:34;;:46;;5206:10;;5171:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:54;;5221:4;5171:54;5100:125;5092:150;;;;-1:-1:-1;;;5092:150:6;;;;;;;:::i;:::-;15027:7:::1;::::0;:44:::1;::::0;-1:-1:-1;;;15027:44:6;;::::1;::::0;::::1;345:25:7::0;;;-1:-1:-1;;;;;15027:7:6;;::::1;::::0;:29:::1;::::0;318:18:7;;15027:44:6::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:52;;15075:4;15027:52;15019:73;;;;-1:-1:-1::0;;;15019:73:6::1;;;;;;;:::i;:::-;15217:7;::::0;:36:::1;::::0;-1:-1:-1;;;15217:36:6;;::::1;::::0;::::1;345:25:7::0;;;15103:32:6::1;::::0;-1:-1:-1;;;;;15217:7:6::1;::::0;:21:::1;::::0;318:18:7;;15217:36:6::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15173:7;::::0;:41:::1;::::0;-1:-1:-1;;;15173:41:6;;::::1;::::0;::::1;345:25:7::0;;;-1:-1:-1;;;;;15173:7:6;;::::1;::::0;:26:::1;::::0;318:18:7;;15173:41:6::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:80;;;;:::i;:::-;15300:7;::::0;:41:::1;::::0;-1:-1:-1;;;15300:41:6;;::::1;::::0;::::1;345:25:7::0;;;15146:107:6;;-1:-1:-1;;;;;;15300:7:6::1;::::0;:26:::1;::::0;318:18:7;;15300:41:6::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15272:24;:69;;15264:91;;;;-1:-1:-1::0;;;15264:91:6::1;;;;;;;:::i;:::-;15430:7;::::0;:36:::1;::::0;-1:-1:-1;;;15430:36:6;;::::1;::::0;::::1;345:25:7::0;;;15366:17:6::1;::::0;-1:-1:-1;;;;;15430:7:6::1;::::0;:21:::1;::::0;318:18:7;;15430:36:6::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15386:7;::::0;:41:::1;::::0;-1:-1:-1;;;15386:41:6;;::::1;::::0;::::1;345:25:7::0;;;-1:-1:-1;;;;;15386:7:6;;::::1;::::0;:26:::1;::::0;318:18:7;;15386:41:6::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:80;;;;:::i;:::-;15477:19;15631:27:::0;;;:12:::1;:27;::::0;;;;;15366:100;;-1:-1:-1;15477:19:6;15631:32;;15627:343:::1;;15838:31;::::0;;;:16:::1;:31;::::0;;;;:42:::1;::::0;::::1;::::0;15785:50;;:95:::1;::::0;15838:42;15785:95:::1;:::i;:::-;15768:112;;15627:343;;;-1:-1:-1::0;15931:27:6::1;::::0;;;:12:::1;:27;::::0;;;;;15627:343:::1;16069:10;16119:31:::0;;;:16:::1;:31;::::0;;;;:42:::1;;::::0;16083:32:::1;16101:14:::0;16083:15:::1;:32;:::i;:::-;16082:79;;;;:::i;:::-;16069:92;;16245:1;16238:5;:8;;16230:34;;;;-1:-1:-1::0;;;16230:34:6::1;;;;;;;:::i;:::-;16445:35;::::0;;;:20:::1;:35;::::0;;;;;;;16406:7:::1;::::0;:36;;-1:-1:-1;;;16406:36:6;;::::1;::::0;::::1;345:25:7::0;;;16445:35:6;;-1:-1:-1;;;;;16406:7:6::1;::::0;:21:::1;::::0;318:18:7;;16406:36:6::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:74;;;;:::i;:::-;16359:31;::::0;;;:16:::1;:31;::::0;;;;:42:::1;;::::0;:123:::1;::::0;;::::1;:::i;:::-;16305:31;::::0;;;:16:::1;:31;::::0;;;;:50;:178:::1;::::0;;::::1;:::i;:::-;16275:27;::::0;;;:12:::1;:27;::::0;;;;:208;16521:21:::1;:15;16539:3;16521:21;:::i;:::-;16502:15;:40;;16494:49;;;::::0;::::1;;16576:28;::::0;;;:17:::1;:28;::::0;;;;;;;:46;;;16633:19:::1;:30:::0;;;;;;;:37;;-1:-1:-1;;16633:37:6::1;16666:4;16633:37;::::0;;16739:7:::1;::::0;:83;;-1:-1:-1;;;16739:83:6;;-1:-1:-1;;;;;16739:7:6;;::::1;::::0;:21:::1;::::0;:83:::1;::::0;16594:9;;16772:10;;16784;;16796;;16808:13;;16739:83:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;15008:1822;;;;14814:2016:::0;;;;;;:::o;18169:707::-;5100:14;;:59;;-1:-1:-1;;;5100:59:6;;-1:-1:-1;;;18393:42:6;-1:-1:-1;;;;;5100:14:6;;:36;;:59;;5137:10;;18393:42;;5100:59;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:67;;5163:4;5100:67;;:125;;-1:-1:-1;5171:14:6;;:46;;-1:-1:-1;;;5171:46:6;;-1:-1:-1;;;;;5171:14:6;;;;:34;;:46;;5206:10;;5171:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:54;;5221:4;5171:54;5100:125;5092:150;;;;-1:-1:-1;;;5092:150:6;;;;;;;:::i;:::-;18449:19:::1;18498:17;18516;18481:53;;;;;;;;;:::i;:::-;;::::0;;;;::::1;-1:-1:-1::0;;18481:53:6;;;;;;;18471:64;;18481:53:::1;18471:64:::0;;::::1;::::0;18555:7:::1;::::0;-1:-1:-1;;;18555:48:6;;::::1;::::0;::::1;345:25:7::0;;;18471:64:6;;-1:-1:-1;;;;;;18555:7:6::1;::::0;:29:::1;::::0;318:18:7;;18555:48:6::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;18607:4;18555:56;18546:78;;;;-1:-1:-1::0;;;18546:78:6::1;;;;;;;:::i;:::-;18635:42;::::0;;;:29:::1;:42;::::0;;;;;;;:61;;;;;;;;;:71;;-1:-1:-1;;18635:71:6::1;::::0;::::1;;::::0;;;::::1;::::0;;;18717:30;;;:17:::1;:30:::0;;;;;:51;;-1:-1:-1;;;;;;18717:51:6::1;-1:-1:-1::0;;;;;18717:51:6;;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;18779:13:6::1;:26:::0;;;;;;:39;;;-1:-1:-1;18829:29:6::1;:39:::0;-1:-1:-1;;18169:707:6:o;7409:990::-;5100:14;;:59;;-1:-1:-1;;;5100:59:6;;-1:-1:-1;;;7605:27:6;-1:-1:-1;;;;;5100:14:6;;:36;;:59;;5137:10;;7605:27;;5100:59;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:67;;5163:4;5100:67;;:125;;-1:-1:-1;5171:14:6;;:46;;-1:-1:-1;;;5171:46:6;;-1:-1:-1;;;;;5171:14:6;;;;:34;;:46;;5206:10;;5171:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:54;;5221:4;5171:54;5100:125;5092:150;;;;-1:-1:-1;;;5092:150:6;;;;;;;:::i;:::-;7653:7:::1;::::0;:44:::1;::::0;-1:-1:-1;;;7653:44:6;;::::1;::::0;::::1;345:25:7::0;;;-1:-1:-1;;;;;7653:7:6;;::::1;::::0;:29:::1;::::0;318:18:7;;7653:44:6::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:52;;7701:4;7653:52;7645:73;;;;-1:-1:-1::0;;;7645:73:6::1;;;;;;;:::i;:::-;7729:32;::::0;7772:620:::1;7793:11;:18;7790:1;:21;7772:620;;;7964:1;7943:15;7959:1;7943:18;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;7904:7:::1;::::0;:36:::1;::::0;-1:-1:-1;;;7904:36:6;;::::1;::::0;::::1;345:25:7::0;;;-1:-1:-1;;;;;7904:7:6;;::::1;::::0;:21:::1;::::0;318:18:7;;7904:36:6::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7860:7;::::0;:41:::1;::::0;-1:-1:-1;;;7860:41:6;;::::1;::::0;::::1;345:25:7::0;;;-1:-1:-1;;;;;7860:7:6;;::::1;::::0;:26:::1;::::0;318:18:7;;7860:41:6::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:80;;;;:::i;:::-;:101;;;;:::i;:::-;:105;;;;:::i;:::-;8016:7;::::0;:41:::1;::::0;-1:-1:-1;;;8016:41:6;;::::1;::::0;::::1;345:25:7::0;;;7833:132:6;;-1:-1:-1;;;;;;8016:7:6::1;::::0;:26:::1;::::0;318:18:7;;8016:41:6::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7988:24;:69;;7980:91;;;;-1:-1:-1::0;;;7980:91:6::1;;;;;;;:::i;:::-;8090:9;8086:295;8109:15;8125:1;8109:18;;;;;;;;:::i;:::-;;;;;;;8105:1;:22;8086:295;;;8217:7;::::0;:36:::1;::::0;-1:-1:-1;;;8217:36:6;;::::1;::::0;::::1;345:25:7::0;;;8153:17:6::1;::::0;-1:-1:-1;;;;;8217:7:6::1;::::0;:21:::1;::::0;318:18:7;;8217:36:6::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8173:7;::::0;:41:::1;::::0;-1:-1:-1;;;8173:41:6;;::::1;::::0;::::1;345:25:7::0;;;-1:-1:-1;;;;;8173:7:6;;::::1;::::0;:26:::1;::::0;318:18:7;;8173:41:6::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:80;;;;:::i;:::-;8272:7;::::0;8305:14;;8153:100;;-1:-1:-1;;;;;;8272:7:6::1;::::0;:21:::1;::::0;8153:100;;8305:11;;8317:1;;8305:14;::::1;;;;;:::i;:::-;;;;;;;8321:10;8332:1;8321:13;;;;;;;;:::i;:::-;;;;;;;8336:10;8347:1;8336:13;;;;;;;;:::i;:::-;;;;;;;8351;8272:93;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;8134:247;8129:3;;;;;:::i;:::-;;;;8086:295;;;-1:-1:-1::0;7813:3:6;::::1;::::0;::::1;:::i;:::-;;;;7772:620;;;;7634:765;7409:990:::0;;;;;;:::o;22925:1263::-;4742:7;;:44;;-1:-1:-1;;;4742:44:6;;;;;345:25:7;;;23165:13:6;;-1:-1:-1;;;23180:51:6;-1:-1:-1;;;;;4742:7:6;;;;:29;;318:18:7;;4742:44:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;4728:58:6;:10;-1:-1:-1;;;;;4728:58:6;;:129;;;-1:-1:-1;4790:14:6;;:59;;-1:-1:-1;;;4790:59:6;;-1:-1:-1;;;;;4790:14:6;;;;:36;;:59;;4827:10;;4839:9;;4790:59;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:67;;4853:4;4790:67;4728:129;:187;;;-1:-1:-1;4861:14:6;;:46;;-1:-1:-1;;;4861:46:6;;-1:-1:-1;;;;;4861:14:6;;;;:34;;:46;;4896:10;;4861:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:54;;4911:4;4861:54;4728:187;4720:211;;;;-1:-1:-1;;;4720:211:6;;;;;;;:::i;:::-;23253:47:::1;::::0;;;:32:::1;:47;::::0;;;;:62:::1;;::::0;::::1;::::0;::::1;;;:71;23244:101;;;;-1:-1:-1::0;;;23244:101:6::1;;;;;;;:::i;:::-;23420:47;::::0;;;:32:::1;:47;::::0;;;;:64;23401:15;23365:33:::1;23383:15:::0;23365;:33:::1;:::i;:::-;:51;;;;:::i;:::-;:119;23356:140;;;;-1:-1:-1::0;;;23356:140:6::1;;;;;;;:::i;:::-;-1:-1:-1::0;;23507:47:6::1;::::0;;;:32:::1;:47;::::0;;;;;:74;;-1:-1:-1;;;;;23507:74:6;;::::1;-1:-1:-1::0;;;;;;23507:74:6;;::::1;;::::0;;;23592:59;;::::1;:74:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;23677:59:::1;::::0;::::1;:74:::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;23762:62:::1;::::0;::::1;:80:::0;23853:62:::1;::::0;::::1;:80:::0;;;;23944:62:::1;::::0;::::1;:80:::0;;;;24035:57:::1;;:64:::0;;-1:-1:-1;;24110:70:6;;;;;;22925:1263::o;13256:1519::-;13402:34;;;;:15;:34;;;;;;;;:42;;:34;:42;:113;;;;-1:-1:-1;13448:40:6;;;;:21;:40;;;;;;;;:59;;;;;;;;;;;:67;;:59;:67;13402:113;13394:134;;;;-1:-1:-1;;;13394:134:6;;;;;;;:::i;:::-;13566:35;;;;:16;:35;;;;;:51;;;13547:15;:70;;;;:142;;-1:-1:-1;13640:35:6;;;;:16;:35;;;;;:49;;;13621:15;:68;;13547:142;13539:164;;;;-1:-1:-1;;;13539:164:6;;;;;;;:::i;:::-;13736:7;;:45;;-1:-1:-1;;;13736:45:6;;;;;345:25:7;;;-1:-1:-1;;;;;13736:7:6;;;;:26;;318:18:7;;13736:45:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13724:8;:57;;13723:122;;;;-1:-1:-1;13799:7:6;;:45;;-1:-1:-1;;;13799:45:6;;;;;345:25:7;;;-1:-1:-1;;;;;13799:7:6;;;;:26;;318:18:7;;13799:45:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13787:8;:57;;13723:122;13714:154;;;;-1:-1:-1;;;13714:154:6;;30347:2:7;13714:154:6;;;30329:21:7;30386:2;30366:18;;;30359:30;-1:-1:-1;;;30405:18:7;;;30398:48;30463:18;;13714:154:6;30145:342:7;13714:154:6;13997:7;;:40;;-1:-1:-1;;;13997:40:6;;;;;345:25:7;;;13879:32:6;;-1:-1:-1;;;;;13997:7:6;;:21;;318:18:7;;13997:40:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13949:7;;:45;;-1:-1:-1;;;13949:45:6;;;;;345:25:7;;;-1:-1:-1;;;;;13949:7:6;;;;:26;;318:18:7;;13949:45:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:88;;;;:::i;:::-;14084:7;;:45;;-1:-1:-1;;;14084:45:6;;;;;345:25:7;;;13922:115:6;;-1:-1:-1;;;;;;14084:7:6;;:26;;318:18:7;;14084:45:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14056:24;:73;;14048:95;;;;-1:-1:-1;;;14048:95:6;;;;;;;:::i;:::-;14175:27;14184:17;14175:8;:27::i;:::-;14162:9;:40;;14154:62;;;;-1:-1:-1;;;14154:62:6;;;;;;;:::i;:::-;14268:14;14285:55;14301:9;14312:27;14321:17;14312:8;:27::i;14285:55::-;14398:21;:40;;;;;;;;;;;14268:72;;-1:-1:-1;14268:72:6;;14398:52;;14441:9;;14398:52;:::i;:::-;:61;;;;:::i;:::-;14355:21;:40;;;;;;;;;;;:104;;;;14549:7;;:40;;-1:-1:-1;;;14549:40:6;;;;;345:25:7;;;14355:21:6;;-1:-1:-1;;;;;;14549:7:6;;;;:21;;318:18:7;;14549:40:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14501:7;;:45;;-1:-1:-1;;;14501:45:6;;;;;345:25:7;;;-1:-1:-1;;;;;14501:7:6;;;;:26;;318:18:7;;14501:45:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:88;;;;:::i;:::-;14670:7;;:97;;-1:-1:-1;;;14670:97:6;;;;;30779:25:7;;;30820:18;;;30813:34;;;30863:18;;;30856:34;;;30906:18;;;30899:34;;;30949:19;;;30942:35;;;14649:10:6;30993:19:7;;;30986:61;;;14481:108:6;;-1:-1:-1;;;;;;14670:7:6;;;;:18;;30751:19:7;;14670:97:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13383:1392;;;13256:1519;;;;:::o;8463:4716::-;8697:30;;;;:15;:30;;;;;;;;:38;;:30;:38;:61;;;;;8757:1;8739:15;:19;8697:61;8689:77;;;;-1:-1:-1;;;8689:77:6;;31260:2:7;8689:77:6;;;31242:21:7;31299:1;31279:18;;;31272:29;-1:-1:-1;;;31317:18:7;;;31310:33;31360:18;;8689:77:6;31058:326:7;8689:77:6;8777:11;8940:21;;;:16;:21;;;;;:40;8791:13;;8777:11;;;8896:10;;8921:15;:59;;;;:119;;-1:-1:-1;9002:21:6;;;;:16;:21;;;;;:38;;;8984:15;:56;8921:119;8917:2209;;;9065:1;;-1:-1:-1;9081:12:6;-1:-1:-1;;;;;9112:56:6;;;9108:1357;;9246:3;;:107;;-1:-1:-1;;;9246:107:6;;9189:20;;-1:-1:-1;;;;;9246:3:6;;:36;;:107;;9283:10;;9295:42;;9339:10;;9246:3;;:107;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:218;;;-1:-1:-1;9357:3:6;;:107;;-1:-1:-1;;;9357:107:6;;-1:-1:-1;;;;;9357:3:6;;;;:36;;:107;;9394:10;;9406:42;;9450:10;;9462:1;;9357:107;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9228:236;-1:-1:-1;9487:24:6;;;9506:5;9487:24;9483:289;;9550:3;;;9599:21;;;:16;:21;;;;;;;:32;;;9550:97;;-1:-1:-1;;;9550:97:6;;-1:-1:-1;;;;;9550:3:6;;;;:36;;:97;;9587:10;;9550:3;9599:32;;;;;;;9633:10;;9550:3;;:97;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:198;;;-1:-1:-1;9651:3:6;;;9700:21;;;:16;:21;;;;;;;:32;;;9651:97;;-1:-1:-1;;;9651:97:6;;-1:-1:-1;;;;;9651:3:6;;;;:36;;:97;;9688:10;;9651:3;9700:32;;;;;;;9734:10;;9746:1;;9651:97;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9532:216;;9483:289;9817:4;9798:23;;;;9790:49;;;;-1:-1:-1;;;9790:49:6;;;;;;;:::i;:::-;9916:10;9928:13;9943:7;9899:52;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;9899:52:6;;;;;;9888:65;;9899:52;9888:65;;;;9875:79;;;21750:19:7;9875:79:6;;;;;;;;;21785:12:7;;;9875:79:6;;;;9865:90;;;;;9999:7;;-1:-1:-1;;;9999:57:6;;;9865:90;-1:-1:-1;10059:15:6;;-1:-1:-1;;;;;9999:7:6;;;;:40;;:57;;10040:3;;10045:10;;9999:57;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:75;;;;:::i;:::-;9982:13;:92;;9974:113;;;;-1:-1:-1;;;9974:113:6;;;;;;;:::i;:::-;10123:10;10106:27;;9170:979;9108:1357;;;10232:10;10244:13;10259:7;10215:52;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;10215:52:6;;;;;;10204:65;;10215:52;10204:65;;;;10191:79;;;21750:19:7;10191:79:6;;;;;;;;;21785:12:7;;;10191:79:6;;;;10181:90;;;;;10315:7;;-1:-1:-1;;;10315:57:6;;;10181:90;-1:-1:-1;10375:15:6;;-1:-1:-1;;;;;10315:7:6;;;;:40;;:57;;10356:3;;10361:10;;10315:57;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:75;;;;:::i;:::-;10298:13;:92;;10290:113;;;;-1:-1:-1;;;10290:113:6;;;;;;;:::i;:::-;10439:10;10422:27;;9108:1357;10527:21;;;;:16;:21;;;;;:32;;;10487:79;;10514:11;;;;10561:4;10487:26;:79::i;:::-;10479:105;;;;-1:-1:-1;;;10479:105:6;;;;;;;:::i;:::-;9042:1554;8917:2209;;;10625:21;;;;:16;:21;;;;;:37;;;10606:15;:56;;;;:114;;-1:-1:-1;10685:21:6;;;;:16;:21;;;;;:35;;;10666:15;:54;;10606:114;10602:524;;;10788:7;;:29;;-1:-1:-1;;;10788:29:6;;;;;345:25:7;;;10745:1:6;;-1:-1:-1;;;;;;10788:7:6;;;;:24;;318:18:7;;10788:29:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10769:15;:48;;10761:80;;;;-1:-1:-1;;;10761:80:6;;32686:2:7;10761:80:6;;;32668:21:7;32725:2;32705:18;;;32698:30;-1:-1:-1;;;32744:18:7;;;32737:49;32803:18;;10761:80:6;32484:343:7;10761:80:6;10947:7;;:29;;-1:-1:-1;;;10947:29:6;;;;;345:25:7;;;-1:-1:-1;;;;;10947:7:6;;;;:24;;318:18:7;;10947:29:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10864:7;;:61;;-1:-1:-1;;;10864:61:6;;10928:15;;-1:-1:-1;;;;;10864:7:6;;:44;;:61;;10909:3;;10914:10;;10864:61;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:79;;;;:::i;:::-;:112;;10856:128;;;;-1:-1:-1;;;10856:128:6;;33034:2:7;10856:128:6;;;33016:21:7;33073:1;33053:18;;;33046:29;-1:-1:-1;;;33091:18:7;;;33084:33;33134:18;;10856:128:6;32832:326:7;10856:128:6;-1:-1:-1;11041:20:6;;;;;;;;;;;;-1:-1:-1;;;11041:20:6;;;;11016:10;;-1:-1:-1;10602:524:6;11240:7;;:26;;-1:-1:-1;;;11240:26:6;;;;;345:25:7;;;11136:32:6;;11287:1;;11269:15;;-1:-1:-1;;;;;11240:7:6;;:21;;318:18:7;;11240:26:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11206:7;;:31;;-1:-1:-1;;;11206:31:6;;;;;345:25:7;;;-1:-1:-1;;;;;11206:7:6;;;;:26;;318:18:7;;11206:31:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:60;;;;:::i;:::-;:78;;;;:::i;:::-;:82;;;;:::i;:::-;11335:7;;:31;;-1:-1:-1;;;11335:31:6;;;;;345:25:7;;;11179:109:6;;-1:-1:-1;;;;;;11335:7:6;;:26;;318:18:7;;11335:31:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11307:24;:59;;11299:81;;;;-1:-1:-1;;;11299:81:6;;;;;;;:::i;:::-;11429:15;11413:13;11422:3;11413:8;:13::i;:::-;:31;;;;:::i;:::-;11399:9;:46;;11391:68;;;;-1:-1:-1;;;11391:68:6;;;;;;;:::i;:::-;11511:14;11528:59;11544:9;11571:15;11555:13;11564:3;11555:8;:13::i;:::-;:31;;;;:::i;11528:59::-;11631:21;:26;;;;;;;;;;;11511:76;;-1:-1:-1;11511:76:6;;11631:38;;11660:9;;11631:38;:::i;:::-;:47;;;;:::i;:::-;11602:21;:26;;;;;;;;;;;:76;;;;11750:16;:21;;;:33;;;;;11787:1;11750:38;;-1:-1:-1;11746:1144:6;;11805:19;11843:17;;;:12;:17;;;;;;:22;;11839:321;;12036:21;;;;:16;:21;;;;;:32;;;;11993:40;;:75;;12036:32;11993:75;:::i;:::-;11976:92;;11839:321;;;-1:-1:-1;12127:17:6;;;;:12;:17;;;;;;11839:321;12267:10;12317:21;;;:16;:21;;;;;:32;;;12281;12299:14;12281:15;:32;:::i;:::-;12280:69;;;;:::i;:::-;12267:82;;12579:1;12572:5;:8;;:32;;;;;12584:15;12603:1;12584:20;12572:32;12564:58;;;;-1:-1:-1;;;12564:58:6;;;;;;;:::i;:::-;12851:25;;;;:20;:25;;;;;;;;12822:7;;:26;;-1:-1:-1;;;12822:26:6;;;;;345:25:7;;;12851::6;;-1:-1:-1;;;;;12822:7:6;;:21;;318:18:7;;12822:26:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:54;;;;:::i;:::-;12786:21;;;;:16;:21;;;;;:32;;;:91;;;;:::i;:::-;12742:21;;;;:16;:21;;;;;:40;:136;;;;:::i;:::-;12722:17;;;;:12;:17;;;;;:156;-1:-1:-1;;11746:1144:6;12928:9;12924:248;12947:15;12943:1;:19;12924:248;;;13038:7;;:26;;-1:-1:-1;;;13038:26:6;;;;;345:25:7;;;12984:17:6;;-1:-1:-1;;;;;13038:7:6;;:21;;318:18:7;;13038:26:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13004:7;;:31;;-1:-1:-1;;;13004:31:6;;;;;345:25:7;;;-1:-1:-1;;;;;13004:7:6;;;;:26;;318:18:7;;13004:31:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:60;;;;:::i;:::-;12984:80;;13079:7;;;;;;;;;-1:-1:-1;;;;;13079:7:6;-1:-1:-1;;;;;13079:12:6;;13092:9;13103:14;13119:7;13128;13137:10;13149:3;13154:5;13079:81;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12969:203;12964:3;;;;;:::i;:::-;;;;12924:248;;;;8678:4501;;;;;8463:4716;;;;;;;;;:::o;6664:706::-;5448:14;;:64;;-1:-1:-1;;;5448:64:6;;5487:10;5448:64;;;33337:51:7;33404:18;;;33397:34;;;6862:13:6;;-1:-1:-1;;;6877:33:6;-1:-1:-1;;;;;5448:14:6;;;;:38;;33310:18:7;;5448:64:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:72;;5516:4;5448:72;;:143;;-1:-1:-1;5524:14:6;;:59;;-1:-1:-1;;;5524:59:6;;-1:-1:-1;;;;;5524:14:6;;;;:36;;:59;;5561:10;;5573:9;;5524:59;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:67;;5587:4;5524:67;5448:143;:201;;;-1:-1:-1;5595:14:6;;:46;;-1:-1:-1;;;5595:46:6;;-1:-1:-1;;;;;5595:14:6;;;;:34;;:46;;5630:10;;5595:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:54;;5645:4;5595:54;5448:201;5440:225;;;;-1:-1:-1;;;5440:225:6;;;;;;;:::i;:::-;6931:30:::1;::::0;;;:15:::1;:30;::::0;;;;;::::1;;:38;;:30:::0;:38:::1;6923:60;;;::::0;-1:-1:-1;;;6923:60:6;;33644:2:7;6923:60:6::1;::::0;::::1;33626:21:7::0;33683:1;33663:18;;;33656:29;-1:-1:-1;;;33701:18:7;;;33694:39;33750:18;;6923:60:6::1;33442:332:7::0;6923:60:6::1;-1:-1:-1::0;;6994:31:6::1;::::0;;;:16:::1;:31;::::0;;;;;:72;;;7077:48:::1;::::0;::::1;:68:::0;;;;7156:42:::1;::::0;::::1;:56:::0;;;;7223:47:::1;::::0;::::1;:66:::0;;;;7300:45:::1;;:62:::0;6664:706::o;16935:347::-;5100:14;;:59;;-1:-1:-1;;;5100:59:6;;-1:-1:-1;;;17061:36:6;-1:-1:-1;;;;;5100:14:6;;:36;;:59;;5137:10;;17061:36;;5100:59;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:67;;5163:4;5100:67;;:125;;-1:-1:-1;5171:14:6;;:46;;-1:-1:-1;;;5171:46:6;;-1:-1:-1;;;;;5171:14:6;;;;:34;;:46;;5206:10;;5171:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:54;;5221:4;5171:54;5100:125;5092:150;;;;-1:-1:-1;;;5092:150:6;;;;;;;:::i;:::-;17115:7:::1;17126:1;17115:12:::0;17111:162:::1;;17144:35;::::0;;;:20:::1;:35;::::0;;;;:53;;;17111:162:::1;;;17260:1;17230:27:::0;;;:12:::1;:27;::::0;;;;:31;17111:162:::1;16935:347:::0;;;;:::o;5746:839::-;5448:14;;:64;;-1:-1:-1;;;5448:64:6;;5487:10;5448:64;;;33337:51:7;33404:18;;;33397:34;;;5966:13:6;;-1:-1:-1;;;5981:32:6;-1:-1:-1;;;;;5448:14:6;;;;:38;;33310:18:7;;5448:64:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:72;;5516:4;5448:72;;:143;;-1:-1:-1;5524:14:6;;:59;;-1:-1:-1;;;5524:59:6;;-1:-1:-1;;;;;5524:14:6;;;;:36;;:59;;5561:10;;5573:9;;5524:59;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:67;;5587:4;5524:67;5448:143;:201;;;-1:-1:-1;5595:14:6;;:46;;-1:-1:-1;;;5595:46:6;;-1:-1:-1;;;;;5595:14:6;;;;:34;;:46;;5630:10;;5595:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:54;;5645:4;5595:54;5448:201;5440:225;;;;-1:-1:-1;;;5440:225:6;;;;;;;:::i;:::-;6034:7:::1;::::0;:44:::1;::::0;-1:-1:-1;;;6034:44:6;;::::1;::::0;::::1;345:25:7::0;;;-1:-1:-1;;;;;6034:7:6;;::::1;::::0;:29:::1;::::0;318:18:7;;6034:44:6::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:52;;6082:4;6034:52;6026:73;;;;-1:-1:-1::0;;;6026:73:6::1;;;;;;;:::i;:::-;-1:-1:-1::0;;6110:31:6::1;::::0;;;:16:::1;:31;::::0;;;;;;;:50:::1;::::0;::::1;:72:::0;;;;6193:53:::1;::::0;::::1;:78:::0;;;;6282:36;;::::1;:44:::0;;;;6337:42:::1;::::0;;::::1;:56:::0;;;;6404:43:::1;::::0;;::::1;:58:::0;;-1:-1:-1;;;;;6473:56:6;;::::1;6404:58;6473:56;-1:-1:-1::0;;;;;;6473:56:6;;;6404:58:::1;::::0;;::::1;6473:56:::0;;;;;;;::::1;::::0;;;6540:30;;;;;;:37;;-1:-1:-1;;6540:37:6::1;-1:-1:-1::0;6540:37:6::1;::::0;;5746:839::o;22068:768::-;5100:14;;:59;;-1:-1:-1;;;5100:59:6;;-1:-1:-1;;;22252:42:6;-1:-1:-1;;;;;5100:14:6;;:36;;:59;;5137:10;;22252:42;;5100:59;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:67;;5163:4;5100:67;;:125;;-1:-1:-1;5171:14:6;;:46;;-1:-1:-1;;;5171:46:6;;-1:-1:-1;;;;;5171:14:6;;;;:34;;:46;;5206:10;;5171:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:54;;5221:4;5171:54;5100:125;5092:150;;;;-1:-1:-1;;;5092:150:6;;;;;;;:::i;:::-;22315:29:::1;22332:12:::0;22315:14;:29:::1;:::i;:::-;22348:3;22315:36;22307:71;;;;-1:-1:-1::0;;;22307:71:6::1;;;;;;;:::i;:::-;22397:31;22415:13:::0;22397:15;:31:::1;:::i;:::-;22432:3;22397:38;22389:73;;;;-1:-1:-1::0;;;22389:73:6::1;;;;;;;:::i;:::-;-1:-1:-1::0;22473:47:6::1;::::0;;;:32:::1;:47;::::0;;;;;;;:81;;;22565:62:::1;::::0;;::::1;:77:::0;;;;22653:34:::1;:49:::0;;;;;;:84;;;22748:64;::::1;:80:::0;22068:768::o;25655:811::-;5100:14;;:59;;-1:-1:-1;;;5100:59:6;;-1:-1:-1;;;25790:43:6;-1:-1:-1;;;;;5100:14:6;;:36;;:59;;5137:10;;25790:43;;5100:59;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:67;;5163:4;5100:67;;:125;;-1:-1:-1;5171:14:6;;:46;;-1:-1:-1;;;5171:46:6;;-1:-1:-1;;;;;5171:14:6;;;;:34;;:46;;5206:10;;5171:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:54;;5221:4;5171:54;5100:125;5092:150;;;;-1:-1:-1;;;5092:150:6;;;;;;;:::i;:::-;25854:47:::1;::::0;;;:32:::1;:47;::::0;;;;:57:::1;;::::0;::::1;;:65;;:57:::0;:65:::1;:136:::0;::::1;;;-1:-1:-1::0;25923:49:6::1;::::0;;;:34:::1;:49;::::0;;;;:59:::1;;::::0;::::1;;:67;;:59:::0;:67:::1;25854:136;25846:166;;;::::0;-1:-1:-1;;;25846:166:6;;34332:2:7;25846:166:6::1;::::0;::::1;34314:21:7::0;34371:2;34351:18;;;34344:30;-1:-1:-1;;;34390:18:7;;;34383:47;34447:18;;25846:166:6::1;34130:341:7::0;25846:166:6::1;26023:47;::::0;;;:32:::1;:47;::::0;;;;;;;:62:::1;::::0;;::::1;:79:::0;;;::::1;;;::::0;;::::1;-1:-1:-1::0;;26023:79:6;;::::1;;::::0;;;26113:34:::1;:49:::0;;;;;;:64;;::::1;:83:::0;;;::::1;;::::0;;::::1;::::0;;;::::1;;::::0;;26211:23;;26207:252:::1;;26311:5;26251:47:::0;;;:32:::1;:47;::::0;;;;:57:::1;;:65:::0;;-1:-1:-1;;26251:65:6::1;::::0;;26207:252:::1;;;26338:25:::0;::::1;;26358:5;26338:25:::0;26334:125:::1;;-1:-1:-1::0;;;26442:5:6::1;26380:49:::0;;;:34:::1;:49;::::0;;;;:59:::1;;:67:::0;;-1:-1:-1;;26380:67:6::1;::::0;;25655:811::o;29242:359::-;5100:14;;:59;;-1:-1:-1;;;5100:59:6;;-1:-1:-1;;;29300:31:6;-1:-1:-1;;;;;5100:14:6;;:36;;:59;;5137:10;;29300:31;;5100:59;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:67;;5163:4;5100:67;;:125;;-1:-1:-1;5171:14:6;;:46;;-1:-1:-1;;;5171:46:6;;-1:-1:-1;;;;;5171:14:6;;;;:34;;:46;;5206:10;;5171:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:54;;5221:4;5171:54;5100:125;5092:150;;;;-1:-1:-1;;;5092:150:6;;;;;;;:::i;:::-;29407:14:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;29407:22:6;;;;29359:21:::1;::::0;29344:12:::1;::::0;-1:-1:-1;;;;;29407:14:6;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;:14;:22:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29391:38;;29441:12;29467:5;-1:-1:-1::0;;;;;29459:19:6::1;29486:7;29459:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29440:58;;;29517:7;29509:30;;;;-1:-1:-1::0;;;29509:30:6::1;;;;;;;:::i;:::-;29555:38;::::0;7103:14:7;;7096:22;7078:41;;29585:7:6;;29564:10:::1;::::0;29555:38:::1;::::0;7066:2:7;7051:18;29555:38:6::1;;;;;;;29333:268;;;29242:359:::0;:::o;33358:2742::-;33420:7;33465:31;;;:16;:31;;;;;:43;;;33420:7;;33465:43;;33512:1;33465:48;33461:2632;;33699:1;33660:31;;;:16;:31;;;;;;;;:36;;:40;33656:417;;33922:35;;;;:20;:35;;;;;;;;33883:7;;:36;;-1:-1:-1;;;33883:36:6;;;;;345:25:7;;;33922:35:6;;-1:-1:-1;;;;;33883:7:6;;:21;;318:18:7;;33883:36:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:74;;;;:::i;:::-;33836:31;;;;:16;:31;;;;;;;;:36;;;;33783:50;;;;;33875:3;;33783:89;;;:::i;:::-;:95;;;;:::i;:::-;33782:176;;;;:::i;:::-;33728:31;;;;:16;:31;;;;;:50;;;:231;;;;:::i;:::-;33721:238;33358:2742;-1:-1:-1;;;33358:2742:6:o;33656:417::-;-1:-1:-1;;34007:31:6;;;;:16;:31;;;;;:50;;;;33358:2742::o;33461:2632::-;34094:31;;;;:16;:31;;;;;:43;;;;;34141:1;34094:48;:121;;;;-1:-1:-1;34165:31:6;;;;:16;:31;;;;;:50;34146:15;:69;;34094:121;:189;;;;-1:-1:-1;34238:31:6;;;;:16;:31;;;;;:45;;;34219:15;:64;;34094:189;34090:2003;;;34671:31;;;;:16;:31;;;;;:42;;;;34617:50;;34599:68;;:15;:68;:::i;:::-;34598:115;;;;:::i;:::-;34728:13;34795:31;;;:16;:31;;;;;;;:36;;34590:123;;-1:-1:-1;34728:13:6;;;34795:41;;34791:907;;34919:9;:5;34927:1;34919:9;:::i;:::-;34865:31;;;;:16;:31;;;;;:50;;;:64;;;;:::i;:::-;35164:31;;;;:16;:31;;;;;:50;;35118:42;;;;;34857:72;;-1:-1:-1;35164:50:6;35110;;:5;:50;:::i;:::-;35091:70;;:15;:70;:::i;:::-;:123;;;;:::i;:::-;35043:31;;;;:16;:31;;;;;:42;;;35028:9;:5;35036:1;35028:9;:::i;:::-;34974:31;;;;:16;:31;;;;;:50;;;:64;;;;:::i;:::-;34965:74;;:5;:74;:::i;:::-;34964:121;;;;:::i;:::-;34963:253;;;;:::i;:::-;34948:268;;34791:907;;;35374:31;;;;:16;:31;;;;;;;;:36;;;;35316:53;;;;35263:50;;;;;35416:5;;35263:106;;;:::i;:::-;35262:149;;;;:::i;:::-;35261:160;35257:426;;35516:31;;;;:16;:31;;;;;;;;:36;;35508:44;;:5;:44;:::i;:::-;35454:31;;;;:16;:31;;;;;:50;;;:99;;;;:::i;:::-;35446:107;;35257:426;;;35610:31;;;;:16;:31;;;;;:53;;;;-1:-1:-1;35257:426:6;35739:31;;;;:16;:31;;;;;:53;;;35716:20;35724:12;35716:5;:20;:::i;:::-;:76;35712:246;;;35820:20;35828:12;35820:5;:20;:::i;:::-;35813:27;33358:2742;-1:-1:-1;;;;;33358:2742:6:o;35712:246::-;-1:-1:-1;;;35889:31:6;;;;-1:-1:-1;35889:16:6;:31;;;;;:53;;;;33358:2742::o;1447:174:5:-;1548:4;1609;1572:33;1593:5;;1600:4;1572:20;:33::i;:::-;:41;;1447:174;-1:-1:-1;;;;;1447:174:5:o;17337:292:6:-;17411:7;;17465:15;17474:6;17465;:15;:::i;:::-;17511:43;;17456:24;;-1:-1:-1;17492:13:6;;17519:10;;17456:24;;17492:13;17511:43;17492:13;17511:43;17456:24;17519:10;17511:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17491:63;;;17573:8;17565:31;;;;-1:-1:-1;;;17565:31:6;;;;;;;:::i;:::-;-1:-1:-1;17614:6:6;-1:-1:-1;17337:292:6;;;;;:::o;2392:306:5:-;2485:7;2528:4;2485:7;2543:118;2563:16;;;2543:118;;;2616:33;2626:12;2640:5;;2646:1;2640:8;;;;;;;:::i;:::-;;;;;;;2616:9;:33::i;:::-;2601:48;-1:-1:-1;2581:3:5;;;;:::i;:::-;;;;2543:118;;;-1:-1:-1;2678:12:5;2392:306;-1:-1:-1;;;;2392:306:5:o;9186:149::-;9249:7;9280:1;9276;:5;:51;;9411:13;9505:15;;;9541:4;9534:15;;;9588:4;9572:21;;9276:51;;;-1:-1:-1;9411:13:5;9505:15;;;9541:4;9534:15;9588:4;9572:21;;;9186:149::o;14:180:7:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:7;;14:180;-1:-1:-1;14:180:7:o;381:131::-;-1:-1:-1;;;;;456:31:7;;446:42;;436:70;;502:1;499;492:12;436:70;381:131;:::o;517:127::-;578:10;573:3;569:20;566:1;559:31;609:4;606:1;599:15;633:4;630:1;623:15;649:275;720:2;714:9;785:2;766:13;;-1:-1:-1;;762:27:7;750:40;;-1:-1:-1;;;;;805:34:7;;841:22;;;802:62;799:88;;;867:18;;:::i;:::-;903:2;896:22;649:275;;-1:-1:-1;649:275:7:o;929:531::-;972:5;1025:3;1018:4;1010:6;1006:17;1002:27;992:55;;1043:1;1040;1033:12;992:55;1079:6;1066:20;-1:-1:-1;;;;;1101:2:7;1098:26;1095:52;;;1127:18;;:::i;:::-;1171:55;1214:2;1195:13;;-1:-1:-1;;1191:27:7;1220:4;1187:38;1171:55;:::i;:::-;1251:2;1242:7;1235:19;1297:3;1290:4;1285:2;1277:6;1273:15;1269:26;1266:35;1263:55;;;1314:1;1311;1304:12;1263:55;1379:2;1372:4;1364:6;1360:17;1353:4;1344:7;1340:18;1327:55;1427:1;1402:16;;;1420:4;1398:27;1391:38;;;;1406:7;929:531;-1:-1:-1;;;929:531:7:o;1465:367::-;1528:8;1538:6;1592:3;1585:4;1577:6;1573:17;1569:27;1559:55;;1610:1;1607;1600:12;1559:55;-1:-1:-1;1633:20:7;;-1:-1:-1;;;;;1665:30:7;;1662:50;;;1708:1;1705;1698:12;1662:50;1745:4;1737:6;1733:17;1721:29;;1805:3;1798:4;1788:6;1785:1;1781:14;1773:6;1769:27;1765:38;1762:47;1759:67;;;1822:1;1819;1812:12;1759:67;1465:367;;;;;:::o;1837:1069::-;1987:6;1995;2003;2011;2019;2027;2035;2043;2096:3;2084:9;2075:7;2071:23;2067:33;2064:53;;;2113:1;2110;2103:12;2064:53;2152:9;2139:23;2171:31;2196:5;2171:31;:::i;:::-;2221:5;-1:-1:-1;2273:2:7;2258:18;;2245:32;;-1:-1:-1;2324:2:7;2309:18;;2296:32;;-1:-1:-1;2375:2:7;2360:18;;2347:32;;-1:-1:-1;2430:3:7;2415:19;;2402:33;-1:-1:-1;;;;;2484:14:7;;;2481:34;;;2511:1;2508;2501:12;2481:34;2534:50;2576:7;2567:6;2556:9;2552:22;2534:50;:::i;:::-;2524:60;;2637:3;2626:9;2622:19;2609:33;2593:49;;2667:2;2657:8;2654:16;2651:36;;;2683:1;2680;2673:12;2651:36;;2722:72;2786:7;2775:8;2764:9;2760:24;2722:72;:::i;:::-;1837:1069;;;;-1:-1:-1;1837:1069:7;;;;;;2696:98;;2895:3;2880:19;2867:33;;1837:1069;-1:-1:-1;;;;1837:1069:7:o;2911:118::-;2997:5;2990:13;2983:21;2976:5;2973:32;2963:60;;3019:1;3016;3009:12;3034:377;3108:6;3116;3124;3177:2;3165:9;3156:7;3152:23;3148:32;3145:52;;;3193:1;3190;3183:12;3145:52;3229:9;3216:23;3206:33;;3286:2;3275:9;3271:18;3258:32;3248:42;;3340:2;3329:9;3325:18;3312:32;3353:28;3375:5;3353:28;:::i;:::-;3400:5;3390:15;;;3034:377;;;;;:::o;3416:805::-;3529:6;3537;3545;3553;3561;3569;3577;3630:3;3618:9;3609:7;3605:23;3601:33;3598:53;;;3647:1;3644;3637:12;3598:53;3683:9;3670:23;3660:33;;3743:2;3732:9;3728:18;3715:32;3756:31;3781:5;3756:31;:::i;:::-;3806:5;-1:-1:-1;3863:2:7;3848:18;;3835:32;3876:33;3835:32;3876:33;:::i;:::-;3928:7;-1:-1:-1;3987:2:7;3972:18;;3959:32;4000:33;3959:32;4000:33;:::i;:::-;3416:805;;;;-1:-1:-1;3416:805:7;;4106:3;4091:19;;4078:33;;4158:3;4143:19;;4130:33;;-1:-1:-1;4210:3:7;4195:19;;;4182:33;;-1:-1:-1;3416:805:7;-1:-1:-1;;3416:805:7:o;4226:247::-;4285:6;4338:2;4326:9;4317:7;4313:23;4309:32;4306:52;;;4354:1;4351;4344:12;4306:52;4393:9;4380:23;4412:31;4437:5;4412:31;:::i;4478:594::-;4573:6;4581;4589;4597;4605;4658:3;4646:9;4637:7;4633:23;4629:33;4626:53;;;4675:1;4672;4665:12;4626:53;4711:9;4698:23;4688:33;;4771:2;4760:9;4756:18;4743:32;4784:31;4809:5;4784:31;:::i;:::-;4834:5;-1:-1:-1;4891:2:7;4876:18;;4863:32;4904:33;4863:32;4904:33;:::i;:::-;4478:594;;;;-1:-1:-1;4956:7:7;;5010:2;4995:18;;4982:32;;-1:-1:-1;5061:3:7;5046:19;5033:33;;4478:594;-1:-1:-1;;4478:594:7:o;6017:663::-;6122:6;6130;6138;6146;6154;6207:3;6195:9;6186:7;6182:23;6178:33;6175:53;;;6224:1;6221;6214:12;6175:53;6263:9;6250:23;6282:31;6307:5;6282:31;:::i;:::-;6332:5;-1:-1:-1;6388:2:7;6373:18;;6360:32;-1:-1:-1;;;;;6404:30:7;;6401:50;;;6447:1;6444;6437:12;6401:50;6470;6512:7;6503:6;6492:9;6488:22;6470:50;:::i;:::-;6017:663;;6460:60;;-1:-1:-1;;;;6567:2:7;6552:18;;6539:32;;6618:2;6603:18;;6590:32;;6669:3;6654:19;;;6641:33;;-1:-1:-1;6017:663:7;-1:-1:-1;6017:663:7:o;6685:248::-;6753:6;6761;6814:2;6802:9;6793:7;6789:23;6785:32;6782:52;;;6830:1;6827;6820:12;6782:52;-1:-1:-1;;6853:23:7;;;6923:2;6908:18;;;6895:32;;-1:-1:-1;6685:248:7:o;7130:799::-;7240:6;7248;7256;7264;7272;7280;7288;7341:3;7329:9;7320:7;7316:23;7312:33;7309:53;;;7358:1;7355;7348:12;7309:53;7397:9;7384:23;7416:31;7441:5;7416:31;:::i;:::-;7466:5;-1:-1:-1;7518:2:7;7503:18;;7490:32;;-1:-1:-1;7569:2:7;7554:18;;7541:32;;-1:-1:-1;7620:2:7;7605:18;;7592:32;;-1:-1:-1;7671:3:7;7656:19;;7643:33;;-1:-1:-1;7728:3:7;7713:19;;7700:33;7742;7700;7742;:::i;:::-;7794:7;-1:-1:-1;7853:3:7;7838:19;;7825:33;7867:30;7825:33;7867:30;:::i;:::-;7916:7;7906:17;;;7130:799;;;;;;;;;;:::o;7934:183::-;7994:4;-1:-1:-1;;;;;8019:6:7;8016:30;8013:56;;;8049:18;;:::i;:::-;-1:-1:-1;8094:1:7;8090:14;8106:4;8086:25;;7934:183::o;8122:888::-;8175:5;8228:3;8221:4;8213:6;8209:17;8205:27;8195:55;;8246:1;8243;8236:12;8195:55;8282:6;8269:20;8308:4;8332:60;8348:43;8388:2;8348:43;:::i;:::-;8332:60;:::i;:::-;8426:15;;;8512:1;8508:10;;;;8496:23;;8492:32;;;8457:12;;;;8536:15;;;8533:35;;;8564:1;8561;8554:12;8533:35;8600:2;8592:6;8588:15;8612:369;8628:6;8623:3;8620:15;8612:369;;;8714:3;8701:17;-1:-1:-1;;;;;8737:11:7;8734:35;8731:125;;;8810:1;8839:2;8835;8828:14;8731:125;8881:57;8934:3;8929:2;8915:11;8907:6;8903:24;8899:33;8881:57;:::i;:::-;8869:70;;-1:-1:-1;8959:12:7;;;;8645;;8612:369;;;-1:-1:-1;8999:5:7;8122:888;-1:-1:-1;;;;;;8122:888:7:o;9015:662::-;9069:5;9122:3;9115:4;9107:6;9103:17;9099:27;9089:55;;9140:1;9137;9130:12;9089:55;9176:6;9163:20;9202:4;9226:60;9242:43;9282:2;9242:43;:::i;9226:60::-;9320:15;;;9406:1;9402:10;;;;9390:23;;9386:32;;;9351:12;;;;9430:15;;;9427:35;;;9458:1;9455;9448:12;9427:35;9494:2;9486:6;9482:15;9506:142;9522:6;9517:3;9514:15;9506:142;;;9588:17;;9576:30;;9626:12;;;;9539;;9506:142;;9682:1746;9887:6;9895;9903;9911;9919;9972:3;9960:9;9951:7;9947:23;9943:33;9940:53;;;9989:1;9986;9979:12;9940:53;10029:9;10016:23;-1:-1:-1;;;;;10099:2:7;10091:6;10088:14;10085:34;;;10115:1;10112;10105:12;10085:34;10153:6;10142:9;10138:22;10128:32;;10198:7;10191:4;10187:2;10183:13;10179:27;10169:55;;10220:1;10217;10210:12;10169:55;10256:2;10243:16;10278:4;10302:60;10318:43;10358:2;10318:43;:::i;10302:60::-;10396:15;;;10478:1;10474:10;;;;10466:19;;10462:28;;;10427:12;;;;10502:19;;;10499:39;;;10534:1;10531;10524:12;10499:39;10558:11;;;;10578:217;10594:6;10589:3;10586:15;10578:217;;;10674:3;10661:17;10691:31;10716:5;10691:31;:::i;:::-;10735:18;;10611:12;;;;10773;;;;10578:217;;;10814:5;-1:-1:-1;;10857:18:7;;10844:32;;-1:-1:-1;;10888:16:7;;;10885:36;;;10917:1;10914;10907:12;10885:36;10940:62;10994:7;10983:8;10972:9;10968:24;10940:62;:::i;:::-;10930:72;;11055:2;11044:9;11040:18;11027:32;11011:48;;11084:2;11074:8;11071:16;11068:36;;;11100:1;11097;11090:12;11068:36;11123:63;11178:7;11167:8;11156:9;11152:24;11123:63;:::i;:::-;11113:73;;11233:2;11222:9;11218:18;11205:32;11195:42;;11290:3;11279:9;11275:19;11262:33;11246:49;;11320:2;11310:8;11307:16;11304:36;;;11336:1;11333;11326:12;11304:36;;11359:63;11414:7;11403:8;11392:9;11388:24;11359:63;:::i;:::-;11349:73;;;9682:1746;;;;;;;;:::o;11871:203::-;-1:-1:-1;;;;;12035:32:7;;;;12017:51;;12005:2;11990:18;;11871:203::o;12547:385::-;12633:6;12641;12649;12657;12710:3;12698:9;12689:7;12685:23;12681:33;12678:53;;;12727:1;12724;12717:12;12678:53;-1:-1:-1;;12750:23:7;;;12820:2;12805:18;;12792:32;;-1:-1:-1;12871:2:7;12856:18;;12843:32;;12922:2;12907:18;12894:32;;-1:-1:-1;12547:385:7;-1:-1:-1;12547:385:7:o;12937:1211::-;13096:6;13104;13112;13120;13128;13136;13144;13152;13160;13213:3;13201:9;13192:7;13188:23;13184:33;13181:53;;;13230:1;13227;13220:12;13181:53;13266:9;13253:23;13243:33;;13323:2;13312:9;13308:18;13295:32;13285:42;;13374:2;13363:9;13359:18;13346:32;13336:42;;13429:2;13418:9;13414:18;13401:32;-1:-1:-1;;;;;13493:2:7;13485:6;13482:14;13479:34;;;13509:1;13506;13499:12;13479:34;13532:50;13574:7;13565:6;13554:9;13550:22;13532:50;:::i;:::-;13522:60;;13632:3;13621:9;13617:19;13604:33;13591:46;;13646:31;13671:5;13646:31;:::i;:::-;13696:5;;-1:-1:-1;13754:3:7;13739:19;;13726:33;;13771:16;;;13768:36;;;13800:1;13797;13790:12;13768:36;;13839:72;13903:7;13892:8;13881:9;13877:24;13839:72;:::i;:::-;13930:8;;-1:-1:-1;13813:98:7;-1:-1:-1;;14017:3:7;14002:19;;13989:33;14031;13989;14031;:::i;:::-;14083:7;14073:17;;;14137:3;14126:9;14122:19;14109:33;14099:43;;12937:1211;;;;;;;;;;;:::o;14381:523::-;14485:6;14493;14501;14509;14517;14525;14578:3;14566:9;14557:7;14553:23;14549:33;14546:53;;;14595:1;14592;14585:12;14546:53;-1:-1:-1;;14618:23:7;;;14688:2;14673:18;;14660:32;;-1:-1:-1;14739:2:7;14724:18;;14711:32;;14790:2;14775:18;;14762:32;;-1:-1:-1;14841:3:7;14826:19;;14813:33;;-1:-1:-1;14893:3:7;14878:19;14865:33;;-1:-1:-1;14381:523:7;-1:-1:-1;14381:523:7:o;14909:316::-;14986:6;14994;15002;15055:2;15043:9;15034:7;15030:23;15026:32;15023:52;;;15071:1;15068;15061:12;15023:52;-1:-1:-1;;15094:23:7;;;15164:2;15149:18;;15136:32;;-1:-1:-1;15215:2:7;15200:18;;;15187:32;;14909:316;-1:-1:-1;14909:316:7:o;15475:754::-;15586:6;15594;15602;15610;15618;15626;15634;15687:3;15675:9;15666:7;15662:23;15658:33;15655:53;;;15704:1;15701;15694:12;15655:53;15740:9;15727:23;15717:33;;15797:2;15786:9;15782:18;15769:32;15759:42;;15848:2;15837:9;15833:18;15820:32;15810:42;;15899:2;15888:9;15884:18;15871:32;15861:42;;15950:3;15939:9;15935:19;15922:33;15912:43;;16005:3;15994:9;15990:19;15977:33;16050:4;16043:5;16039:16;16032:5;16029:27;16019:55;;16070:1;16067;16060:12;16019:55;16093:5;-1:-1:-1;16150:3:7;16135:19;;16122:33;16164;16122;16164;:::i;16807:454::-;16902:6;16910;16918;16926;16934;16987:3;16975:9;16966:7;16962:23;16958:33;16955:53;;;17004:1;17001;16994:12;16955:53;-1:-1:-1;;17027:23:7;;;17097:2;17082:18;;17069:32;;-1:-1:-1;17148:2:7;17133:18;;17120:32;;17199:2;17184:18;;17171:32;;-1:-1:-1;17250:3:7;17235:19;17222:33;;-1:-1:-1;16807:454:7;-1:-1:-1;16807:454:7:o;17266:444::-;17337:6;17345;17353;17406:2;17394:9;17385:7;17381:23;17377:32;17374:52;;;17422:1;17419;17412:12;17374:52;17458:9;17445:23;17435:33;;17518:2;17507:9;17503:18;17490:32;17531:28;17553:5;17531:28;:::i;:::-;17578:5;-1:-1:-1;17635:2:7;17620:18;;17607:32;17648:30;17607:32;17648:30;:::i;17715:294::-;17892:2;17888:15;;;;-1:-1:-1;;17884:53:7;17872:66;;17963:2;17954:12;;17947:28;18000:2;17991:12;;17715:294::o;18014:331::-;18216:2;18198:21;;;18255:1;18235:18;;;18228:29;-1:-1:-1;;;18288:2:7;18273:18;;18266:38;18336:2;18321:18;;18014:331::o;18350:251::-;18420:6;18473:2;18461:9;18452:7;18448:23;18444:32;18441:52;;;18489:1;18486;18479:12;18441:52;18521:9;18515:16;18540:31;18565:5;18540:31;:::i;18606:464::-;-1:-1:-1;;;;;18901:15:7;;;18883:34;;18953:15;;;18948:2;18933:18;;18926:43;19005:15;;19000:2;18985:18;;18978:43;19052:2;19037:18;;19030:34;;;;18832:3;18817:19;;18606:464::o;19075:245::-;19142:6;19195:2;19183:9;19174:7;19170:23;19166:32;19163:52;;;19211:1;19208;19201:12;19163:52;19243:9;19237:16;19262:28;19284:5;19262:28;:::i;19794:337::-;19996:2;19978:21;;;20035:2;20015:18;;;20008:30;-1:-1:-1;;;20069:2:7;20054:18;;20047:43;20122:2;20107:18;;19794:337::o;20136:127::-;20197:10;20192:3;20188:20;20185:1;20178:31;20228:4;20225:1;20218:15;20252:4;20249:1;20242:15;21000:250;21085:1;21095:113;21109:6;21106:1;21103:13;21095:113;;;21185:11;;;21179:18;21166:11;;;21159:39;21131:2;21124:10;21095:113;;;-1:-1:-1;;21242:1:7;21224:16;;21217:27;21000:250::o;21255:361::-;21444:6;21439:3;21432:19;21414:3;21480:6;21474:13;21496:73;21562:6;21557:2;21552:3;21548:12;21543:2;21535:6;21531:15;21496:73;:::i;:::-;21589:16;;;;21607:2;21585:25;;21255:361;-1:-1:-1;;;21255:361:7:o;21808:337::-;22010:2;21992:21;;;22049:2;22029:18;;;22022:30;-1:-1:-1;;;22083:2:7;22068:18;;22061:43;22136:2;22121:18;;21808:337::o;22150:334::-;22352:2;22334:21;;;22391:2;22371:18;;;22364:30;-1:-1:-1;;;22425:2:7;22410:18;;22403:40;22475:2;22460:18;;22150:334::o;22489:184::-;22559:6;22612:2;22600:9;22591:7;22587:23;22583:32;22580:52;;;22628:1;22625;22618:12;22580:52;-1:-1:-1;22651:16:7;;22489:184;-1:-1:-1;22489:184:7:o;22678:127::-;22739:10;22734:3;22730:20;22727:1;22720:31;22770:4;22767:1;22760:15;22794:4;22791:1;22784:15;22810:125;22875:9;;;22896:10;;;22893:36;;;22909:18;;:::i;22940:332::-;23142:2;23124:21;;;23181:1;23161:18;;;23154:29;-1:-1:-1;;;23214:2:7;23199:18;;23192:39;23263:2;23248:18;;22940:332::o;23277:::-;23479:2;23461:21;;;23518:1;23498:18;;;23491:29;-1:-1:-1;;;23551:2:7;23536:18;;23529:39;23600:2;23585:18;;23277:332::o;23614:128::-;23681:9;;;23702:11;;;23699:37;;;23716:18;;:::i;23747:271::-;23789:3;23827:5;23821:12;23854:6;23849:3;23842:19;23870:76;23939:6;23932:4;23927:3;23923:14;23916:4;23909:5;23905:16;23870:76;:::i;:::-;24000:2;23979:15;-1:-1:-1;;23975:29:7;23966:39;;;;24007:4;23962:50;;23747:271;-1:-1:-1;;23747:271:7:o;24023:707::-;24322:25;;;-1:-1:-1;;;;;24421:15:7;;;24416:2;24401:18;;24394:43;24473:15;;24468:2;24453:18;;24446:43;24525:3;24520:2;24505:18;;24498:31;;;24303:4;;24546:46;;24572:19;;24564:6;24546:46;:::i;:::-;24623:3;24608:19;;24601:35;;;;-1:-1:-1;24667:3:7;24652:19;;24645:35;;;;24711:3;24696:19;;;24689:35;24538:54;24023:707;-1:-1:-1;;;;24023:707:7:o;24735:299::-;-1:-1:-1;;;;;24925:32:7;;;;24907:51;;-1:-1:-1;;;;;;24994:33:7;24989:2;24974:18;;24967:61;24895:2;24880:18;;24735:299::o;25039:335::-;25241:2;25223:21;;;25280:2;25260:18;;;25253:30;-1:-1:-1;;;25314:2:7;25299:18;;25292:41;25365:2;25350:18;;25039:335::o;25379:330::-;25581:2;25563:21;;;25620:1;25600:18;;;25593:29;-1:-1:-1;;;25653:2:7;25638:18;;25631:37;25700:2;25685:18;;25379:330::o;25714:340::-;25916:2;25898:21;;;25955:2;25935:18;;;25928:30;-1:-1:-1;;;25989:2:7;25974:18;;25967:46;26045:2;26030:18;;25714:340::o;26059:330::-;26261:2;26243:21;;;26300:1;26280:18;;;26273:29;-1:-1:-1;;;26333:2:7;26318:18;;26311:37;26380:2;26365:18;;26059:330::o;27495:168::-;27568:9;;;27599;;27616:15;;;27610:22;;27596:37;27586:71;;27637:18;;:::i;27668:217::-;27708:1;27734;27724:132;;27778:10;27773:3;27769:20;27766:1;27759:31;27813:4;27810:1;27803:15;27841:4;27838:1;27831:15;27724:132;-1:-1:-1;27870:9:7;;27668:217::o;28100:334::-;28302:2;28284:21;;;28341:2;28321:18;;;28314:30;-1:-1:-1;;;28375:2:7;28360:18;;28353:40;28425:2;28410:18;;28100:334::o;28789:331::-;28991:2;28973:21;;;29030:1;29010:18;;;29003:29;-1:-1:-1;;;29063:2:7;29048:18;;29041:38;29111:2;29096:18;;28789:331::o;29125:337::-;29327:2;29309:21;;;29366:2;29346:18;;;29339:30;-1:-1:-1;;;29400:2:7;29385:18;;29378:43;29453:2;29438:18;;29125:337::o;29467:533::-;29710:25;;;-1:-1:-1;;;;;29771:32:7;;29766:2;29751:18;;29744:60;29791:3;29835:2;29820:18;;29813:31;;;-1:-1:-1;;29861:46:7;;29887:19;;29879:6;29861:46;:::i;:::-;29938:2;29923:18;;29916:34;;;;-1:-1:-1;29981:3:7;29966:19;29959:35;29853:54;29467:533;-1:-1:-1;;;29467:533:7:o;30005:135::-;30044:3;30065:17;;;30062:43;;30085:18;;:::i;:::-;-1:-1:-1;30132:1:7;30121:13;;30005:135::o;31389:475::-;31631:26;31627:31;31618:6;31614:2;31610:15;31606:53;31601:3;31594:66;31690:6;31685:2;31680:3;31676:12;31669:28;31576:3;31726:6;31720:13;31742:75;31810:6;31805:2;31800:3;31796:12;31789:4;31781:6;31777:17;31742:75;:::i;:::-;31837:16;;;;31855:2;31833:25;;31389:475;-1:-1:-1;;;;31389:475:7:o;31869:274::-;32043:25;;;-1:-1:-1;;;;;32104:32:7;32099:2;32084:18;;32077:60;32031:2;32016:18;;31869:274::o;32148:331::-;32350:2;32332:21;;;32389:1;32369:18;;;32362:29;-1:-1:-1;;;32422:2:7;32407:18;;32400:38;32470:2;32455:18;;32148:331::o;33779:346::-;33981:2;33963:21;;;34020:2;34000:18;;;33993:30;-1:-1:-1;;;34054:2:7;34039:18;;34032:52;34116:2;34101:18;;33779:346::o
Swarm Source
ipfs://b70160aef7eef99472bb263304952646fc6ef8b0f53546cfb6fe30368d304ad7
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.