@woolball/commander-token-contracts
Version:
Commander token contracts
944 lines • 87.9 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "CommanderTokenMintTest",
"sourceName": "contracts/test/CommanderTokenMintTest.sol",
"abi": [
{
"inputs": [
{
"internalType": "string",
"name": "name_",
"type": "string"
},
{
"internalType": "string",
"name": "symbol_",
"type": "string"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "approved",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "Approval",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"indexed": false,
"internalType": "bool",
"name": "approved",
"type": "bool"
}
],
"name": "ApprovalForAll",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "to",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "Transfer",
"type": "event"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "approve",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_toNFTContractAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "_approvedId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
}
],
"name": "approve",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_NFTContract",
"type": "address"
},
{
"internalType": "uint256",
"name": "_NFTTokenId",
"type": "uint256"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "balance",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "burn",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "getApproved",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "getApprovedNft",
"outputs": [
{
"internalType": "address",
"name": "_NFTContractAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "ownerNftContractAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "ownerNftTokenId",
"type": "uint256"
},
{
"internalType": "address",
"name": "operator",
"type": "address"
}
],
"name": "isApprovedForAll",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "address",
"name": "operatorNFTContractAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "operatorNftTokenId",
"type": "uint256"
}
],
"name": "isApprovedForAll",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "address",
"name": "operator",
"type": "address"
}
],
"name": "isApprovedForAll",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
}
],
"name": "isBurnable",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
},
{
"internalType": "address",
"name": "_dependableContractAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "_dependentTokenId",
"type": "uint256"
}
],
"name": "isDependent",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
}
],
"name": "isTransferable",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "toNFTContract",
"type": "address"
},
{
"internalType": "uint256",
"name": "toNFTTokenId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "mint",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "mint",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "name",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "ownerOf",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
}
],
"name": "ownerOfNft",
"outputs": [
{
"internalType": "address",
"name": "NFTContractAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "owner",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_fromAddress",
"type": "address"
},
{
"internalType": "address",
"name": "_toNFTContractAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "_toTokenId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
}
],
"name": "safeTransferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "safeTransferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_fromNFTContractAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "_fromTokenId",
"type": "uint256"
},
{
"internalType": "address",
"name": "_toAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
}
],
"name": "safeTransferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "safeTransferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_fromNFTContractAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "_fromTokenId",
"type": "uint256"
},
{
"internalType": "address",
"name": "_toNFTContractAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "_toTokenId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
}
],
"name": "safeTransferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_operatorNFTContractAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "_operatorId",
"type": "uint256"
},
{
"internalType": "bool",
"name": "_approved",
"type": "bool"
}
],
"name": "setApprovalForAll",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "bool",
"name": "approved",
"type": "bool"
}
],
"name": "setApprovalForAll",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "bool",
"name": "burnable",
"type": "bool"
}
],
"name": "setBurnable",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
},
{
"internalType": "contract ICommanderToken",
"name": "_dependableContractAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "_dependentTokenId",
"type": "uint256"
},
{
"internalType": "bool",
"name": "_dependent",
"type": "bool"
}
],
"name": "setDependence",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "bool",
"name": "transferable",
"type": "bool"
}
],
"name": "setTransferable",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "symbol",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "tokenURI",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_fromNFTContractAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "_fromId",
"type": "uint256"
},
{
"internalType": "address",
"name": "_toNFTContractAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "_toId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
}
],
"name": "transferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "transferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_fromNFTContractAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "_fromId",
"type": "uint256"
},
{
"internalType": "address",
"name": "_toAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
}
],
"name": "transferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_fromAddress",
"type": "address"
},
{
"internalType": "address",
"name": "_toNFTContractAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "_toId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
}
],
"name": "transferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"bytecode": "0x60806040523480156200001157600080fd5b5060405162004562380380620045628339818101604052810190620000379190620002ec565b8181818181600090816200004c9190620005bc565b5080600190816200005e9190620005bc565b50505062000081620000756200008b60201b60201c565b6200009360201b60201c565b50505050620006a3565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620001c28262000177565b810181811067ffffffffffffffff82111715620001e457620001e362000188565b5b80604052505050565b6000620001f962000159565b9050620002078282620001b7565b919050565b600067ffffffffffffffff8211156200022a576200022962000188565b5b620002358262000177565b9050602081019050919050565b60005b838110156200026257808201518184015260208101905062000245565b60008484015250505050565b6000620002856200027f846200020c565b620001ed565b905082815260208101848484011115620002a457620002a362000172565b5b620002b184828562000242565b509392505050565b600082601f830112620002d157620002d06200016d565b5b8151620002e38482602086016200026e565b91505092915050565b6000806040838503121562000306576200030562000163565b5b600083015167ffffffffffffffff81111562000327576200032662000168565b5b6200033585828601620002b9565b925050602083015167ffffffffffffffff81111562000359576200035862000168565b5b6200036785828601620002b9565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620003c457607f821691505b602082108103620003da57620003d96200037c565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004447fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000405565b62000450868362000405565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200049d62000497620004918462000468565b62000472565b62000468565b9050919050565b6000819050919050565b620004b9836200047c565b620004d1620004c882620004a4565b84845462000412565b825550505050565b600090565b620004e8620004d9565b620004f5818484620004ae565b505050565b5b818110156200051d5762000511600082620004de565b600181019050620004fb565b5050565b601f8211156200056c576200053681620003e0565b6200054184620003f5565b8101602085101562000551578190505b620005696200056085620003f5565b830182620004fa565b50505b505050565b600082821c905092915050565b6000620005916000198460080262000571565b1980831691505092915050565b6000620005ac83836200057e565b9150826002028217905092915050565b620005c78262000371565b67ffffffffffffffff811115620005e357620005e262000188565b5b620005ef8254620003ab565b620005fc82828562000521565b600060209050601f8311600181146200063457600084156200061f578287015190505b6200062b85826200059e565b8655506200069b565b601f1984166200064486620003e0565b60005b828110156200066e5784890151825560018201915060208501945060208101905062000647565b868310156200068e57848901516200068a601f8916826200057e565b8355505b6001600288020188555050505b505050505050565b613eaf80620006b36000396000f3fe608060405234801561001057600080fd5b50600436106102315760003560e01c806373fc1a0f11610130578063b922f94c116100b8578063dfe28fbf1161007c578063dfe28fbf146106cc578063e985e9c5146106e8578063f2fde38b14610718578063f63e702014610734578063fe99049a1461075057610231565b8063b922f94c146105ef578063ba24bb3714610620578063c6f88d4a14610650578063c74b2ca914610680578063c87b56dd1461069c57610231565b806395d89b41116100ff57806395d89b411461054d578063a22cb4651461056b578063ac689bcd14610587578063b2564569146105a3578063b88d4fde146105d357610231565b806373fc1a0f146104b357806389c8af83146104e35780638da5cb5b146104ff5780638fc76be71461051d57610231565b806323b872dd116101be57806342842e0e1161018257806342842e0e1461041157806342966c681461042d5780636352211e1461044957806370a0823114610479578063715018a6146104a957610231565b806323b872dd14610385578063285d2180146103a157806333699624146103bd57806340c10f19146103d9578063426a8493146103f557610231565b8063095ea7b311610205578063095ea7b3146102e45780630febdd4914610300578063156e29f61461031c5780631cb98226146103385780631d856ea71461036957610231565b8062fdd58e1461023657806301ffc9a71461026657806306fdde0314610296578063081812fc146102b4575b600080fd5b610250600480360381019061024b9190612aae565b61076c565b60405161025d9190612afd565b60405180910390f35b610280600480360381019061027b9190612b70565b610878565b60405161028d9190612bb8565b60405180910390f35b61029e61095a565b6040516102ab9190612c63565b60405180910390f35b6102ce60048036038101906102c99190612c85565b6109ec565b6040516102db9190612cc1565b60405180910390f35b6102fe60048036038101906102f99190612aae565b610a32565b005b61031a60048036038101906103159190612cdc565b610b49565b005b61033660048036038101906103319190612d43565b610b9f565b005b610352600480360381019061034d9190612c85565b610baf565b604051610360929190612d96565b60405180910390f35b610383600480360381019061037e9190612dbf565b610c51565b005b61039f600480360381019061039a9190612e3a565b610c58565b005b6103bb60048036038101906103b69190612eb9565b610cb8565b005b6103d760048036038101906103d29190612f0c565b610cbd565b005b6103f360048036038101906103ee9190612aae565b610d97565b005b61040f600480360381019061040a9190612d43565b610da5565b005b61042b60048036038101906104269190612e3a565b610daa565b005b61044760048036038101906104429190612c85565b610dca565b005b610463600480360381019061045e9190612c85565b610dcd565b6040516104709190612cc1565b60405180910390f35b610493600480360381019061048e9190612f4c565b610e53565b6040516104a09190612afd565b60405180910390f35b6104b1610f0a565b005b6104cd60048036038101906104c89190612f79565b610f1e565b6040516104da9190612bb8565b60405180910390f35b6104fd60048036038101906104f89190612fcc565b610fc4565b005b610507610fca565b6040516105149190612cc1565b60405180910390f35b61053760048036038101906105329190613033565b610ff4565b6040516105449190612bb8565b60405180910390f35b610555611071565b6040516105629190612c63565b60405180910390f35b61058560048036038101906105809190613086565b611103565b005b6105a1600480360381019061059c9190612fcc565b611119565b005b6105bd60048036038101906105b89190612c85565b61111f565b6040516105ca9190612bb8565b60405180910390f35b6105ed60048036038101906105e891906131fb565b611126565b005b61060960048036038101906106049190612c85565b611188565b604051610617929190612d96565b60405180910390f35b61063a60048036038101906106359190612e3a565b611201565b6040516106479190612bb8565b60405180910390f35b61066a60048036038101906106659190612c85565b6112a7565b6040516106779190612bb8565b60405180910390f35b61069a600480360381019061069591906132bc565b6112ae565b005b6106b660048036038101906106b19190612c85565b6112b4565b6040516106c39190612c63565b60405180910390f35b6106e660048036038101906106e19190612f0c565b61131c565b005b61070260048036038101906106fd9190613323565b6113f6565b60405161070f9190612bb8565b60405180910390f35b610732600480360381019061072d9190612f4c565b61148a565b005b61074e60048036038101906107499190612dbf565b61150d565b005b61076a60048036038101906107659190612cdc565b611514565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036107dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d3906133d5565b60405180910390fd5b6000820361081f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081690613467565b60405180910390fd5b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061094357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061095357506109528261151a565b5b9050919050565b606060008054610969906134b6565b80601f0160208091040260200160405190810160405280929190818152602001828054610995906134b6565b80156109e25780601f106109b7576101008083540402835291602001916109e2565b820191906000526020600020905b8154815290600101906020018083116109c557829003601f168201915b5050505050905090565b60006109f782611584565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a3d82610dcd565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610aad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa490613559565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610acc6115cf565b73ffffffffffffffffffffffffffffffffffffffff161480610afb5750610afa81610af56115cf565b6113f6565b5b610b3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b31906135eb565b60405180910390fd5b610b4483836115d7565b505050565b610b5a610b546115cf565b82611690565b610b99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b909061367d565b60405180910390fd5b50505050565b610baa838383611822565b505050565b600080610bbb83611584565b6000600a60008581526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820154815250509050806000015181602001519250925050915091565b5050505050565b610c69610c636115cf565b82611690565b610ca8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9f9061367d565b60405180910390fd5b610cb3838383611a19565b505050565b505050565b610cce610cc86115cf565b83611690565b610d0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d049061367d565b60405180910390fd5b806007600084815260200190815260200160002060020160016101000a81548160ff0219169083151502179055506007600083815260200190815260200160002060000160009054906101000a900460ff16610d935760016007600084815260200190815260200160002060000160006101000a81548160ff0219169083151502179055505b5050565b610da18282611d12565b5050565b505050565b610dc583838360405180602001604052806000815250611126565b505050565b50565b600080610dd983611f2f565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e41906136e9565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ec3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eba9061377b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f12611f6c565b610f1c6000611fea565b565b6000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690509392505050565b50505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006007600085815260200190815260200160002060010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060009054906101000a900460ff1690509392505050565b606060018054611080906134b6565b80601f01602080910402602001604051908101604052809291908181526020018280546110ac906134b6565b80156110f95780601f106110ce576101008083540402835291602001916110f9565b820191906000526020600020905b8154815290600101906020018083116110dc57829003601f168201915b5050505050905090565b61111561110e6115cf565b83836120b0565b5050565b50505050565b6000919050565b6111376111316115cf565b83611690565b611176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116d9061367d565b60405180910390fd5b6111828484848461221c565b50505050565b600080600061119684612278565b905060001515811515146111df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d6906137e7565b60405180910390fd5b60006111ea856122bd565b905080600001518160200151935093505050915091565b6000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060009054906101000a900460ff1690509392505050565b6000919050565b50505050565b60606112bf82611584565b60006112c961234a565b905060008151116112e95760405180602001604052806000815250611314565b806112f384612361565b604051602001611304929190613843565b6040516020818303038152906040525b915050919050565b61132d6113276115cf565b83611690565b61136c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113639061367d565b60405180910390fd5b806007600084815260200190815260200160002060020160006101000a81548160ff0219169083151502179055506007600083815260200190815260200160002060000160009054906101000a900460ff166113f25760016007600084815260200190815260200160002060000160006101000a81548160ff0219169083151502179055505b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611492611f6c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f8906138d9565b60405180910390fd5b61150a81611fea565b50565b5050505050565b50505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61158d8161242f565b6115cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c3906136e9565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661164a83610dcd565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061169c83612470565b9050600060028111156116b2576116b16138f9565b5b8160028111156116c5576116c46138f9565b5b036116dc576116d48484612518565b91505061181c565b600160028111156116f0576116ef6138f9565b5b816002811115611703576117026138f9565b5b0361181a5760008061171485611188565b915091508173ffffffffffffffffffffffffffffffffffffffff16636352211e826040518263ffffffff1660e01b81526004016117519190612afd565b602060405180830381865afa15801561176e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611792919061393d565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614806117d257506117d1828288610f1e565b5b8061181057508573ffffffffffffffffffffffffffffffffffffffff166117f8866109ec565b73ffffffffffffffffffffffffffffffffffffffff16145b935050505061181c565b505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611891576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611888906139b6565b60405180910390fd5b61189a8161242f565b156118da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d190613a22565b60405180910390fd5b6118e38161242f565b15611923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191a90613a22565b60405180910390fd5b6001600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008481526020019081526020016000206000828254019250508190555060405180604001604052808473ffffffffffffffffffffffffffffffffffffffff168152602001838152506008600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010155905050505050565b8273ffffffffffffffffffffffffffffffffffffffff16611a3982610dcd565b73ffffffffffffffffffffffffffffffffffffffff1614611a8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8690613ab4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af590613b46565b60405180910390fd5b611b0b83838360016125ad565b8273ffffffffffffffffffffffffffffffffffffffff16611b2b82610dcd565b73ffffffffffffffffffffffffffffffffffffffff1614611b81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7890613ab4565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611d0d83838360016126d3565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d78906139b6565b60405180910390fd5b611d8a8161242f565b15611dca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc190613a22565b60405180910390fd5b611dd86000838360016125ad565b611de18161242f565b15611e21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1890613a22565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611f2b6000838360016126d3565b5050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b611f746115cf565b73ffffffffffffffffffffffffffffffffffffffff16611f92610fca565b73ffffffffffffffffffffffffffffffffffffffff1614611fe8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdf90613bb2565b60405180910390fd5b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361211e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211590613c1e565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161220f9190612bb8565b60405180910390a3505050565b612227848484611a19565b612233848484846126d9565b612272576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226990613cb0565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff1661229a836122bd565b6000015173ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6122c56129d6565b600860008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820154815250509050919050565b606060405180602001604052806000815250905090565b60606000600161237084612860565b01905060008167ffffffffffffffff81111561238f5761238e6130d0565b5b6040519080825280601f01601f1916602001820160405280156123c15781602001600182028036833780820191505090505b509050600082602001820190505b600115612424578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161241857612417613cd0565b5b049450600085036123cf575b819350505050919050565b60008073ffffffffffffffffffffffffffffffffffffffff1661245183611f2f565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b60008061247c83611f2f565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146124bc576000915050612513565b60006124c7846122bd565b9050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461250c57600192505050612513565b5060029150505b919050565b60008061252483610dcd565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612566575061256581856113f6565b5b806125a457508373ffffffffffffffffffffffffffffffffffffffff1661258c846109ec565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b60018111156126cd57600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146126415780600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126399190613d2e565b925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146126cc5780600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126c49190613d62565b925050819055505b5b50505050565b50505050565b60006126fa8473ffffffffffffffffffffffffffffffffffffffff166129b3565b15612853578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026127236115cf565b8786866040518563ffffffff1660e01b81526004016127459493929190613deb565b6020604051808303816000875af192505050801561278157506040513d601f19601f8201168201806040525081019061277e9190613e4c565b60015b612803573d80600081146127b1576040519150601f19603f3d011682016040523d82523d6000602084013e6127b6565b606091505b5060008151036127fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f290613cb0565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612858565b600190505b949350505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106128be577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816128b4576128b3613cd0565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106128fb576d04ee2d6d415b85acef810000000083816128f1576128f0613cd0565b5b0492506020810190505b662386f26fc10000831061292a57662386f26fc1000083816129205761291f613cd0565b5b0492506010810190505b6305f5e1008310612953576305f5e100838161294957612948613cd0565b5b0492506008810190505b612710831061297857612710838161296e5761296d613cd0565b5b0492506004810190505b6064831061299b576064838161299157612990613cd0565b5b0492506002810190505b600a83106129aa576001810190505b80915050919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600081525090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612a4582612a1a565b9050919050565b612a5581612a3a565b8114612a6057600080fd5b50565b600081359050612a7281612a4c565b92915050565b6000819050919050565b612a8b81612a78565b8114612a9657600080fd5b50565b600081359050612aa881612a82565b92915050565b60008060408385031215612ac557612ac4612a10565b5b6000612ad385828601612a63565b9250506020612ae485828601612a99565b9150509250929050565b612af781612a78565b82525050565b6000602082019050612b126000830184612aee565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612b4d81612b18565b8114612b5857600080fd5b50565b600081359050612b6a81612b44565b92915050565b600060208284031215612b8657612b85612a10565b5b6000612b9484828501612b5b565b91505092915050565b60008115159050919050565b612bb281612b9d565b82525050565b6000602082019050612bcd6000830184612ba9565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612c0d578082015181840152602081019050612bf2565b60008484015250505050565b6000601f19601f8301169050919050565b6000612c3582612bd3565b612c3f8185612bde565b9350612c4f818560208601612bef565b612c5881612c19565b840191505092915050565b60006020820190508181036000830152612c7d8184612c2a565b905092915050565b600060208284031215612c9b57612c9a612a10565b5b6000612ca984828501612a99565b91505092915050565b612cbb81612a3a565b82525050565b6000602082019050612cd66000830184612cb2565b92915050565b60008060008060808587031215612cf657612cf5612a10565b5b6000612d0487828801612a63565b9450506020612d1587828801612a63565b9350506040612d2687828801612a99565b9250506060612d3787828801612a99565b91505092959194509250565b600080600060608486031215612d5c57612d5b612a10565b5b6000612d6a86828701612a63565b9350506020612d7b86828701612a99565b9250506040612d8c86828701612a99565b9150509250925092565b6000604082019050612dab6000830185612cb2565b612db86020830184612aee565b9392505050565b600080600080600060a08688031215612ddb57612dda612a10565b5b6000612de988828901612a63565b9550506020612dfa88828901612a99565b9450506040612e0b88828901612a63565b9350506060612e1c88828901612a99565b9250506080612e2d88828901612a99565b9150509295509295909350565b600080600060608486031215612e5357612e52612a10565b5b6000612e6186828701612a63565b9350506020612e7286828701612a63565b9250506040612e8386828701612a99565b9150509250925092565b612e9681612b9d565b8114612ea157600080fd5b50565b600081359050612eb381612e8d565b92915050565b600080600060608486031215612ed257612ed1612a10565b5b6000612ee086828701612a63565b9350506020612ef186828701612a99565b9250506040612f0286828701612ea4565b9150509250925092565b60008060408385031215612f2357612f22612a10565b5b6000612f3185828601612a99565b9250506020612f4285828601612ea4565b9150509250929050565b600060208284031215612f6257612f61612a10565b5b6000612f7084828501612a63565b91505092915050565b600080600060608486031215612f9257612f91612a10565b5b6000612fa086828701612a63565b9350506020612fb186828701612a99565b9250506040612fc286828701612a63565b9150509250925092565b60008060008060808587031215612fe657612fe5612a10565b5b6000612ff487828801612a63565b945050602061300587828801612a99565b935050604061301687828801612a63565b925050606061302787828801612a99565b91505092959194509250565b60008060006060848603121561304c5761304b612a10565b5b600061305a86828701612a99565b935050602061306b86828701612a63565b925050604061307c86828701612a99565b9150509250925092565b6000806040838503121561309d5761309c612a10565b5b60006130ab85828601612a63565b92505060206130bc85828601612ea4565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61310882612c19565b810181811067ffffffffffffffff82111715613127576131266130d0565b5b80604052505050565b600061313a612a06565b905061314682826130ff565b919050565b600067ffffffffffffffff821115613166576131656130d0565b5b61316f82612c19565b9050602081019050919050565b82818337600083830152505050565b600061319e6131998461314b565b613130565b9050828152602081018484840111156131ba576131b96130cb565b5b6131c584828561317c565b509392505050565b600082601f8301126131e2576131e16130c6565b5b81356131f284826020860161318b565b91505092915050565b6000806000806080858703121561321557613214612a10565b5b600061322387828801612a63565b945050602061323487828801612a63565b935050604061324587828801612a99565b925050606085013567ffffffffffffffff81111561326657613265612a15565b5b613272878288016131cd565b91505092959194509250565b600061328982612a3a565b9050919050565b6132998161327e565b81146132a457600080fd5b50565b6000813590506132b681613290565b92915050565b600080600080608085870312156132d6576132d5612a10565b5b60006132e487828801612a99565b94505060206132f5878288016132a7565b935050604061330687828801612a99565b925050606061331787828801612ea4565b91505092959194509250565b6000806040838503121561333a57613339612a10565b5b600061334885828601612a63565b925050602061335985828601612a63565b9150509250929050565b7f4552433732313a