Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 7 from a total of 7 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Level Up Fairy | 6744071 | 2164 days ago | IN | 0.01 ETH | 0.00018563 | ||||
Birth Fairy | 6743797 | 2164 days ago | IN | 0.05 ETH | 0.00131578 | ||||
Increase Dark Po... | 6741054 | 2165 days ago | IN | 0.02 ETH | 0.00014029 | ||||
Increase Dark Po... | 6741038 | 2165 days ago | IN | 0.01 ETH | 0.00030882 | ||||
Level Up Fairy | 6741002 | 2165 days ago | IN | 0.01 ETH | 0.00018368 | ||||
Birth Fairy | 6740978 | 2165 days ago | IN | 0.05 ETH | 0.00123951 | ||||
0x60e06040 | 6655614 | 2179 days ago | IN | 0 ETH | 0.05771021 |
Latest 12 internal transactions
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
6744071 | 2164 days ago | 0.005 ETH | ||||
6744071 | 2164 days ago | 0.005 ETH | ||||
6743797 | 2164 days ago | 0.025 ETH | ||||
6743797 | 2164 days ago | 0.025 ETH | ||||
6741054 | 2165 days ago | 0.01 ETH | ||||
6741054 | 2165 days ago | 0.01 ETH | ||||
6741038 | 2165 days ago | 0.005 ETH | ||||
6741038 | 2165 days ago | 0.005 ETH | ||||
6741002 | 2165 days ago | 0.005 ETH | ||||
6741002 | 2165 days ago | 0.005 ETH | ||||
6740978 | 2165 days ago | 0.025 ETH | ||||
6740978 | 2165 days ago | 0.025 ETH |
Loading...
Loading
Contract Name:
EtherFairy
Compiler Version
v0.4.24+commit.e67f0147
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-01-23 */ pragma solidity ^0.4.24; interface ERC165 { /// @notice Query if a contract implements an interface /// @param interfaceID The interface identifier, as specified in ERC-165 /// @dev Interface identification is specified in ERC-165. This function /// uses less than 30,000 gas. /// @return `true` if the contract implements `interfaceID` and /// `interfaceID` is not 0xffffffff, `false` otherwise function supportsInterface(bytes4 interfaceID) external view returns (bool); } /// @title ERC-721 Non-Fungible Token Standard, optional metadata extension /// @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md /// Note: the ERC-165 identifier for this interface is 0x5b5e139f. interface ERC721Metadata /* is ERC721 */ { /// @notice A descriptive name for a collection of NFTs in this contract function name() external view returns (string _name); /// @notice An abbreviated name for NFTs in this contract function symbol() external view returns (string _symbol); /// @notice A distinct Uniform Resource Identifier (URI) for a given asset. /// @dev Throws if `_tokenId` is not a valid NFT. URIs are defined in RFC /// 3986. The URI may point to a JSON file that conforms to the "ERC721 /// Metadata JSON Schema". function tokenURI(uint256 _tokenId) external view returns (string); } // 문자열 처리 유틸리티 library StringUtil { // 두 문자열을 합칩니다. function concat(string a, string b) internal pure returns (string c) { bytes memory ba = bytes(a); bytes memory bb = bytes(b); bytes memory bc = bytes(new string(ba.length + bb.length)); uint256 i = 0; uint256 j = 0; for (j = 0; j < ba.length; j += 1) { bc[i] = ba[j]; i += 1; } for (j = 0; j < bb.length; j += 1) { bc[i] = bb[j]; i += 1; } return string(bc); } // uint256를 문자열로 변경합니다. function uint256ToString(uint256 i) internal pure returns (string str) { if (i == 0) { return "0"; } uint256 j = i; uint256 length; while (j != 0){ length += 1; j /= 10; } bytes memory bstr = new bytes(length); uint256 k = length - 1; while (i != 0){ bstr[k] = byte(48 + i % 10); i /= 10; k -= 1; } return string(bstr); } } // Ether Fairy의 기본적인 내용을 담고있는 계약 contract EtherFairyBase is ERC721Metadata { // 토큰 정보 string constant public NAME = "Ether Fairy"; string constant public SYMBOL = "FAIRY"; string public tokenMetadataBaseURI = "https://etherfairy.com/api/tokenmetadata/"; // 요정 원본의 가격 uint256 public fairyOriginPrice = 0.05 ether; // 임의 레벨업 가격 uint256 public customLevelUpPrice = 0.01 ether; // 임의로 포인트를 증가시키는데 드는 포인트당 가격 uint256 public increasePointPricePerPoint = 0.01 ether; // 요정 정보 struct Fairy { // 회사 서버에 저장된 요정 원본의 ID string fairyOriginId; // 요정 디자이너의 지갑 address designer; // 요정의 이름 string name; // 탄생 시간 uint256 birthTime; // 소유주에 의해 추가된 레벨 uint256 appendedLevel; // 기본 속성에 대한 레벨 당 증가 포인트들 uint256 hpPointPerLevel; uint256 attackPointPerLevel; uint256 defencePointPerLevel; uint256 agilityPointPerLevel; uint256 dexterityPointPerLevel; // 원소 속성에 대한 레벨 당 증가 포인트들 uint256 firePointPerLevel; uint256 waterPointPerLevel; uint256 windPointPerLevel; uint256 earthPointPerLevel; uint256 lightPointPerLevel; uint256 darkPointPerLevel; } // 요정들의 저장소 Fairy[] internal fairies; function getFairyCount() view public returns (uint256) { return fairies.length; } // 원본 ID에 해당하는 요정의 개수를 반환합니다. function getFairyCountByOriginId(string fairyOriginId) view public returns (uint256) { bytes32 hash = keccak256(bytes(fairyOriginId)); uint256 fairyCount = 0; for (uint256 i = 0; i < fairies.length; i += 1) { if (keccak256(bytes(fairies[i].fairyOriginId)) == hash) { fairyCount += 1; } } return fairyCount; } // 원본 ID에 해당하는 요정의 ID 목록을 반환합니다. function getFairyIdsByOriginId(string fairyOriginId) view public returns (uint256[]) { bytes32 hash = keccak256(bytes(fairyOriginId)); uint256[] memory fairyIds = new uint256[](getFairyCountByOriginId(fairyOriginId)); uint256 j = 0; for (uint256 i = 0; i < fairies.length; i += 1) { if (keccak256(bytes(fairies[i].fairyOriginId)) == hash) { fairyIds[j] = i; j += 1; } } return fairyIds; } // 소유주들 주소 address[] public masters; function getMasterCount() view public returns (uint256) { return masters.length; } // 소유주가 이미 존재하는지 mapping(address => bool) internal masterToIsExisted; // 소유주가 차단되었는지 mapping(address => bool) public masterToIsBlocked; // 요정이 차단되었는지 mapping(uint256 => bool) public fairyIdToIsBlocked; // 회사의 지갑 주소 address public company; // 공식 마켓 계약 주소 address public officialMarket; constructor() public { // 계약 생성자를 초기 회사 및 공식 마켓 주소로 등록 company = msg.sender; officialMarket = msg.sender; } // 서비스가 일시중지 상태인지 bool public servicePaused = false; // 서비스가 구동중일때만 modifier whenServiceRunning() { require(servicePaused != true); _; } // 서비스가 일시정지 상태일때만 modifier whenServicePaused() { require(servicePaused == true); _; } // 차단된 소유주가 아닐 경우에만 modifier whenNotBlocked() { // 회사는 차단 불가 require(msg.sender == company || masterToIsBlocked[msg.sender] != true); _; } // 차단된 요정이 아닐 경우에만 modifier whenNotBlockedFairy(uint256 fairyId) { // 회사는 차단 불가 require(msg.sender == company || fairyIdToIsBlocked[fairyId] != true); _; } // 주소를 잘못 사용하는 것인지 체크 function checkAddressMisused(address target) internal view returns (bool) { return target == address(0) || target == address(this); } //ERC721Metadata: 토큰의 이름 반환 function name() view external returns (string) { return NAME; } //ERC721Metadata: 토큰의 심볼 반환 function symbol() view external returns (string) { return SYMBOL; } //ERC721Metadata: 요정 정보의 메타데이터를 가져오는 경로를 반환합니다. function tokenURI(uint256 fairyId) view external returns (string) { return StringUtil.concat(tokenMetadataBaseURI, StringUtil.uint256ToString(fairyId)); } } // Ether Fairy를 운영하는 회사에서 사용하는 기능들 contract EtherFairyCompany is EtherFairyBase { // 소유권 이전 이벤트 event TransferOwnership(address oldCompany, address newCompany); // 서비스를 일시중지하거나 재개하면 발생하는 이벤트 event PauseService(); event ResumeService(); // 기타 이벤트 event ChangeFairyOriginPrice(uint256 price); event ChangeCustomLevelUpPrice(uint256 price); event ChangeIncreasePointPricePerPoint(uint256 price); event ChangeTokenMetadataBaseURI(string tokenMetadataBaseURI); event ChangeOfficialMarket(address officialMarket); event BlockMaster(address masterToBlock); event BlockFairy(uint256 fairyIdToBlock); event UnblockMaster(address masterToUnlock); event UnblockFairy(uint256 fairyIdToUnblock); // 회사만 처리 가능 modifier onlyCompany { require(msg.sender == company); _; } // 소유권을 이전합니다. function transferOwnership(address newCompany) onlyCompany public { address oldCompany = company; company = newCompany; emit TransferOwnership(oldCompany, newCompany); } // 서비스의 작동을 중지합니다. function pauseService() onlyCompany whenServiceRunning public { servicePaused = true; emit PauseService(); } // 서비스를 재개합니다. function resumeService() onlyCompany whenServicePaused public { servicePaused = false; emit ResumeService(); } // 요정 원본의 가격을 변경합니다. function changeFairyOriginPrice(uint256 newFairyOriginPrice) onlyCompany public { fairyOriginPrice = newFairyOriginPrice; emit ChangeFairyOriginPrice(newFairyOriginPrice); } // 임의 레벨업 가격을 변경합니다. function changeCustomLevelUpPrice(uint256 newCustomLevelUpPrice) onlyCompany public { customLevelUpPrice = newCustomLevelUpPrice; emit ChangeCustomLevelUpPrice(newCustomLevelUpPrice); } // 임의로 포인트를 증가시키는데 드는 포인트당 가격을 변경합니다. function changeIncreasePointPricePerPoint(uint256 newIncreasePointPricePerPoint) onlyCompany public { increasePointPricePerPoint = newIncreasePointPricePerPoint; emit ChangeIncreasePointPricePerPoint(newIncreasePointPricePerPoint); } // tokenMetadataBaseURI을 변경합니다. function changeTokenMetadataBaseURI(string newTokenMetadataBaseURI) onlyCompany public { tokenMetadataBaseURI = newTokenMetadataBaseURI; emit ChangeTokenMetadataBaseURI(newTokenMetadataBaseURI); } // 공식 마켓 계약을 변경합니다. function changeOfficialMarket(address newOfficialMarket) onlyCompany public { officialMarket = newOfficialMarket; emit ChangeOfficialMarket(newOfficialMarket); } // 특정 소유주를 차단합니다. function blockMaster(address masterToBlock) onlyCompany public { masterToIsBlocked[masterToBlock] = true; emit BlockMaster(masterToBlock); } // 특정 요정을 차단합니다. function blockFairy(uint256 fairyIdToBlock) onlyCompany public { fairyIdToIsBlocked[fairyIdToBlock] = true; emit BlockFairy(fairyIdToBlock); } // 소유주 차단을 해제합니다. function unblockMaster(address masterToUnlock) onlyCompany public { delete masterToIsBlocked[masterToUnlock]; emit UnblockMaster(masterToUnlock); } // 요정 차단을 해제합니다. function unblockFairy(uint256 fairyIdToUnblock) onlyCompany public { delete fairyIdToIsBlocked[fairyIdToUnblock]; emit UnblockFairy(fairyIdToUnblock); } } /// @title ERC-721 Non-Fungible Token Standard /// @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md /// Note: the ERC-165 identifier for this interface is 0x80ac58cd. interface ERC721 /* is ERC165 */ { /// @dev This emits when ownership of any NFT changes by any mechanism. /// This event emits when NFTs are created (`from` == 0) and destroyed /// (`to` == 0). Exception: during contract creation, any number of NFTs /// may be created and assigned without emitting Transfer. At the time of /// any transfer, the approved address for that NFT (if any) is reset to none. event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId); /// @dev This emits when the approved address for an NFT is changed or /// reaffirmed. The zero address indicates there is no approved address. /// When a Transfer event emits, this also indicates that the approved /// address for that NFT (if any) is reset to none. event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId); /// @dev This emits when an operator is enabled or disabled for an owner. /// The operator can manage all NFTs of the owner. event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved); /// @notice Count all NFTs assigned to an owner /// @dev NFTs assigned to the zero address are considered invalid, and this /// function throws for queries about the zero address. /// @param _owner An address for whom to query the balance /// @return The number of NFTs owned by `_owner`, possibly zero function balanceOf(address _owner) external view returns (uint256); /// @notice Find the owner of an NFT /// @dev NFTs assigned to zero address are considered invalid, and queries /// about them do throw. /// @param _tokenId The identifier for an NFT /// @return The address of the owner of the NFT function ownerOf(uint256 _tokenId) external view returns (address); /// @notice Transfers the ownership of an NFT from one address to another address /// @dev Throws unless `msg.sender` is the current owner, an authorized /// operator, or the approved address for this NFT. Throws if `_from` is /// not the current owner. Throws if `_to` is the zero address. Throws if /// `_tokenId` is not a valid NFT. When transfer is complete, this function /// checks if `_to` is a smart contract (code size > 0). If so, it calls /// `onERC721Received` on `_to` and throws if the return value is not /// `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`. /// @param _from The current owner of the NFT /// @param _to The new owner /// @param _tokenId The NFT to transfer /// @param data Additional data with no specified format, sent in call to `_to` function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) external payable; /// @notice Transfers the ownership of an NFT from one address to another address /// @dev This works identically to the other function with an extra data parameter, /// except this function just sets data to "". /// @param _from The current owner of the NFT /// @param _to The new owner /// @param _tokenId The NFT to transfer function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable; /// @notice Transfer ownership of an NFT -- THE CALLER IS RESPONSIBLE /// TO CONFIRM THAT `_to` IS CAPABLE OF RECEIVING NFTS OR ELSE /// THEY MAY BE PERMANENTLY LOST /// @dev Throws unless `msg.sender` is the current owner, an authorized /// operator, or the approved address for this NFT. Throws if `_from` is /// not the current owner. Throws if `_to` is the zero address. Throws if /// `_tokenId` is not a valid NFT. /// @param _from The current owner of the NFT /// @param _to The new owner /// @param _tokenId The NFT to transfer function transferFrom(address _from, address _to, uint256 _tokenId) external payable; /// @notice Change or reaffirm the approved address for an NFT /// @dev The zero address indicates there is no approved address. /// Throws unless `msg.sender` is the current NFT owner, or an authorized /// operator of the current owner. /// @param _approved The new approved NFT controller /// @param _tokenId The NFT to approve function approve(address _approved, uint256 _tokenId) external payable; /// @notice Enable or disable approval for a third party ("operator") to manage /// all of `msg.sender`'s assets /// @dev Emits the ApprovalForAll event. The contract MUST allow /// multiple operators per owner. /// @param _operator Address to add to the set of authorized operators /// @param _approved True if the operator is approved, false to revoke approval function setApprovalForAll(address _operator, bool _approved) external; /// @notice Get the approved address for a single NFT /// @dev Throws if `_tokenId` is not a valid NFT. /// @param _tokenId The NFT to find the approved address for /// @return The approved address for this NFT, or the zero address if there is none function getApproved(uint256 _tokenId) external view returns (address); /// @notice Query if an address is an authorized operator for another address /// @param _owner The address that owns the NFTs /// @param _operator The address that acts on behalf of the owner /// @return True if `_operator` is an approved operator for `_owner`, false otherwise function isApprovedForAll(address _owner, address _operator) external view returns (bool); } /// @dev Note: the ERC-165 identifier for this interface is 0x150b7a02. interface ERC721TokenReceiver { /// @notice Handle the receipt of an NFT /// @dev The ERC721 smart contract calls this function on the recipient /// after a `transfer`. This function MAY throw to revert and reject the /// transfer. Return of other than the magic value MUST result in the /// transaction being reverted. /// Note: the contract address is always the message sender. /// @param _operator The address which called `safeTransferFrom` function /// @param _from The address which previously owned the token /// @param _tokenId The NFT identifier which is being transferred /// @param _data Additional data with no specified format /// @return `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))` /// unless throwing function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes _data) external returns(bytes4); } // 숫자 계산 시 오버플로우 문제를 방지하기 위한 라이브러리 library SafeMath { function add(uint256 a, uint256 b) pure internal returns (uint256 c) { c = a + b; assert(c >= a); return c; } function sub(uint256 a, uint256 b) pure internal returns (uint256 c) { assert(b <= a); return a - b; } function mul(uint256 a, uint256 b) pure internal returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) pure internal returns (uint256 c) { return a / b; } } // 요정 소유권 관련 기능 contract FairyOwnership is EtherFairyBase, ERC721 { using SafeMath for uint256; // 요정의 소유주 정보 mapping(uint256 => address) public fairyIdToMaster; // 소유주의 요정 ID 목록 정보 mapping(address => uint256[]) public masterToFairyIds; // 요정의 요정 ID 목록에서의 index 정보 mapping(uint256 => uint256) internal fairyIdToFairyIdsIndex; // 요정 거래 권한이 승인된 지갑 정보 mapping(uint256 => address) private fairyIdToApproved; // 오퍼레이터가 승인되었는지에 대한 정보 mapping(address => mapping(address => bool)) private masterToOperatorToIsApprovedForAll; // 요정 소유주만 modifier onlyMasterOf(uint256 fairyId) { require(msg.sender == ownerOf(fairyId)); _; } // 승인된 지갑만 modifier onlyApprovedOf(uint256 fairyId) { require( msg.sender == ownerOf(fairyId) || msg.sender == getApproved(fairyId) || isApprovedForAll(ownerOf(fairyId), msg.sender) == true || msg.sender == officialMarket ); _; } //ERC721: 요정의 개수를 가져옵니다. function balanceOf(address master) view public returns (uint256) { // 주소 오용 차단 require(checkAddressMisused(master) != true); return masterToFairyIds[master].length; } //ERC721: 요정의 소유주 지갑 주소를 가져옵니다. function ownerOf(uint256 fairyId) view public returns (address) { address master = fairyIdToMaster[fairyId]; require(checkAddressMisused(master) != true); return master; } // 주어진 주소가 스마트 계약인지 확인합니다. function checkIsSmartContract(address addr) view private returns (bool) { uint32 size; assembly { size := extcodesize(addr) } return size > 0; } //ERC721: 요정을 받는 대상이 스마트 계약인 경우, onERC721Received 함수를 실행합니다. function safeTransferFrom(address from, address to, uint256 fairyId, bytes data) whenServiceRunning payable external { transferFrom(from, to, fairyId); if (checkIsSmartContract(to) == true) { // ERC721TokenReceiver require(ERC721TokenReceiver(to).onERC721Received(msg.sender, from, fairyId, data) == 0x150b7a02); } } //ERC721: 요정을 받는 대상이 스마트 계약인 경우, onERC721Received 함수를 실행합니다. function safeTransferFrom(address from, address to, uint256 fairyId) whenServiceRunning payable external { transferFrom(from, to, fairyId); if (checkIsSmartContract(to) == true) { // ERC721TokenReceiver require(ERC721TokenReceiver(to).onERC721Received(msg.sender, from, fairyId, "") == 0x150b7a02); } } //ERC721: 요정을 이전합니다. function transferFrom(address from, address to, uint256 fairyId) whenServiceRunning whenNotBlocked whenNotBlockedFairy(fairyId) onlyApprovedOf(fairyId) payable public { // 주소 오용 차단 require(checkAddressMisused(to) != true); require(from == ownerOf(fairyId)); require(to != ownerOf(fairyId)); // 거래 권한 제거 delete fairyIdToApproved[fairyId]; emit Approval(from, 0, fairyId); // 기존 소유주로부터 요정 제거 uint256 index = fairyIdToFairyIdsIndex[fairyId]; uint256 lastIndex = balanceOf(from).sub(1); uint256 lastFairyId = masterToFairyIds[from][lastIndex]; masterToFairyIds[from][index] = lastFairyId; delete masterToFairyIds[from][lastIndex]; masterToFairyIds[from].length -= 1; fairyIdToFairyIdsIndex[lastFairyId] = index; // 요정 이전 fairyIdToMaster[fairyId] = to; fairyIdToFairyIdsIndex[fairyId] = masterToFairyIds[to].push(fairyId).sub(1); emit Transfer(from, to, fairyId); } //ERC721: 특정 계약에 거래 권한을 부여합니다. function approve(address approved, uint256 fairyId) whenServiceRunning whenNotBlocked whenNotBlockedFairy(fairyId) onlyMasterOf(fairyId) payable external { address master = ownerOf(fairyId); // 주소 오용 차단 require(approved != master); require(checkAddressMisused(approved) != true); fairyIdToApproved[fairyId] = approved; emit Approval(master, approved, fairyId); } //ERC721: 오퍼레이터에게 거래 권한을 부여하거나 뺏습니다. function setApprovalForAll(address operator, bool isApproved) whenServiceRunning whenNotBlocked external { // 주소 오용 차단 require(operator != msg.sender); require(checkAddressMisused(operator) != true); if (isApproved == true) { masterToOperatorToIsApprovedForAll[msg.sender][operator] = true; } else { delete masterToOperatorToIsApprovedForAll[msg.sender][operator]; } emit ApprovalForAll(msg.sender, operator, isApproved); } //ERC721: 요정 거래 권한이 승인된 지갑 주소를 가져옵니다. function getApproved(uint256 fairyId) public view returns (address) { return fairyIdToApproved[fairyId]; } //ERC721: 오퍼레이터가 거래 권한을 가지고 있는지 확인합니다. function isApprovedForAll(address master, address operator) view public returns (bool) { return masterToOperatorToIsApprovedForAll[master][operator] == true; } } // 돈을 지불하고 요정을 업그레이드 하는 기능들 contract FairyPayToUpgrade is FairyOwnership { event CustomLevelUp(uint256 indexed fairyId); event IncreaseHPPointPerLevel(uint256 indexed fairyId); event IncreaseAttackPointPerLevel(uint256 indexed fairyId); event IncreaseDefencePointPerLevel(uint256 indexed fairyId); event IncreaseAgilityPointPerLevel(uint256 indexed fairyId); event IncreaseDexterityPointPerLevel(uint256 indexed fairyId); event IncreaseFirePointPerLevel(uint256 indexed fairyId); event IncreaseWaterPointPerLevel(uint256 indexed fairyId); event IncreaseWindPointPerLevel(uint256 indexed fairyId); event IncreaseEarthPointPerLevel(uint256 indexed fairyId); event IncreaseLightPointPerLevel(uint256 indexed fairyId); event IncreaseDarkPointPerLevel(uint256 indexed fairyId); // 돈을 지불하고 레벨업 합니다. function levelUpFairy(uint256 fairyId) whenServiceRunning whenNotBlocked whenNotBlockedFairy(fairyId) onlyMasterOf(fairyId) payable public { // 임의 레벨업 가격과 비교합니다. require(msg.value == customLevelUpPrice); // 요정의 레벨을 올립니다. Fairy storage fairy = fairies[fairyId]; fairy.appendedLevel = fairy.appendedLevel.add(1); uint256 companyRevenue = msg.value.div(2); uint256 designerRevenue = msg.value.div(2); require(companyRevenue.add(designerRevenue) == msg.value); // 회사에게 금액의 50%를 지급합니다. company.transfer(companyRevenue); // 요정의 디자이너에게 금액의 50%를 지급합니다. fairy.designer.transfer(designerRevenue); emit CustomLevelUp(fairyId); } // 돈을 지불하고 레벨 당 HP 증가 포인트를 올립니다. function increaseHPPointPerLevel(uint256 fairyId) whenServiceRunning whenNotBlocked whenNotBlockedFairy(fairyId) onlyMasterOf(fairyId) payable public { Fairy storage fairy = fairies[fairyId]; // 임의로 포인트를 증가시키는데 드는 포인트당 가격과 비교합니다. require(msg.value == increasePointPricePerPoint * fairy.hpPointPerLevel); // 레벨 당 HP 증가 포인트를 올립니다. fairy.hpPointPerLevel = fairy.hpPointPerLevel.add(1); uint256 companyRevenue = msg.value.div(2); uint256 designerRevenue = msg.value.div(2); require(companyRevenue.add(designerRevenue) == msg.value); // 회사에게 금액의 50%를 지급합니다. company.transfer(companyRevenue); // 요정의 디자이너에게 금액의 50%를 지급합니다. fairy.designer.transfer(designerRevenue); emit IncreaseHPPointPerLevel(fairyId); } // 돈을 지불하고 레벨 당 공격 증가 포인트를 올립니다. function increaseAttackPointPerLevel(uint256 fairyId) whenServiceRunning whenNotBlocked whenNotBlockedFairy(fairyId) onlyMasterOf(fairyId) payable public { Fairy storage fairy = fairies[fairyId]; // 임의로 포인트를 증가시키는데 드는 포인트당 가격과 비교합니다. require(msg.value == increasePointPricePerPoint * fairy.attackPointPerLevel); // 레벨 당 공격 증가 포인트를 올립니다. fairy.attackPointPerLevel = fairy.attackPointPerLevel.add(1); uint256 companyRevenue = msg.value.div(2); uint256 designerRevenue = msg.value.div(2); require(companyRevenue.add(designerRevenue) == msg.value); // 회사에게 금액의 50%를 지급합니다. company.transfer(companyRevenue); // 요정의 디자이너에게 금액의 50%를 지급합니다. fairy.designer.transfer(designerRevenue); emit IncreaseAttackPointPerLevel(fairyId); } // 돈을 지불하고 레벨 당 방어 증가 포인트를 올립니다. function increaseDefencePointPerLevel(uint256 fairyId) whenServiceRunning whenNotBlocked whenNotBlockedFairy(fairyId) onlyMasterOf(fairyId) payable public { Fairy storage fairy = fairies[fairyId]; // 임의로 포인트를 증가시키는데 드는 포인트당 가격과 비교합니다. require(msg.value == increasePointPricePerPoint * fairy.defencePointPerLevel); // 레벨 당 방어 증가 포인트를 올립니다. fairy.defencePointPerLevel = fairy.defencePointPerLevel.add(1); uint256 companyRevenue = msg.value.div(2); uint256 designerRevenue = msg.value.div(2); require(companyRevenue.add(designerRevenue) == msg.value); // 회사에게 금액의 50%를 지급합니다. company.transfer(companyRevenue); // 요정의 디자이너에게 금액의 50%를 지급합니다. fairy.designer.transfer(designerRevenue); emit IncreaseDefencePointPerLevel(fairyId); } // 돈을 지불하고 레벨 당 민첩 증가 포인트를 올립니다. function increaseAgilityPointPerLevel(uint256 fairyId) whenServiceRunning whenNotBlocked whenNotBlockedFairy(fairyId) onlyMasterOf(fairyId) payable public { Fairy storage fairy = fairies[fairyId]; // 임의로 포인트를 증가시키는데 드는 포인트당 가격과 비교합니다. require(msg.value == increasePointPricePerPoint * fairy.agilityPointPerLevel); // 레벨 당 민첩 증가 포인트를 올립니다. fairy.agilityPointPerLevel = fairy.agilityPointPerLevel.add(1); uint256 companyRevenue = msg.value.div(2); uint256 designerRevenue = msg.value.div(2); require(companyRevenue.add(designerRevenue) == msg.value); // 회사에게 금액의 50%를 지급합니다. company.transfer(companyRevenue); // 요정의 디자이너에게 금액의 50%를 지급합니다. fairy.designer.transfer(designerRevenue); emit IncreaseAgilityPointPerLevel(fairyId); } // 돈을 지불하고 레벨 당 재치 증가 포인트를 올립니다. function increaseDexterityPointPerLevel(uint256 fairyId) whenServiceRunning whenNotBlocked whenNotBlockedFairy(fairyId) onlyMasterOf(fairyId) payable public { Fairy storage fairy = fairies[fairyId]; // 임의로 포인트를 증가시키는데 드는 포인트당 가격과 비교합니다. require(msg.value == increasePointPricePerPoint * fairy.dexterityPointPerLevel); // 레벨 당 재치 증가 포인트를 올립니다. fairy.dexterityPointPerLevel = fairy.dexterityPointPerLevel.add(1); uint256 companyRevenue = msg.value.div(2); uint256 designerRevenue = msg.value.div(2); require(companyRevenue.add(designerRevenue) == msg.value); // 회사에게 금액의 50%를 지급합니다. company.transfer(companyRevenue); // 요정의 디자이너에게 금액의 50%를 지급합니다. fairy.designer.transfer(designerRevenue); emit IncreaseDexterityPointPerLevel(fairyId); } // 돈을 지불하고 레벨 당 불 속성 증가 포인트를 올립니다. function increaseFirePointPerLevel(uint256 fairyId) whenServiceRunning whenNotBlocked whenNotBlockedFairy(fairyId) onlyMasterOf(fairyId) payable public { Fairy storage fairy = fairies[fairyId]; // 임의로 포인트를 증가시키는데 드는 포인트당 가격과 비교합니다. require(msg.value == increasePointPricePerPoint * fairy.firePointPerLevel.add(1)); // 레벨 당 불 속성 증가 포인트를 올립니다. fairy.firePointPerLevel = fairy.firePointPerLevel.add(1); uint256 companyRevenue = msg.value.div(2); uint256 designerRevenue = msg.value.div(2); require(companyRevenue.add(designerRevenue) == msg.value); // 회사에게 금액의 50%를 지급합니다. company.transfer(companyRevenue); // 요정의 디자이너에게 금액의 50%를 지급합니다. fairy.designer.transfer(designerRevenue); emit IncreaseFirePointPerLevel(fairyId); } // 돈을 지불하고 레벨 당 물 속성 증가 포인트를 올립니다. function increaseWaterPointPerLevel(uint256 fairyId) whenServiceRunning whenNotBlocked whenNotBlockedFairy(fairyId) onlyMasterOf(fairyId) payable public { Fairy storage fairy = fairies[fairyId]; // 임의로 포인트를 증가시키는데 드는 포인트당 가격과 비교합니다. require(msg.value == increasePointPricePerPoint * fairy.waterPointPerLevel.add(1)); // 레벨 당 물 속성 증가 포인트를 올립니다. fairy.waterPointPerLevel = fairy.waterPointPerLevel.add(1); uint256 companyRevenue = msg.value.div(2); uint256 designerRevenue = msg.value.div(2); require(companyRevenue.add(designerRevenue) == msg.value); // 회사에게 금액의 50%를 지급합니다. company.transfer(companyRevenue); // 요정의 디자이너에게 금액의 50%를 지급합니다. fairy.designer.transfer(designerRevenue); emit IncreaseWaterPointPerLevel(fairyId); } // 돈을 지불하고 레벨 당 바람 속성 증가 포인트를 올립니다. function increaseWindPointPerLevel(uint256 fairyId) whenServiceRunning whenNotBlocked whenNotBlockedFairy(fairyId) onlyMasterOf(fairyId) payable public { Fairy storage fairy = fairies[fairyId]; // 임의로 포인트를 증가시키는데 드는 포인트당 가격과 비교합니다. require(msg.value == increasePointPricePerPoint * fairy.windPointPerLevel.add(1)); // 레벨 당 바람 속성 증가 포인트를 올립니다. fairy.windPointPerLevel = fairy.windPointPerLevel.add(1); uint256 companyRevenue = msg.value.div(2); uint256 designerRevenue = msg.value.div(2); require(companyRevenue.add(designerRevenue) == msg.value); // 회사에게 금액의 50%를 지급합니다. company.transfer(companyRevenue); // 요정의 디자이너에게 금액의 50%를 지급합니다. fairy.designer.transfer(designerRevenue); emit IncreaseWindPointPerLevel(fairyId); } // 돈을 지불하고 레벨 당 대지 속성 증가 포인트를 올립니다. function increaseEarthPointPerLevel(uint256 fairyId) whenServiceRunning whenNotBlocked whenNotBlockedFairy(fairyId) onlyMasterOf(fairyId) payable public { Fairy storage fairy = fairies[fairyId]; // 임의로 포인트를 증가시키는데 드는 포인트당 가격과 비교합니다. require(msg.value == increasePointPricePerPoint * fairy.earthPointPerLevel.add(1)); // 레벨 당 대지 속성 증가 포인트를 올립니다. fairy.earthPointPerLevel = fairy.earthPointPerLevel.add(1); uint256 companyRevenue = msg.value.div(2); uint256 designerRevenue = msg.value.div(2); require(companyRevenue.add(designerRevenue) == msg.value); // 회사에게 금액의 50%를 지급합니다. company.transfer(companyRevenue); // 요정의 디자이너에게 금액의 50%를 지급합니다. fairy.designer.transfer(designerRevenue); emit IncreaseEarthPointPerLevel(fairyId); } // 돈을 지불하고 레벨 당 빛 속성 증가 포인트를 올립니다. function increaseLightPointPerLevel(uint256 fairyId) whenServiceRunning whenNotBlocked whenNotBlockedFairy(fairyId) onlyMasterOf(fairyId) payable public { Fairy storage fairy = fairies[fairyId]; // 임의로 포인트를 증가시키는데 드는 포인트당 가격과 비교합니다. require(msg.value == increasePointPricePerPoint * fairy.lightPointPerLevel.add(1)); // 레벨 당 빛 속성 증가 포인트를 올립니다. fairy.lightPointPerLevel = fairy.lightPointPerLevel.add(1); uint256 companyRevenue = msg.value.div(2); uint256 designerRevenue = msg.value.div(2); require(companyRevenue.add(designerRevenue) == msg.value); // 회사에게 금액의 50%를 지급합니다. company.transfer(companyRevenue); // 요정의 디자이너에게 금액의 50%를 지급합니다. fairy.designer.transfer(designerRevenue); emit IncreaseLightPointPerLevel(fairyId); } // 돈을 지불하고 레벨 당 어둠 속성 증가 포인트를 올립니다. function increaseDarkPointPerLevel(uint256 fairyId) whenServiceRunning whenNotBlocked whenNotBlockedFairy(fairyId) onlyMasterOf(fairyId) payable public { Fairy storage fairy = fairies[fairyId]; // 임의로 포인트를 증가시키는데 드는 포인트당 가격과 비교합니다. require(msg.value == increasePointPricePerPoint * fairy.darkPointPerLevel.add(1)); // 레벨 당 어둠 속성 증가 포인트를 올립니다. fairy.darkPointPerLevel = fairy.darkPointPerLevel.add(1); uint256 companyRevenue = msg.value.div(2); uint256 designerRevenue = msg.value.div(2); require(companyRevenue.add(designerRevenue) == msg.value); // 회사에게 금액의 50%를 지급합니다. company.transfer(companyRevenue); // 요정의 디자이너에게 금액의 50%를 지급합니다. fairy.designer.transfer(designerRevenue); emit IncreaseDarkPointPerLevel(fairyId); } } // 요정 소유주가 사용하는 기능들 contract FairyMaster is FairyOwnership, FairyPayToUpgrade { using SafeMath for uint256; // 이벤트 event BirthFairy(address indexed master, uint256 fairyId); event ChangeFairyName(uint256 indexed fairyId, string name); // 요정을 탄생시킵니다. function birthFairy( // 회사 서버에 저장된 요정 원본 ID string fairyOriginId, // 요정 디자이너의 지갑 주소 address designer, // 요정의 이름 string name, // 원소 속성에 대한 레벨 당 증가 포인트들 uint256 firePointPerLevel, uint256 waterPointPerLevel, uint256 windPointPerLevel, uint256 earthPointPerLevel, uint256 lightPointPerLevel, uint256 darkPointPerLevel ) whenServiceRunning whenNotBlocked payable public { // 주소 오용 차단 require(checkAddressMisused(designer) != true); // 요정 원본의 가격과 비교합니다. require(msg.value == fairyOriginPrice); // 초기 속성 값들의 총합은 5가 되어야 합니다. uint256 totalPointPerLevel = firePointPerLevel; totalPointPerLevel = totalPointPerLevel.add(waterPointPerLevel); totalPointPerLevel = totalPointPerLevel.add(windPointPerLevel); totalPointPerLevel = totalPointPerLevel.add(earthPointPerLevel); totalPointPerLevel = totalPointPerLevel.add(lightPointPerLevel); totalPointPerLevel = totalPointPerLevel.add(darkPointPerLevel); require(totalPointPerLevel == 5); // 요정 데이터 생성 uint256 fairyId = fairies.push(Fairy({ fairyOriginId : fairyOriginId, designer : designer, name : name, birthTime : now, appendedLevel : 0, // EVM의 특성 상 너무 많은 변수를 한번에 할당 할 수 없으므로, // 기본 속성은 1로 통일하여 지정합니다. hpPointPerLevel : 1, attackPointPerLevel : 1, defencePointPerLevel : 1, agilityPointPerLevel : 1, dexterityPointPerLevel : 1, firePointPerLevel : firePointPerLevel, waterPointPerLevel : waterPointPerLevel, windPointPerLevel : windPointPerLevel, earthPointPerLevel : earthPointPerLevel, lightPointPerLevel : lightPointPerLevel, darkPointPerLevel : darkPointPerLevel })).sub(1); // msg.sender를 소유주로 등록 fairyIdToMaster[fairyId] = msg.sender; fairyIdToFairyIdsIndex[fairyId] = masterToFairyIds[msg.sender].push(fairyId).sub(1); // 소유주 주소 등록 if (masterToIsExisted[msg.sender] != true) { masters.push(msg.sender); masterToIsExisted[msg.sender] = true; } require(msg.value.div(2).mul(2) == msg.value); // 회사에게 금액의 50%를 지급합니다. company.transfer(msg.value.div(2)); // 요정의 디자이너에게 금액의 50%를 지급합니다. designer.transfer(msg.value.div(2)); // 이벤트 발생 emit BirthFairy(msg.sender, fairyId); emit Transfer(0x0, msg.sender, fairyId); } // 요정의 이름을 변경합니다. function changeFairyName(uint256 fairyId, string newName) whenServiceRunning whenNotBlocked whenNotBlockedFairy(fairyId) onlyMasterOf(fairyId) public { fairies[fairyId].name = newName; emit ChangeFairyName(fairyId, newName); } // 요정을 많이 가진 순서대로 소유주의 ID 목록을 가져옵니다. function getMasterIdsByFairyCount() view public returns (uint256[]) { uint256[] memory masterIds = new uint256[](masters.length); for (uint256 i = 0; i < masters.length; i += 1) { uint256 fairyCount = balanceOf(masters[i]); for (uint256 j = i; j > 0; j -= 1) { if (balanceOf(masters[masterIds[j - 1]]) < fairyCount) { masterIds[j] = masterIds[j - 1]; } else { break; } } masterIds[j] = i; } return masterIds; } } // 요정 정보를 제공하는 계약 contract FairyInfo is EtherFairyBase { // 요정의 기본 정보를 반환합니다. function getFairyBasicInfo(uint256 fairyId) view public returns ( string fairyOriginId, address designer, string name, uint256 birthTime, uint256 appendedLevel) { Fairy memory fairy = fairies[fairyId]; return ( fairy.fairyOriginId, fairy.designer, fairy.name, fairy.birthTime, fairy.appendedLevel ); } // 요정의 기본 속성에 대한 레벨 당 증가 포인트들을 반환합니다. function getFairyBasicPointsPerLevel(uint256 fairyId) view public returns ( uint256 hpPointPerLevel, uint256 attackPointPerLevel, uint256 defencePointPerLevel, uint256 agilityPointPerLevel, uint256 dexterityPointPerLevel) { Fairy memory fairy = fairies[fairyId]; return ( fairy.hpPointPerLevel, fairy.attackPointPerLevel, fairy.defencePointPerLevel, fairy.agilityPointPerLevel, fairy.dexterityPointPerLevel ); } // 요정의 원소 속성에 대한 레벨 당 증가 포인트들을 반환합니다. function getFairyElementPointsPerLevel(uint256 fairyId) view public returns ( uint256 firePointPerLevel, uint256 waterPointPerLevel, uint256 windPointPerLevel, uint256 earthPointPerLevel, uint256 lightPointPerLevel, uint256 darkPointPerLevel) { Fairy memory fairy = fairies[fairyId]; return ( fairy.firePointPerLevel, fairy.waterPointPerLevel, fairy.windPointPerLevel, fairy.earthPointPerLevel, fairy.lightPointPerLevel, fairy.darkPointPerLevel ); } } // 요정의 랭킹을 제공하는 계약 contract FairyRank is EtherFairyBase { // 최근에 태어난 순서대로 요정의 ID 목록을 가져옵니다. function getFairyIdsByBirthTime() view public returns (uint256[]) { uint256[] memory fairyIds = new uint256[](fairies.length); for (uint256 i = 0; i < fairies.length; i += 1) { uint256 birthTime = fairies[i].birthTime; for (uint256 j = i; j > 0; j -= 1) { if (fairies[fairyIds[j - 1]].birthTime < birthTime) { fairyIds[j] = fairyIds[j - 1]; } else { break; } } fairyIds[j] = i; } return fairyIds; } // 소유주에 의해 추가된 레벨이 높은 순서대로 요정의 ID 목록을 가져옵니다. function getFairyIdsByAppendedLevel() view public returns (uint256[]) { uint256[] memory fairyIds = new uint256[](fairies.length); for (uint256 i = 0; i < fairies.length; i += 1) { uint256 appendedLevel = fairies[i].appendedLevel; for (uint256 j = i; j > 0; j -= 1) { if (fairies[fairyIds[j - 1]].appendedLevel < appendedLevel) { fairyIds[j] = fairyIds[j - 1]; } else { break; } } fairyIds[j] = i; } return fairyIds; } // 레벨 당 HP 증가 포인트가 높은 순서대로 요정의 ID 목록을 가져옵니다. function getFairyIdsByHPPointPerLevel() view public returns (uint256[]) { uint256[] memory fairyIds = new uint256[](fairies.length); for (uint256 i = 0; i < fairies.length; i += 1) { uint256 hpPointPerLevel = fairies[i].hpPointPerLevel; for (uint256 j = i; j > 0; j -= 1) { if (fairies[fairyIds[j - 1]].hpPointPerLevel < hpPointPerLevel) { fairyIds[j] = fairyIds[j - 1]; } else { break; } } fairyIds[j] = i; } return fairyIds; } // 레벨 당 공격 증가 포인트가 높은 순서대로 요정의 ID 목록을 가져옵니다. function getFairyIdsByAttackPointPerLevel() view public returns (uint256[]) { uint256[] memory fairyIds = new uint256[](fairies.length); for (uint256 i = 0; i < fairies.length; i += 1) { uint256 attackPointPerLevel = fairies[i].attackPointPerLevel; for (uint256 j = i; j > 0; j -= 1) { if (fairies[fairyIds[j - 1]].attackPointPerLevel < attackPointPerLevel) { fairyIds[j] = fairyIds[j - 1]; } else { break; } } fairyIds[j] = i; } return fairyIds; } // 레벨 당 방어 증가 포인트가 높은 순서대로 요정의 ID 목록을 가져옵니다. function getFairyIdsByDefencePointPerLevel() view public returns (uint256[]) { uint256[] memory fairyIds = new uint256[](fairies.length); for (uint256 i = 0; i < fairies.length; i += 1) { uint256 defencePointPerLevel = fairies[i].defencePointPerLevel; for (uint256 j = i; j > 0; j -= 1) { if (fairies[fairyIds[j - 1]].defencePointPerLevel < defencePointPerLevel) { fairyIds[j] = fairyIds[j - 1]; } else { break; } } fairyIds[j] = i; } return fairyIds; } // 레벨 당 민첩 증가 포인트가 높은 순서대로 요정의 ID 목록을 가져옵니다. function getFairyIdsByAgilityPointPerLevel() view public returns (uint256[]) { uint256[] memory fairyIds = new uint256[](fairies.length); for (uint256 i = 0; i < fairies.length; i += 1) { uint256 agilityPointPerLevel = fairies[i].agilityPointPerLevel; for (uint256 j = i; j > 0; j -= 1) { if (fairies[fairyIds[j - 1]].agilityPointPerLevel < agilityPointPerLevel) { fairyIds[j] = fairyIds[j - 1]; } else { break; } } fairyIds[j] = i; } return fairyIds; } // 레벨 당 재치 증가 포인트가 높은 순서대로 요정의 ID 목록을 가져옵니다. function getFairyIdsByDexterityPointPerLevel() view public returns (uint256[]) { uint256[] memory fairyIds = new uint256[](fairies.length); for (uint256 i = 0; i < fairies.length; i += 1) { uint256 dexterityPointPerLevel = fairies[i].dexterityPointPerLevel; for (uint256 j = i; j > 0; j -= 1) { if (fairies[fairyIds[j - 1]].dexterityPointPerLevel < dexterityPointPerLevel) { fairyIds[j] = fairyIds[j - 1]; } else { break; } } fairyIds[j] = i; } return fairyIds; } // 레벨 당 불 속성 증가 포인트가 높은 순서대로 요정의 ID 목록을 가져옵니다. function getFairyIdsByFirePointPerLevel() view public returns (uint256[]) { uint256[] memory fairyIds = new uint256[](fairies.length); for (uint256 i = 0; i < fairies.length; i += 1) { uint256 firePointPerLevel = fairies[i].firePointPerLevel; for (uint256 j = i; j > 0; j -= 1) { if (fairies[fairyIds[j - 1]].firePointPerLevel < firePointPerLevel) { fairyIds[j] = fairyIds[j - 1]; } else { break; } } fairyIds[j] = i; } return fairyIds; } // 레벨 당 물 속성 증가 포인트가 높은 순서대로 요정의 ID 목록을 가져옵니다. function getFairyIdsByWaterPointPerLevel() view public returns (uint256[]) { uint256[] memory fairyIds = new uint256[](fairies.length); for (uint256 i = 0; i < fairies.length; i += 1) { uint256 waterPointPerLevel = fairies[i].waterPointPerLevel; for (uint256 j = i; j > 0; j -= 1) { if (fairies[fairyIds[j - 1]].waterPointPerLevel < waterPointPerLevel) { fairyIds[j] = fairyIds[j - 1]; } else { break; } } fairyIds[j] = i; } return fairyIds; } // 레벨 당 바람 속성 증가 포인트가 높은 순서대로 요정의 ID 목록을 가져옵니다. function getFairyIdsByWindPointPerLevel() view public returns (uint256[]) { uint256[] memory fairyIds = new uint256[](fairies.length); for (uint256 i = 0; i < fairies.length; i += 1) { uint256 windPointPerLevel = fairies[i].windPointPerLevel; for (uint256 j = i; j > 0; j -= 1) { if (fairies[fairyIds[j - 1]].windPointPerLevel < windPointPerLevel) { fairyIds[j] = fairyIds[j - 1]; } else { break; } } fairyIds[j] = i; } return fairyIds; } // 레벨 당 대지 속성 증가 포인트가 높은 순서대로 요정의 ID 목록을 가져옵니다. function getFairyIdsByEarthPointPerLevel() view public returns (uint256[]) { uint256[] memory fairyIds = new uint256[](fairies.length); for (uint256 i = 0; i < fairies.length; i += 1) { uint256 earthPointPerLevel = fairies[i].earthPointPerLevel; for (uint256 j = i; j > 0; j -= 1) { if (fairies[fairyIds[j - 1]].earthPointPerLevel < earthPointPerLevel) { fairyIds[j] = fairyIds[j - 1]; } else { break; } } fairyIds[j] = i; } return fairyIds; } // 레벨 당 빛 속성 증가 포인트가 높은 순서대로 요정의 ID 목록을 가져옵니다. function getFairyIdsByLightPointPerLevel() view public returns (uint256[]) { uint256[] memory fairyIds = new uint256[](fairies.length); for (uint256 i = 0; i < fairies.length; i += 1) { uint256 lightPointPerLevel = fairies[i].lightPointPerLevel; for (uint256 j = i; j > 0; j -= 1) { if (fairies[fairyIds[j - 1]].lightPointPerLevel < lightPointPerLevel) { fairyIds[j] = fairyIds[j - 1]; } else { break; } } fairyIds[j] = i; } return fairyIds; } // 레벨 당 어둠 속성 증가 포인트가 높은 순서대로 요정의 ID 목록을 가져옵니다. function getFairyIdsByDarkPointPerLevel() view public returns (uint256[]) { uint256[] memory fairyIds = new uint256[](fairies.length); for (uint256 i = 0; i < fairies.length; i += 1) { uint256 darkPointPerLevel = fairies[i].darkPointPerLevel; for (uint256 j = i; j > 0; j -= 1) { if (fairies[fairyIds[j - 1]].darkPointPerLevel < darkPointPerLevel) { fairyIds[j] = fairyIds[j - 1]; } else { break; } } fairyIds[j] = i; } return fairyIds; } } // Ether Fairy 스마트 계약 contract EtherFairy is EtherFairyCompany, FairyMaster, FairyInfo, FairyRank, ERC165 { //ERC165: 주어진 인터페이스가 구현되어 있는지 확인합니다. function supportsInterface(bytes4 interfaceID) external view returns (bool) { return // ERC165 interfaceID == this.supportsInterface.selector || // ERC721 interfaceID == 0x80ac58cd || // ERC721Metadata interfaceID == 0x5b5e139f || // ERC721Enumerable interfaceID == 0x780e9d63; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[{"name":"interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pauseService","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"masterToBlock","type":"address"}],"name":"blockMaster","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"fairyId","type":"uint256"}],"name":"getApproved","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"fairyOriginPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"approved","type":"address"},{"name":"fairyId","type":"uint256"}],"name":"approve","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"fairyId","type":"uint256"}],"name":"getFairyBasicPointsPerLevel","outputs":[{"name":"hpPointPerLevel","type":"uint256"},{"name":"attackPointPerLevel","type":"uint256"},{"name":"defencePointPerLevel","type":"uint256"},{"name":"agilityPointPerLevel","type":"uint256"},{"name":"dexterityPointPerLevel","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"fairyId","type":"uint256"}],"name":"increaseFirePointPerLevel","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"fairyId","type":"uint256"}],"name":"levelUpFairy","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"fairyIdToIsBlocked","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newTokenMetadataBaseURI","type":"string"}],"name":"changeTokenMetadataBaseURI","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"officialMarket","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"fairyId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"increasePointPricePerPoint","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"fairyOriginId","type":"string"}],"name":"getFairyIdsByOriginId","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getMasterIdsByFairyCount","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"fairyId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"getFairyIdsByBirthTime","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getFairyIdsByAttackPointPerLevel","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"fairyId","type":"uint256"}],"name":"increaseDarkPointPerLevel","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"servicePaused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getFairyIdsByAgilityPointPerLevel","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"fairyOriginId","type":"string"},{"name":"designer","type":"address"},{"name":"name","type":"string"},{"name":"firePointPerLevel","type":"uint256"},{"name":"waterPointPerLevel","type":"uint256"},{"name":"windPointPerLevel","type":"uint256"},{"name":"earthPointPerLevel","type":"uint256"},{"name":"lightPointPerLevel","type":"uint256"},{"name":"darkPointPerLevel","type":"uint256"}],"name":"birthFairy","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"fairyId","type":"uint256"}],"name":"increaseAttackPointPerLevel","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"getFairyIdsByFirePointPerLevel","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"masters","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"fairyId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"fairyIdToMaster","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"masterToIsBlocked","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"company","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"fairyId","type":"uint256"}],"name":"getFairyElementPointsPerLevel","outputs":[{"name":"firePointPerLevel","type":"uint256"},{"name":"waterPointPerLevel","type":"uint256"},{"name":"windPointPerLevel","type":"uint256"},{"name":"earthPointPerLevel","type":"uint256"},{"name":"lightPointPerLevel","type":"uint256"},{"name":"darkPointPerLevel","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newFairyOriginPrice","type":"uint256"}],"name":"changeFairyOriginPrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newCustomLevelUpPrice","type":"uint256"}],"name":"changeCustomLevelUpPrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"master","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"fairyIdToUnblock","type":"uint256"}],"name":"unblockFairy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"masterToUnlock","type":"address"}],"name":"unblockMaster","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getFairyIdsByWindPointPerLevel","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"fairyId","type":"uint256"}],"name":"increaseAgilityPointPerLevel","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getFairyIdsByWaterPointPerLevel","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"operator","type":"address"},{"name":"isApproved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"NAME","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOfficialMarket","type":"address"}],"name":"changeOfficialMarket","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"masterToFairyIds","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"fairyId","type":"uint256"}],"name":"getFairyBasicInfo","outputs":[{"name":"fairyOriginId","type":"string"},{"name":"designer","type":"address"},{"name":"name","type":"string"},{"name":"birthTime","type":"uint256"},{"name":"appendedLevel","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"fairyId","type":"uint256"}],"name":"increaseDefencePointPerLevel","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"tokenMetadataBaseURI","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getMasterCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"fairyId","type":"uint256"},{"name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"fairyId","type":"uint256"}],"name":"increaseEarthPointPerLevel","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"getFairyIdsByHPPointPerLevel","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getFairyCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"fairyIdToBlock","type":"uint256"}],"name":"blockFairy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getFairyIdsByAppendedLevel","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getFairyIdsByDarkPointPerLevel","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"fairyId","type":"uint256"}],"name":"tokenURI","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"fairyId","type":"uint256"}],"name":"increaseLightPointPerLevel","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"fairyId","type":"uint256"}],"name":"increaseWindPointPerLevel","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"resumeService","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"customLevelUpPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getFairyIdsByLightPointPerLevel","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newIncreasePointPricePerPoint","type":"uint256"}],"name":"changeIncreasePointPricePerPoint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"master","type":"address"},{"name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"fairyId","type":"uint256"},{"name":"newName","type":"string"}],"name":"changeFairyName","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newCompany","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getFairyIdsByEarthPointPerLevel","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getFairyIdsByDexterityPointPerLevel","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"fairyId","type":"uint256"}],"name":"increaseDexterityPointPerLevel","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"SYMBOL","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getFairyIdsByDefencePointPerLevel","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"fairyId","type":"uint256"}],"name":"increaseHPPointPerLevel","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"fairyOriginId","type":"string"}],"name":"getFairyCountByOriginId","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"fairyId","type":"uint256"}],"name":"increaseWaterPointPerLevel","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"master","type":"address"},{"indexed":false,"name":"fairyId","type":"uint256"}],"name":"BirthFairy","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"fairyId","type":"uint256"},{"indexed":false,"name":"name","type":"string"}],"name":"ChangeFairyName","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"fairyId","type":"uint256"}],"name":"CustomLevelUp","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"fairyId","type":"uint256"}],"name":"IncreaseHPPointPerLevel","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"fairyId","type":"uint256"}],"name":"IncreaseAttackPointPerLevel","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"fairyId","type":"uint256"}],"name":"IncreaseDefencePointPerLevel","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"fairyId","type":"uint256"}],"name":"IncreaseAgilityPointPerLevel","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"fairyId","type":"uint256"}],"name":"IncreaseDexterityPointPerLevel","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"fairyId","type":"uint256"}],"name":"IncreaseFirePointPerLevel","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"fairyId","type":"uint256"}],"name":"IncreaseWaterPointPerLevel","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"fairyId","type":"uint256"}],"name":"IncreaseWindPointPerLevel","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"fairyId","type":"uint256"}],"name":"IncreaseEarthPointPerLevel","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"fairyId","type":"uint256"}],"name":"IncreaseLightPointPerLevel","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"fairyId","type":"uint256"}],"name":"IncreaseDarkPointPerLevel","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":true,"name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_approved","type":"address"},{"indexed":true,"name":"_tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_operator","type":"address"},{"indexed":false,"name":"_approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"oldCompany","type":"address"},{"indexed":false,"name":"newCompany","type":"address"}],"name":"TransferOwnership","type":"event"},{"anonymous":false,"inputs":[],"name":"PauseService","type":"event"},{"anonymous":false,"inputs":[],"name":"ResumeService","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"price","type":"uint256"}],"name":"ChangeFairyOriginPrice","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"price","type":"uint256"}],"name":"ChangeCustomLevelUpPrice","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"price","type":"uint256"}],"name":"ChangeIncreasePointPricePerPoint","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenMetadataBaseURI","type":"string"}],"name":"ChangeTokenMetadataBaseURI","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"officialMarket","type":"address"}],"name":"ChangeOfficialMarket","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"masterToBlock","type":"address"}],"name":"BlockMaster","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"fairyIdToBlock","type":"uint256"}],"name":"BlockFairy","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"masterToUnlock","type":"address"}],"name":"UnblockMaster","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"fairyIdToUnblock","type":"uint256"}],"name":"UnblockFairy","type":"event"}]
Contract Creation Code
60e0604052602960808190527f68747470733a2f2f657468657266616972792e636f6d2f6170692f746f6b656e60a09081527f6d657461646174612f000000000000000000000000000000000000000000000060c052620000649160009190620000ae565b5066b1a2bc2ec50000600155662386f26fc100006002819055600355600a805460098054600160a060020a03191633908117909155600160a860020a031990911617905562000153565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620000f157805160ff191683800117855562000121565b8280016001018555821562000121579182015b828111156200012157825182559160200191906001019062000104565b506200012f92915062000133565b5090565b6200015091905b808211156200012f57600081556001016200013a565b90565b615adb80620001636000396000f3006080604052600436106103635763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166301ffc9a781146103685780630552f9ff1461039e57806306fdde03146103b557806307583f491461043f578063081812fc146104605780630882e52d14610494578063095ea7b3146104bb5780630cd42cb2146104d25780630fc9c1b414610515578063172afda3146105205780631f3e41501461052b57806321d1f7bf14610543578063222419a91461059c57806323b872dd146105b157806328ca02fe146105ce5780632b38c045146105e35780633df33c341461068c57806342842e0e146106a15780634361b717146106be57806343a4d8cc146106d357806347a00498146106e85780634a2f60a1146106f35780634c48840f146107085780634df919451461071d5780635045280f146107d3578063556b2cbf146107de57806360961874146107f35780636352211e1461080b5780636513ae8e1461082357806366ec277c1461083b5780636904c94d1461085c578063694f058a146108715780636bc68403146108bc5780636e1ffc0d146108d457806370a08231146108ec5780637ddcac661461090d5780637eca6381146109255780638dfe3d31146109465780638fb1b7331461095b57806395d89b41146109665780639a8c27e51461097b578063a22cb46514610990578063a3f4df7e146109b6578063a87fa5c6146109cb578063aa323ea5146109ec578063af87e52d14610a10578063afddcdbc14610b2d578063b5cab1ce14610b38578063b5cc88b614610b4d578063b88d4fde14610b62578063c34d3f1c14610b8e578063c3e1fd5614610b99578063c4e9033014610bae578063c592c47514610bc3578063c68f010614610bdb578063c6d93e1314610bf0578063c87b56dd14610c05578063d0be686a14610c1d578063d46618ae14610c28578063db6003d114610c33578063e1a9810214610c48578063e485354a14610c5d578063e52ed74614610c72578063e985e9c514610c8a578063ec11573e14610cb1578063f2fde38b14610d0f578063f454f1a214610d30578063f511923d14610d45578063f73227d714610d5a578063f76f8d7814610d65578063fa1aa70e14610d7a578063fc8846e514610d8f578063febd42d114610d9a578063ff243e6914610df3575b600080fd5b34801561037457600080fd5b5061038a600160e060020a031960043516610dfe565b604080519115158252519081900360200190f35b3480156103aa57600080fd5b506103b3610ecf565b005b3480156103c157600080fd5b506103ca610f51565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104045781810151838201526020016103ec565b50505050905090810190601f1680156104315780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561044b57600080fd5b506103b3600160a060020a0360043516610f89565b34801561046c57600080fd5b50610478600435610ffb565b60408051600160a060020a039092168252519081900360200190f35b3480156104a057600080fd5b506104a9611016565b60408051918252519081900360200190f35b6103b3600160a060020a036004351660243561101c565b3480156104de57600080fd5b506104ea600435611166565b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b6103b360043561138f565b6103b360043561158f565b34801561053757600080fd5b5061038a600435611778565b34801561054f57600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526103b394369492936024939284019190819084018382808284375094975061178d9650505050505050565b3480156105a857600080fd5b50610478611854565b6103b3600160a060020a0360043581169060243516604435611863565b3480156105da57600080fd5b506104a9611bd5565b3480156105ef57600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261063c943694929360249392840191908190840183828082843750949750611bdb9650505050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610678578181015183820152602001610660565b505050509050019250505060405180910390f35b34801561069857600080fd5b5061063c611d55565b6103b3600160a060020a0360043581169060243516604435611e7e565b3480156106ca57600080fd5b5061063c611f75565b3480156106df57600080fd5b5061063c612098565b6103b36004356121bb565b3480156106ff57600080fd5b5061038a6123bb565b34801561071457600080fd5b5061063c6123cb565b6040805160206004803580820135601f81018490048402850184019095528484526103b394369492936024939284019190819084018382808284375050604080516020601f818a01358b0180359182018390048302840183018552818452989b600160a060020a038b35169b909a90999401975091955091820193509150819084018382808284375094975050843595505050602083013592604081013592506060810135915060808101359060a001356124ee565b6103b3600435612997565b3480156107ea57600080fd5b5061063c612b86565b3480156107ff57600080fd5b50610478600435612ca9565b34801561081757600080fd5b50610478600435612cd1565b34801561082f57600080fd5b50610478600435612d01565b34801561084757600080fd5b5061038a600160a060020a0360043516612d1c565b34801561086857600080fd5b50610478612d31565b34801561087d57600080fd5b50610889600435612d40565b604080519687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b3480156108c857600080fd5b506103b3600435612f75565b3480156108e057600080fd5b506103b3600435612fc7565b3480156108f857600080fd5b506104a9600160a060020a0360043516613019565b34801561091957600080fd5b506103b360043561304f565b34801561093157600080fd5b506103b3600160a060020a03600435166130b4565b34801561095257600080fd5b5061063c613123565b6103b3600435613246565b34801561097257600080fd5b506103ca613435565b34801561098757600080fd5b5061063c61346c565b34801561099c57600080fd5b506103b3600160a060020a0360043516602435151561358f565b3480156109c257600080fd5b506103ca6136c2565b3480156109d757600080fd5b506103b3600160a060020a03600435166136f9565b3480156109f857600080fd5b506104a9600160a060020a0360043516602435613764565b348015610a1c57600080fd5b50610a28600435613794565b604051808060200186600160a060020a0316600160a060020a0316815260200180602001858152602001848152602001838103835288818151815260200191508051906020019080838360005b83811015610a8d578181015183820152602001610a75565b50505050905090810190601f168015610aba5780820380516001836020036101000a031916815260200191505b50838103825286518152865160209182019188019080838360005b83811015610aed578181015183820152602001610ad5565b50505050905090810190601f168015610b1a5780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390f35b6103b36004356139c2565b348015610b4457600080fd5b506103ca613bb1565b348015610b5957600080fd5b506104a9613c3f565b6103b3600160a060020a0360048035821691602480359091169160443591606435908101910135613c45565b6103b3600435613d55565b348015610ba557600080fd5b5061063c613f55565b348015610bba57600080fd5b506104a9614078565b348015610bcf57600080fd5b506103b360043561407e565b348015610be757600080fd5b5061063c6140e6565b348015610bfc57600080fd5b5061063c614209565b348015610c1157600080fd5b506103ca60043561432c565b6103b36004356143ce565b6103b36004356145ce565b348015610c3f57600080fd5b506103b36147ce565b348015610c5457600080fd5b506104a9614849565b348015610c6957600080fd5b5061063c61484f565b348015610c7e57600080fd5b506103b3600435614972565b348015610c9657600080fd5b5061038a600160a060020a03600435811690602435166149c4565b348015610cbd57600080fd5b5060408051602060046024803582810135601f81018590048502860185019096528585526103b39583359536956044949193909101919081908401838280828437509497506149f89650505050505050565b348015610d1b57600080fd5b506103b3600160a060020a0360043516614b7a565b348015610d3c57600080fd5b5061063c614bf8565b348015610d5157600080fd5b5061063c614d1b565b6103b3600435614e3e565b348015610d7157600080fd5b506103ca61502d565b348015610d8657600080fd5b5061063c615064565b6103b3600435615187565b348015610da657600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526104a99436949293602493928401919081908401838280828437509497506153769650505050505050565b6103b3600435615499565b6000600160e060020a031982167f01ffc9a7000000000000000000000000000000000000000000000000000000001480610e6157507f80ac58cd00000000000000000000000000000000000000000000000000000000600160e060020a03198316145b80610e9557507f5b5e139f00000000000000000000000000000000000000000000000000000000600160e060020a03198316145b80610ec957507f780e9d6300000000000000000000000000000000000000000000000000000000600160e060020a03198316145b92915050565b600954600160a060020a03163314610ee657600080fd5b600a5460a060020a900460ff16151560011415610f0257600080fd5b600a805474ff0000000000000000000000000000000000000000191660a060020a1790556040517f1f8d764c113e8497eb5ee4b0d9d14459ce5adf3f688f37005fb6a0d610ca764190600090a1565b60408051808201909152600b81527f457468657220466169727900000000000000000000000000000000000000000060208201525b90565b600954600160a060020a03163314610fa057600080fd5b600160a060020a038116600081815260076020908152604091829020805460ff19166001179055815192835290517f3c362eaf8833b702c04434fdb4dc0c32e6d193886ebf80c1e7ac5f168e5f61019281900390910190a150565b6000908152600e6020526040902054600160a060020a031690565b60015481565b600a5460009060a060020a900460ff1615156001141561103b57600080fd5b600954600160a060020a031633148061106957503360009081526007602052604090205460ff161515600114155b151561107457600080fd5b6009548290600160a060020a03163314806110a3575060008181526008602052604090205460ff161515600114155b15156110ae57600080fd5b826110b881612cd1565b600160a060020a031633146110cc57600080fd5b6110d584612cd1565b9250600160a060020a0385811690841614156110f057600080fd5b6110f985615699565b15156001141561110857600080fd5b6000848152600e60205260408082208054600160a060020a031916600160a060020a0389811691821790925591518793918716917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a45050505050565b6000806000806000611176615970565b600480548890811061118457fe5b600091825260209182902060408051601093909302909101805460026001821615610100026000190190911604601f810185900490940283016102209081019092526102008301848152929390928492909184918401828280156112295780601f106111fe57610100808354040283529160200191611229565b820191906000526020600020905b81548152906001019060200180831161120c57829003601f168201915b5050509183525050600182810154600160a060020a0316602080840191909152600280850180546040805161010096831615969096026000190190911692909204601f810184900484028501840183528085529190940193918301828280156112d35780601f106112a8576101008083540402835291602001916112d3565b820191906000526020600020905b8154815290600101906020018083116112b657829003601f168201915b5050505050815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201548152602001600e8201548152602001600f8201548152505090508060a001518160c001518260e00151836101000151846101200151955095509550955095505091939590929450565b600a546000908190819060a060020a900460ff161515600114156113b257600080fd5b600954600160a060020a03163314806113e057503360009081526007602052604090205460ff161515600114155b15156113eb57600080fd5b6009548490600160a060020a031633148061141a575060008181526008602052604090205460ff161515600114155b151561142557600080fd5b8461142f81612cd1565b600160a060020a0316331461144357600080fd5b600480548790811061145157fe5b90600052602060002090601002019450611479600186600a01546156bb90919063ffffffff16565b60035402341461148857600080fd5b600a85015461149e90600163ffffffff6156bb16565b600a8601556114b434600263ffffffff6156c816565b93506114c734600263ffffffff6156c816565b9250346114da858563ffffffff6156bb16565b146114e457600080fd5b600954604051600160a060020a039091169085156108fc029086906000818181858888f1935050505015801561151e573d6000803e3d6000fd5b506001850154604051600160a060020a039091169084156108fc029085906000818181858888f1935050505015801561155b573d6000803e3d6000fd5b5060405186907fb66c32e78f87dcd890038b1682f6b38e413dafbee346838a9d7f11d2f17c18fd90600090a2505050505050565b600a546000908190819060a060020a900460ff161515600114156115b257600080fd5b600954600160a060020a03163314806115e057503360009081526007602052604090205460ff161515600114155b15156115eb57600080fd5b6009548490600160a060020a031633148061161a575060008181526008602052604090205460ff161515600114155b151561162557600080fd5b8461162f81612cd1565b600160a060020a0316331461164357600080fd5b600254341461165157600080fd5b600480548790811061165f57fe5b90600052602060002090601002019450611687600186600401546156bb90919063ffffffff16565b600486015561169d34600263ffffffff6156c816565b93506116b034600263ffffffff6156c816565b9250346116c3858563ffffffff6156bb16565b146116cd57600080fd5b600954604051600160a060020a039091169085156108fc029086906000818181858888f19350505050158015611707573d6000803e3d6000fd5b506001850154604051600160a060020a039091169084156108fc029085906000818181858888f19350505050158015611744573d6000803e3d6000fd5b5060405186907ff4d2e98be7eb5e03801b528e9a8da88caeaa79206f7ebd4ac478149d330cc07790600090a2505050505050565b60086020526000908152604090205460ff1681565b600954600160a060020a031633146117a457600080fd5b80516117b79060009060208401906159f7565b507f7add9568e7be20171f511d2bb7b953242b0b98a818c4f362dd1e71c3d7f9ce54816040518080602001828103825283818151815260200191508051906020019080838360005b838110156118175781810151838201526020016117ff565b50505050905090810190601f1680156118445780820380516001836020036101000a031916815260200191505b509250505060405180910390a150565b600a54600160a060020a031681565b600a546000908190819060a060020a900460ff1615156001141561188657600080fd5b600954600160a060020a03163314806118b457503360009081526007602052604090205460ff161515600114155b15156118bf57600080fd5b6009548490600160a060020a03163314806118ee575060008181526008602052604090205460ff161515600114155b15156118f957600080fd5b8461190381612cd1565b600160a060020a031633600160a060020a0316148061193b575061192681610ffb565b600160a060020a031633600160a060020a0316145b80611959575061195361194d82612cd1565b336149c4565b15156001145b8061196e5750600a54600160a060020a031633145b151561197957600080fd5b61198287615699565b15156001141561199157600080fd5b61199a86612cd1565b600160a060020a038981169116146119b157600080fd5b6119ba86612cd1565b600160a060020a03888116911614156119d257600080fd5b6000868152600e60205260408082208054600160a060020a031916905551879190600160a060020a038b16907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925908390a46000868152600d60205260409020549450611a4e6001611a428a613019565b9063ffffffff6156dd16565b600160a060020a0389166000908152600c6020526040902080549195509085908110611a7657fe5b9060005260206000200154925082600c60008a600160a060020a0316600160a060020a0316815260200190815260200160002086815481101515611ab657fe5b6000918252602080832090910192909255600160a060020a038a168152600c90915260409020805485908110611ae857fe5b60009182526020808320909101829055600160a060020a038a168252600c90526040902080546000190190611b1d9082615a75565b506000838152600d60209081526040808320889055888352600b82528083208054600160a060020a031916600160a060020a038c169081179091558352600c825282208054600181810180845592855292909320909201889055611b8191906156dd565b6000878152600d60205260408082209290925590518791600160a060020a03808b1692908c16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a45050505050505050565b60035481565b606060006060600080856040518082805190602001908083835b60208310611c145780518252601f199092019160209182019101611bf5565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209350611c4c86615376565b604051908082528060200260200182016040528015611c75578160200160208202803883390190505b50925060009150600090505b600454811015611d48576004805485919083908110611c9c57fe5b90600052602060002090601002016000016040518082805460018160011615610100020316600290048015611d085780601f10611ce6576101008083540402835291820191611d08565b820191906000526020600020905b815481529060010190602001808311611cf4575b50509150506040518091039020600019161415611d4057808383815181101515611d2e57fe5b60209081029091010152600191909101905b600101611c81565b8294505b50505050919050565b6060806000806000600580549050604051908082528060200260200182016040528015611d8c578160200160208202803883390190505b509350600092505b600554831015611e7557611dca600584815481101515611db057fe5b600091825260209091200154600160a060020a0316613019565b91508290505b6000811115611e505781611e0460058660018503815181101515611df057fe5b6020908102909101015181548110611db057fe5b1015611e42578360018203815181101515611e1b57fe5b906020019060200201518482815181101515611e3357fe5b60209081029091010152611e47565b611e50565b60001901611dd0565b828482815181101515611e5f57fe5b6020908102909101015260019290920191611d94565b50919392505050565b600a5460a060020a900460ff16151560011415611e9a57600080fd5b611ea5838383611863565b611eae826156ef565b151560011415611f70576040805160e160020a630a85bd01028152336004820152600160a060020a038581166024830152604482018490526080606483015260006084830181905292519085169263150b7a029260c480820193602093909283900390910190829087803b158015611f2557600080fd5b505af1158015611f39573d6000803e3d6000fd5b505050506040513d6020811015611f4f57600080fd5b5051600160e060020a03191660e160020a630a85bd010214611f7057600080fd5b505050565b6060806000806000600480549050604051908082528060200260200182016040528015611fac578160200160208202803883390190505b509350600092505b600454831015611e75576004805484908110611fcc57fe5b90600052602060002090601002016003015491508290505b600081111561207357816004856001840381518110151561200157fe5b602090810290910101518154811061201557fe5b906000526020600020906010020160030154101561206557836001820381518110151561203e57fe5b90602001906020020151848281518110151561205657fe5b6020908102909101015261206a565b612073565b60001901611fe4565b82848281518110151561208257fe5b6020908102909101015260019290920191611fb4565b60608060008060006004805490506040519080825280602002602001820160405280156120cf578160200160208202803883390190505b509350600092505b600454831015611e755760048054849081106120ef57fe5b90600052602060002090601002016006015491508290505b600081111561219657816004856001840381518110151561212457fe5b602090810290910101518154811061213857fe5b906000526020600020906010020160060154101561218857836001820381518110151561216157fe5b90602001906020020151848281518110151561217957fe5b6020908102909101015261218d565b612196565b60001901612107565b8284828151811015156121a557fe5b60209081029091010152600192909201916120d7565b600a546000908190819060a060020a900460ff161515600114156121de57600080fd5b600954600160a060020a031633148061220c57503360009081526007602052604090205460ff161515600114155b151561221757600080fd5b6009548490600160a060020a0316331480612246575060008181526008602052604090205460ff161515600114155b151561225157600080fd5b8461225b81612cd1565b600160a060020a0316331461226f57600080fd5b600480548790811061227d57fe5b906000526020600020906010020194506122a5600186600f01546156bb90919063ffffffff16565b6003540234146122b457600080fd5b600f8501546122ca90600163ffffffff6156bb16565b600f8601556122e034600263ffffffff6156c816565b93506122f334600263ffffffff6156c816565b925034612306858563ffffffff6156bb16565b1461231057600080fd5b600954604051600160a060020a039091169085156108fc029086906000818181858888f1935050505015801561234a573d6000803e3d6000fd5b506001850154604051600160a060020a039091169084156108fc029085906000818181858888f19350505050158015612387573d6000803e3d6000fd5b5060405186907f28ee3b4dbd85723acb16aff9d7ddaa9455c445a2d47e58e5a30d1372555056e990600090a2505050505050565b600a5460a060020a900460ff1681565b6060806000806000600480549050604051908082528060200260200182016040528015612402578160200160208202803883390190505b509350600092505b600454831015611e7557600480548490811061242257fe5b90600052602060002090601002016008015491508290505b60008111156124c957816004856001840381518110151561245757fe5b602090810290910101518154811061246b57fe5b90600052602060002090601002016008015410156124bb57836001820381518110151561249457fe5b9060200190602002015184828151811015156124ac57fe5b602090810290910101526124c0565b6124c9565b6000190161243a565b8284828151811015156124d857fe5b602090810290910101526001929092019161240a565b600a54600090819060a060020a900460ff1615156001141561250f57600080fd5b600954600160a060020a031633148061253d57503360009081526007602052604090205460ff161515600114155b151561254857600080fd5b6125518a615699565b15156001141561256057600080fd5b600154341461256e57600080fd5b879150612581828863ffffffff6156bb16565b9150612593828763ffffffff6156bb16565b91506125a5828663ffffffff6156bb16565b91506125b7828563ffffffff6156bb16565b91506125c9828463ffffffff6156bb16565b9150600582146125d857600080fd5b60408051610200810182528c8152600160a060020a038c166020808301919091529181018b9052426060820152600060808201819052600160a0830181905260c0830181905260e083018190526101008301819052610120830181905261014083018c905261016083018b905261018083018a90526101a083018990526101c083018890526101e0830187905260048054808301808355919093528351805161278f9693959294929360109093027f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b01926126b79284929101906159f7565b50602082810151600183018054600160a060020a031916600160a060020a03909216919091179055604083015180516126f692600285019201906159f7565b50606082015160038201556080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820155610160820151600b820155610180820151600c8201556101a0820151600d8201556101c0820151600e8201556101e090910151600f909101559063ffffffff6156dd16565b6000818152600b602090815260408083208054600160a060020a031916339081179091558352600c8252822080546001818101808455928552929093209092018390559192506127e49163ffffffff6156dd16565b6000828152600d602090815260408083209390935533825260069052205460ff161515600114612869576005805460018181019092557f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0018054600160a060020a031916339081179091556000908152600660205260409020805460ff191690911790555b3461288b600261287f838263ffffffff6156c816565b9063ffffffff6156fd16565b1461289557600080fd5b600954600160a060020a03166108fc6128b534600263ffffffff6156c816565b6040518115909202916000818181858888f193505050501580156128dd573d6000803e3d6000fd5b50600160a060020a038a166108fc6128fc34600263ffffffff6156c816565b6040518115909202916000818181858888f19350505050158015612924573d6000803e3d6000fd5b5060408051828152905133917f3bb5ebaa518c4d975caed7769b9ddf3c2dc502f03628daaf6ed93c46376a9d57919081900360200190a2604051819033906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050505050505050505050565b600a546000908190819060a060020a900460ff161515600114156129ba57600080fd5b600954600160a060020a03163314806129e857503360009081526007602052604090205460ff161515600114155b15156129f357600080fd5b6009548490600160a060020a0316331480612a22575060008181526008602052604090205460ff161515600114155b1515612a2d57600080fd5b84612a3781612cd1565b600160a060020a03163314612a4b57600080fd5b6004805487908110612a5957fe5b9060005260206000209060100201945084600601546003540234141515612a7f57600080fd5b6006850154612a9590600163ffffffff6156bb16565b6006860155612aab34600263ffffffff6156c816565b9350612abe34600263ffffffff6156c816565b925034612ad1858563ffffffff6156bb16565b14612adb57600080fd5b600954604051600160a060020a039091169085156108fc029086906000818181858888f19350505050158015612b15573d6000803e3d6000fd5b506001850154604051600160a060020a039091169084156108fc029085906000818181858888f19350505050158015612b52573d6000803e3d6000fd5b5060405186907f266ebb0c12a6c8922fd1f55e5d30ce25e605f0c9ce1846d022b5989f8ac3e99f90600090a2505050505050565b6060806000806000600480549050604051908082528060200260200182016040528015612bbd578160200160208202803883390190505b509350600092505b600454831015611e75576004805484908110612bdd57fe5b9060005260206000209060100201600a015491508290505b6000811115612c84578160048560018403815181101515612c1257fe5b6020908102909101015181548110612c2657fe5b9060005260206000209060100201600a01541015612c76578360018203815181101515612c4f57fe5b906020019060200201518482815181101515612c6757fe5b60209081029091010152612c7b565b612c84565b60001901612bf5565b828482815181101515612c9357fe5b6020908102909101015260019290920191612bc5565b6005805482908110612cb757fe5b600091825260209091200154600160a060020a0316905081565b6000818152600b6020526040812054600160a060020a0316612cf281615699565b151560011415610ec957600080fd5b600b60205260009081526040902054600160a060020a031681565b60076020526000908152604090205460ff1681565b600954600160a060020a031681565b600080600080600080612d51615970565b6004805489908110612d5f57fe5b600091825260209182902060408051601093909302909101805460026001821615610100026000190190911604601f81018590049094028301610220908101909252610200830184815292939092849290918491840182828015612e045780601f10612dd957610100808354040283529160200191612e04565b820191906000526020600020905b815481529060010190602001808311612de757829003601f168201915b5050509183525050600182810154600160a060020a0316602080840191909152600280850180546040805161010096831615969096026000190190911692909204601f81018490048402850184018352808552919094019391830182828015612eae5780601f10612e8357610100808354040283529160200191612eae565b820191906000526020600020905b815481529060010190602001808311612e9157829003601f168201915b5050505050815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201548152602001600e8201548152602001600f820154815250509050806101400151816101600151826101800151836101a00151846101c00151856101e001519650965096509650965096505091939550919395565b600954600160a060020a03163314612f8c57600080fd5b60018190556040805182815290517fc7f819d723891694b311ee508b284bd6f009f851f32f6d79ba4da222b5a5129c9181900360200190a150565b600954600160a060020a03163314612fde57600080fd5b60028190556040805182815290517fa0f6ecf36b6ac796a4a605ce1f0e4c3e9c1cdaab03dbd01719b1e56db0c58c4e9181900360200190a150565b600061302482615699565b15156001141561303357600080fd5b50600160a060020a03166000908152600c602052604090205490565b600954600160a060020a0316331461306657600080fd5b600081815260086020908152604091829020805460ff19169055815183815291517f4fdf7fd7aa97a5cfdc4c58ce5865199ff261625e3e683ce3cf14e78cc18b05089281900390910190a150565b600954600160a060020a031633146130cb57600080fd5b600160a060020a038116600081815260076020908152604091829020805460ff19169055815192835290517fde46e08696375206ec1a7e2b6abb03889d1bb91d94e2e18326878ada05c49d429281900390910190a150565b606080600080600060048054905060405190808252806020026020018201604052801561315a578160200160208202803883390190505b509350600092505b600454831015611e7557600480548490811061317a57fe5b9060005260206000209060100201600c015491508290505b60008111156132215781600485600184038151811015156131af57fe5b60209081029091010151815481106131c357fe5b9060005260206000209060100201600c015410156132135783600182038151811015156131ec57fe5b90602001906020020151848281518110151561320457fe5b60209081029091010152613218565b613221565b60001901613192565b82848281518110151561323057fe5b6020908102909101015260019290920191613162565b600a546000908190819060a060020a900460ff1615156001141561326957600080fd5b600954600160a060020a031633148061329757503360009081526007602052604090205460ff161515600114155b15156132a257600080fd5b6009548490600160a060020a03163314806132d1575060008181526008602052604090205460ff161515600114155b15156132dc57600080fd5b846132e681612cd1565b600160a060020a031633146132fa57600080fd5b600480548790811061330857fe5b906000526020600020906010020194508460080154600354023414151561332e57600080fd5b600885015461334490600163ffffffff6156bb16565b600886015561335a34600263ffffffff6156c816565b935061336d34600263ffffffff6156c816565b925034613380858563ffffffff6156bb16565b1461338a57600080fd5b600954604051600160a060020a039091169085156108fc029086906000818181858888f193505050501580156133c4573d6000803e3d6000fd5b506001850154604051600160a060020a039091169084156108fc029085906000818181858888f19350505050158015613401573d6000803e3d6000fd5b5060405186907fe2ab17eec57971877a65df5d2519c9f9337ad996fb19c1eed2bdaa06430fbd0390600090a2505050505050565b60408051808201909152600581527f4641495259000000000000000000000000000000000000000000000000000000602082015290565b60608060008060006004805490506040519080825280602002602001820160405280156134a3578160200160208202803883390190505b509350600092505b600454831015611e755760048054849081106134c357fe5b9060005260206000209060100201600b015491508290505b600081111561356a5781600485600184038151811015156134f857fe5b602090810290910101518154811061350c57fe5b9060005260206000209060100201600b0154101561355c57836001820381518110151561353557fe5b90602001906020020151848281518110151561354d57fe5b60209081029091010152613561565b61356a565b600019016134db565b82848281518110151561357957fe5b60209081029091010152600192909201916134ab565b600a5460a060020a900460ff161515600114156135ab57600080fd5b600954600160a060020a03163314806135d957503360009081526007602052604090205460ff161515600114155b15156135e457600080fd5b600160a060020a0382163314156135fa57600080fd5b61360382615699565b15156001141561361257600080fd5b6001811515141561365057336000908152600f60209081526040808320600160a060020a03861684529091529020805460ff1916600117905561367c565b336000908152600f60209081526040808320600160a060020a03861684529091529020805460ff191690555b6040805182151581529051600160a060020a0384169133917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319181900360200190a35050565b60408051808201909152600b81527f4574686572204661697279000000000000000000000000000000000000000000602082015281565b600954600160a060020a0316331461371057600080fd5b600a8054600160a060020a038316600160a060020a0319909116811790915560408051918252517fcdcfc26641bf2eab45b914c10142d75e9a87fef645948316289d19b372af0f6c9181900360200190a150565b600c6020528160005260406000208181548110151561377f57fe5b90600052602060002001600091509150505481565b6060600060606000806137a5615970565b60048054889081106137b357fe5b600091825260209182902060408051601093909302909101805460026001821615610100026000190190911604601f810185900490940283016102209081019092526102008301848152929390928492909184918401828280156138585780601f1061382d57610100808354040283529160200191613858565b820191906000526020600020905b81548152906001019060200180831161383b57829003601f168201915b5050509183525050600182810154600160a060020a0316602080840191909152600280850180546040805161010096831615969096026000190190911692909204601f810184900484028501840183528085529190940193918301828280156139025780601f106138d757610100808354040283529160200191613902565b820191906000526020600020905b8154815290600101906020018083116138e557829003601f168201915b5050505050815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201548152602001600e8201548152602001600f82015481525050905080600001518160200151826040015183606001518460800151849450829250955095509550955095505091939590929450565b600a546000908190819060a060020a900460ff161515600114156139e557600080fd5b600954600160a060020a0316331480613a1357503360009081526007602052604090205460ff161515600114155b1515613a1e57600080fd5b6009548490600160a060020a0316331480613a4d575060008181526008602052604090205460ff161515600114155b1515613a5857600080fd5b84613a6281612cd1565b600160a060020a03163314613a7657600080fd5b6004805487908110613a8457fe5b9060005260206000209060100201945084600701546003540234141515613aaa57600080fd5b6007850154613ac090600163ffffffff6156bb16565b6007860155613ad634600263ffffffff6156c816565b9350613ae934600263ffffffff6156c816565b925034613afc858563ffffffff6156bb16565b14613b0657600080fd5b600954604051600160a060020a039091169085156108fc029086906000818181858888f19350505050158015613b40573d6000803e3d6000fd5b506001850154604051600160a060020a039091169084156108fc029085906000818181858888f19350505050158015613b7d573d6000803e3d6000fd5b5060405186907fa69b4ad0ab3d1c368d9690baf1f0dd4d3fca07aebf83c1553ecefce92d309c6790600090a2505050505050565b6000805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015613c375780601f10613c0c57610100808354040283529160200191613c37565b820191906000526020600020905b815481529060010190602001808311613c1a57829003601f168201915b505050505081565b60055490565b600a5460a060020a900460ff16151560011415613c6157600080fd5b613c6c858585611863565b613c75846156ef565b151560011415613d4e5760405160e160020a630a85bd010281523360048201818152600160a060020a03888116602485015260448401879052608060648501908152608485018690529088169363150b7a0293928a92899289928992909160a40184848082843782019150509650505050505050602060405180830381600087803b158015613d0357600080fd5b505af1158015613d17573d6000803e3d6000fd5b505050506040513d6020811015613d2d57600080fd5b5051600160e060020a03191660e160020a630a85bd010214613d4e57600080fd5b5050505050565b600a546000908190819060a060020a900460ff16151560011415613d7857600080fd5b600954600160a060020a0316331480613da657503360009081526007602052604090205460ff161515600114155b1515613db157600080fd5b6009548490600160a060020a0316331480613de0575060008181526008602052604090205460ff161515600114155b1515613deb57600080fd5b84613df581612cd1565b600160a060020a03163314613e0957600080fd5b6004805487908110613e1757fe5b90600052602060002090601002019450613e3f600186600d01546156bb90919063ffffffff16565b600354023414613e4e57600080fd5b600d850154613e6490600163ffffffff6156bb16565b600d860155613e7a34600263ffffffff6156c816565b9350613e8d34600263ffffffff6156c816565b925034613ea0858563ffffffff6156bb16565b14613eaa57600080fd5b600954604051600160a060020a039091169085156108fc029086906000818181858888f19350505050158015613ee4573d6000803e3d6000fd5b506001850154604051600160a060020a039091169084156108fc029085906000818181858888f19350505050158015613f21573d6000803e3d6000fd5b5060405186907f0ddc102415a9432e24d58997c8d6e49ed008254a4740bc68f91af5f5bb61b7e990600090a2505050505050565b6060806000806000600480549050604051908082528060200260200182016040528015613f8c578160200160208202803883390190505b509350600092505b600454831015611e75576004805484908110613fac57fe5b90600052602060002090601002016005015491508290505b6000811115614053578160048560018403815181101515613fe157fe5b6020908102909101015181548110613ff557fe5b906000526020600020906010020160050154101561404557836001820381518110151561401e57fe5b90602001906020020151848281518110151561403657fe5b6020908102909101015261404a565b614053565b60001901613fc4565b82848281518110151561406257fe5b6020908102909101015260019290920191613f94565b60045490565b600954600160a060020a0316331461409557600080fd5b600081815260086020908152604091829020805460ff19166001179055815183815291517f22601a1d2f47cbea52a8368355409c1292e7d987a53b53dc592dc8865d59b74a9281900390910190a150565b606080600080600060048054905060405190808252806020026020018201604052801561411d578160200160208202803883390190505b509350600092505b600454831015611e7557600480548490811061413d57fe5b90600052602060002090601002016004015491508290505b60008111156141e457816004856001840381518110151561417257fe5b602090810290910101518154811061418657fe5b90600052602060002090601002016004015410156141d65783600182038151811015156141af57fe5b9060200190602002015184828151811015156141c757fe5b602090810290910101526141db565b6141e4565b60001901614155565b8284828151811015156141f357fe5b6020908102909101015260019290920191614125565b6060806000806000600480549050604051908082528060200260200182016040528015614240578160200160208202803883390190505b509350600092505b600454831015611e7557600480548490811061426057fe5b9060005260206000209060100201600f015491508290505b600081111561430757816004856001840381518110151561429557fe5b60209081029091010151815481106142a957fe5b9060005260206000209060100201600f015410156142f95783600182038151811015156142d257fe5b9060200190602002015184828151811015156142ea57fe5b602090810290910101526142fe565b614307565b60001901614278565b82848281518110151561431657fe5b6020908102909101015260019290920191614248565b6000805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152606093610ec993919290918301828280156143bb5780601f10614390576101008083540402835291602001916143bb565b820191906000526020600020905b81548152906001019060200180831161439e57829003601f168201915b50505050506143c984615726565b61582c565b600a546000908190819060a060020a900460ff161515600114156143f157600080fd5b600954600160a060020a031633148061441f57503360009081526007602052604090205460ff161515600114155b151561442a57600080fd5b6009548490600160a060020a0316331480614459575060008181526008602052604090205460ff161515600114155b151561446457600080fd5b8461446e81612cd1565b600160a060020a0316331461448257600080fd5b600480548790811061449057fe5b906000526020600020906010020194506144b8600186600e01546156bb90919063ffffffff16565b6003540234146144c757600080fd5b600e8501546144dd90600163ffffffff6156bb16565b600e8601556144f334600263ffffffff6156c816565b935061450634600263ffffffff6156c816565b925034614519858563ffffffff6156bb16565b1461452357600080fd5b600954604051600160a060020a039091169085156108fc029086906000818181858888f1935050505015801561455d573d6000803e3d6000fd5b506001850154604051600160a060020a039091169084156108fc029085906000818181858888f1935050505015801561459a573d6000803e3d6000fd5b5060405186907fa81139c94b432da5654d3ef267dda30c8b9986ce9be98b48ae657e9e131315a990600090a2505050505050565b600a546000908190819060a060020a900460ff161515600114156145f157600080fd5b600954600160a060020a031633148061461f57503360009081526007602052604090205460ff161515600114155b151561462a57600080fd5b6009548490600160a060020a0316331480614659575060008181526008602052604090205460ff161515600114155b151561466457600080fd5b8461466e81612cd1565b600160a060020a0316331461468257600080fd5b600480548790811061469057fe5b906000526020600020906010020194506146b8600186600c01546156bb90919063ffffffff16565b6003540234146146c757600080fd5b600c8501546146dd90600163ffffffff6156bb16565b600c8601556146f334600263ffffffff6156c816565b935061470634600263ffffffff6156c816565b925034614719858563ffffffff6156bb16565b1461472357600080fd5b600954604051600160a060020a039091169085156108fc029086906000818181858888f1935050505015801561475d573d6000803e3d6000fd5b506001850154604051600160a060020a039091169084156108fc029085906000818181858888f1935050505015801561479a573d6000803e3d6000fd5b5060405186907fbb4a37ace80eb674c8d15b44877207404c8512694694a5bd85c7e3c25ce78acc90600090a2505050505050565b600954600160a060020a031633146147e557600080fd5b600a5460a060020a900460ff16151560011461480057600080fd5b600a805474ff0000000000000000000000000000000000000000191690556040517f0945a79720f403a98318a4f8fef6d479fd6770066e494ef9464ed372ad51d34290600090a1565b60025481565b6060806000806000600480549050604051908082528060200260200182016040528015614886578160200160208202803883390190505b509350600092505b600454831015611e755760048054849081106148a657fe5b9060005260206000209060100201600e015491508290505b600081111561494d5781600485600184038151811015156148db57fe5b60209081029091010151815481106148ef57fe5b9060005260206000209060100201600e0154101561493f57836001820381518110151561491857fe5b90602001906020020151848281518110151561493057fe5b60209081029091010152614944565b61494d565b600019016148be565b82848281518110151561495c57fe5b602090810290910101526001929092019161488e565b600954600160a060020a0316331461498957600080fd5b60038190556040805182815290517f5a1093c2d1e466101b19c30a33e1f82ca0442805aab8a0ce80e34689ea32a4da9181900360200190a150565b600160a060020a038083166000908152600f602090815260408083209385168352929052205460ff16151560011492915050565b600a5460a060020a900460ff16151560011415614a1457600080fd5b600954600160a060020a0316331480614a4257503360009081526007602052604090205460ff161515600114155b1515614a4d57600080fd5b6009548290600160a060020a0316331480614a7c575060008181526008602052604090205460ff161515600114155b1515614a8757600080fd5b82614a9181612cd1565b600160a060020a03163314614aa557600080fd5b82600485815481101515614ab557fe5b90600052602060002090601002016002019080519060200190614ad99291906159f7565b50837f24b7066d3a2edc32d25fff82a6169d835529a1adac01bc8b32f9bbece43f8b79846040518080602001828103825283818151815260200191508051906020019080838360005b83811015614b3a578181015183820152602001614b22565b50505050905090810190601f168015614b675780820380516001836020036101000a031916815260200191505b509250505060405180910390a250505050565b600954600090600160a060020a03163314614b9457600080fd5b5060098054600160a060020a03838116600160a060020a0319831681179093556040805191909216808252602082019390935281517f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c929181900390910190a15050565b6060806000806000600480549050604051908082528060200260200182016040528015614c2f578160200160208202803883390190505b509350600092505b600454831015611e75576004805484908110614c4f57fe5b9060005260206000209060100201600d015491508290505b6000811115614cf6578160048560018403815181101515614c8457fe5b6020908102909101015181548110614c9857fe5b9060005260206000209060100201600d01541015614ce8578360018203815181101515614cc157fe5b906020019060200201518482815181101515614cd957fe5b60209081029091010152614ced565b614cf6565b60001901614c67565b828482815181101515614d0557fe5b6020908102909101015260019290920191614c37565b6060806000806000600480549050604051908082528060200260200182016040528015614d52578160200160208202803883390190505b509350600092505b600454831015611e75576004805484908110614d7257fe5b90600052602060002090601002016009015491508290505b6000811115614e19578160048560018403815181101515614da757fe5b6020908102909101015181548110614dbb57fe5b9060005260206000209060100201600901541015614e0b578360018203815181101515614de457fe5b906020019060200201518482815181101515614dfc57fe5b60209081029091010152614e10565b614e19565b60001901614d8a565b828482815181101515614e2857fe5b6020908102909101015260019290920191614d5a565b600a546000908190819060a060020a900460ff16151560011415614e6157600080fd5b600954600160a060020a0316331480614e8f57503360009081526007602052604090205460ff161515600114155b1515614e9a57600080fd5b6009548490600160a060020a0316331480614ec9575060008181526008602052604090205460ff161515600114155b1515614ed457600080fd5b84614ede81612cd1565b600160a060020a03163314614ef257600080fd5b6004805487908110614f0057fe5b9060005260206000209060100201945084600901546003540234141515614f2657600080fd5b6009850154614f3c90600163ffffffff6156bb16565b6009860155614f5234600263ffffffff6156c816565b9350614f6534600263ffffffff6156c816565b925034614f78858563ffffffff6156bb16565b14614f8257600080fd5b600954604051600160a060020a039091169085156108fc029086906000818181858888f19350505050158015614fbc573d6000803e3d6000fd5b506001850154604051600160a060020a039091169084156108fc029085906000818181858888f19350505050158015614ff9573d6000803e3d6000fd5b5060405186907ff136d08c266783dd2b521458dc72ee3890fefc8b6e89bb26191ecfc85ad59da990600090a2505050505050565b60408051808201909152600581527f4641495259000000000000000000000000000000000000000000000000000000602082015281565b606080600080600060048054905060405190808252806020026020018201604052801561509b578160200160208202803883390190505b509350600092505b600454831015611e755760048054849081106150bb57fe5b90600052602060002090601002016007015491508290505b60008111156151625781600485600184038151811015156150f057fe5b602090810290910101518154811061510457fe5b906000526020600020906010020160070154101561515457836001820381518110151561512d57fe5b90602001906020020151848281518110151561514557fe5b60209081029091010152615159565b615162565b600019016150d3565b82848281518110151561517157fe5b60209081029091010152600192909201916150a3565b600a546000908190819060a060020a900460ff161515600114156151aa57600080fd5b600954600160a060020a03163314806151d857503360009081526007602052604090205460ff161515600114155b15156151e357600080fd5b6009548490600160a060020a0316331480615212575060008181526008602052604090205460ff161515600114155b151561521d57600080fd5b8461522781612cd1565b600160a060020a0316331461523b57600080fd5b600480548790811061524957fe5b906000526020600020906010020194508460050154600354023414151561526f57600080fd5b600585015461528590600163ffffffff6156bb16565b600586015561529b34600263ffffffff6156c816565b93506152ae34600263ffffffff6156c816565b9250346152c1858563ffffffff6156bb16565b146152cb57600080fd5b600954604051600160a060020a039091169085156108fc029086906000818181858888f19350505050158015615305573d6000803e3d6000fd5b506001850154604051600160a060020a039091169084156108fc029085906000818181858888f19350505050158015615342573d6000803e3d6000fd5b5060405186907f6894cff5292dafd789179621895e5f786a13c66f528543929bd14c93cb07b86c90600090a2505050505050565b600080600080846040518082805190602001908083835b602083106153ac5780518252601f19909201916020918201910161538d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020925060009150600090505b6004548110156154915760048054849190839081106153ff57fe5b9060005260206000209060100201600001604051808280546001816001161561010002031660029004801561546b5780601f1061544957610100808354040283529182019161546b565b820191906000526020600020905b815481529060010190602001808311615457575b50509150506040518091039020600019161415615489576001820191505b6001016153e4565b509392505050565b600a546000908190819060a060020a900460ff161515600114156154bc57600080fd5b600954600160a060020a03163314806154ea57503360009081526007602052604090205460ff161515600114155b15156154f557600080fd5b6009548490600160a060020a0316331480615524575060008181526008602052604090205460ff161515600114155b151561552f57600080fd5b8461553981612cd1565b600160a060020a0316331461554d57600080fd5b600480548790811061555b57fe5b90600052602060002090601002019450615583600186600b01546156bb90919063ffffffff16565b60035402341461559257600080fd5b600b8501546155a890600163ffffffff6156bb16565b600b8601556155be34600263ffffffff6156c816565b93506155d134600263ffffffff6156c816565b9250346155e4858563ffffffff6156bb16565b146155ee57600080fd5b600954604051600160a060020a039091169085156108fc029086906000818181858888f19350505050158015615628573d6000803e3d6000fd5b506001850154604051600160a060020a039091169084156108fc029085906000818181858888f19350505050158015615665573d6000803e3d6000fd5b5060405186907f6040f20967d5c7935690014787ff47da23a95665b19602573f55013ca3341cc890600090a2505050505050565b6000600160a060020a0382161580610ec9575050600160a060020a0316301490565b81810182811015610ec957fe5b600081838115156156d557fe5b049392505050565b6000828211156156e957fe5b50900390565b6000903b63ffffffff161190565b600082151561570e57506000610ec9565b5081810281838281151561571e57fe5b0414610ec957fe5b6060600080828185151561576f5760408051808201909152600181527f300000000000000000000000000000000000000000000000000000000000000060208201529450611d4c565b8593505b831561578b5760019290920191600a84049350615773565b826040519080825280601f01601f1916602001820160405280156157b9578160200160208202803883390190505b5091505060001982015b851561582357600a860660300160f860020a0282828151811015156157e457fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a86049550600019016157c3565b50949350505050565b60608060608060008087945086935083518551016040519080825280601f01601f19166020018201604052801561586d578160200160208202803883390190505b509250600091508190505b84518110156158ec57848181518110151561588f57fe5b90602001015160f860020a900460f860020a0283838151811015156158b057fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060019182019101615878565b5060005b835181101561596457838181518110151561590757fe5b90602001015160f860020a900460f860020a02838381518110151561592857fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600191820191016158f0565b50909695505050505050565b61020060405190810160405280606081526020016000600160a060020a0316815260200160608152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10615a3857805160ff1916838001178555615a65565b82800160010185558215615a65579182015b82811115615a65578251825591602001919060010190615a4a565b50615a71929150615a95565b5090565b815481835581811115611f7057600083815260209020611f709181019083015b610f8691905b80821115615a715760008155600101615a9b5600a165627a7a723058203cee229dbe0a934f04e79b306f1edca4e8f537851e29777f87c83103d931af260029
Deployed Bytecode
0x6080604052600436106103635763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166301ffc9a781146103685780630552f9ff1461039e57806306fdde03146103b557806307583f491461043f578063081812fc146104605780630882e52d14610494578063095ea7b3146104bb5780630cd42cb2146104d25780630fc9c1b414610515578063172afda3146105205780631f3e41501461052b57806321d1f7bf14610543578063222419a91461059c57806323b872dd146105b157806328ca02fe146105ce5780632b38c045146105e35780633df33c341461068c57806342842e0e146106a15780634361b717146106be57806343a4d8cc146106d357806347a00498146106e85780634a2f60a1146106f35780634c48840f146107085780634df919451461071d5780635045280f146107d3578063556b2cbf146107de57806360961874146107f35780636352211e1461080b5780636513ae8e1461082357806366ec277c1461083b5780636904c94d1461085c578063694f058a146108715780636bc68403146108bc5780636e1ffc0d146108d457806370a08231146108ec5780637ddcac661461090d5780637eca6381146109255780638dfe3d31146109465780638fb1b7331461095b57806395d89b41146109665780639a8c27e51461097b578063a22cb46514610990578063a3f4df7e146109b6578063a87fa5c6146109cb578063aa323ea5146109ec578063af87e52d14610a10578063afddcdbc14610b2d578063b5cab1ce14610b38578063b5cc88b614610b4d578063b88d4fde14610b62578063c34d3f1c14610b8e578063c3e1fd5614610b99578063c4e9033014610bae578063c592c47514610bc3578063c68f010614610bdb578063c6d93e1314610bf0578063c87b56dd14610c05578063d0be686a14610c1d578063d46618ae14610c28578063db6003d114610c33578063e1a9810214610c48578063e485354a14610c5d578063e52ed74614610c72578063e985e9c514610c8a578063ec11573e14610cb1578063f2fde38b14610d0f578063f454f1a214610d30578063f511923d14610d45578063f73227d714610d5a578063f76f8d7814610d65578063fa1aa70e14610d7a578063fc8846e514610d8f578063febd42d114610d9a578063ff243e6914610df3575b600080fd5b34801561037457600080fd5b5061038a600160e060020a031960043516610dfe565b604080519115158252519081900360200190f35b3480156103aa57600080fd5b506103b3610ecf565b005b3480156103c157600080fd5b506103ca610f51565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104045781810151838201526020016103ec565b50505050905090810190601f1680156104315780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561044b57600080fd5b506103b3600160a060020a0360043516610f89565b34801561046c57600080fd5b50610478600435610ffb565b60408051600160a060020a039092168252519081900360200190f35b3480156104a057600080fd5b506104a9611016565b60408051918252519081900360200190f35b6103b3600160a060020a036004351660243561101c565b3480156104de57600080fd5b506104ea600435611166565b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b6103b360043561138f565b6103b360043561158f565b34801561053757600080fd5b5061038a600435611778565b34801561054f57600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526103b394369492936024939284019190819084018382808284375094975061178d9650505050505050565b3480156105a857600080fd5b50610478611854565b6103b3600160a060020a0360043581169060243516604435611863565b3480156105da57600080fd5b506104a9611bd5565b3480156105ef57600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261063c943694929360249392840191908190840183828082843750949750611bdb9650505050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610678578181015183820152602001610660565b505050509050019250505060405180910390f35b34801561069857600080fd5b5061063c611d55565b6103b3600160a060020a0360043581169060243516604435611e7e565b3480156106ca57600080fd5b5061063c611f75565b3480156106df57600080fd5b5061063c612098565b6103b36004356121bb565b3480156106ff57600080fd5b5061038a6123bb565b34801561071457600080fd5b5061063c6123cb565b6040805160206004803580820135601f81018490048402850184019095528484526103b394369492936024939284019190819084018382808284375050604080516020601f818a01358b0180359182018390048302840183018552818452989b600160a060020a038b35169b909a90999401975091955091820193509150819084018382808284375094975050843595505050602083013592604081013592506060810135915060808101359060a001356124ee565b6103b3600435612997565b3480156107ea57600080fd5b5061063c612b86565b3480156107ff57600080fd5b50610478600435612ca9565b34801561081757600080fd5b50610478600435612cd1565b34801561082f57600080fd5b50610478600435612d01565b34801561084757600080fd5b5061038a600160a060020a0360043516612d1c565b34801561086857600080fd5b50610478612d31565b34801561087d57600080fd5b50610889600435612d40565b604080519687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b3480156108c857600080fd5b506103b3600435612f75565b3480156108e057600080fd5b506103b3600435612fc7565b3480156108f857600080fd5b506104a9600160a060020a0360043516613019565b34801561091957600080fd5b506103b360043561304f565b34801561093157600080fd5b506103b3600160a060020a03600435166130b4565b34801561095257600080fd5b5061063c613123565b6103b3600435613246565b34801561097257600080fd5b506103ca613435565b34801561098757600080fd5b5061063c61346c565b34801561099c57600080fd5b506103b3600160a060020a0360043516602435151561358f565b3480156109c257600080fd5b506103ca6136c2565b3480156109d757600080fd5b506103b3600160a060020a03600435166136f9565b3480156109f857600080fd5b506104a9600160a060020a0360043516602435613764565b348015610a1c57600080fd5b50610a28600435613794565b604051808060200186600160a060020a0316600160a060020a0316815260200180602001858152602001848152602001838103835288818151815260200191508051906020019080838360005b83811015610a8d578181015183820152602001610a75565b50505050905090810190601f168015610aba5780820380516001836020036101000a031916815260200191505b50838103825286518152865160209182019188019080838360005b83811015610aed578181015183820152602001610ad5565b50505050905090810190601f168015610b1a5780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390f35b6103b36004356139c2565b348015610b4457600080fd5b506103ca613bb1565b348015610b5957600080fd5b506104a9613c3f565b6103b3600160a060020a0360048035821691602480359091169160443591606435908101910135613c45565b6103b3600435613d55565b348015610ba557600080fd5b5061063c613f55565b348015610bba57600080fd5b506104a9614078565b348015610bcf57600080fd5b506103b360043561407e565b348015610be757600080fd5b5061063c6140e6565b348015610bfc57600080fd5b5061063c614209565b348015610c1157600080fd5b506103ca60043561432c565b6103b36004356143ce565b6103b36004356145ce565b348015610c3f57600080fd5b506103b36147ce565b348015610c5457600080fd5b506104a9614849565b348015610c6957600080fd5b5061063c61484f565b348015610c7e57600080fd5b506103b3600435614972565b348015610c9657600080fd5b5061038a600160a060020a03600435811690602435166149c4565b348015610cbd57600080fd5b5060408051602060046024803582810135601f81018590048502860185019096528585526103b39583359536956044949193909101919081908401838280828437509497506149f89650505050505050565b348015610d1b57600080fd5b506103b3600160a060020a0360043516614b7a565b348015610d3c57600080fd5b5061063c614bf8565b348015610d5157600080fd5b5061063c614d1b565b6103b3600435614e3e565b348015610d7157600080fd5b506103ca61502d565b348015610d8657600080fd5b5061063c615064565b6103b3600435615187565b348015610da657600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526104a99436949293602493928401919081908401838280828437509497506153769650505050505050565b6103b3600435615499565b6000600160e060020a031982167f01ffc9a7000000000000000000000000000000000000000000000000000000001480610e6157507f80ac58cd00000000000000000000000000000000000000000000000000000000600160e060020a03198316145b80610e9557507f5b5e139f00000000000000000000000000000000000000000000000000000000600160e060020a03198316145b80610ec957507f780e9d6300000000000000000000000000000000000000000000000000000000600160e060020a03198316145b92915050565b600954600160a060020a03163314610ee657600080fd5b600a5460a060020a900460ff16151560011415610f0257600080fd5b600a805474ff0000000000000000000000000000000000000000191660a060020a1790556040517f1f8d764c113e8497eb5ee4b0d9d14459ce5adf3f688f37005fb6a0d610ca764190600090a1565b60408051808201909152600b81527f457468657220466169727900000000000000000000000000000000000000000060208201525b90565b600954600160a060020a03163314610fa057600080fd5b600160a060020a038116600081815260076020908152604091829020805460ff19166001179055815192835290517f3c362eaf8833b702c04434fdb4dc0c32e6d193886ebf80c1e7ac5f168e5f61019281900390910190a150565b6000908152600e6020526040902054600160a060020a031690565b60015481565b600a5460009060a060020a900460ff1615156001141561103b57600080fd5b600954600160a060020a031633148061106957503360009081526007602052604090205460ff161515600114155b151561107457600080fd5b6009548290600160a060020a03163314806110a3575060008181526008602052604090205460ff161515600114155b15156110ae57600080fd5b826110b881612cd1565b600160a060020a031633146110cc57600080fd5b6110d584612cd1565b9250600160a060020a0385811690841614156110f057600080fd5b6110f985615699565b15156001141561110857600080fd5b6000848152600e60205260408082208054600160a060020a031916600160a060020a0389811691821790925591518793918716917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a45050505050565b6000806000806000611176615970565b600480548890811061118457fe5b600091825260209182902060408051601093909302909101805460026001821615610100026000190190911604601f810185900490940283016102209081019092526102008301848152929390928492909184918401828280156112295780601f106111fe57610100808354040283529160200191611229565b820191906000526020600020905b81548152906001019060200180831161120c57829003601f168201915b5050509183525050600182810154600160a060020a0316602080840191909152600280850180546040805161010096831615969096026000190190911692909204601f810184900484028501840183528085529190940193918301828280156112d35780601f106112a8576101008083540402835291602001916112d3565b820191906000526020600020905b8154815290600101906020018083116112b657829003601f168201915b5050505050815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201548152602001600e8201548152602001600f8201548152505090508060a001518160c001518260e00151836101000151846101200151955095509550955095505091939590929450565b600a546000908190819060a060020a900460ff161515600114156113b257600080fd5b600954600160a060020a03163314806113e057503360009081526007602052604090205460ff161515600114155b15156113eb57600080fd5b6009548490600160a060020a031633148061141a575060008181526008602052604090205460ff161515600114155b151561142557600080fd5b8461142f81612cd1565b600160a060020a0316331461144357600080fd5b600480548790811061145157fe5b90600052602060002090601002019450611479600186600a01546156bb90919063ffffffff16565b60035402341461148857600080fd5b600a85015461149e90600163ffffffff6156bb16565b600a8601556114b434600263ffffffff6156c816565b93506114c734600263ffffffff6156c816565b9250346114da858563ffffffff6156bb16565b146114e457600080fd5b600954604051600160a060020a039091169085156108fc029086906000818181858888f1935050505015801561151e573d6000803e3d6000fd5b506001850154604051600160a060020a039091169084156108fc029085906000818181858888f1935050505015801561155b573d6000803e3d6000fd5b5060405186907fb66c32e78f87dcd890038b1682f6b38e413dafbee346838a9d7f11d2f17c18fd90600090a2505050505050565b600a546000908190819060a060020a900460ff161515600114156115b257600080fd5b600954600160a060020a03163314806115e057503360009081526007602052604090205460ff161515600114155b15156115eb57600080fd5b6009548490600160a060020a031633148061161a575060008181526008602052604090205460ff161515600114155b151561162557600080fd5b8461162f81612cd1565b600160a060020a0316331461164357600080fd5b600254341461165157600080fd5b600480548790811061165f57fe5b90600052602060002090601002019450611687600186600401546156bb90919063ffffffff16565b600486015561169d34600263ffffffff6156c816565b93506116b034600263ffffffff6156c816565b9250346116c3858563ffffffff6156bb16565b146116cd57600080fd5b600954604051600160a060020a039091169085156108fc029086906000818181858888f19350505050158015611707573d6000803e3d6000fd5b506001850154604051600160a060020a039091169084156108fc029085906000818181858888f19350505050158015611744573d6000803e3d6000fd5b5060405186907ff4d2e98be7eb5e03801b528e9a8da88caeaa79206f7ebd4ac478149d330cc07790600090a2505050505050565b60086020526000908152604090205460ff1681565b600954600160a060020a031633146117a457600080fd5b80516117b79060009060208401906159f7565b507f7add9568e7be20171f511d2bb7b953242b0b98a818c4f362dd1e71c3d7f9ce54816040518080602001828103825283818151815260200191508051906020019080838360005b838110156118175781810151838201526020016117ff565b50505050905090810190601f1680156118445780820380516001836020036101000a031916815260200191505b509250505060405180910390a150565b600a54600160a060020a031681565b600a546000908190819060a060020a900460ff1615156001141561188657600080fd5b600954600160a060020a03163314806118b457503360009081526007602052604090205460ff161515600114155b15156118bf57600080fd5b6009548490600160a060020a03163314806118ee575060008181526008602052604090205460ff161515600114155b15156118f957600080fd5b8461190381612cd1565b600160a060020a031633600160a060020a0316148061193b575061192681610ffb565b600160a060020a031633600160a060020a0316145b80611959575061195361194d82612cd1565b336149c4565b15156001145b8061196e5750600a54600160a060020a031633145b151561197957600080fd5b61198287615699565b15156001141561199157600080fd5b61199a86612cd1565b600160a060020a038981169116146119b157600080fd5b6119ba86612cd1565b600160a060020a03888116911614156119d257600080fd5b6000868152600e60205260408082208054600160a060020a031916905551879190600160a060020a038b16907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925908390a46000868152600d60205260409020549450611a4e6001611a428a613019565b9063ffffffff6156dd16565b600160a060020a0389166000908152600c6020526040902080549195509085908110611a7657fe5b9060005260206000200154925082600c60008a600160a060020a0316600160a060020a0316815260200190815260200160002086815481101515611ab657fe5b6000918252602080832090910192909255600160a060020a038a168152600c90915260409020805485908110611ae857fe5b60009182526020808320909101829055600160a060020a038a168252600c90526040902080546000190190611b1d9082615a75565b506000838152600d60209081526040808320889055888352600b82528083208054600160a060020a031916600160a060020a038c169081179091558352600c825282208054600181810180845592855292909320909201889055611b8191906156dd565b6000878152600d60205260408082209290925590518791600160a060020a03808b1692908c16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a45050505050505050565b60035481565b606060006060600080856040518082805190602001908083835b60208310611c145780518252601f199092019160209182019101611bf5565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209350611c4c86615376565b604051908082528060200260200182016040528015611c75578160200160208202803883390190505b50925060009150600090505b600454811015611d48576004805485919083908110611c9c57fe5b90600052602060002090601002016000016040518082805460018160011615610100020316600290048015611d085780601f10611ce6576101008083540402835291820191611d08565b820191906000526020600020905b815481529060010190602001808311611cf4575b50509150506040518091039020600019161415611d4057808383815181101515611d2e57fe5b60209081029091010152600191909101905b600101611c81565b8294505b50505050919050565b6060806000806000600580549050604051908082528060200260200182016040528015611d8c578160200160208202803883390190505b509350600092505b600554831015611e7557611dca600584815481101515611db057fe5b600091825260209091200154600160a060020a0316613019565b91508290505b6000811115611e505781611e0460058660018503815181101515611df057fe5b6020908102909101015181548110611db057fe5b1015611e42578360018203815181101515611e1b57fe5b906020019060200201518482815181101515611e3357fe5b60209081029091010152611e47565b611e50565b60001901611dd0565b828482815181101515611e5f57fe5b6020908102909101015260019290920191611d94565b50919392505050565b600a5460a060020a900460ff16151560011415611e9a57600080fd5b611ea5838383611863565b611eae826156ef565b151560011415611f70576040805160e160020a630a85bd01028152336004820152600160a060020a038581166024830152604482018490526080606483015260006084830181905292519085169263150b7a029260c480820193602093909283900390910190829087803b158015611f2557600080fd5b505af1158015611f39573d6000803e3d6000fd5b505050506040513d6020811015611f4f57600080fd5b5051600160e060020a03191660e160020a630a85bd010214611f7057600080fd5b505050565b6060806000806000600480549050604051908082528060200260200182016040528015611fac578160200160208202803883390190505b509350600092505b600454831015611e75576004805484908110611fcc57fe5b90600052602060002090601002016003015491508290505b600081111561207357816004856001840381518110151561200157fe5b602090810290910101518154811061201557fe5b906000526020600020906010020160030154101561206557836001820381518110151561203e57fe5b90602001906020020151848281518110151561205657fe5b6020908102909101015261206a565b612073565b60001901611fe4565b82848281518110151561208257fe5b6020908102909101015260019290920191611fb4565b60608060008060006004805490506040519080825280602002602001820160405280156120cf578160200160208202803883390190505b509350600092505b600454831015611e755760048054849081106120ef57fe5b90600052602060002090601002016006015491508290505b600081111561219657816004856001840381518110151561212457fe5b602090810290910101518154811061213857fe5b906000526020600020906010020160060154101561218857836001820381518110151561216157fe5b90602001906020020151848281518110151561217957fe5b6020908102909101015261218d565b612196565b60001901612107565b8284828151811015156121a557fe5b60209081029091010152600192909201916120d7565b600a546000908190819060a060020a900460ff161515600114156121de57600080fd5b600954600160a060020a031633148061220c57503360009081526007602052604090205460ff161515600114155b151561221757600080fd5b6009548490600160a060020a0316331480612246575060008181526008602052604090205460ff161515600114155b151561225157600080fd5b8461225b81612cd1565b600160a060020a0316331461226f57600080fd5b600480548790811061227d57fe5b906000526020600020906010020194506122a5600186600f01546156bb90919063ffffffff16565b6003540234146122b457600080fd5b600f8501546122ca90600163ffffffff6156bb16565b600f8601556122e034600263ffffffff6156c816565b93506122f334600263ffffffff6156c816565b925034612306858563ffffffff6156bb16565b1461231057600080fd5b600954604051600160a060020a039091169085156108fc029086906000818181858888f1935050505015801561234a573d6000803e3d6000fd5b506001850154604051600160a060020a039091169084156108fc029085906000818181858888f19350505050158015612387573d6000803e3d6000fd5b5060405186907f28ee3b4dbd85723acb16aff9d7ddaa9455c445a2d47e58e5a30d1372555056e990600090a2505050505050565b600a5460a060020a900460ff1681565b6060806000806000600480549050604051908082528060200260200182016040528015612402578160200160208202803883390190505b509350600092505b600454831015611e7557600480548490811061242257fe5b90600052602060002090601002016008015491508290505b60008111156124c957816004856001840381518110151561245757fe5b602090810290910101518154811061246b57fe5b90600052602060002090601002016008015410156124bb57836001820381518110151561249457fe5b9060200190602002015184828151811015156124ac57fe5b602090810290910101526124c0565b6124c9565b6000190161243a565b8284828151811015156124d857fe5b602090810290910101526001929092019161240a565b600a54600090819060a060020a900460ff1615156001141561250f57600080fd5b600954600160a060020a031633148061253d57503360009081526007602052604090205460ff161515600114155b151561254857600080fd5b6125518a615699565b15156001141561256057600080fd5b600154341461256e57600080fd5b879150612581828863ffffffff6156bb16565b9150612593828763ffffffff6156bb16565b91506125a5828663ffffffff6156bb16565b91506125b7828563ffffffff6156bb16565b91506125c9828463ffffffff6156bb16565b9150600582146125d857600080fd5b60408051610200810182528c8152600160a060020a038c166020808301919091529181018b9052426060820152600060808201819052600160a0830181905260c0830181905260e083018190526101008301819052610120830181905261014083018c905261016083018b905261018083018a90526101a083018990526101c083018890526101e0830187905260048054808301808355919093528351805161278f9693959294929360109093027f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b01926126b79284929101906159f7565b50602082810151600183018054600160a060020a031916600160a060020a03909216919091179055604083015180516126f692600285019201906159f7565b50606082015160038201556080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820155610160820151600b820155610180820151600c8201556101a0820151600d8201556101c0820151600e8201556101e090910151600f909101559063ffffffff6156dd16565b6000818152600b602090815260408083208054600160a060020a031916339081179091558352600c8252822080546001818101808455928552929093209092018390559192506127e49163ffffffff6156dd16565b6000828152600d602090815260408083209390935533825260069052205460ff161515600114612869576005805460018181019092557f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0018054600160a060020a031916339081179091556000908152600660205260409020805460ff191690911790555b3461288b600261287f838263ffffffff6156c816565b9063ffffffff6156fd16565b1461289557600080fd5b600954600160a060020a03166108fc6128b534600263ffffffff6156c816565b6040518115909202916000818181858888f193505050501580156128dd573d6000803e3d6000fd5b50600160a060020a038a166108fc6128fc34600263ffffffff6156c816565b6040518115909202916000818181858888f19350505050158015612924573d6000803e3d6000fd5b5060408051828152905133917f3bb5ebaa518c4d975caed7769b9ddf3c2dc502f03628daaf6ed93c46376a9d57919081900360200190a2604051819033906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050505050505050505050565b600a546000908190819060a060020a900460ff161515600114156129ba57600080fd5b600954600160a060020a03163314806129e857503360009081526007602052604090205460ff161515600114155b15156129f357600080fd5b6009548490600160a060020a0316331480612a22575060008181526008602052604090205460ff161515600114155b1515612a2d57600080fd5b84612a3781612cd1565b600160a060020a03163314612a4b57600080fd5b6004805487908110612a5957fe5b9060005260206000209060100201945084600601546003540234141515612a7f57600080fd5b6006850154612a9590600163ffffffff6156bb16565b6006860155612aab34600263ffffffff6156c816565b9350612abe34600263ffffffff6156c816565b925034612ad1858563ffffffff6156bb16565b14612adb57600080fd5b600954604051600160a060020a039091169085156108fc029086906000818181858888f19350505050158015612b15573d6000803e3d6000fd5b506001850154604051600160a060020a039091169084156108fc029085906000818181858888f19350505050158015612b52573d6000803e3d6000fd5b5060405186907f266ebb0c12a6c8922fd1f55e5d30ce25e605f0c9ce1846d022b5989f8ac3e99f90600090a2505050505050565b6060806000806000600480549050604051908082528060200260200182016040528015612bbd578160200160208202803883390190505b509350600092505b600454831015611e75576004805484908110612bdd57fe5b9060005260206000209060100201600a015491508290505b6000811115612c84578160048560018403815181101515612c1257fe5b6020908102909101015181548110612c2657fe5b9060005260206000209060100201600a01541015612c76578360018203815181101515612c4f57fe5b906020019060200201518482815181101515612c6757fe5b60209081029091010152612c7b565b612c84565b60001901612bf5565b828482815181101515612c9357fe5b6020908102909101015260019290920191612bc5565b6005805482908110612cb757fe5b600091825260209091200154600160a060020a0316905081565b6000818152600b6020526040812054600160a060020a0316612cf281615699565b151560011415610ec957600080fd5b600b60205260009081526040902054600160a060020a031681565b60076020526000908152604090205460ff1681565b600954600160a060020a031681565b600080600080600080612d51615970565b6004805489908110612d5f57fe5b600091825260209182902060408051601093909302909101805460026001821615610100026000190190911604601f81018590049094028301610220908101909252610200830184815292939092849290918491840182828015612e045780601f10612dd957610100808354040283529160200191612e04565b820191906000526020600020905b815481529060010190602001808311612de757829003601f168201915b5050509183525050600182810154600160a060020a0316602080840191909152600280850180546040805161010096831615969096026000190190911692909204601f81018490048402850184018352808552919094019391830182828015612eae5780601f10612e8357610100808354040283529160200191612eae565b820191906000526020600020905b815481529060010190602001808311612e9157829003601f168201915b5050505050815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201548152602001600e8201548152602001600f820154815250509050806101400151816101600151826101800151836101a00151846101c00151856101e001519650965096509650965096505091939550919395565b600954600160a060020a03163314612f8c57600080fd5b60018190556040805182815290517fc7f819d723891694b311ee508b284bd6f009f851f32f6d79ba4da222b5a5129c9181900360200190a150565b600954600160a060020a03163314612fde57600080fd5b60028190556040805182815290517fa0f6ecf36b6ac796a4a605ce1f0e4c3e9c1cdaab03dbd01719b1e56db0c58c4e9181900360200190a150565b600061302482615699565b15156001141561303357600080fd5b50600160a060020a03166000908152600c602052604090205490565b600954600160a060020a0316331461306657600080fd5b600081815260086020908152604091829020805460ff19169055815183815291517f4fdf7fd7aa97a5cfdc4c58ce5865199ff261625e3e683ce3cf14e78cc18b05089281900390910190a150565b600954600160a060020a031633146130cb57600080fd5b600160a060020a038116600081815260076020908152604091829020805460ff19169055815192835290517fde46e08696375206ec1a7e2b6abb03889d1bb91d94e2e18326878ada05c49d429281900390910190a150565b606080600080600060048054905060405190808252806020026020018201604052801561315a578160200160208202803883390190505b509350600092505b600454831015611e7557600480548490811061317a57fe5b9060005260206000209060100201600c015491508290505b60008111156132215781600485600184038151811015156131af57fe5b60209081029091010151815481106131c357fe5b9060005260206000209060100201600c015410156132135783600182038151811015156131ec57fe5b90602001906020020151848281518110151561320457fe5b60209081029091010152613218565b613221565b60001901613192565b82848281518110151561323057fe5b6020908102909101015260019290920191613162565b600a546000908190819060a060020a900460ff1615156001141561326957600080fd5b600954600160a060020a031633148061329757503360009081526007602052604090205460ff161515600114155b15156132a257600080fd5b6009548490600160a060020a03163314806132d1575060008181526008602052604090205460ff161515600114155b15156132dc57600080fd5b846132e681612cd1565b600160a060020a031633146132fa57600080fd5b600480548790811061330857fe5b906000526020600020906010020194508460080154600354023414151561332e57600080fd5b600885015461334490600163ffffffff6156bb16565b600886015561335a34600263ffffffff6156c816565b935061336d34600263ffffffff6156c816565b925034613380858563ffffffff6156bb16565b1461338a57600080fd5b600954604051600160a060020a039091169085156108fc029086906000818181858888f193505050501580156133c4573d6000803e3d6000fd5b506001850154604051600160a060020a039091169084156108fc029085906000818181858888f19350505050158015613401573d6000803e3d6000fd5b5060405186907fe2ab17eec57971877a65df5d2519c9f9337ad996fb19c1eed2bdaa06430fbd0390600090a2505050505050565b60408051808201909152600581527f4641495259000000000000000000000000000000000000000000000000000000602082015290565b60608060008060006004805490506040519080825280602002602001820160405280156134a3578160200160208202803883390190505b509350600092505b600454831015611e755760048054849081106134c357fe5b9060005260206000209060100201600b015491508290505b600081111561356a5781600485600184038151811015156134f857fe5b602090810290910101518154811061350c57fe5b9060005260206000209060100201600b0154101561355c57836001820381518110151561353557fe5b90602001906020020151848281518110151561354d57fe5b60209081029091010152613561565b61356a565b600019016134db565b82848281518110151561357957fe5b60209081029091010152600192909201916134ab565b600a5460a060020a900460ff161515600114156135ab57600080fd5b600954600160a060020a03163314806135d957503360009081526007602052604090205460ff161515600114155b15156135e457600080fd5b600160a060020a0382163314156135fa57600080fd5b61360382615699565b15156001141561361257600080fd5b6001811515141561365057336000908152600f60209081526040808320600160a060020a03861684529091529020805460ff1916600117905561367c565b336000908152600f60209081526040808320600160a060020a03861684529091529020805460ff191690555b6040805182151581529051600160a060020a0384169133917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319181900360200190a35050565b60408051808201909152600b81527f4574686572204661697279000000000000000000000000000000000000000000602082015281565b600954600160a060020a0316331461371057600080fd5b600a8054600160a060020a038316600160a060020a0319909116811790915560408051918252517fcdcfc26641bf2eab45b914c10142d75e9a87fef645948316289d19b372af0f6c9181900360200190a150565b600c6020528160005260406000208181548110151561377f57fe5b90600052602060002001600091509150505481565b6060600060606000806137a5615970565b60048054889081106137b357fe5b600091825260209182902060408051601093909302909101805460026001821615610100026000190190911604601f810185900490940283016102209081019092526102008301848152929390928492909184918401828280156138585780601f1061382d57610100808354040283529160200191613858565b820191906000526020600020905b81548152906001019060200180831161383b57829003601f168201915b5050509183525050600182810154600160a060020a0316602080840191909152600280850180546040805161010096831615969096026000190190911692909204601f810184900484028501840183528085529190940193918301828280156139025780601f106138d757610100808354040283529160200191613902565b820191906000526020600020905b8154815290600101906020018083116138e557829003601f168201915b5050505050815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201548152602001600e8201548152602001600f82015481525050905080600001518160200151826040015183606001518460800151849450829250955095509550955095505091939590929450565b600a546000908190819060a060020a900460ff161515600114156139e557600080fd5b600954600160a060020a0316331480613a1357503360009081526007602052604090205460ff161515600114155b1515613a1e57600080fd5b6009548490600160a060020a0316331480613a4d575060008181526008602052604090205460ff161515600114155b1515613a5857600080fd5b84613a6281612cd1565b600160a060020a03163314613a7657600080fd5b6004805487908110613a8457fe5b9060005260206000209060100201945084600701546003540234141515613aaa57600080fd5b6007850154613ac090600163ffffffff6156bb16565b6007860155613ad634600263ffffffff6156c816565b9350613ae934600263ffffffff6156c816565b925034613afc858563ffffffff6156bb16565b14613b0657600080fd5b600954604051600160a060020a039091169085156108fc029086906000818181858888f19350505050158015613b40573d6000803e3d6000fd5b506001850154604051600160a060020a039091169084156108fc029085906000818181858888f19350505050158015613b7d573d6000803e3d6000fd5b5060405186907fa69b4ad0ab3d1c368d9690baf1f0dd4d3fca07aebf83c1553ecefce92d309c6790600090a2505050505050565b6000805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015613c375780601f10613c0c57610100808354040283529160200191613c37565b820191906000526020600020905b815481529060010190602001808311613c1a57829003601f168201915b505050505081565b60055490565b600a5460a060020a900460ff16151560011415613c6157600080fd5b613c6c858585611863565b613c75846156ef565b151560011415613d4e5760405160e160020a630a85bd010281523360048201818152600160a060020a03888116602485015260448401879052608060648501908152608485018690529088169363150b7a0293928a92899289928992909160a40184848082843782019150509650505050505050602060405180830381600087803b158015613d0357600080fd5b505af1158015613d17573d6000803e3d6000fd5b505050506040513d6020811015613d2d57600080fd5b5051600160e060020a03191660e160020a630a85bd010214613d4e57600080fd5b5050505050565b600a546000908190819060a060020a900460ff16151560011415613d7857600080fd5b600954600160a060020a0316331480613da657503360009081526007602052604090205460ff161515600114155b1515613db157600080fd5b6009548490600160a060020a0316331480613de0575060008181526008602052604090205460ff161515600114155b1515613deb57600080fd5b84613df581612cd1565b600160a060020a03163314613e0957600080fd5b6004805487908110613e1757fe5b90600052602060002090601002019450613e3f600186600d01546156bb90919063ffffffff16565b600354023414613e4e57600080fd5b600d850154613e6490600163ffffffff6156bb16565b600d860155613e7a34600263ffffffff6156c816565b9350613e8d34600263ffffffff6156c816565b925034613ea0858563ffffffff6156bb16565b14613eaa57600080fd5b600954604051600160a060020a039091169085156108fc029086906000818181858888f19350505050158015613ee4573d6000803e3d6000fd5b506001850154604051600160a060020a039091169084156108fc029085906000818181858888f19350505050158015613f21573d6000803e3d6000fd5b5060405186907f0ddc102415a9432e24d58997c8d6e49ed008254a4740bc68f91af5f5bb61b7e990600090a2505050505050565b6060806000806000600480549050604051908082528060200260200182016040528015613f8c578160200160208202803883390190505b509350600092505b600454831015611e75576004805484908110613fac57fe5b90600052602060002090601002016005015491508290505b6000811115614053578160048560018403815181101515613fe157fe5b6020908102909101015181548110613ff557fe5b906000526020600020906010020160050154101561404557836001820381518110151561401e57fe5b90602001906020020151848281518110151561403657fe5b6020908102909101015261404a565b614053565b60001901613fc4565b82848281518110151561406257fe5b6020908102909101015260019290920191613f94565b60045490565b600954600160a060020a0316331461409557600080fd5b600081815260086020908152604091829020805460ff19166001179055815183815291517f22601a1d2f47cbea52a8368355409c1292e7d987a53b53dc592dc8865d59b74a9281900390910190a150565b606080600080600060048054905060405190808252806020026020018201604052801561411d578160200160208202803883390190505b509350600092505b600454831015611e7557600480548490811061413d57fe5b90600052602060002090601002016004015491508290505b60008111156141e457816004856001840381518110151561417257fe5b602090810290910101518154811061418657fe5b90600052602060002090601002016004015410156141d65783600182038151811015156141af57fe5b9060200190602002015184828151811015156141c757fe5b602090810290910101526141db565b6141e4565b60001901614155565b8284828151811015156141f357fe5b6020908102909101015260019290920191614125565b6060806000806000600480549050604051908082528060200260200182016040528015614240578160200160208202803883390190505b509350600092505b600454831015611e7557600480548490811061426057fe5b9060005260206000209060100201600f015491508290505b600081111561430757816004856001840381518110151561429557fe5b60209081029091010151815481106142a957fe5b9060005260206000209060100201600f015410156142f95783600182038151811015156142d257fe5b9060200190602002015184828151811015156142ea57fe5b602090810290910101526142fe565b614307565b60001901614278565b82848281518110151561431657fe5b6020908102909101015260019290920191614248565b6000805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152606093610ec993919290918301828280156143bb5780601f10614390576101008083540402835291602001916143bb565b820191906000526020600020905b81548152906001019060200180831161439e57829003601f168201915b50505050506143c984615726565b61582c565b600a546000908190819060a060020a900460ff161515600114156143f157600080fd5b600954600160a060020a031633148061441f57503360009081526007602052604090205460ff161515600114155b151561442a57600080fd5b6009548490600160a060020a0316331480614459575060008181526008602052604090205460ff161515600114155b151561446457600080fd5b8461446e81612cd1565b600160a060020a0316331461448257600080fd5b600480548790811061449057fe5b906000526020600020906010020194506144b8600186600e01546156bb90919063ffffffff16565b6003540234146144c757600080fd5b600e8501546144dd90600163ffffffff6156bb16565b600e8601556144f334600263ffffffff6156c816565b935061450634600263ffffffff6156c816565b925034614519858563ffffffff6156bb16565b1461452357600080fd5b600954604051600160a060020a039091169085156108fc029086906000818181858888f1935050505015801561455d573d6000803e3d6000fd5b506001850154604051600160a060020a039091169084156108fc029085906000818181858888f1935050505015801561459a573d6000803e3d6000fd5b5060405186907fa81139c94b432da5654d3ef267dda30c8b9986ce9be98b48ae657e9e131315a990600090a2505050505050565b600a546000908190819060a060020a900460ff161515600114156145f157600080fd5b600954600160a060020a031633148061461f57503360009081526007602052604090205460ff161515600114155b151561462a57600080fd5b6009548490600160a060020a0316331480614659575060008181526008602052604090205460ff161515600114155b151561466457600080fd5b8461466e81612cd1565b600160a060020a0316331461468257600080fd5b600480548790811061469057fe5b906000526020600020906010020194506146b8600186600c01546156bb90919063ffffffff16565b6003540234146146c757600080fd5b600c8501546146dd90600163ffffffff6156bb16565b600c8601556146f334600263ffffffff6156c816565b935061470634600263ffffffff6156c816565b925034614719858563ffffffff6156bb16565b1461472357600080fd5b600954604051600160a060020a039091169085156108fc029086906000818181858888f1935050505015801561475d573d6000803e3d6000fd5b506001850154604051600160a060020a039091169084156108fc029085906000818181858888f1935050505015801561479a573d6000803e3d6000fd5b5060405186907fbb4a37ace80eb674c8d15b44877207404c8512694694a5bd85c7e3c25ce78acc90600090a2505050505050565b600954600160a060020a031633146147e557600080fd5b600a5460a060020a900460ff16151560011461480057600080fd5b600a805474ff0000000000000000000000000000000000000000191690556040517f0945a79720f403a98318a4f8fef6d479fd6770066e494ef9464ed372ad51d34290600090a1565b60025481565b6060806000806000600480549050604051908082528060200260200182016040528015614886578160200160208202803883390190505b509350600092505b600454831015611e755760048054849081106148a657fe5b9060005260206000209060100201600e015491508290505b600081111561494d5781600485600184038151811015156148db57fe5b60209081029091010151815481106148ef57fe5b9060005260206000209060100201600e0154101561493f57836001820381518110151561491857fe5b90602001906020020151848281518110151561493057fe5b60209081029091010152614944565b61494d565b600019016148be565b82848281518110151561495c57fe5b602090810290910101526001929092019161488e565b600954600160a060020a0316331461498957600080fd5b60038190556040805182815290517f5a1093c2d1e466101b19c30a33e1f82ca0442805aab8a0ce80e34689ea32a4da9181900360200190a150565b600160a060020a038083166000908152600f602090815260408083209385168352929052205460ff16151560011492915050565b600a5460a060020a900460ff16151560011415614a1457600080fd5b600954600160a060020a0316331480614a4257503360009081526007602052604090205460ff161515600114155b1515614a4d57600080fd5b6009548290600160a060020a0316331480614a7c575060008181526008602052604090205460ff161515600114155b1515614a8757600080fd5b82614a9181612cd1565b600160a060020a03163314614aa557600080fd5b82600485815481101515614ab557fe5b90600052602060002090601002016002019080519060200190614ad99291906159f7565b50837f24b7066d3a2edc32d25fff82a6169d835529a1adac01bc8b32f9bbece43f8b79846040518080602001828103825283818151815260200191508051906020019080838360005b83811015614b3a578181015183820152602001614b22565b50505050905090810190601f168015614b675780820380516001836020036101000a031916815260200191505b509250505060405180910390a250505050565b600954600090600160a060020a03163314614b9457600080fd5b5060098054600160a060020a03838116600160a060020a0319831681179093556040805191909216808252602082019390935281517f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c929181900390910190a15050565b6060806000806000600480549050604051908082528060200260200182016040528015614c2f578160200160208202803883390190505b509350600092505b600454831015611e75576004805484908110614c4f57fe5b9060005260206000209060100201600d015491508290505b6000811115614cf6578160048560018403815181101515614c8457fe5b6020908102909101015181548110614c9857fe5b9060005260206000209060100201600d01541015614ce8578360018203815181101515614cc157fe5b906020019060200201518482815181101515614cd957fe5b60209081029091010152614ced565b614cf6565b60001901614c67565b828482815181101515614d0557fe5b6020908102909101015260019290920191614c37565b6060806000806000600480549050604051908082528060200260200182016040528015614d52578160200160208202803883390190505b509350600092505b600454831015611e75576004805484908110614d7257fe5b90600052602060002090601002016009015491508290505b6000811115614e19578160048560018403815181101515614da757fe5b6020908102909101015181548110614dbb57fe5b9060005260206000209060100201600901541015614e0b578360018203815181101515614de457fe5b906020019060200201518482815181101515614dfc57fe5b60209081029091010152614e10565b614e19565b60001901614d8a565b828482815181101515614e2857fe5b6020908102909101015260019290920191614d5a565b600a546000908190819060a060020a900460ff16151560011415614e6157600080fd5b600954600160a060020a0316331480614e8f57503360009081526007602052604090205460ff161515600114155b1515614e9a57600080fd5b6009548490600160a060020a0316331480614ec9575060008181526008602052604090205460ff161515600114155b1515614ed457600080fd5b84614ede81612cd1565b600160a060020a03163314614ef257600080fd5b6004805487908110614f0057fe5b9060005260206000209060100201945084600901546003540234141515614f2657600080fd5b6009850154614f3c90600163ffffffff6156bb16565b6009860155614f5234600263ffffffff6156c816565b9350614f6534600263ffffffff6156c816565b925034614f78858563ffffffff6156bb16565b14614f8257600080fd5b600954604051600160a060020a039091169085156108fc029086906000818181858888f19350505050158015614fbc573d6000803e3d6000fd5b506001850154604051600160a060020a039091169084156108fc029085906000818181858888f19350505050158015614ff9573d6000803e3d6000fd5b5060405186907ff136d08c266783dd2b521458dc72ee3890fefc8b6e89bb26191ecfc85ad59da990600090a2505050505050565b60408051808201909152600581527f4641495259000000000000000000000000000000000000000000000000000000602082015281565b606080600080600060048054905060405190808252806020026020018201604052801561509b578160200160208202803883390190505b509350600092505b600454831015611e755760048054849081106150bb57fe5b90600052602060002090601002016007015491508290505b60008111156151625781600485600184038151811015156150f057fe5b602090810290910101518154811061510457fe5b906000526020600020906010020160070154101561515457836001820381518110151561512d57fe5b90602001906020020151848281518110151561514557fe5b60209081029091010152615159565b615162565b600019016150d3565b82848281518110151561517157fe5b60209081029091010152600192909201916150a3565b600a546000908190819060a060020a900460ff161515600114156151aa57600080fd5b600954600160a060020a03163314806151d857503360009081526007602052604090205460ff161515600114155b15156151e357600080fd5b6009548490600160a060020a0316331480615212575060008181526008602052604090205460ff161515600114155b151561521d57600080fd5b8461522781612cd1565b600160a060020a0316331461523b57600080fd5b600480548790811061524957fe5b906000526020600020906010020194508460050154600354023414151561526f57600080fd5b600585015461528590600163ffffffff6156bb16565b600586015561529b34600263ffffffff6156c816565b93506152ae34600263ffffffff6156c816565b9250346152c1858563ffffffff6156bb16565b146152cb57600080fd5b600954604051600160a060020a039091169085156108fc029086906000818181858888f19350505050158015615305573d6000803e3d6000fd5b506001850154604051600160a060020a039091169084156108fc029085906000818181858888f19350505050158015615342573d6000803e3d6000fd5b5060405186907f6894cff5292dafd789179621895e5f786a13c66f528543929bd14c93cb07b86c90600090a2505050505050565b600080600080846040518082805190602001908083835b602083106153ac5780518252601f19909201916020918201910161538d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020925060009150600090505b6004548110156154915760048054849190839081106153ff57fe5b9060005260206000209060100201600001604051808280546001816001161561010002031660029004801561546b5780601f1061544957610100808354040283529182019161546b565b820191906000526020600020905b815481529060010190602001808311615457575b50509150506040518091039020600019161415615489576001820191505b6001016153e4565b509392505050565b600a546000908190819060a060020a900460ff161515600114156154bc57600080fd5b600954600160a060020a03163314806154ea57503360009081526007602052604090205460ff161515600114155b15156154f557600080fd5b6009548490600160a060020a0316331480615524575060008181526008602052604090205460ff161515600114155b151561552f57600080fd5b8461553981612cd1565b600160a060020a0316331461554d57600080fd5b600480548790811061555b57fe5b90600052602060002090601002019450615583600186600b01546156bb90919063ffffffff16565b60035402341461559257600080fd5b600b8501546155a890600163ffffffff6156bb16565b600b8601556155be34600263ffffffff6156c816565b93506155d134600263ffffffff6156c816565b9250346155e4858563ffffffff6156bb16565b146155ee57600080fd5b600954604051600160a060020a039091169085156108fc029086906000818181858888f19350505050158015615628573d6000803e3d6000fd5b506001850154604051600160a060020a039091169084156108fc029085906000818181858888f19350505050158015615665573d6000803e3d6000fd5b5060405186907f6040f20967d5c7935690014787ff47da23a95665b19602573f55013ca3341cc890600090a2505050505050565b6000600160a060020a0382161580610ec9575050600160a060020a0316301490565b81810182811015610ec957fe5b600081838115156156d557fe5b049392505050565b6000828211156156e957fe5b50900390565b6000903b63ffffffff161190565b600082151561570e57506000610ec9565b5081810281838281151561571e57fe5b0414610ec957fe5b6060600080828185151561576f5760408051808201909152600181527f300000000000000000000000000000000000000000000000000000000000000060208201529450611d4c565b8593505b831561578b5760019290920191600a84049350615773565b826040519080825280601f01601f1916602001820160405280156157b9578160200160208202803883390190505b5091505060001982015b851561582357600a860660300160f860020a0282828151811015156157e457fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a86049550600019016157c3565b50949350505050565b60608060608060008087945086935083518551016040519080825280601f01601f19166020018201604052801561586d578160200160208202803883390190505b509250600091508190505b84518110156158ec57848181518110151561588f57fe5b90602001015160f860020a900460f860020a0283838151811015156158b057fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060019182019101615878565b5060005b835181101561596457838181518110151561590757fe5b90602001015160f860020a900460f860020a02838381518110151561592857fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600191820191016158f0565b50909695505050505050565b61020060405190810160405280606081526020016000600160a060020a0316815260200160608152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10615a3857805160ff1916838001178555615a65565b82800160010185558215615a65579182015b82811115615a65578251825591602001919060010190615a4a565b50615a71929150615a95565b5090565b815481835581811115611f7057600083815260209020611f709181019083015b610f8691905b80821115615a715760008155600101615a9b5600a165627a7a723058203cee229dbe0a934f04e79b306f1edca4e8f537851e29777f87c83103d931af260029
Deployed Bytecode Sourcemap
50644:491:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50816:316;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;50816:316:0;-1:-1:-1;;;;;;50816:316:0;;;;;;;;;;;;;;;;;;;;;;;8398:116;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8398:116:0;;;;;;6742:68;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6742:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;6742:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10023:148;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10023:148:0;-1:-1:-1;;;;;10023:148:0;;;;;23133:111;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;23133:111:0;;;;;;;;;-1:-1:-1;;;;;23133:111:0;;;;;;;;;;;;;;2855:44;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2855:44:0;;;;;;;;;;;;;;;;;;;;22080:406;;-1:-1:-1;;;;;22080:406:0;;;;;;;41277:465;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;41277:465:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30558:963;;;;;;24431:818;;;;;;5406:50;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5406:50:0;;;;;9550:204;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9550:204:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9550:204:0;;-1:-1:-1;9550:204:0;;-1:-1:-1;;;;;;;9550:204:0;5554:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5554:29:0;;;;21004:1007;;-1:-1:-1;;;;;21004:1007:0;;;;;;;;;;;;3062:54;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3062:54:0;;;;4587:438;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4587:438:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4587:438:0;;-1:-1:-1;4587:438:0;;-1:-1:-1;;;;;;;4587:438:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;4587:438:0;;;;;;;;;;;;;;;;;40195:490;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40195:490:0;;;;20638:321;;-1:-1:-1;;;;;20638:321:0;;;;;;;;;;;;42521:478;;8:9:-1;5:2;;;30:1;27;20:12;5:2;42521:478:0;;;;44330:528;;8:9:-1;5:2;;;30:1;27;20:12;5:2;44330:528:0;;;;35838:966;;;;;;5798:33;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5798:33:0;;;;45609:533;;8:9:-1;5:2;;;30:1;27;20:12;5:2;45609:533:0;;;;37136:2683;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;37136:2683:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37136:2683:0;;;;;;;;;;;-1:-1:-1;37136:2683:0;;-1:-1:-1;37136:2683:0;;;;-1:-1:-1;37136:2683:0;-1:-1:-1;37136:2683:0;;;;;;;;;;-1:-1:-1;37136:2683:0;;-1:-1:-1;;37136:2683:0;;;-1:-1:-1;;;37136:2683:0;;;;;;;;;;-1:-1:-1;37136:2683:0;;;;;-1:-1:-1;37136:2683:0;;;;;;;;;;26349:962;;;;;;46907:518;;8:9:-1;5:2;;;30:1;27;20:12;5:2;46907:518:0;;;;5056:24;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5056:24:0;;;;;19661:182;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;19661:182:0;;;;;18404:50;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;18404:50:0;;;;;5316:49;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5316:49:0;-1:-1:-1;;;;;5316:49:0;;;;;5492:22;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5492:22:0;;;;41838:510;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;41838:510:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8728:181;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8728:181:0;;;;;8964:193;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8964:193:0;;;;;19400:189;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;19400:189:0;-1:-1:-1;;;;;19400:189:0;;;;;10614:160;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10614:160:0;;;;;10414:155;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10414:155:0;-1:-1:-1;;;;;10414:155:0;;;;;48177:518;;8:9:-1;5:2;;;30:1;27;20:12;5:2;48177:518:0;;;;28444:967;;;;;;6860:72;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6860:72:0;;;;47538:523;;8:9:-1;5:2;;;30:1;27;20:12;5:2;47538:523:0;;;;22573:474;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;22573:474:0;-1:-1:-1;;;;;22573:474:0;;;;;;;;;2649:43;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2649:43:0;;;;9806:169;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9806:169:0;-1:-1:-1;;;;;9806:169:0;;;;;18503:53;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;18503:53:0;-1:-1:-1;;;;;18503:53:0;;;;;;;40826:355;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;40826:355:0;;;;;;;;;;;;;-1:-1:-1;;;;;40826:355:0;-1:-1:-1;;;;;40826:355:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;40826:355:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40826:355:0;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;40826:355:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27394:967;;;;;;2739:80;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2739:80:0;;;;5087:87;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5087:87:0;;;;20186:335;;-1:-1:-1;;;;;20186:335:0;;;;;;;;;;;;;;;;;;;;;;;;;;33722:971;;;;;;43713:508;;8:9:-1;5:2;;;30:1;27;20:12;5:2;43713:508:0;;;;4004:86;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4004:86:0;;;;10216:150;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10216:150:0;;;;;43110:498;;8:9:-1;5:2;;;30:1;27;20:12;5:2;43110:498:0;;;;50086:518;;8:9:-1;5:2;;;30:1;27;20:12;5:2;50086:518:0;;;;7034:159;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7034:159:0;;;;;34780:968;;;;;;32666:966;;;;;;8555:118;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8555:118:0;;;;2935:46;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2935:46:0;;;;49447:523;;8:9:-1;5:2;;;30:1;27;20:12;5:2;49447:523:0;;;;9257:241;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9257:241:0;;;;;23335:164;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;23335:164:0;-1:-1:-1;;;;;23335:164:0;;;;;;;;;;39866:238;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;39866:238:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39866:238:0;;-1:-1:-1;39866:238:0;;-1:-1:-1;;;;;;;39866:238:0;8167:180;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8167:180:0;-1:-1:-1;;;;;8167:180:0;;;;;48811:523;;8:9:-1;5:2;;;30:1;27;20:12;5:2;48811:523:0;;;;46251:543;;8:9:-1;5:2;;;30:1;27;20:12;5:2;46251:543:0;;;;29494:977;;;;;;2696:39;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2696:39:0;;;;44967:533;;8:9:-1;5:2;;;30:1;27;20:12;5:2;44967:533:0;;;;25328:938;;;;;;4164:346;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4164:346:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4164:346:0;;-1:-1:-1;4164:346:0;;-1:-1:-1;;;;;;;4164:346:0;31608:968;;;;;;50816:316;50886:4;-1:-1:-1;;;;;;50922:46:0;;50937:31;50922:46;;:93;;-1:-1:-1;50990:25:0;-1:-1:-1;;;;;;50990:25:0;;;50922:93;:148;;;-1:-1:-1;51045:25:0;-1:-1:-1;;;;;;51045:25:0;;;50922:148;:205;;;-1:-1:-1;51102:25:0;-1:-1:-1;;;;;;51102:25:0;;;50922:205;50897:230;50816:316;-1:-1:-1;;50816:316:0:o;8398:116::-;8107:7;;-1:-1:-1;;;;;8107:7:0;8093:10;:21;8085:30;;;;;;5918:13;;-1:-1:-1;;;5918:13:0;;;;:21;;5935:4;5918:21;;5910:30;;;;;;8465:13;:20;;-1:-1:-1;;8465:20:0;-1:-1:-1;;;8465:20:0;;;8495:14;;;;8465:20;;8495:14;8398:116::o;6742:68::-;6801:4;;;;;;;;;;;;;;;;;6742:68;;:::o;10023:148::-;8107:7;;-1:-1:-1;;;;;8107:7:0;8093:10;:21;8085:30;;;;;;-1:-1:-1;;;;;10091:32:0;;;;;;:17;:32;;;;;;;;;:39;;-1:-1:-1;;10091:39:0;10126:4;10091:39;;;10140:26;;;;;;;;;;;;;;;;;10023:148;:::o;23133:111::-;23192:7;23213:26;;;:17;:26;;;;;;-1:-1:-1;;;;;23213:26:0;;23133:111::o;2855:44::-;;;;:::o;22080:406::-;5918:13;;22243:14;;-1:-1:-1;;;5918:13:0;;;;:21;;5935:4;5918:21;;5910:30;;;;;;6216:7;;-1:-1:-1;;;;;6216:7:0;6202:10;:21;;:62;;-1:-1:-1;6245:10:0;6227:29;;;;:17;:29;;;;;;;;:37;;:29;:37;;6202:62;6194:71;;;;;;;;6430:7;;22186;;-1:-1:-1;;;;;6430:7:0;6416:10;:21;;:60;;-1:-1:-1;6441:27:0;;;;:18;:27;;;;;;;;:35;;:27;:35;;6416:60;6408:69;;;;;;;;22208:7;19041:16;19049:7;19041;:16::i;:::-;-1:-1:-1;;;;;19027:30:0;:10;:30;19019:39;;;;;;22260:16;22268:7;22260;:16::i;:::-;22243:33;-1:-1:-1;;;;;;22320:18:0;;;;;;;;22312:27;;;;;;22352:29;22372:8;22352:19;:29::i;:::-;:37;;22385:4;22352:37;;22344:46;;;;;;22399:26;;;;:17;:26;;;;;;:37;;-1:-1:-1;;;;;;22399:37:0;-1:-1:-1;;;;;22399:37:0;;;;;;;;;22446:35;;22399:26;;22446:35;;;;;;;6482:1;6270;22080:406;;;:::o;41277:465::-;41356:23;41384:27;41416:28;41449;41482:30;41523:18;;:::i;:::-;41544:7;:16;;41552:7;;41544:16;;;;;;;;;;;;;;;41523:37;;;41544:16;;;;;;;;41523:37;;;;;;;;;-1:-1:-1;;41523:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41544:16;;41523:37;;;;41544:16;;41523:37;;41544:16;41523:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;41523:37:0;;;-1:-1:-1;;41523:37:0;;;;;-1:-1:-1;;;;;41523:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;41523:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41582:5;:21;;;41609:5;:25;;;41640:5;:26;;;41672:5;:26;;;41704:5;:28;;;41569:168;;;;;;;;;;41277:465;;;;;;;;:::o;30558:963::-;5918:13;;30719:19;;;;;;-1:-1:-1;;;5918:13:0;;;;:21;;5935:4;5918:21;;5910:30;;;;;;6216:7;;-1:-1:-1;;;;;6216:7:0;6202:10;:21;;:62;;-1:-1:-1;6245:10:0;6227:29;;;;:17;:29;;;;;;;;:37;;:29;:37;;6202:62;6194:71;;;;;;;;6430:7;;30664;;-1:-1:-1;;;;;6430:7:0;6416:10;:21;;:60;;-1:-1:-1;6441:27:0;;;;:18;:27;;;;;;;;:35;;:27;:35;;6416:60;6408:69;;;;;;;;30686:7;19041:16;19049:7;19041;:16::i;:::-;-1:-1:-1;;;;;19027:30:0;:10;:30;19019:39;;;;;;30741:7;:16;;30749:7;;30741:16;;;;;;;;;;;;;;;;30719:38;;30911:30;30939:1;30911:5;:23;;;:27;;:30;;;;:::i;:::-;30882:26;;:59;30869:9;:72;30861:81;;;;;;31039:23;;;;:30;;31067:1;31039:30;:27;:30;:::i;:::-;31013:23;;;:56;31109:16;:9;31123:1;31109:16;:13;:16;:::i;:::-;31084:41;-1:-1:-1;31162:16:0;:9;31176:1;31162:16;:13;:16;:::i;:::-;31136:42;-1:-1:-1;31246:9:0;31207:35;:14;31136:42;31207:35;:18;:35;:::i;:::-;:48;31199:57;;;;;;31318:7;;:32;;-1:-1:-1;;;;;31318:7:0;;;;:32;;;;;31335:14;;31318:7;:32;:7;:32;31335:14;31318:7;:32;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;31428:14:0;;;;:40;;-1:-1:-1;;;;;31428:14:0;;;;:40;;;;;31452:15;;31428:14;:40;:14;:40;31452:15;31428:14;:40;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;31482:34:0;;31508:7;;31482:34;;;;;6482:1;6270;30558:963;;;;:::o;24431:818::-;5918:13;;24718:19;;;;;;-1:-1:-1;;;5918:13:0;;;;:21;;5935:4;5918:21;;5910:30;;;;;;6216:7;;-1:-1:-1;;;;;6216:7:0;6202:10;:21;;:62;;-1:-1:-1;6245:10:0;6227:29;;;;:17;:29;;;;;;;;:37;;:29;:37;;6202:62;6194:71;;;;;;;;6430:7;;24524;;-1:-1:-1;;;;;6430:7:0;6416:10;:21;;:60;;-1:-1:-1;6441:27:0;;;;:18;:27;;;;;;;;:35;;:27;:35;;6416:60;6408:69;;;;;;;;24546:7;19041:16;19049:7;19041;:16::i;:::-;-1:-1:-1;;;;;19027:30:0;:10;:30;19019:39;;;;;;24650:18;;24637:9;:31;24629:40;;;;;;24740:7;:16;;24748:7;;24740:16;;;;;;;;;;;;;;;;24718:38;;24783:26;24807:1;24783:5;:19;;;:23;;:26;;;;:::i;:::-;24761:19;;;:48;24849:16;:9;24863:1;24849:16;:13;:16;:::i;:::-;24824:41;-1:-1:-1;24902:16:0;:9;24916:1;24902:16;:13;:16;:::i;:::-;24876:42;-1:-1:-1;24986:9:0;24947:35;:14;24876:42;24947:35;:18;:35;:::i;:::-;:48;24939:57;;;;;;25058:7;;:32;;-1:-1:-1;;;;;25058:7:0;;;;:32;;;;;25075:14;;25058:7;:32;:7;:32;25075:14;25058:7;:32;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;25168:14:0;;;;:40;;-1:-1:-1;;;;;25168:14:0;;;;:40;;;;;25192:15;;25168:14;:40;:14;:40;25192:15;25168:14;:40;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;25222:22:0;;25236:7;;25222:22;;;;;6482:1;6270;24431:818;;;;:::o;5406:50::-;;;;;;;;;;;;;;;:::o;9550:204::-;8107:7;;-1:-1:-1;;;;;8107:7:0;8093:10;:21;8085:30;;;;;;9642:46;;;;:20;;:46;;;;;:::i;:::-;;9698:51;9725:23;9698:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;9698:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9550:204;:::o;5554:29::-;;;-1:-1:-1;;;;;5554:29:0;;:::o;21004:1007::-;5918:13;;21481;;;;;;-1:-1:-1;;;5918:13:0;;;;:21;;5935:4;5918:21;;5910:30;;;;;;6216:7;;-1:-1:-1;;;;;6216:7:0;6202:10;:21;;:62;;-1:-1:-1;6245:10:0;6227:29;;;;:17;:29;;;;;;;;:37;;:29;:37;;6202:62;6194:71;;;;;;;;6430:7;;21123;;-1:-1:-1;;;;;6430:7:0;6416:10;:21;;:60;;-1:-1:-1;6441:27:0;;;;:18;:27;;;;;;;;:35;;:27;:35;;6416:60;6408:69;;;;;;;;21147:7;19173:16;19181:7;19173;:16::i;:::-;-1:-1:-1;;;;;19159:30:0;:10;-1:-1:-1;;;;;19159:30:0;;:72;;;;19211:20;19223:7;19211:11;:20::i;:::-;-1:-1:-1;;;;;19197:34:0;:10;-1:-1:-1;;;;;19197:34:0;;19159:72;:134;;;;19239:46;19256:16;19264:7;19256;:16::i;:::-;19274:10;19239:16;:46::i;:::-;:54;;19289:4;19239:54;19159:134;:170;;;-1:-1:-1;19315:14:0;;-1:-1:-1;;;;;19315:14:0;19301:10;:28;19159:170;19146:188;;;;;;;;21211:23;21231:2;21211:19;:23::i;:::-;:31;;21238:4;21211:31;;21203:40;;;;;;21268:16;21276:7;21268;:16::i;:::-;-1:-1:-1;;;;;21260:24:0;;;;;;21252:33;;;;;;21304:16;21312:7;21304;:16::i;:::-;-1:-1:-1;;;;;21298:22:0;;;;;;;21290:31;;;;;;21364:26;;;;:17;:26;;;;;;21357:33;;-1:-1:-1;;;;;;21357:33:0;;;21400:26;21382:7;;21364:26;-1:-1:-1;;;;;21400:26:0;;;;;21364;;21400;21497:31;;;;:22;:31;;;;;;;-1:-1:-1;21553:22:0;21573:1;21553:15;21563:4;21553:9;:15::i;:::-;:19;:22;:19;:22;:::i;:::-;-1:-1:-1;;;;;21606:22:0;;;;;;:16;:22;;;;;:33;;21533:42;;-1:-1:-1;21606:22:0;21533:42;;21606:33;;;;;;;;;;;;;;21584:55;;21676:11;21644:16;:22;21661:4;-1:-1:-1;;;;;21644:22:0;-1:-1:-1;;;;;21644:22:0;;;;;;;;;;;;21667:5;21644:29;;;;;;;;;;;;;;;;;;;;;:43;;;;-1:-1:-1;;;;;21703:22:0;;;;:16;:22;;;;;;:33;;21726:9;;21703:33;;;;;;;;;;;;;;;;;21696:40;;;-1:-1:-1;;;;;21741:22:0;;;;:16;:22;;;;;:34;;-1:-1:-1;;21741:34:0;;;;;;:::i;:::-;-1:-1:-1;21784:35:0;;;;:22;:35;;;;;;;;:43;;;21856:24;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;21856:29:0;-1:-1:-1;;;;;21856:29:0;;;;;;;;21924:20;;:16;:20;;;;27:10:-1;;-1:-1;23:18;;;45:23;;;21924:34:0;;;;;;;;;;;;;:41;;23:18:-1;21924:38:0;:41::i;:::-;21890:31;;;;:22;:31;;;;;;:75;;;;21979:27;;21913:7;;-1:-1:-1;;;;;21979:27:0;;;;;;;;;;;6482:1;6270;21004:1007;;;;;;:::o;3062:54::-;;;;:::o;4587:438::-;4661:9;4677:12;4732:25;4818:9;4845;4708:13;4692:31;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;4692:31:0;;;;;;;;;;;;;;;;4677:46;;4774:38;4798:13;4774:23;:38::i;:::-;4760:53;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;4760:53:0;;4732:81;;4830:1;4818:13;;4857:1;4845:13;;4840:157;4864:7;:14;4860:18;;4840:157;;;4914:7;:10;;4944:4;;4914:7;4922:1;;4914:10;;;;;;;;;;;;;;;;:24;;4898:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;4894:98;;;4971:1;4957:8;4966:1;4957:11;;;;;;;;;;;;;;;;;;:15;4984:1;4979:6;;;;;4894:98;4885:1;4880:6;4840:157;;;5012:8;5005:15;;4587:438;;;;;;;;:::o;40195:490::-;40252:9;40268:26;40340:9;40394:18;40452:9;40311:7;:14;;;;40297:29;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;40297:29:0;;40268:58;;40352:1;40340:13;;40335:321;40359:7;:14;40355:18;;40335:321;;;40415:21;40425:7;40433:1;40425:10;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40425:10:0;40415:9;:21::i;:::-;40394:42;;40464:1;40452:13;;40447:177;40471:1;40467;:5;40447:177;;;40532:10;40493:36;40503:7;40511:9;40525:1;40521;:5;40511:16;;;;;;;;;;;;;;;;;;;40503:25;;;;;;;40493:36;:49;40489:129;;;40567:9;40581:1;40577;:5;40567:16;;;;;;;;;;;;;;;;;;40552:9;40562:1;40552:12;;;;;;;;;;;;;;;;;;:31;40489:129;;;40605:5;;40489:129;-1:-1:-1;;40474:6:0;40447:177;;;40649:1;40634:9;40644:1;40634:12;;;;;;;;;;;;;;;;;;:16;40380:1;40375:6;;;;;40335:321;;;-1:-1:-1;40671:9:0;;40195:490;-1:-1:-1;;;40195:490:0:o;20638:321::-;5918:13;;-1:-1:-1;;;5918:13:0;;;;:21;;5935:4;5918:21;;5910:30;;;;;;20748:31;20761:4;20767:2;20771:7;20748:12;:31::i;:::-;20788:24;20809:2;20788:20;:24::i;:::-;:32;;20816:4;20788:32;20784:171;;;20863:71;;;-1:-1:-1;;;;;20863:71:0;;20904:10;20863:71;;;;-1:-1:-1;;;;;20863:71:0;;;;;;;;;;;;;;;;;;-1:-1:-1;20863:71:0;;;;;;;;:40;;;;;;:71;;;;;;;;;;;;;;;;;;:40;:71;;;5:2:-1;;;;30:1;27;20:12;5:2;20863:71:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20863:71:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20863:71:0;-1:-1:-1;;;;;;20863:85:0;-1:-1:-1;;;;;20863:85:0;20855:94;;;;;;20638:321;;;:::o;42521:478::-;42576:9;42592:25;42663:9;42717:17;42773:9;42634:7;:14;;;;42620:29;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;42620:29:0;;42592:57;;42675:1;42663:13;;42658:313;42682:7;:14;42678:18;;42658:313;;;42737:7;:10;;42745:1;;42737:10;;;;;;;;;;;;;;;;:20;;;42717:40;;42785:1;42773:13;;42768:172;42792:1;42788;:5;42768:172;;;42851:9;42814:7;42822:8;42835:1;42831;:5;42822:15;;;;;;;;;;;;;;;;;;;42814:24;;;;;;;;;;;;;;;;;;:34;;;:46;42810:124;;;42884:8;42897:1;42893;:5;42884:15;;;;;;;;;;;;;;;;;;42870:8;42879:1;42870:11;;;;;;;;;;;;;;;;;;:29;42810:124;;;42921:5;;42810:124;-1:-1:-1;;42795:6:0;42768:172;;;42964:1;42950:8;42959:1;42950:11;;;;;;;;;;;;;;;;;;:15;42703:1;42698:6;;;;;42658:313;;44330:528;44395:9;44411:25;44482:9;44536:27;44612:9;44453:7;:14;;;;44439:29;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;44439:29:0;;44411:57;;44494:1;44482:13;;44477:353;44501:7;:14;44497:18;;44477:353;;;44566:7;:10;;44574:1;;44566:10;;;;;;;;;;;;;;;;:30;;;44536:60;;44624:1;44612:13;;44607:192;44631:1;44627;:5;44607:192;;;44700:19;44653:7;44661:8;44674:1;44670;:5;44661:15;;;;;;;;;;;;;;;;;;;44653:24;;;;;;;;;;;;;;;;;;:44;;;:66;44649:144;;;44743:8;44756:1;44752;:5;44743:15;;;;;;;;;;;;;;;;;;44729:8;44738:1;44729:11;;;;;;;;;;;;;;;;;;:29;44649:144;;;44780:5;;44649:144;-1:-1:-1;;44634:6:0;44607:192;;;44823:1;44809:8;44818:1;44809:11;;;;;;;;;;;;;;;;;;:15;44522:1;44517:6;;;;;44477:353;;35838:966;5918:13;;35999:19;;;;;;-1:-1:-1;;;5918:13:0;;;;:21;;5935:4;5918:21;;5910:30;;;;;;6216:7;;-1:-1:-1;;;;;6216:7:0;6202:10;:21;;:62;;-1:-1:-1;6245:10:0;6227:29;;;;:17;:29;;;;;;;;:37;;:29;:37;;6202:62;6194:71;;;;;;;;6430:7;;35944;;-1:-1:-1;;;;;6430:7:0;6416:10;:21;;:60;;-1:-1:-1;6441:27:0;;;;:18;:27;;;;;;;;:35;;:27;:35;;6416:60;6408:69;;;;;;;;35966:7;19041:16;19049:7;19041;:16::i;:::-;-1:-1:-1;;;;;19027:30:0;:10;:30;19019:39;;;;;;36021:7;:16;;36029:7;;36021:16;;;;;;;;;;;;;;;;35999:38;;36191:30;36219:1;36191:5;:23;;;:27;;:30;;;;:::i;:::-;36162:26;;:59;36149:9;:72;36141:81;;;;;;36322:23;;;;:30;;36350:1;36322:30;:27;:30;:::i;:::-;36296:23;;;:56;36392:16;:9;36406:1;36392:16;:13;:16;:::i;:::-;36367:41;-1:-1:-1;36445:16:0;:9;36459:1;36445:16;:13;:16;:::i;:::-;36419:42;-1:-1:-1;36529:9:0;36490:35;:14;36419:42;36490:35;:18;:35;:::i;:::-;:48;36482:57;;;;;;36601:7;;:32;;-1:-1:-1;;;;;36601:7:0;;;;:32;;;;;36618:14;;36601:7;:32;:7;:32;36618:14;36601:7;:32;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;36711:14:0;;;;:40;;-1:-1:-1;;;;;36711:14:0;;;;:40;;;;;36735:15;;36711:14;:40;:14;:40;36735:15;36711:14;:40;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;36765:34:0;;36791:7;;36765:34;;;;;6482:1;6270;35838:966;;;;:::o;5798:33::-;;;-1:-1:-1;;;5798:33:0;;;;;:::o;45609:533::-;45675:9;45691:25;45762:9;45816:28;45894:9;45733:7;:14;;;;45719:29;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;45719:29:0;;45691:57;;45774:1;45762:13;;45757:357;45781:7;:14;45777:18;;45757:357;;;45847:7;:10;;45855:1;;45847:10;;;;;;;;;;;;;;;;:31;;;45816:62;;45906:1;45894:13;;45889:194;45913:1;45909;:5;45889:194;;;45983:20;45935:7;45943:8;45956:1;45952;:5;45943:15;;;;;;;;;;;;;;;;;;;45935:24;;;;;;;;;;;;;;;;;;:45;;;:68;45931:146;;;46027:8;46040:1;46036;:5;46027:15;;;;;;;;;;;;;;;;;;46013:8;46022:1;46013:11;;;;;;;;;;;;;;;;;;:29;45931:146;;;46064:5;;45931:146;-1:-1:-1;;45916:6:0;45889:194;;;46107:1;46093:8;46102:1;46093:11;;;;;;;;;;;;;;;;;;:15;45802:1;45797:6;;;;;45757:357;;37136:2683;5918:13;;37902:26;;;;-1:-1:-1;;;5918:13:0;;;;:21;;5935:4;5918:21;;5910:30;;;;;;6216:7;;-1:-1:-1;;;;;6216:7:0;6202:10;:21;;:62;;-1:-1:-1;6245:10:0;6227:29;;;;:17;:29;;;;;;;;:37;;:29;:37;;6202:62;6194:71;;;;;;;;37692:29;37712:8;37692:19;:29::i;:::-;:37;;37725:4;37692:37;;37684:46;;;;;;37810:16;;37797:9;:29;37789:38;;;;;;37931:17;;-1:-1:-1;37974:42:0;37931:17;37997:18;37974:42;:22;:42;:::i;:::-;37953:63;-1:-1:-1;38042:41:0;37953:63;38065:17;38042:41;:22;:41;:::i;:::-;38021:62;-1:-1:-1;38109:42:0;38021:62;38132:18;38109:42;:22;:42;:::i;:::-;38088:63;-1:-1:-1;38177:42:0;38088:63;38200:18;38177:42;:22;:42;:::i;:::-;38156:63;-1:-1:-1;38245:41:0;38156:63;38268:17;38245:41;:22;:41;:::i;:::-;38224:62;-1:-1:-1;38321:1:0;38299:23;;38291:32;;;;;;38393:705;;;;;;;;;;;-1:-1:-1;;;;;38393:705:0;;;;;;;;;;;;;;;;38499:3;38393:705;;;;-1:-1:-1;38393:705:0;;;;;;39104:1;38393:705;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38380:7;27:10:-1;;23:18;;;45:23;;;38380:719:0;;;;;;;;:726;;39104:1;;23:18:-1;;38393:705:0;;38380:719;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;38380:719:0;;;;;;;;;;-1:-1:-1;;;;;;38380:719:0;-1:-1:-1;;;;;38380:719:0;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;38380:719:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:723;:726;:723;:726;:::i;:::-;39155:24;;;;:15;:24;;;;;;;;:37;;-1:-1:-1;;;;;;39155:37:0;39182:10;39155:37;;;;;;39231:28;;:16;:28;;;;27:10:-1;;39155:37:0;23:18:-1;;;45:23;;;39231:42:0;;;;;;;;;;;;;38362:744;;-1:-1:-1;39231:49:0;;;:46;:49;:::i;:::-;39197:31;;;;:22;:31;;;;;;;;:83;;;;39341:10;39323:29;;:17;:29;;;;;;:37;;:29;:37;39319:121;;39368:7;27:10:-1;;39:1;23:18;;;45:23;;;39368:24:0;;;;-1:-1:-1;;;;;;39368:24:0;39381:10;39368:24;;;;;;-1:-1:-1;39398:29:0;;;:17;39368:24;39398:29;;;;:36;;-1:-1:-1;;39398:36:0;;;;;;39319:121;39483:9;39456:23;39477:1;39456:16;39483:9;39477:1;39456:16;:13;:16;:::i;:::-;:20;:23;:20;:23;:::i;:::-;:36;39448:45;;;;;;39555:7;;-1:-1:-1;;;;;39555:7:0;:34;39572:16;:9;39586:1;39572:16;:13;:16;:::i;:::-;39555:34;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;;;;;39667:17:0;;:35;39685:16;:9;39699:1;39685:16;:13;:16;:::i;:::-;39667:35;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;39739:31:0;;;;;;;;39750:10;;39739:31;;;;;;;;;;39780:34;;39806:7;;39794:10;;39789:3;;39780:34;;39789:3;;39780:34;37136:2683;;;;;;;;;;;:::o;26349:962::-;5918:13;;26512:19;;;;;;-1:-1:-1;;;5918:13:0;;;;:21;;5935:4;5918:21;;5910:30;;;;;;6216:7;;-1:-1:-1;;;;;6216:7:0;6202:10;:21;;:62;;-1:-1:-1;6245:10:0;6227:29;;;;:17;:29;;;;;;;;:37;;:29;:37;;6202:62;6194:71;;;;;;;;6430:7;;26457;;-1:-1:-1;;;;;6430:7:0;6416:10;:21;;:60;;-1:-1:-1;6441:27:0;;;;:18;:27;;;;;;;;:35;;:27;:35;;6416:60;6408:69;;;;;;;;26479:7;19041:16;19049:7;19041;:16::i;:::-;-1:-1:-1;;;;;19027:30:0;:10;:30;19019:39;;;;;;26534:7;:16;;26542:7;;26534:16;;;;;;;;;;;;;;;;26512:38;;26704:5;:25;;;26675:26;;:54;26662:9;:67;26654:76;;;;;;;;26825:25;;;;:32;;26855:1;26825:32;:29;:32;:::i;:::-;26797:25;;;:60;26897:16;:9;26911:1;26897:16;:13;:16;:::i;:::-;26872:41;-1:-1:-1;26950:16:0;:9;26964:1;26950:16;:13;:16;:::i;:::-;26924:42;-1:-1:-1;27034:9:0;26995:35;:14;26924:42;26995:35;:18;:35;:::i;:::-;:48;26987:57;;;;;;27106:7;;:32;;-1:-1:-1;;;;;27106:7:0;;;;:32;;;;;27123:14;;27106:7;:32;:7;:32;27123:14;27106:7;:32;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;27216:14:0;;;;:40;;-1:-1:-1;;;;;27216:14:0;;;;:40;;;;;27240:15;;27216:14;:40;:14;:40;27240:15;27216:14;:40;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;27270:36:0;;27298:7;;27270:36;;;;;6482:1;6270;26349:962;;;;:::o;46907:518::-;46970:9;46986:25;47057:9;47111:25;47183:9;47028:7;:14;;;;47014:29;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;47014:29:0;;46986:57;;47069:1;47057:13;;47052:345;47076:7;:14;47072:18;;47052:345;;;47139:7;:10;;47147:1;;47139:10;;;;;;;;;;;;;;;;:28;;;47111:56;;47195:1;47183:13;;47178:188;47202:1;47198;:5;47178:188;;;47269:17;47224:7;47232:8;47245:1;47241;:5;47232:15;;;;;;;;;;;;;;;;;;;47224:24;;;;;;;;;;;;;;;;;;:42;;;:62;47220:140;;;47310:8;47323:1;47319;:5;47310:15;;;;;;;;;;;;;;;;;;47296:8;47305:1;47296:11;;;;;;;;;;;;;;;;;;:29;47220:140;;;47347:5;;47220:140;-1:-1:-1;;47205:6:0;47178:188;;;47390:1;47376:8;47385:1;47376:11;;;;;;;;;;;;;;;;;;:15;47097:1;47092:6;;;;;47052:345;;5056:24;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5056:24:0;;-1:-1:-1;5056:24:0;:::o;19661:182::-;19716:7;19747:24;;;:15;:24;;;;;;-1:-1:-1;;;;;19747:24:0;19784:27;19747:24;19784:19;:27::i;:::-;:35;;19815:4;19784:35;;19776:44;;;;;18404:50;;;;;;;;;;;;-1:-1:-1;;;;;18404:50:0;;:::o;5316:49::-;;;;;;;;;;;;;;;:::o;5492:22::-;;;-1:-1:-1;;;;;5492:22:0;;:::o;41838:510::-;41919:25;41949:26;41980:25;42010:26;42041;42072:25;42108:18;;:::i;:::-;42129:7;:16;;42137:7;;42129:16;;;;;;;;;;;;;;;42108:37;;;42129:16;;;;;;;;42108:37;;;;;;;;;-1:-1:-1;;42108:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42129:16;;42108:37;;;;42129:16;;42108:37;;42129:16;42108:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;42108:37:0;;;-1:-1:-1;;42108:37:0;;;;;-1:-1:-1;;;;;42108:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;42108:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42167:5;:23;;;42196:5;:24;;;42226:5;:23;;;42255:5;:24;;;42285:5;:24;;;42315:5;:23;;;42154:189;;;;;;;;;;;;41838:510;;;;;;;;:::o;8728:181::-;8107:7;;-1:-1:-1;;;;;8107:7:0;8093:10;:21;8085:30;;;;;;8813:16;:38;;;8861:43;;;;;;;;;;;;;;;;;8728:181;:::o;8964:193::-;8107:7;;-1:-1:-1;;;;;8107:7:0;8093:10;:21;8085:30;;;;;;9053:18;:42;;;9105:47;;;;;;;;;;;;;;;;;8964:193;:::o;19400:189::-;19456:7;19505:27;19525:6;19505:19;:27::i;:::-;:35;;19536:4;19505:35;;19497:44;;;;;;-1:-1:-1;;;;;;19553:24:0;;;;;:16;:24;;;;;:31;;19400:189::o;10614:160::-;8107:7;;-1:-1:-1;;;;;8107:7:0;8093:10;:21;8085:30;;;;;;10693:36;;;;:18;:36;;;;;;;;;10686:43;;-1:-1:-1;;10686:43:0;;;10739:30;;;;;;;;;;;;;;;;;10614:160;:::o;10414:155::-;8107:7;;-1:-1:-1;;;;;8107:7:0;8093:10;:21;8085:30;;;;;;-1:-1:-1;;;;;10492:33:0;;;;;;:17;:33;;;;;;;;;10485:40;;-1:-1:-1;;10485:40:0;;;10535:29;;;;;;;;;;;;;;;;;10414:155;:::o;48177:518::-;48240:9;48256:25;48327:9;48381:25;48453:9;48298:7;:14;;;;48284:29;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;48284:29:0;;48256:57;;48339:1;48327:13;;48322:345;48346:7;:14;48342:18;;48322:345;;;48409:7;:10;;48417:1;;48409:10;;;;;;;;;;;;;;;;:28;;;48381:56;;48465:1;48453:13;;48448:188;48472:1;48468;:5;48448:188;;;48539:17;48494:7;48502:8;48515:1;48511;:5;48502:15;;;;;;;;;;;;;;;;;;;48494:24;;;;;;;;;;;;;;;;;;:42;;;:62;48490:140;;;48580:8;48593:1;48589;:5;48580:15;;;;;;;;;;;;;;;;;;48566:8;48575:1;48566:11;;;;;;;;;;;;;;;;;;:29;48490:140;;;48617:5;;48490:140;-1:-1:-1;;48475:6:0;48448:188;;;48660:1;48646:8;48655:1;48646:11;;;;;;;;;;;;;;;;;;:15;48367:1;48362:6;;;;;48322:345;;28444:967;5918:13;;28608:19;;;;;;-1:-1:-1;;;5918:13:0;;;;:21;;5935:4;5918:21;;5910:30;;;;;;6216:7;;-1:-1:-1;;;;;6216:7:0;6202:10;:21;;:62;;-1:-1:-1;6245:10:0;6227:29;;;;:17;:29;;;;;;;;:37;;:29;:37;;6202:62;6194:71;;;;;;;;6430:7;;28553;;-1:-1:-1;;;;;6430:7:0;6416:10;:21;;:60;;-1:-1:-1;6441:27:0;;;;:18;:27;;;;;;;;:35;;:27;:35;;6416:60;6408:69;;;;;;;;28575:7;19041:16;19049:7;19041;:16::i;:::-;-1:-1:-1;;;;;19027:30:0;:10;:30;19019:39;;;;;;28630:7;:16;;28638:7;;28630:16;;;;;;;;;;;;;;;;28608:38;;28800:5;:26;;;28771;;:55;28758:9;:68;28750:77;;;;;;;;28923:26;;;;:33;;28954:1;28923:33;:30;:33;:::i;:::-;28894:26;;;:62;28996:16;:9;29010:1;28996:16;:13;:16;:::i;:::-;28971:41;-1:-1:-1;29049:16:0;:9;29063:1;29049:16;:13;:16;:::i;:::-;29023:42;-1:-1:-1;29133:9:0;29094:35;:14;29023:42;29094:35;:18;:35;:::i;:::-;:48;29086:57;;;;;;29205:7;;:32;;-1:-1:-1;;;;;29205:7:0;;;;:32;;;;;29222:14;;29205:7;:32;:7;:32;29222:14;29205:7;:32;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;29315:14:0;;;;:40;;-1:-1:-1;;;;;29315:14:0;;;;:40;;;;;29339:15;;29315:14;:40;:14;:40;29339:15;29315:14;:40;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;29369:37:0;;29398:7;;29369:37;;;;;6482:1;6270;28444:967;;;;:::o;6860:72::-;6921:6;;;;;;;;;;;;;;;;;6860:72;:::o;47538:523::-;47602:9;47618:25;47689:9;47743:26;47817:9;47660:7;:14;;;;47646:29;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;47646:29:0;;47618:57;;47701:1;47689:13;;47684:349;47708:7;:14;47704:18;;47684:349;;;47772:7;:10;;47780:1;;47772:10;;;;;;;;;;;;;;;;:29;;;47743:58;;47829:1;47817:13;;47812:190;47836:1;47832;:5;47812:190;;;47904:18;47858:7;47866:8;47879:1;47875;:5;47866:15;;;;;;;;;;;;;;;;;;;47858:24;;;;;;;;;;;;;;;;;;:43;;;:64;47854:142;;;47946:8;47959:1;47955;:5;47946:15;;;;;;;;;;;;;;;;;;47932:8;47941:1;47932:11;;;;;;;;;;;;;;;;;;:29;47854:142;;;47983:5;;47854:142;-1:-1:-1;;47839:6:0;47812:190;;;48026:1;48012:8;48021:1;48012:11;;;;;;;;;;;;;;;;;;:15;47729:1;47724:6;;;;;47684:349;;22573:474;5918:13;;-1:-1:-1;;;5918:13:0;;;;:21;;5935:4;5918:21;;5910:30;;;;;;6216:7;;-1:-1:-1;;;;;6216:7:0;6202:10;:21;;:62;;-1:-1:-1;6245:10:0;6227:29;;;;:17;:29;;;;;;;;:37;;:29;:37;;6202:62;6194:71;;;;;;;;-1:-1:-1;;;;;22718:22:0;;22730:10;22718:22;;22710:31;;;;;;22754:29;22774:8;22754:19;:29::i;:::-;:37;;22787:4;22754:37;;22746:46;;;;;;22819:4;22805:18;;;;22801:180;;;22866:10;22831:46;;;;:34;:46;;;;;;;;-1:-1:-1;;;;;22831:56:0;;;;;;;;;:63;;-1:-1:-1;;22831:63:0;22890:4;22831:63;;;22801:180;;;22954:10;22919:46;;;;:34;:46;;;;;;;;-1:-1:-1;;;;;22919:56:0;;;;;;;;;22912:63;;-1:-1:-1;;22912:63:0;;;22801:180;22994:48;;;;;;;;;;-1:-1:-1;;;;;22994:48:0;;;23009:10;;22994:48;;;;;;;;;22573:474;;:::o;2649:43::-;;;;;;;;;;;;;;;;;;;:::o;9806:169::-;8107:7;;-1:-1:-1;;;;;8107:7:0;8093:10;:21;8085:30;;;;;;9887:14;:34;;-1:-1:-1;;;;;9887:34:0;;-1:-1:-1;;;;;;9887:34:0;;;;;;;;9931:39;;;;;;;;;;;;;;;;9806:169;:::o;18503:53::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;40826:355::-;40895:20;40920:16;40941:11;40957:17;40979:21;41011:18;;:::i;:::-;41032:7;:16;;41040:7;;41032:16;;;;;;;;;;;;;;;41011:37;;;41032:16;;;;;;;;41011:37;;;;;;;;;-1:-1:-1;;41011:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41032:16;;41011:37;;;;41032:16;;41011:37;;41032:16;41011:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;41011:37:0;;;-1:-1:-1;;41011:37:0;;;;;-1:-1:-1;;;;;41011:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;41011:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41070:5;:19;;;41095:5;:14;;;41115:5;:10;;;41131:5;:15;;;41152:5;:19;;;41057:119;;;;;;;;;;;;;;;;40826:355;;;;;;;;:::o;27394:967::-;5918:13;;27558:19;;;;;;-1:-1:-1;;;5918:13:0;;;;:21;;5935:4;5918:21;;5910:30;;;;;;6216:7;;-1:-1:-1;;;;;6216:7:0;6202:10;:21;;:62;;-1:-1:-1;6245:10:0;6227:29;;;;:17;:29;;;;;;;;:37;;:29;:37;;6202:62;6194:71;;;;;;;;6430:7;;27503;;-1:-1:-1;;;;;6430:7:0;6416:10;:21;;:60;;-1:-1:-1;6441:27:0;;;;:18;:27;;;;;;;;:35;;:27;:35;;6416:60;6408:69;;;;;;;;27525:7;19041:16;19049:7;19041;:16::i;:::-;-1:-1:-1;;;;;19027:30:0;:10;:30;19019:39;;;;;;27580:7;:16;;27588:7;;27580:16;;;;;;;;;;;;;;;;27558:38;;27750:5;:26;;;27721;;:55;27708:9;:68;27700:77;;;;;;;;27873:26;;;;:33;;27904:1;27873:33;:30;:33;:::i;:::-;27844:26;;;:62;27946:16;:9;27960:1;27946:16;:13;:16;:::i;:::-;27921:41;-1:-1:-1;27999:16:0;:9;28013:1;27999:16;:13;:16;:::i;:::-;27973:42;-1:-1:-1;28083:9:0;28044:35;:14;27973:42;28044:35;:18;:35;:::i;:::-;:48;28036:57;;;;;;28155:7;;:32;;-1:-1:-1;;;;;28155:7:0;;;;:32;;;;;28172:14;;28155:7;:32;:7;:32;28172:14;28155:7;:32;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;28265:14:0;;;;:40;;-1:-1:-1;;;;;28265:14:0;;;;:40;;;;;28289:15;;28265:14;:40;:14;:40;28289:15;28265:14;:40;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;28319:37:0;;28348:7;;28319:37;;;;;6482:1;6270;27394:967;;;;:::o;2739:80::-;;;;;;;;;;;;;;;-1:-1:-1;;2739:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5087:87::-;5155:7;:14;5087:87;:::o;20186:335::-;5918:13;;-1:-1:-1;;;5918:13:0;;;;:21;;5935:4;5918:21;;5910:30;;;;;;20308:31;20321:4;20327:2;20331:7;20308:12;:31::i;:::-;20348:24;20369:2;20348:20;:24::i;:::-;:32;;20376:4;20348:32;20344:173;;;20423:73;;-1:-1:-1;;;;;20423:73:0;;20464:10;20423:73;;;;;;-1:-1:-1;;;;;20423:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;;;;20464:10;20476:4;;20482:7;;20491:4;;;;20423:73;;;;20491:4;;;;20423:73;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20423:73:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20423:73:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20423:73:0;-1:-1:-1;;;;;;20423:87:0;-1:-1:-1;;;;;20423:87:0;20415:96;;;;;;20186:335;;;;;:::o;33722:971::-;5918:13;;33884:19;;;;;;-1:-1:-1;;;5918:13:0;;;;:21;;5935:4;5918:21;;5910:30;;;;;;6216:7;;-1:-1:-1;;;;;6216:7:0;6202:10;:21;;:62;;-1:-1:-1;6245:10:0;6227:29;;;;:17;:29;;;;;;;;:37;;:29;:37;;6202:62;6194:71;;;;;;;;6430:7;;33829;;-1:-1:-1;;;;;6430:7:0;6416:10;:21;;:60;;-1:-1:-1;6441:27:0;;;;:18;:27;;;;;;;;:35;;:27;:35;;6416:60;6408:69;;;;;;;;33851:7;19041:16;19049:7;19041;:16::i;:::-;-1:-1:-1;;;;;19027:30:0;:10;:30;19019:39;;;;;;33906:7;:16;;33914:7;;33906:16;;;;;;;;;;;;;;;;33884:38;;34076:31;34105:1;34076:5;:24;;;:28;;:31;;;;:::i;:::-;34047:26;;:60;34034:9;:73;34026:82;;;;;;34209:24;;;;:31;;34238:1;34209:31;:28;:31;:::i;:::-;34182:24;;;:58;34280:16;:9;34294:1;34280:16;:13;:16;:::i;:::-;34255:41;-1:-1:-1;34333:16:0;:9;34347:1;34333:16;:13;:16;:::i;:::-;34307:42;-1:-1:-1;34417:9:0;34378:35;:14;34307:42;34378:35;:18;:35;:::i;:::-;:48;34370:57;;;;;;34489:7;;:32;;-1:-1:-1;;;;;34489:7:0;;;;:32;;;;;34506:14;;34489:7;:32;:7;:32;34506:14;34489:7;:32;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;34599:14:0;;;;:40;;-1:-1:-1;;;;;34599:14:0;;;;:40;;;;;34623:15;;34599:14;:40;:14;:40;34623:15;34599:14;:40;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;34653:35:0;;34680:7;;34653:35;;;;;6482:1;6270;33722:971;;;;:::o;43713:508::-;43774:9;43790:25;43861:9;43915:23;43983:9;43832:7;:14;;;;43818:29;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;43818:29:0;;43790:57;;43873:1;43861:13;;43856:337;43880:7;:14;43876:18;;43856:337;;;43941:7;:10;;43949:1;;43941:10;;;;;;;;;;;;;;;;:26;;;43915:52;;43995:1;43983:13;;43978:184;44002:1;43998;:5;43978:184;;;44067:15;44024:7;44032:8;44045:1;44041;:5;44032:15;;;;;;;;;;;;;;;;;;;44024:24;;;;;;;;;;;;;;;;;;:40;;;:58;44020:136;;;44106:8;44119:1;44115;:5;44106:15;;;;;;;;;;;;;;;;;;44092:8;44101:1;44092:11;;;;;;;;;;;;;;;;;;:29;44020:136;;;44143:5;;44020:136;-1:-1:-1;;44005:6:0;43978:184;;;44186:1;44172:8;44181:1;44172:11;;;;;;;;;;;;;;;;;;:15;43901:1;43896:6;;;;;43856:337;;4004:86;4071:7;:14;4004:86;:::o;10216:150::-;8107:7;;-1:-1:-1;;;;;8107:7:0;8093:10;:21;8085:30;;;;;;10284:34;;;;:18;:34;;;;;;;;;:41;;-1:-1:-1;;10284:41:0;10321:4;10284:41;;;10335:26;;;;;;;;;;;;;;;;;10216:150;:::o;43110:498::-;43169:9;43185:25;43256:9;43310:21;43374:9;43227:7;:14;;;;43213:29;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;43213:29:0;;43185:57;;43268:1;43256:13;;43251:329;43275:7;:14;43271:18;;43251:329;;;43334:7;:10;;43342:1;;43334:10;;;;;;;;;;;;;;;;:24;;;43310:48;;43386:1;43374:13;;43369:180;43393:1;43389;:5;43369:180;;;43456:13;43415:7;43423:8;43436:1;43432;:5;43423:15;;;;;;;;;;;;;;;;;;;43415:24;;;;;;;;;;;;;;;;;;:38;;;:54;43411:132;;;43493:8;43506:1;43502;:5;43493:15;;;;;;;;;;;;;;;;;;43479:8;43488:1;43479:11;;;;;;;;;;;;;;;;;;:29;43411:132;;;43530:5;;43411:132;-1:-1:-1;;43396:6:0;43369:180;;;43573:1;43559:8;43568:1;43559:11;;;;;;;;;;;;;;;;;;:15;43296:1;43291:6;;;;;43251:329;;50086:518;50149:9;50165:25;50236:9;50290:25;50362:9;50207:7;:14;;;;50193:29;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;50193:29:0;;50165:57;;50248:1;50236:13;;50231:345;50255:7;:14;50251:18;;50231:345;;;50318:7;:10;;50326:1;;50318:10;;;;;;;;;;;;;;;;:28;;;50290:56;;50374:1;50362:13;;50357:188;50381:1;50377;:5;50357:188;;;50448:17;50403:7;50411:8;50424:1;50420;:5;50411:15;;;;;;;;;;;;;;;;;;;50403:24;;;;;;;;;;;;;;;;;;:42;;;:62;50399:140;;;50489:8;50502:1;50498;:5;50489:15;;;;;;;;;;;;;;;;;;50475:8;50484:1;50475:11;;;;;;;;;;;;;;;;;;:29;50399:140;;;50526:5;;50399:140;-1:-1:-1;;50384:6:0;50357:188;;;50569:1;50555:8;50564:1;50555:11;;;;;;;;;;;;;;;;;;:15;50276:1;50271:6;;;;;50231:345;;7034:159;7130:20;7112:76;;;;;;;;;;;;;-1:-1:-1;;7112:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;7092:6;;7112:76;;;;7130:20;;7112:76;;7130:20;7112:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7152:35;7179:7;7152:26;:35::i;:::-;7112:17;:76::i;34780:968::-;5918:13;;34942:19;;;;;;-1:-1:-1;;;5918:13:0;;;;:21;;5935:4;5918:21;;5910:30;;;;;;6216:7;;-1:-1:-1;;;;;6216:7:0;6202:10;:21;;:62;;-1:-1:-1;6245:10:0;6227:29;;;;:17;:29;;;;;;;;:37;;:29;:37;;6202:62;6194:71;;;;;;;;6430:7;;34887;;-1:-1:-1;;;;;6430:7:0;6416:10;:21;;:60;;-1:-1:-1;6441:27:0;;;;:18;:27;;;;;;;;:35;;:27;:35;;6416:60;6408:69;;;;;;;;34909:7;19041:16;19049:7;19041;:16::i;:::-;-1:-1:-1;;;;;19027:30:0;:10;:30;19019:39;;;;;;34964:7;:16;;34972:7;;34964:16;;;;;;;;;;;;;;;;34942:38;;35134:31;35163:1;35134:5;:24;;;:28;;:31;;;;:::i;:::-;35105:26;;:60;35092:9;:73;35084:82;;;;;;35264:24;;;;:31;;35293:1;35264:31;:28;:31;:::i;:::-;35237:24;;;:58;35335:16;:9;35349:1;35335:16;:13;:16;:::i;:::-;35310:41;-1:-1:-1;35388:16:0;:9;35402:1;35388:16;:13;:16;:::i;:::-;35362:42;-1:-1:-1;35472:9:0;35433:35;:14;35362:42;35433:35;:18;:35;:::i;:::-;:48;35425:57;;;;;;35544:7;;:32;;-1:-1:-1;;;;;35544:7:0;;;;:32;;;;;35561:14;;35544:7;:32;:7;:32;35561:14;35544:7;:32;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;35654:14:0;;;;:40;;-1:-1:-1;;;;;35654:14:0;;;;:40;;;;;35678:15;;35654:14;:40;:14;:40;35678:15;35654:14;:40;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;35708:35:0;;35735:7;;35708:35;;;;;6482:1;6270;34780:968;;;;:::o;32666:966::-;5918:13;;32827:19;;;;;;-1:-1:-1;;;5918:13:0;;;;:21;;5935:4;5918:21;;5910:30;;;;;;6216:7;;-1:-1:-1;;;;;6216:7:0;6202:10;:21;;:62;;-1:-1:-1;6245:10:0;6227:29;;;;:17;:29;;;;;;;;:37;;:29;:37;;6202:62;6194:71;;;;;;;;6430:7;;32772;;-1:-1:-1;;;;;6430:7:0;6416:10;:21;;:60;;-1:-1:-1;6441:27:0;;;;:18;:27;;;;;;;;:35;;:27;:35;;6416:60;6408:69;;;;;;;;32794:7;19041:16;19049:7;19041;:16::i;:::-;-1:-1:-1;;;;;19027:30:0;:10;:30;19019:39;;;;;;32849:7;:16;;32857:7;;32849:16;;;;;;;;;;;;;;;;32827:38;;33019:30;33047:1;33019:5;:23;;;:27;;:30;;;;:::i;:::-;32990:26;;:59;32977:9;:72;32969:81;;;;;;33150:23;;;;:30;;33178:1;33150:30;:27;:30;:::i;:::-;33124:23;;;:56;33220:16;:9;33234:1;33220:16;:13;:16;:::i;:::-;33195:41;-1:-1:-1;33273:16:0;:9;33287:1;33273:16;:13;:16;:::i;:::-;33247:42;-1:-1:-1;33357:9:0;33318:35;:14;33247:42;33318:35;:18;:35;:::i;:::-;:48;33310:57;;;;;;33429:7;;:32;;-1:-1:-1;;;;;33429:7:0;;;;:32;;;;;33446:14;;33429:7;:32;:7;:32;33446:14;33429:7;:32;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;33539:14:0;;;;:40;;-1:-1:-1;;;;;33539:14:0;;;;:40;;;;;33563:15;;33539:14;:40;:14;:40;33563:15;33539:14;:40;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;33593:34:0;;33619:7;;33593:34;;;;;6482:1;6270;32666:966;;;;:::o;8555:118::-;8107:7;;-1:-1:-1;;;;;8107:7:0;8093:10;:21;8085:30;;;;;;6046:13;;-1:-1:-1;;;6046:13:0;;;;:21;;6063:4;6046:21;6038:30;;;;;;8622:13;:21;;-1:-1:-1;;8622:21:0;;;8653:15;;;;8638:5;;8653:15;8555:118::o;2935:46::-;;;;:::o;49447:523::-;49511:9;49527:25;49598:9;49652:26;49726:9;49569:7;:14;;;;49555:29;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;49555:29:0;;49527:57;;49610:1;49598:13;;49593:349;49617:7;:14;49613:18;;49593:349;;;49681:7;:10;;49689:1;;49681:10;;;;;;;;;;;;;;;;:29;;;49652:58;;49738:1;49726:13;;49721:190;49745:1;49741;:5;49721:190;;;49813:18;49767:7;49775:8;49788:1;49784;:5;49775:15;;;;;;;;;;;;;;;;;;;49767:24;;;;;;;;;;;;;;;;;;:43;;;:64;49763:142;;;49855:8;49868:1;49864;:5;49855:15;;;;;;;;;;;;;;;;;;49841:8;49850:1;49841:11;;;;;;;;;;;;;;;;;;:29;49763:142;;;49892:5;;49763:142;-1:-1:-1;;49748:6:0;49721:190;;;49935:1;49921:8;49930:1;49921:11;;;;;;;;;;;;;;;;;;:15;49638:1;49633:6;;;;;49593:349;;9257:241;8107:7;;-1:-1:-1;;;;;8107:7:0;8093:10;:21;8085:30;;;;;;9362:26;:58;;;9430:63;;;;;;;;;;;;;;;;;9257:241;:::o;23335:164::-;-1:-1:-1;;;;;23434:42:0;;;23416:4;23434:42;;;:34;:42;;;;;;;;:52;;;;;;;;;;;;:60;;:52;:60;23335:164;;;;:::o;39866:238::-;5918:13;;-1:-1:-1;;;5918:13:0;;;;:21;;5935:4;5918:21;;5910:30;;;;;;6216:7;;-1:-1:-1;;;;;6216:7:0;6202:10;:21;;:62;;-1:-1:-1;6245:10:0;6227:29;;;;:17;:29;;;;;;;;:37;;:29;:37;;6202:62;6194:71;;;;;;;;6430:7;;39978;;-1:-1:-1;;;;;6430:7:0;6416:10;:21;;:60;;-1:-1:-1;6441:27:0;;;;:18;:27;;;;;;;;:35;;:27;:35;;6416:60;6408:69;;;;;;;;40000:7;19041:16;19049:7;19041;:16::i;:::-;-1:-1:-1;;;;;19027:30:0;:10;:30;19019:39;;;;;;40045:7;40021;40029;40021:16;;;;;;;;;;;;;;;;;;;;:21;;:31;;;;;;;;;;;;:::i;:::-;;40082:7;40066:33;40091:7;40066:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;40066:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6482:1;6270;39866:238;;:::o;8167:180::-;8107:7;;8238:18;;-1:-1:-1;;;;;8107:7:0;8093:10;:21;8085:30;;;;;;-1:-1:-1;8259:7:0;;;-1:-1:-1;;;;;8271:20:0;;;-1:-1:-1;;;;;;8271:20:0;;;;;;;8301:41;;;8259:7;;;;8301:41;;;;;;;;;;;;;;;;;;;;;;;8167:180;;:::o;48811:523::-;48875:9;48891:25;48962:9;49016:26;49090:9;48933:7;:14;;;;48919:29;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;48919:29:0;;48891:57;;48974:1;48962:13;;48957:349;48981:7;:14;48977:18;;48957:349;;;49045:7;:10;;49053:1;;49045:10;;;;;;;;;;;;;;;;:29;;;49016:58;;49102:1;49090:13;;49085:190;49109:1;49105;:5;49085:190;;;49177:18;49131:7;49139:8;49152:1;49148;:5;49139:15;;;;;;;;;;;;;;;;;;;49131:24;;;;;;;;;;;;;;;;;;:43;;;:64;49127:142;;;49219:8;49232:1;49228;:5;49219:15;;;;;;;;;;;;;;;;;;49205:8;49214:1;49205:11;;;;;;;;;;;;;;;;;;:29;49127:142;;;49256:5;;49127:142;-1:-1:-1;;49112:6:0;49085:190;;;49299:1;49285:8;49294:1;49285:11;;;;;;;;;;;;;;;;;;:15;49002:1;48997:6;;;;;48957:349;;46251:543;46319:9;46335:25;46406:9;46460:30;46542:9;46377:7;:14;;;;46363:29;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;46363:29:0;;46335:57;;46418:1;46406:13;;46401:365;46425:7;:14;46421:18;;46401:365;;;46493:7;:10;;46501:1;;46493:10;;;;;;;;;;;;;;;;:33;;;46460:66;;46554:1;46542:13;;46537:198;46561:1;46557;:5;46537:198;;;46633:22;46583:7;46591:8;46604:1;46600;:5;46591:15;;;;;;;;;;;;;;;;;;;46583:24;;;;;;;;;;;;;;;;;;:47;;;:72;46579:150;;;46679:8;46692:1;46688;:5;46679:15;;;;;;;;;;;;;;;;;;46665:8;46674:1;46665:11;;;;;;;;;;;;;;;;;;:29;46579:150;;;46716:5;;46579:150;-1:-1:-1;;46564:6:0;46537:198;;;46759:1;46745:8;46754:1;46745:11;;;;;;;;;;;;;;;;;;:15;46446:1;46441:6;;;;;46401:365;;29494:977;5918:13;;29660:19;;;;;;-1:-1:-1;;;5918:13:0;;;;:21;;5935:4;5918:21;;5910:30;;;;;;6216:7;;-1:-1:-1;;;;;6216:7:0;6202:10;:21;;:62;;-1:-1:-1;6245:10:0;6227:29;;;;:17;:29;;;;;;;;:37;;:29;:37;;6202:62;6194:71;;;;;;;;6430:7;;29605;;-1:-1:-1;;;;;6430:7:0;6416:10;:21;;:60;;-1:-1:-1;6441:27:0;;;;:18;:27;;;;;;;;:35;;:27;:35;;6416:60;6408:69;;;;;;;;29627:7;19041:16;19049:7;19041;:16::i;:::-;-1:-1:-1;;;;;19027:30:0;:10;:30;19019:39;;;;;;29682:7;:16;;29690:7;;29682:16;;;;;;;;;;;;;;;;29660:38;;29852:5;:28;;;29823:26;;:57;29810:9;:70;29802:79;;;;;;;;29979:28;;;;:35;;30012:1;29979:35;:32;:35;:::i;:::-;29948:28;;;:66;30054:16;:9;30068:1;30054:16;:13;:16;:::i;:::-;30029:41;-1:-1:-1;30107:16:0;:9;30121:1;30107:16;:13;:16;:::i;:::-;30081:42;-1:-1:-1;30191:9:0;30152:35;:14;30081:42;30152:35;:18;:35;:::i;:::-;:48;30144:57;;;;;;30263:7;;:32;;-1:-1:-1;;;;;30263:7:0;;;;:32;;;;;30280:14;;30263:7;:32;:7;:32;30280:14;30263:7;:32;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;30373:14:0;;;;:40;;-1:-1:-1;;;;;30373:14:0;;;;:40;;;;;30397:15;;30373:14;:40;:14;:40;30397:15;30373:14;:40;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;30427:39:0;;30458:7;;30427:39;;;;;6482:1;6270;29494:977;;;;:::o;2696:39::-;;;;;;;;;;;;;;;;;;;:::o;44967:533::-;45033:9;45049:25;45120:9;45174:28;45252:9;45091:7;:14;;;;45077:29;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;45077:29:0;;45049:57;;45132:1;45120:13;;45115:357;45139:7;:14;45135:18;;45115:357;;;45205:7;:10;;45213:1;;45205:10;;;;;;;;;;;;;;;;:31;;;45174:62;;45264:1;45252:13;;45247:194;45271:1;45267;:5;45247:194;;;45341:20;45293:7;45301:8;45314:1;45310;:5;45301:15;;;;;;;;;;;;;;;;;;;45293:24;;;;;;;;;;;;;;;;;;:45;;;:68;45289:146;;;45385:8;45398:1;45394;:5;45385:15;;;;;;;;;;;;;;;;;;45371:8;45380:1;45371:11;;;;;;;;;;;;;;;;;;:29;45289:146;;;45422:5;;45289:146;-1:-1:-1;;45274:6:0;45247:194;;;45465:1;45451:8;45460:1;45451:11;;;;;;;;;;;;;;;;;;:15;45160:1;45155:6;;;;;45115:357;;25328:938;5918:13;;25487:19;;;;;;-1:-1:-1;;;5918:13:0;;;;:21;;5935:4;5918:21;;5910:30;;;;;;6216:7;;-1:-1:-1;;;;;6216:7:0;6202:10;:21;;:62;;-1:-1:-1;6245:10:0;6227:29;;;;:17;:29;;;;;;;;:37;;:29;:37;;6202:62;6194:71;;;;;;;;6430:7;;25432;;-1:-1:-1;;;;;6430:7:0;6416:10;:21;;:60;;-1:-1:-1;6441:27:0;;;;:18;:27;;;;;;;;:35;;:27;:35;;6416:60;6408:69;;;;;;;;25454:7;19041:16;19049:7;19041;:16::i;:::-;-1:-1:-1;;;;;19027:30:0;:10;:30;19019:39;;;;;;25509:7;:16;;25517:7;;25509:16;;;;;;;;;;;;;;;;25487:38;;25679:5;:21;;;25650:26;;:50;25637:9;:63;25629:72;;;;;;;;25788:21;;;;:28;;25814:1;25788:28;:25;:28;:::i;:::-;25764:21;;;:52;25856:16;:9;25870:1;25856:16;:13;:16;:::i;:::-;25831:41;-1:-1:-1;25909:16:0;:9;25923:1;25909:16;:13;:16;:::i;:::-;25883:42;-1:-1:-1;25993:9:0;25954:35;:14;25883:42;25954:35;:18;:35;:::i;:::-;:48;25946:57;;;;;;26065:7;;:32;;-1:-1:-1;;;;;26065:7:0;;;;:32;;;;;26082:14;;26065:7;:32;:7;:32;26082:14;26065:7;:32;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;26175:14:0;;;;:40;;-1:-1:-1;;;;;26175:14:0;;;;:40;;;;;26199:15;;26175:14;:40;:14;:40;26199:15;26175:14;:40;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;26229:32:0;;26253:7;;26229:32;;;;;6482:1;6270;25328:938;;;;:::o;4164:346::-;4240:7;4254:12;4309:18;4341:9;4285:13;4269:31;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;4269:31:0;;;;;;;;;;;;;;;;4254:46;;4330:1;4309:22;;4353:1;4341:13;;4336:144;4360:7;:14;4356:18;;4336:144;;;4410:7;:10;;4440:4;;4410:7;4418:1;;4410:10;;;;;;;;;;;;;;;;:24;;4394:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;4390:85;;;4467:1;4453:15;;;;4390:85;4381:1;4376:6;4336:144;;;-1:-1:-1;4495:10:0;4164:346;-1:-1:-1;;;4164:346:0:o;31608:968::-;5918:13;;31770:19;;;;;;-1:-1:-1;;;5918:13:0;;;;:21;;5935:4;5918:21;;5910:30;;;;;;6216:7;;-1:-1:-1;;;;;6216:7:0;6202:10;:21;;:62;;-1:-1:-1;6245:10:0;6227:29;;;;:17;:29;;;;;;;;:37;;:29;:37;;6202:62;6194:71;;;;;;;;6430:7;;31715;;-1:-1:-1;;;;;6430:7:0;6416:10;:21;;:60;;-1:-1:-1;6441:27:0;;;;:18;:27;;;;;;;;:35;;:27;:35;;6416:60;6408:69;;;;;;;;31737:7;19041:16;19049:7;19041;:16::i;:::-;-1:-1:-1;;;;;19027:30:0;:10;:30;19019:39;;;;;;31792:7;:16;;31800:7;;31792:16;;;;;;;;;;;;;;;;31770:38;;31962:31;31991:1;31962:5;:24;;;:28;;:31;;;;:::i;:::-;31933:26;;:60;31920:9;:73;31912:82;;;;;;32092:24;;;;:31;;32121:1;32092:31;:28;:31;:::i;:::-;32065:24;;;:58;32163:16;:9;32177:1;32163:16;:13;:16;:::i;:::-;32138:41;-1:-1:-1;32216:16:0;:9;32230:1;32216:16;:13;:16;:::i;:::-;32190:42;-1:-1:-1;32300:9:0;32261:35;:14;32190:42;32261:35;:18;:35;:::i;:::-;:48;32253:57;;;;;;32372:7;;:32;;-1:-1:-1;;;;;32372:7:0;;;;:32;;;;;32389:14;;32372:7;:32;:7;:32;32389:14;32372:7;:32;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;32482:14:0;;;;:40;;-1:-1:-1;;;;;32482:14:0;;;;:40;;;;;32506:15;;32482:14;:40;:14;:40;32506:15;32482:14;:40;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;32536:35:0;;32563:7;;32536:35;;;;;6482:1;6270;31608:968;;;;:::o;6546:146::-;6614:4;-1:-1:-1;;;;;6636:20:0;;;;:51;;-1:-1:-1;;;;;;;6664:23:0;6682:4;6664:23;;6546:146::o;17744:120::-;17822:5;;;17839:6;;;;17832:14;;;18152:91;18210:9;18237:1;18233;:5;;;;;;;;;18152:91;-1:-1:-1;;;18152:91:0:o;17870:110::-;17928:9;17951:6;;;;17944:14;;;;-1:-1:-1;17970:5:0;;;17870:110::o;19914:155::-;19980:4;20026:17;;20056:8;;;;19914:155::o;17986:160::-;18044:9;18064:6;;18060:32;;;-1:-1:-1;18085:1:0;18078:8;;18060:32;-1:-1:-1;18100:5:0;;;18104:1;18100;:5;18117;;;;;;;;:10;18110:18;;;1982:530;2041:10;2130:9;;2041:10;2130:9;2068:6;;2064:46;;;2088:10;;;;;;;;;;;;;;;;;;-1:-1:-1;2088:10:0;;2064:46;2142:1;2130:13;;2179:74;2186:6;;2179:74;;2218:1;2208:11;;;;;2239:2;2234:7;;;;2179:74;;;2303:6;2293:17;;;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;2293:17:0;-1:-1:-1;2273:37:0;-1:-1:-1;;;;2333:10:0;;2354:111;2361:6;;2354:111;;2407:2;2403:1;:6;2398:2;:11;-1:-1:-1;;;2393:17:0;2383:4;2388:1;2383:7;;;;;;;;;;;;;;:27;;;;;;;;;;-1:-1:-1;2430:2:0;2425:7;;;-1:-1:-1;;;2447:6:0;2354:111;;;-1:-1:-1;2499:4:0;1982:530;-1:-1:-1;;;;1982:530:0:o;1498:432::-;1557:8;1576:15;1607;1638;1705:9;1723;1600:1;1576:26;;1631:1;1607:26;;1685:2;:9;1673:2;:9;:21;1662:33;;;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;1662:33:0;-1:-1:-1;1638:58:0;-1:-1:-1;1717:1:0;;-1:-1:-1;1717:1:0;;-1:-1:-1;1745:72:0;1761:2;:9;1757:1;:13;1745:72;;;1794:2;1797:1;1794:5;;;;;;;;;;;;;;;-1:-1:-1;;;1794:5:0;;-1:-1:-1;;;1794:5:0;1786:2;1789:1;1786:5;;;;;;;;;;;;;;:13;;;;;;;;;;-1:-1:-1;1810:1:0;1805:6;;;;1772;1745:72;;;-1:-1:-1;1834:1:0;1825:72;1841:2;:9;1837:1;:13;1825:72;;;1874:2;1877:1;1874:5;;;;;;;;;;;;;;;-1:-1:-1;;;1874:5:0;;-1:-1:-1;;;1874:5:0;1866:2;1869:1;1866:5;;;;;;;;;;;;;;:13;;;;;;;;;;-1:-1:-1;1890:1:0;1885:6;;;;1852;1825:72;;;-1:-1:-1;1919:2:0;;1498:432;-1:-1:-1;;;;;;1498:432:0:o;50644:491::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;50644:491:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50644:491:0;;;-1:-1:-1;50644:491:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
bzzr://3cee229dbe0a934f04e79b306f1edca4e8f537851e29777f87c83103d931af26
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 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.